Fancy arrow in LaTeX
LaTeXの中で見た目のいい矢印を使うための\tikzfancyarrow
コマンドを考案したので紹介する。
導入
発表やフロー図などを作成するときに矢印を使うことがある。しかし、LaTeXで標準で実装されている矢印は主に数式で使われるようなもので矢印が小さい。
しかも矢印の中に文字を書き込むといった処理は簡単にはできないし、矢印が小さいので見栄えも悪くかなり使いづらい。
フロー図などで使われる大きな矢印をLaTeXでも簡単に使えるようなコマンドはないかと以前から探していたのだが、昨日 (11月16日) ようやくその手がかりを見つけた。
\tikzfancyarrow
以下の「Fancy arrows with TikZ – TeX – LaTeX Stack Exchange」のClaudio Fiandrino氏の回答で,TikZを使って\tikzfancyarrow
というコマンドを定義する方法が書いてある。
このコマンドの書式は以下である。
\tikzfancyarrow[<height>][<color>][<tikz option>]{<contents>
引数の役割は以下の表にまとめた。
引数 | 役割 |
---|---|
<height> | 矢印の最低長さ |
<color> | 矢印の枠の色 |
<tikz option> | tikzのオプション |
<contents> | 矢印の中に書く文字 |
[<height>][<color>][<tikz option>]はオプションなので書かなくてもよい。指定がなければ標準値が適用される。
このコマンドのままでもそれなりに有用だが、個人的にいくつか不満がある。
2-4は標準の設定でどうにかなりそうだが、1と5が自分には致命的だ。まず2-4の不満は以下2点にまとめられる。
- 影やグラデーションは印刷するときにちんと印刷されないときがある。
- 矢印の枠はごちゃごちゃした印象を与えることが多く、ない方がすっきりする。
1の不満について、引数は多ければ多いほどどのオプションが何の設定だったか忘れるので効率が悪い。Claudio Fiandrino氏の提案した\tikzfancyarrow
は矢印の柄の長さだけを指定したければ、以下のようにすればよい。
\tikzfancyarrow[1cm]{hoge}
しかし,回転だけさせたければ以下のように前2個オプションを空にしないといけない。
\tikzfancyarrow[][][rotate=90]{hoge}
これは見た目も悪いし効率も悪く覚えにくくなっている。
5の不満について、この\tikzfanyarrow
コマンドは必須引数として矢印の中身の文字を要求している。このコマンド自体がtikzのsingle
arrowであるためだ。このコマンドは矢印の中身の文字にフィットするように幅と高さを自動で調整してくれるため通常は便利なものだ。しかし、矢印の中身を書かずに矢印だけを書きたいことが往々にしてある。もちろん以下のように文字を指定しなければそれは可能だ。
\tikzfancyarrow{}
ただし、このようにすると矢印の柄の太さが、引数に文字を指定した場合と不揃いになってしまう。これは矢印を並べてみた場合に見た目が悪くなってしまうので避けたい。
\tikzfancyarrow
の改良
以上の1–5の不満点を解消し、普段使いに適する矢印を作成するためClaudio Fiandrino氏の\tikzfancyarrowコマンドを自分用に修正してみた。以下にそのコマンドの定義を記す。
修正点は以下の通りだ。
本当はオプション引数を1つだけにしたかったのだが,うまくいかなかったためやむを得ずdrawの値を指定するオプション引数も指定した。
\tikzfancyarrow[<tikz option>][<frame color>]{<contents>}
ただ、第1オプションにより広範な設定ができる<tikz option>を持ってきたので、基本的には<tikz option>で枠の色もdraw=<color name>というように指定すればよい。
改良版\tikzfancyarrow
の使い方は以下の通りだ。
これで矢印がかける。<tikz option>はオプションなので書かなくてもよい。
標準の色はblack!20で、<contents>を指定しなければ2emの柄の長さの矢印になる。矢印の色は<tikz option>でfill=blue!20, draw=redのようにすることで指定可能だ。標準では矢印は右向きになる。 左向きの矢印が必要なら、shape border rotate=180を設定する。<tikz option>にはtikzで使えるオプションがだいたいなんでも使える。
以下でよく使うオプションとその説明をまとめる。
オプション引数 | 役割 |
---|---|
minimum height | 矢印の柄の最低長さ。 |
minimum width | 矢印の先端の太さ。矢印全体の大きさを変えるならこの値を変えると楽。 |
rotate | 矢印全体の回転角度。rotateboxと同機能。 |
shape border rotate | 文字の向きはそのままで矢印だけ回転。 |
double arrow | 両端を矢印にする。 |
text width | 文字列の幅を指定。矢印内で複数行書くときに必要。これを設定していると強制改行\\が有効。\parは不可。 |
よく使うオプションの使用例を以下に記す。
上記の使用例を押さえておけば日常利用ではほぼ問題ないだろう。
LyX用の設定
このtikzfancyarrow
コマンドはこの先スライドで頻繁に使うことが想定されるので,LyXで差し込み枠にコマンドを定義しておく。
以下の内容を[Document] ▷ [Settings…] ▷ [Local Layout]に記述する。なお,この設定はLyX 2.1.x以上でないと使えない。また、ヘッダーにFomat 48を書いておくこと。
Format 48
InsetLayout Flex:Tikzfancyarrow
LyXtype custom
Labelstring tikzfancyarrwo
latextype command
LatexName tikzpicture
requires tikzpicture
decoration classic
#passthru true
Argument 1
AutoInsert 1
LabelString "Option|n"
Tooltip "Option. [fill], [double arrow], [minimum height]: arrow base length, [minimum width]: arrow head length, [rotate]: degree of whole rotation, [shape border rotate]: degree of only arrow rotation, [text width]"
Mandatory 0
Decoration conglomerate
Font
Color blue
EndFont
EndArgument
preamble
\usepackage{tikz}
\usetikzlibrary{shapes.arrows}
endpreamble
end
これでLyX上でGUIを使ってメニューから一発でコマンドを挿入できるようになる。
結論
LaTeX上で見た目がきれいで汎用的に使える矢印コマンドを紹介した。
LaTeXでの矢印に困ったら是非この\tikzfancyarrow
コマンドを試してみてほしい。