(前回の続き)
蛇足事項
コマンド行の引数の先頭が「\」で無ければ、“\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”を入力して終了させた後、出力が予想通りになったか確かめてみよう……。
アレレ、なんで最後の引数だけクオートが付いたままなんだ?(混乱中)