マクロツイーター

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

エラーメッセージ中の強制改行

画面(端末)に出力されるエラーメッセージは、画面の端(79 桁固定;ただし Web2C の設定で変更可能)で自動的に折り返されるが、改行文字(NL;ASCII 符号位置 10)を入れる(TeX では ^^J と記す)ことで強制改行できる。ところが、plain TeX でこの方法を用いると、NL を含めて出力が 79 文字に達したところで折り返しの改行が入ってしまう。不思議なことに LaTeX ではそうならない。


\def\chunk{supercalifragilisticexpialidocious1234} % 38 文字
\errmessage{\chunk ^^J\chunk\chunk} % 38 文字 + NL + 76 文字
% エラーメッセージは前に "! " (2 桁)が付く

[plain TeX (etex) の場合]((etex にしているのは LaTeX の場合(latex)とエンジン(pdfTeX)を揃えるため。))


! supercalifragilisticexpialidocious1234
supercalifragilisticexpialidocious1234
supercalifragilisticexpialidocious1234.
l.5 \errmessage{\chunk ^^J\chunk\chunk}

(〈! 〉(2 桁)+ 38 桁 + NL(1 桁)+ 38 桁の時点で 79 桁に達する。)

LaTeX (latex) の場合]


! supercalifragilisticexpialidocious1234
supercalifragilisticexpialidocious1234supercalifragilisticexpialidocious1234.
l.5 \errmessage{\chunk ^^J\chunk\chunk}

きっと plain と LaTeX で何か設定が違うのだろうが、\endlinechar\catcode の設定を両者で同じにしても結果は変わらず。plain pTeXptex)と pLaTeXplatex)でも異なる結果になる((実際は ptexetex とも異なり ^^J がそのままこの形で表示されるが、それは pTeX 特有の別の問題だろう。))から、e-TeX 特有の何かというわけでもない。

30 分くらい経って、この挙動がエラーメッセージ(\errmessage)に限らず、他の画面出力(\message\write16)にも共通するものであることに気付いて、そこで「TeX by Topic」の入出力関連の章(Input and Output)を読んで、ようやく問題のパラメタが判明した。


\newlinechar=10 % LaTeX での設定
\newlinechar=-1 % plain での設定

つまり、^^J で強制改行するという方法を使うのならば、予め \newlinechar=10 に設定する必要がある。

\newlinechar ね……。私はこのパラメタの存在を何回忘れたら気が済むのだろう……。