一般のDTPソフトでフォントを指定する場合、「ここはリュウミンLの13級で」とか「新ゴMの18ptで」という風にフォント名とサイズで指定をします。
ちなみに「級」は写植で使われていた単位で、1級はちょうど0.25mmです。13級ならその13倍で3.25mmになります。「ポイント」と違って「ミリメートル」との換算でぴったり割り切れるという長所があり、今のDTPでもよく使われている単位です。pTeXでは13QというようにQという単位で指定できます。
一方、TeXのフォント指定は、あらかじめ用意された数個の中から選ぶ形が多いと思います (特にフォントサイズ)。もちろんTeXでも \font
文を使えば具体的なフォント指定はできますが、欧文、横書き和文、縦書き和文の各フォント指定が独立なので繁雑ですし、いろんなサイズが出てくるたびに \font
文で名前を付けないとならないのも面倒です。
というわけで、TeXで一般のDTPソフトのような、簡単に具体的なフォント指定ができるマクロを作ってみましょう。
以前の「多くの日本語フォントを同時に使う」の回や「ペア・カーニングと従属欧文TFMの作成」の回で作ったように、TFM名は、
というように統一した名前にするものとします。xdviやdvipsなども以前の回に説明したように設定しておきます。
では、私の作ったマクロですが…
\catcode`@=11
\def\setfont{\futurelet\@nextchar\check@setfont}
\def\check@setfont{%
\if[\@nextchar\let\@next=\opt@setfont
\else\let\@next=\no@opt@setfont\fi
\@next}
\def\no@opt@setfont#1#2{\opt@setfont[][]{#1}{#2}}
\def\opt@setfont[#1][#2]#3#4{%
\edef\@fontname{#3}\edef\@fontsize{#4}%
\edef\@romafont{#1}%
\ifx\@romafont\empty\edef\@romafont{R-\@fontname}\fi
\dimen@=\@fontsize\count@=\dimen@
\edef\@yfont{Y-\@fontname @\the\count@}%
\edef\@tfont{T-\@fontname @\the\count@}%
\dimen@=#2\dimen@\count@=\dimen@
\edef\@rfont{\@romafont @\the\count@}%
\expandafter\ifx\csname\@yfont\endcsname\relax
\global\expandafter\font\csname\@yfont\endcsname
=Y-\@fontname\space at\@fontsize
\fi
\expandafter\ifx\csname\@tfont\endcsname\relax
\global\expandafter\font\csname\@tfont\endcsname
=T-\@fontname\space at\@fontsize
\fi
\expandafter\ifx\csname\@rfont\endcsname\relax
\global\expandafter\font\csname\@rfont\endcsname
=\@romafont\space at\dimen@
\fi
\csname\@yfont\endcsname
\csname\@tfont\endcsname
\csname\@rfont\endcsname
}
\catcode`@=12
LaTeXならプリアンブル、plain TeXならファイルの先頭にでも書いておけばいいでしょう。別のファイルに保存しておいて、「\input
ファイル名」で読み込んでも構いません。
「\setfont{
フォント名}{
サイズ}
」で欧文、縦書き和文、横書き和文のすべてがそのフォントとサイズに指定されます。フォント名は、TFMファイルの先頭のR-, Y-, T- を除いた部分を指定します。サイズはQ (級)でもbp (Postscriptポイント)でもTeXが使える単位はすべて使えます。あとは普通のフォント指定と同じで、\setfont
指定以降はすべてそのフォントに変わります。中括弧内で指定するとその中括弧の終わりまでの範囲が変わります。例えば、
あい{\setfont{gtbbb-m}{13Q}
うえ}
お
これで「うえ」の部分だけ「中ゴシックBBB」の13級になります。応用として、フォントサイズをzw単位で指定すると、「その直前のフォントの何倍のサイズで」という意味になります。但し、これはynewjis.tfmなどを使っている場合の話で、min10.tfmなどを使っている場合は、2zwを指定すると1.924432倍のフォントになるなど、0.962216倍が掛かってしまいます。
また、デフォルトでは従属欧文を使いますが、
\setfont[cmss10][1.05]{gtbbb-m}{10pt}
と、オプションで欧文フォントと倍率を指定できます。これで和文は「中ゴシックBBB」の10pt、欧文はcmss10の10.5ptになります。
例えば、コラム用フォントなら、
\def\columnfont{\setfont{gtbbb-m}{8.5bp}}
などと定義しておけば、以後 \columnfont
という命令でこのフォントを指定できます。\def
文だけ変えれば、同じ構造の部分のフォントはまとめて変えられます。このように、スタイルシート的な使い方もできます。なお、LaTeXの場合は \def
の代わりに \newcommand
で定義しても構いません。