*「え〜!? もう終わりと言ったじゃん!」ZR「補足ですよ!」*「何で『補足1』なんですか? 『〜2』もあるんですか?」ZR「まあ、ないことを祈ろう」*1
「区切り付引数の罠」は expl3 に限った話でなく、普通の TeX でも全く同じことが起こる。参考のために、前回の car/cdr の話を素の TeX に翻訳してみる。
「よくある」car/cdr の実装は次の通り。((展開結果を実際に見たい場合は、\typeout
の引数に入れて実行してみよう。))
\def\xx@car#1{% \xx@car@a#1\xx@nil} \def\xx@car@a#1#2\xx@nil{% #1} \def\xx@cdr#1{% \xx@cdr@a#1\xx@nil} \def\xx@cdr@a#1#2\xx@nil{% #2} \xx@car{feel} %(展開)=> f \xx@cdr{feel} %(展開)=> eel \xx@car{{cei}{dei}{ghi}{ip}} %(展開)=> cei \xx@cdr{{cei}{dei}{ghi}{ip}} %(展開)=> {dei}{ghi}{ip}
car はこれでよい*2が、cdr は「罠」のせいで困ったことになる。
\xx@car{{cei}{dei}} %(展開)=> cei \xx@cdr{{cei}{dei}} %(展開)=> dei ; {dei} でない!
「罠」にはまらない cdr の実装。
\def\xx@cdrx#1{% \expandafter\expandafter\expandafter\@firstofone {\expandafter\@gobble#1}} \xx@cdrx{{cei}{dei}} %(展開)=> {dei}