マクロツイーター

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

TeX 言語の改行と空白、「美文書」かく語りき

このネタツイートにもあるように、TeX の字句解析の規則は、普通の文章を書く場合もプログラム的なコード(いわゆる「TeX マクロ」)を書く場合も全く同じである。これは本来は TeX 言語の学習者にとって好都合なはずである。何故なら、TeX 言語を操るような者は、十分な量の LaTeX の使用経験を持ち、「普通の文書」の字句解析規則を(経験的に)熟知していると期待されるからである。

しかし現実は理想通りでなく、TeX プログラムを書く際に空白や改行の扱いで戸惑っている人が多いようである。原因を考えるに、「空白や改行の扱い」というのは LaTeX の学習のかなり早い段階で登場する事項であり、そこではまだ LaTeX にあまり慣れていないので、きちんと理解できなかったまま先に進んでしまい改めて習う機会がなかった、ということかもしれない。

TeX の字句解析の正確な知識を得たいなら「TeX by Topic」の 2 章を読むといいであろう。しかし、もっと平易な説明が欲しい人もいるだろう。そういう人は、手許にある LaTeX の「まともな」解説書を開いて、入力規則について改めて学習してみては如何だろうか。もちろん、件のツイートにあるような残念な書もあるだろうが、それは「まとも」ではないことにしておこう。

「美文書」における解説

入力規則の解説の丁寧さという点については、「美文書」はかなり優れている部類に入るだろう。第 6 版でみると、「空白と改行の扱い」だけで 5 ページ半を費やしている。そこでの内容は、普通の TeX 言語プログラマによって十分なものであると私は思う。私自身は TeX 言語のプログラミングを学び始めた際に「空白と改行の扱い」で特に悩むことはなかった(と記憶している)のだが、それは「美文書」*1を読んでいたからなのかも知れない。

  • 3.10 節
    • 空の行は改段落を表す。
    • 行末が和文文字である場合、改行は無視される。
    • 行末が欧文文字である場合、改行は空白文字と同じ意味になる。
  • 3.11 節
    • 行中の % 以降の文字は改行文字を含めて無視される。
  • 3.12 節
    • 普通は、空白文字は欧文空白を出力する。
    • 空白文字を複数並べても 1 個だけ書いたのと同じ。
    • \␣”は常に欧文空白を出力する命令である。
    • 行頭・行末の空白文字は全て無視される。
  • 3.13 節
    • (英字からなる)命令(=制御語)の直後の空白文字は、区切りの意味しか持たないので、(複数あっても)無視される。
    • 命令の直後の文字が約物である場合は、区切りの空白文字は不要。
  • 3.14 節
    • \ の後に非英字が続く名前の命令(=制御記号)の場合、必ず 1 文字のみが続く。このような命令では区切りのための空白は不要で、命令の後の空白文字は無視されない。

*1:LaTeX 2.09 の時代のもの。