マクロツイーター

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

TeX なのに文字列をクオートする話(2)

前回の続き)
TeX なのにクオートした文字列に関する注意

\input\font 等の「クオートで囲める引数」をとるプリミティブについて、引数の終結の規則について詳しくみておく。

簡単に言うと、bashコマンドプロンプトのクオートと同じ」である。すなわち、引数の文字列の一部分だけを囲めて、また複数の箇所を囲める。そしてクオートで囲まれていない空白文字が現れた時点で引数が終結する。つまり

\input "foo bar"baz"hoge fuga"piyo "tata"titi

という例だと、\input の引数は「foo barbazhoge fugapiyo」という文字列になる。(クオート自体は引数文字列に含まれない。)

なお、非文字トークンはたとえクオート囲いの中にあっても常に引数を終結させる。だから

\input "foo bar"baz"hoge fu\relax ga"piyo "tata"titi

だと引数は「foo barbazhoge fu」である。

この説明から判るように、クオートを閉じただけでは引数は終結しない

% 引数は「mymacroHello,」となってしまう!
\input "mymacro"%
Hello, world!

終結のための空白文字や \relax を忘れないように注意したい。

XeTeX なのでクオートで文字列する例

XeTeX 拡張のプリミティブの中にも「クオートで囲める引数」をもつものがある。

XeTeX の画像読込用プリミティブの先頭引数は画像ファイル名であり、ゆえに他のファイル名の引数と同様に「クオートで囲める引数」になっている。

\XeTeXpdffile "foo bar.pdf" page 2 art\relax
\XeTeXpicfile "foo bar.png" width=5cm\relax

その他にも、以下のプリミティブも「クオートで囲める引数」をとる。

\XeTeXlinebreaklocale "ja"         % 引数はロケール名
\XeTeXinputencoding "shift_jis"    % 引数はエンコーディング名
\XeTeXdefaultencoding "auto"       %   〃

もしかしたら他にもあるかも知れない。

pdfTeX なのに波括弧でファイル名する例

XeTeX と異なり、pdfTeX では独自拡張のプリミティブでファイル名を引数にとるものについては「波括弧で囲む」という規則を採用している。従って、既に説明した(元祖 TeX の)プリミティブ以外には「クオートで囲める引数」は存在しないようである。

\pdfximage{foo bar.png}
\pdfmdfivesum{foo bar.dat}