\pdfstrcmp
等の LuaTeX で削除された pdfTeX の機能を LuaLaTeX で使うためのパッケージ((LaTeX 以外のフォーマットでも \input
で読み込めば使用できる。))が pdftexcmds パッケージ(Heiko Oberdiek 氏制作)である。これを読み込むと \pdf@strcmp
という名前で \pdfstrcmp
の機能が提供される。
\documentclass[a4paper]{article}
\usepackage{pdftexcmds}
\makeatletter
\edef\result{\pdf@strcmp{\string \relax\space$}{\relax \expandafter\@gobble\string\$}}
\makeatother
\begin{document}
\result
\end{document}
このパッケージの目的は、エンジン間でのインタフェースの差異を吸収するために共通の制御綴(\pdf@sttrcmp
を与える((pdftexcmds は「パッケージ開発者のためのパッケージ」なので、「公開される命令」の制御綴が @
を含んでいる。)))ことであり、\pdfstrcmp
自体をこの名前で他エンジンで使えるようにすることではない。上記のサンプルは pdfLaTeX/XeLaTeX/LuaLaTeX のいずれでもコンパイル可能で、「0」が出力される(さらに e-(u)pLaTeX でも大丈夫である)。
\pdfstrcmp
自体を模倣できた方が都合がよいと考える人もあろうが、実はそれは不可能であり、その理由は「マクロを使う限り結果を 1 回の展開で得られない」からである。プリミティブである \(pdf)strcmp
は 1 回の展開で結果(「-1」「0」「1」のいずれかの文字列)に辿り着く。対してマクロではそうはならない。pdftexcmds での LuaTeX 用の \pdf@strcmp
の実装は以前の記事に挙げたものと同等である。\directlua
の実行は 1 展開で行われるので、このマクロは「最小回数」である 2 回で結果に辿り着くが、1 回にはなり得ないのである。