假设使用组来定义一对结构(2 元组)
{{<tokens1>}{<tokens2>}}
是否可以定义一个命令\first#1{...}
(和\last#1{...}
),以周围的组作为其单个参数,扩展为<tokens1>
但消耗 {<tokens2>}
(反之亦然)?如果是,怎么办?
经过消耗我的意思是扩展到
\relax
或空的标记列表(或任何最合适的模式扩大至无)。这是 LISP 样式递归列表的实现。
优先考虑 TeX-core 解决方案。
答案1
%!TEX TS-program = pdftex
\catcode`@=11
\long\def\@firstoftwo#1#2{#1}
\long\def\@secondoftwo#1#2{#2}
\def\first#1{\@firstoftwo#1}
\def\last#1{\@secondoftwo#1}
\catcode`@=12
\first{{+tokens1+}{--tokens2--}}
\last{{+tokens1+}{--tokens2--}}
\bye
当然,如果你没有(或者不想)使用 LaTeX,那就没必要使用\@firstoftwo
while\firstoftwo
了。