LaTeX 简写形式的正式术语

LaTeX 简写形式的正式术语

在 LaTeX 中可以写出类似 的表达式\frac12,它应该等同于 这样的表达式\frac{1}{2}。第一种符号形式有正式的术语吗?

答案1

不。


这只是 TeX 吸收非分隔宏参数的正常方式的一部分。如果你定义

\def\foo#1{Something using #1 (or not).}

或者等价地

\newcommand\foo[1]{Something using #1 (or not).}

\foo扩展时,它会吸收输入流中的下一个标记或平衡组作为其参数(如#1定义中所示)。假设正常类别代码

  • 标记是单个字符(除了\{}%或空格或换行符(因为它们会被忽略))或命令序列(以 开头的内容\),
  • 平衡组{以第一个}不属于其他组(较晚开始)的组开始和结束。吸收后,括号将从组中剥离(即#1不包含它们)。

这就是为什么\foo x\foo{x}\newcommand{\foo}\newcommand\foo\frac 12\frac{1}{2}和等价的\frac{1}2原因。\frac1 2

选择最清晰的版本是一种很好的做法,这通常意味着使用一个组。就我个人而言,在以下情况下,我会明确省略该组:必须输入一个标记,例如\newcommand\foo

答案2

值得补充的是,在 LaTeX3/ 中,单标记参数和括号中的参数之间的区别更加明确expl3。按照惯例,每个expl3宏名称都应以 结尾,:后面跟着一串字母,称为参数说明符,每个字母都反映相应参数的类型。

除了许多其他的,我们还有

  • n对于括号组或单个标记参数,以及
  • N仅适用于单标记参数,通常是宏/函数名称或变量名称。

这些说明符仍然不会改变 (La)TeX 处理各个参数的方式,但它会向用户提示如何在宏内部使用这些参数。

例如,该l3tl包提供了两个函数\tl_if_empty:nTF\tl_if_empty:NTF。虽然这两个函数都检查标记列表是否为空并有条件地执行代码,但前者需要使用一组带括号的标记来调用,而后者需要一个标记列表变量,该变量在对其内容执行测试之前先进行扩展。

相关内容