创建新命令时应避免使用的符号

创建新命令时应避免使用的符号

我在创建名称中包含数字的程序时遇到了一些问题\newcommand;我找不到有关该程序以及有关 LaTeX 命令所接受的字符集的文档。

答案1

您应该在用户命令中仅使用字母 A-Za-z。.sty 文件中(或\makeatletter/\makeatother对内)定义的命令可能包含 @。

如果需要用数字来表示一组相关命令,通常的做法是使用罗马数字,如,,,,\fooi等。\fooii\fooiii\fooiv

答案2

命令名称可以由以下任一内容组成非字母字符或字母()字符序列A-Za-z

其实这个规则要复杂一些,但对于最终用户来说,这可以算是事实。

因此您不能说,\newcommand{\a1}{...}因为该名称a1不是合法的命令名称。Macho TeX 程序员知道如何克服这一限制,但这对最终用户来说会很不利,因为他们无论如何都无法说\a1,与 不同\a232

如果您考虑使用带有数字的命令名称,请修改您的问题,以便有人可以向您推荐更好的替代方案。

答案3

用 Knuth 自己的术语来说,有两种基本的“风格”控制序列在 TeX/LaTeX 中:

  1. A控制符号,由一个反斜杠组成\,后面跟着一个非字母字符。例如:(\\换行符)、\'(文本模式下的尖音符)。[对于 TeX 纯粹主义者:我知道,严格来说,启动控制序列的是“转义字符”,不一定是反斜杠。但是,几乎普遍的做法是使用反斜杠字符,并且只使用反斜杠字符作为转义字符。]
  2. A控制字,由反斜杠和一个或多个字母的字符(即,没有数字,没有其他非字母字符)。示例:\textbackslash\def。请注意,TeX 和 LaTeX 区分大小写,因此\hello\Hello不是相同的命令。

控制字可以进一步区分为包含一个或多个“at”、@、 字符的控制字和不包含一个或多个“at”、 、 字符的控制字。前者控制字主要由 TeX 和 LaTeX 程序员用于宏和变量,用户应该不是直接访问或操作;这是通过使@字符“特殊”来实现的,在明确的意义上。然而,当一个必须更改一些包含一个或多个@字符的现有宏,可以通过首先键入\makeatletter暂停@字符的“特殊性”,执行所需的任何进一步的指令,然后\makeatother执行恢复符号“正常”行为的指令来实现@

根据前面的解释,很明显您遇到的事实是,您不应该在控制字中使用数字(或任何其他非字母字符)。(如果您认为必须在宏中使用一些数字,则可以将它们写成,例如,,\choosefirstoftwo\numberten。)

答案4

您只能在宏名称中使用正式标记为字母。默认情况下,只有真实字母 az 和 AZ 以这种方式标记。

不过,你可以通过改变类别代码(catcode)将字符设置为 11(@)。对所有包和类文件的角色都执行此操作。在用户文档中,您可以使用手动执行此操作\makeatletter,并在定义所有必需的宏后切换回正常使用\makeatother。这样做是为了让内部宏在普通用户文档中保持不可触碰,以避免意外的名称冲突。

您可以将几乎任何字符的 catcode 更改为 11,然后在宏名称中使用它,但这可能会导致问题。(例如,LaTeX3 项目使用:_。)最好的办法是坚持使用普通字母,并使用“a”、“b”等或罗马数字代替数字。

相关内容