LaTeX3 简介中的完整示例

LaTeX3 简介中的完整示例

我不明白第 6.1 节中的例子expl3-介绍.tex来自 LATEX3 文档。其中说:

以下是定义该函数的两种等效方法\foo:nn

\cs_set:Npn \foo:nn  #1#2 {(#1)/(#2)}
\cs_set:cpn {foo:nn} #1#2 {(#1)/(#2)}

这些宏分别相当于 \TeX 的

\long\def\foo:nn 

, 和

\expandafter\long\expandafter\def\csname foo:nn\endcsname

注意:nn后缀表示 |\foo| 接受两个参数。

给出的等价物似乎减少了而不是完整了。有人能提供准确的等价物吗

\cs_set:Npn \foo:nn  #1#2 {(#1)/(#2)}

\cs_set:cpn {foo:nn} #1#2 {(#1)/(#2)}

特别是,我对 感到疑惑\long\def\foo:nn。在 Plain TeX 或 LaTeX 2e 中,命令名称中是否允许使用冒号?这里是否假设 的 catcode:已更改?如果是这样,建议在上面的示例中明确添加相应的命令。定义的扩展部分(即{(#1)/(#2)})在哪里?

答案1

在 LaTeX3 代码块中,:_都是“字母”。因此在演示中,控制序列是\foo:nn,包括:nn。正如文档所述

\cs_set:Npn \foo:nn #1#2 { (#1) / (#2) }

完全等同于

\long\def\foo:nn#1#2{(#1)/(#2)}

\cs_set:cpn { foo:nn } #1#2 { (#1) / (#2) }

完全等同于

\expandafter\long\expandafter\def\csname foo:nn\endcsname#1#2{(#1)/(#2)}

这里,我利用了 LaTeX3 代码块中空格被忽略的事实。在第一个例子中,我还假设它:是一个“字母”。

相关内容