例の TikZ な練習問題の解説のようなアレ
某アドベントカレンダーの某 ZR 氏の記事の中のアレな練習問題の話。
アレな問題
下の図のように、テキストにバツ印を付けて出力するための命令
\myCrossedOut
を定義しなさい。命令の書式は、
\myCrossedOut{色名}{テキスト}
とします。つまり、先の出力は以下のようなソースによって出力されたものです。ここで早速\myCrossedOut{red}{dvipdfm}% \textcolor{red}{dvipdfmx}を起動する。
アレな解説
まずは、例の記事に従って、“気付かれない TikZ”の装飾をテキストを施した形を作ってみる。ただし、ここでの目的では、バツ印はテキストの外側に少しだけはみ出す形で描かれている。この余白をノードの inner sep
として確保しておこう。そして取りあえず既定の rectangle の形状のままノードの外枠を描いてみる。
%[プレアンブル] \usepackage{tikz} %[本体] 早速 \tikz[baseline=(T.base)] \node[draw=red, inner sep=2pt, outer sep=0pt] (T) {dvipdfm};% を。結果は以下のようになる。
このノード T の大きさに合わせてバツ印を描くには、T の対角線を描く \draw
命令を書けばいいのだが、実はもっと簡単な方法がある。ノードの shape パラメタの値を cross out
にすると、「形状がバツ印」になる。(shapes ライブラリが必要。)
%[プレアンブル] \usepackage{tikz} \usetikzlibrary{shapes} %[本体] 早速 \tikz[baseline=(T.base)] \node[draw=red, shape=cross out, inner sep=2pt, outer sep=0pt] (T) {dvipdfm};% を。
あとは、直線を手描き風に歪ませる decoration (よくTikZ屋さんが嬉しがってやっているアレ)を適用した(decorations.pathmorphing ライブラリが必要)上で、全体をマクロ(\newcommand
)にすれば完成!
%[プレアンブル] \usepackage{tikz} \usetikzlibrary{decorations.pathmorphing, shapes} \newcommand*\myCrossedOut[2]{% \tikz[baseline=(T.base)] \node[draw=#1, thick, shape=cross out, decorate, inner sep=2pt, outer sep=0pt, decoration={random steps, segment length=2pt, amplitude=0.4pt}] (T) {#2};} %[本体] 早速\myCrossedOut{red}{dvipdfm}を。