マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

3 の倍数と 3 がつく数字の時だけ慌てふためきます、フォントが

2012/12/01 〜 2012/12/25

TeX & LaTeX Advent Calendar

k16.shikano さん(12/20)|(12/22)\@undefined→

21 日目は、毎度おなじみの ZR さん(私)が担当します。

*  *  *

nnnnn フォントの紹介

今日の記事は、「3 の倍数と 3 がつく数字の時だけ慌てふためくフォント」の紹介です。

え、何のことかわからないって? 早速ダウンロードしてみましょう!

nnnnn.vpl ファイルが得られたら、次のコマンドを実行します。

vptovf nnnnn

nnnnn.tfm と nnnnn.vf が生成されれば成功です。これで取り敢えず*1「nnnnn」フォントが使えるようになります。

ではまず動作確認として次の文書を組版してみましょう。

[test-nnnnn-1.tex]
\documentclass[a4paper]{article}
\newfont\nnnnn{nnnnn}\nnnnn
\begin{document}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
\end{document}

プレアンブルでさっき用意した「nnnnn」フォントを現在フォントに指定しています。((\newfont は TFM 名を直接指定して現在フォントを切り替える命令を作る命令。NFSS をバイパスしてフォント切替が行われるので不可解な動作の原因になりやすく、初級者の使用は推奨されない。))その後はマクロの定義も TeX の怪しげな設定(\catcode とか endlinechar とか \everypar とか)も何もなくて、本体部には単に数字が羅列されているだけです。これをいつも通り (pdf)latex コマンドで処理すると次のような出力が得られます。

はい、確かに 3 の倍数と 3 がつく数字の時だけ慌てふためいてますね。素晴らしい。

英語文書での使用例

それでは早速このフォントを使って文書を組んでみましょう。TeX の Advent Calendar なので、例のクリスマスソング「The 12 Days of Christmas」を出力してみましょう。

[test-nnnnn-2.tex]
\documentclass[a4paper]{article}
\DeclareFontFamily{OT1}{nnnnn}{}
\DeclareFontShape{OT1}{nnnnn}{m}{n}{<->nnnnn}{}
\begin{document}
\usefont{OT1}{nnnnn}{m}{n}
\noindent{\Large The 12 Days of Christmas\par}
\begin{verse}
On the twelfth day of Christmas my true love gave to me\\
12 drummers drumming\\
11 pipers piping\\
10 lords a leaping\\
9 ladies dancing\\
8 maids a milking\\
7 swans a swimming\\
6 geese a laying\\
5 gold rings\\
4 calling birds\\
3 french hens\\
2 turtle doves\\
and a partridge in a pear tree.
\end{verse}
\end{document}

プレアンブルの 2 行は「単一の TFM をファミリとして NFSS に登録する」設定(参考)でこれを行うと nnnnn フォントを好きな文字サイズで使うことができます。結果は次の通りです。

なお、数字列の後に単語区切りが必要なので、“twelfth” を “12th” と書いてもそこでは慌てふためきませんのでご注意を。

日本語文書での使用例

もちろん、日本語の文書でも使用することができます。

[test-nnnnn-3.tex]
\documentclass[a4paper]{jsarticle}
\DeclareFontFamily{OT1}{nnnnn}{}
\DeclareFontShape{OT1}{nnnnn}{m}{n}{<->nnnnn}{}
\newcommand\dblrow[2]{%
\raisebox{-#1zw}[0.88zw][0pt]{\shortstack{#2}}}
\begin{document}
\begin{center}\small\usefont{OT1}{nnnnn}{m}{n}
\begin{tabular}{l|cccc@{}c}
\hline
\multicolumn{1}{c|}{党派} &
候補者 & 獲得 & 公示前 &
\multicolumn{2}{c}{増減} \\
\hline
自由民主党   & 337 & 294 & 118 &$+$&176 \\
民主党       & 267 &  57 & 230 &$-$&173 \\
日本維新の会 & 172 &  54 &  11 &$+$& 43 \\
公明党       &  54 &  31 &  21 &$+$& 10 \\
みんなの党   &  69 &  18 &   8 &$+$& 10 \\
日本未来の党 & 121 &   9 &  61 &$-$& 52 \\
日本共産党   & 322 &   8 &   9 &$-$&  1 \\
社会民主党   &  33 &   2 &   5 &$-$&  3 \\
国民新党     &   3 &   1 &   3 &$-$&  2 \\
新党大地     &   7 &   1 &   3 &$-$&  2 \\
新党日本     &   1 &   0 &   1 &$-$&  1 \\
新党改革     &   2 &   0 &   0 &$ $&  0 \\
幸福実現党   &  62 &   0 &   0 &$ $&  0 \\
(諸派)     &   5 &   0 &   0 &$ $&  0 \\
(無所属)   &  49 &   5 &   9 &$-$&  4 \\
\hline
\multicolumn{1}{c|}{合計} &
1504 & 480 & 479 &$+$&  1 \\
\hline
\end{tabular}
\end{center}
\end{document}

また一つ世の中が便利になった気がしますね。何に便利なのかは全く判らないけど。

*  *  *

いや、本当は「3 の倍数と 3 がつく数字の時だけアホになる」フォントを作りたかったんだが、流石にそれは TFM の能力*2では無理みたい。「3 桁まで限定」とかだと何とかなるかも知れないが。

*1:nnnnn.tfm/vf がカレントにある状態では、ということ。カレントに置かなくても使えるようにするには、例のごとく、「TEXMF ツリーのしかるべき場所にインストール(コピー)する」必要がある。

*2:リガチャで別の文字に置き換えるという機構を利用して有限状態変換器(transducer)を組み立てている。