■
\special{pdf:...}で文字修飾
LaTeXの通常のコマンドだけでは、
- 文字の縁に線をつける(袋文字)
- 任意の斜体(左斜体を含む。←地図中で川や湾に使われる字形)
- 透明
などの実現が難しい。
TikZを使えば多分どれも可能だが、もう少しシンプルに実現したい。 いっそのこと\special命令でどうにかしようと調べた結果をメモ。
文字の縁に線をつける(袋文字)
まずプリアンブルで、
- \usepackage[dvipdfmx]{graphicx}
などとしてdvipdfmxオプションでgraphicxパッケージを読み込む。
そして、色を変えたいところの開始位置で、
\special{pdf:bcolor [c1 m1 y1 k1] [c2 m2 y2 k2]}で塗りと縁の線の色を指定
- [c1 m1 y1 k1] :塗りの色。CMYKをそれぞれ0-1で指定。数値は4つとは限らない。3つならRGB、1つならグレースケール
- [c2 m2 y2 k2]:縁の線の色。
\special{pdf:code q width w mode Tr}で線の太さと塗り・線の有無を指定
- width:縁の線の太さ。単位はpt
- mode:塗りと縁の線の有無を指定。0:塗りだけ、1:縁の線だけ、2:両方あり
終了位置で
- \special{pdf:code Q}\special{pdf:ecolor}
とする。
使用例
\documentclass{jarticle} \usepackage[dvipdfmx]{graphicx,color} \begin{document} \special{pdf:bcolor [1 0 0 0] [0 1 0 0]}% \special{pdf:code q .25 2 Tr}% test% \special{pdf:code }% \special{pdf:ecolor}% \end{document}
縁の線が0.25ptで色はシアン100%、塗りはマゼンタ100%。
毎回\special命令すべて入力するのは煩雑なので、次のようなマクロにしておく。
\documentclass{jarticle} \usepackage[dvipdfmx]{graphicx,color} \def\stroketext#1#2#3#4{%#1: 塗りの色、#2: 線の色、#3: 線の太さ、#4: 文字列 \special{pdf:bcolor [#1] [#2]}% \special{pdf:code q #3 w 2 Tr}% #4 \special{pdf:code Q}% \special{pdf:ecolor}% } \begin{document} \stroketext{1 0 0 0}{0 1 0 0}{0.25}{test} \end{document}
ただし、これらの書き方だと塗りの上に線が来るため、文字がちょっと読みにくいかもしれない。
塗りの下に線が来るようにしたければ、もう一手間かける。
\documentclass{jarticle} \usepackage[dvipdfmx]{graphicx,color} \newbox\strokebox %文字を保存するためのボックス \def\stroketext#1#2#3#4{%#1: 塗りの色、#2: 線の色、#3: 線の太さ、#4: 文字列 \setbox\strokebox=\hbox{#4} \hbox{% \special{pdf:bcolor [#1] [#2]}% \special{pdf:code q #3 w 2 Tr}% \hbox to0pt{\unhcopy\strokebox\hss}% \special{pdf:code q 0 Tr}%縁なしに変更 \unhbox\strokebox \special{pdf:code Q}% \special{pdf:ecolor}% }% } \begin{document} \stroketext{1 0 0 0}{0 1 0 0}{0.5}{test}%第3引数を0.25→0.5に変更 \end{document}
線つきの文字の上に、線なしの文字を重ね打ちしている。
水平ボックスに文字を保存して2回出力している。
線の内側半分は上に来た塗りで隠れてしまうから、 線の太さとして見せたい太さの倍の数値を入力しないといけない。