画面(端末)に出力されるエラーメッセージは、画面の端(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 pTeX(ptex
)と pLaTeX(platex
)でも異なる結果になる((実際は ptex
は etex
とも異なり ^^J
がそのままこの形で表示されるが、それは pTeX 特有の別の問題だろう。))から、e-TeX 特有の何かというわけでもない。
30 分くらい経って、この挙動がエラーメッセージ(\errmessage
)に限らず、他の画面出力(\message
や \write16
)にも共通するものであることに気付いて、そこで「TeX by Topic」の入出力関連の章(Input and Output)を読んで、ようやく問題のパラメタが判明した。
\newlinechar=10 % LaTeX での設定
\newlinechar=-1 % plain での設定
つまり、^^J
で強制改行するという方法を使うのならば、予め \newlinechar=10
に設定する必要がある。
\newlinechar
ね……。私はこのパラメタの存在を何回忘れたら気が済むのだろう……。