(前回の続き)
蛇足事項
コマンド行の引数の先頭が「\
」で無ければ、“\input
を”挿入する、という規則についての、諸々の蛇足。
- ここの“
\input
”は「\input
という制御綴のトークン」ではなく「プリミティブの\input
のトークン」のことである。例えばlatex {foo}
のコマンド行を起動した場合、「\input{foo}
」が実行される。この\input
が「LaTeX で再定義された\input
」であれば、“foo” が読み込まれるはずだが、実際はプリミティブの\input
が使われるので“{foo}”が読み込まれる。((「LaTeX の\input
」は実体はマクロであるから、「引数を波括弧で囲む」という規則に従う、一方、既に述べたように、プリミティブの\input
は引数を波括弧で囲まない。)) - 先頭が「
\
」という条件であるが、どうやら文字ではなくトークンのレベルで判断しているようである。少し実験して得た推定としては、先頭のトークンが制御綴であれば\input
は挿入されず、文字トークンであれば挿入される、という規則のようである。*1これは、カテゴリコード設定が変態であるフォーマットを作成すれば実験できる。そんな変態な設定を考えることに実用的な意味はまるで無いので、これ以上の詳細については徒らなる読者への課題としておこう。 - 引数列がそのまま TeX コード文字列となる、と言ったが、もちろん実際には、コマンド行の文字列をコマンドシェルが分析している。恐らくは、その結果の“引数文字列の列”を空白区切りで連接したものとなるだろう。例えば、コマンドプロンプトで
pdftex \obey"spaces a b"c d"e"f g" "h "i j"
として起動したとすると、引数は「\obeyspaces a bc
」「def
」「g␣␣h
」「i␣␣j
」であるので、結果的に\obeyspaces a bc def g h i j
が実行されて「*
」のプロンプトが出ることになるに違いない。((\obeyspaces
は空白文字をアクティブ(カテゴリコード 13)にして、連続する空白文字の列が 1 個に潰されないようにする命令。))ここで“\bye
”を入力して終了させた後、出力が予想通りになったか確かめてみよう……。アレレ、なんで最後の引数だけクオートが付いたままなんだ?(混乱中)