递归——拆分一个组。

递归——拆分一个组。

我一直在尝试理解 TeX 中的递归概念 - 鉴于我的背景是 LaTeX 中的高级内容,这并不容易。我能(几乎)理解的唯一示例是非常基本的 for 循环构造,但我真的不觉得我对扩展是什么或它如何工作有一个概念。

我想编写一个函数,以一个组作为参数

{{#1}{#2}...{#n}}

其中 n 可以取任意正整数值,并返回一对组

{#1}{{#2}...{#n}},

当 n 至少为 2 时,{#1}否则。

这看起来应该相当简单,但我不知道该如何去做。

编辑:我想在 beamer 中使用此功能逐步覆盖 AMSMath 环境内的线条,以便

  • 保留垂直间距;
  • 方程编号(如适用)与方程数组的显示行同时出现,并在覆盖之间保留(即不增加)。

答案1

\catcode`@=11
\def\splitarg#1{\@splitarg#1\@nil}
\def\@splitarg#1#2\@nil{{#1}\if\relax\detokenize{#2}\relax\else{#2}\fi}
\catcode`@=12

\edef\x{\splitarg{{a}{b}{c}}}\show\x
\edef\x{\splitarg{{a}}}\show\x

需要 e-TeX,因此您必须使用 pdftex、xetex 或 luatex(而不是 Knuth 的 tex)处理示例。\if\relax\detokenize{#2}\relax当 #2 为空(即,当您传递给 的列表中只有一个元素时)并且 e-TeX 在“true”部分中找不到任何内容时,测试为真\splitarg;否则 e-TeX 会用括号括住原始列表中剩余的内容。

相关内容