TeX 的语法是如何组织的?

TeX 的语法是如何组织的?

我刚刚开始学习 TeX,我想找到一个目录或表格,了解 TeX 在语法上的排列方式。我可以做出有根据的猜测,但我认为如果我了解命令的工作原理,而不是简单地从互联网上复制它们(如果它们的格式符合我的要求),我会更好地自学。这很难描述,但为了您的理解,我正在寻找类似以下内容的内容:

  • \\意味着你要换行

  • *意味着如果你的命令有一个标签,那么该标签将被删除

  • function[]{}允许您在中执行特定功能{},并在中接受参数[]

  • begin{}与之配对end{},并允许您在它们之间格式化内容,以便您输入的命令可以格式化其中的文本

我知道最后一个可能是上面定义的子类,但它似乎很常见,可以有自己的部分。我也知道上面的所有内容可能都是不正确的。就像我说的,我看着定义表。这些定义是基于有根据的猜测。

答案1

正如评论中提到的,TeX 的语法有点复杂。此外,考虑到修改类别代码、指定参数解析模板和定义活动字符的能力,它可能完全是开放式的。

因此,我将重点关注 LaTeX 中定义的 TeX 语法子集:

命令以 开头\。命令可以是命名命令,由一个或多个字母¹ 组成,也可以是命令符号,后面跟着\一个非字母。命名命令后的空格将被忽略。

命令可以带参数。通常,参数的数量将少于 10 个,但可以通过一些宏技巧来使用更多参数。

LaTeX 有三种类型的参数:

  • 必需参数顾名思义,它们是必需的。它们通常括在{…中},但对于单个字符或命令²的参数,可以省略括号。
  • 可选参数毫不奇怪,它们是可选的。它们包含在[…中],并根据命令以及它们在命令中出现的位置而具有不同的语义。³ 常见情况包括\sqrt使用其可选参数在 surd 上放置索引,以及使用可选参数为目录或节标题提供替代文本的节命令。
  • 坐标是一对用逗号分隔的数字()这些数字主要出现在 LaTeX 的图片模式中,该模式现已不常用,已被 Ti 取代Z.⁴

此外,某些命令采用的*形式要求命令的执行略有不同。例如,当使用以下形式调用分段命令时,*它将打印不带数字的节标题,并且不会将其参数放入目录中或影响页眉(如果分段命令通常会这样做)。相反,\verb*在生成逐字输出时,它将打印 ␣ 来代替任何空格。⁵

还有一些环境由\begin{…}...来描述\end{…}。环境名称可以包含几乎任何字符,除了\不匹配的括号。⁶ 对于*环境形式,*括号内是环境名称的一部分。一些软件包将使用临时约定来指示环境的替代行为,例如,环境通过其库tabularray定义环境的版本,这些版本以 为前缀,用于生成其输出。amsmathamsmath+tabularray

环境可以像命令一样接受参数,包括上述所有类型。

还有一些特殊字符需要注意:~是不间断空格。_^充当具有单个必需参数的命令以分别生成下标和上标,但仅限于数学模式。


  1. 在 pdfTeX 中,字母定义为 52 个字符,即大写字母和小写字母。可以通过修改其他 ASCII 字符的类别代码将其指定为字母,这就是@名称中包含内部 LaTeX 命令的工作方式。在 XeTeX 和 LuaLaTeX 中,它们都支持 Unicode,命名命令中允许使用任何 Unicode 字母。

  2. 请注意,如果你将命令作为参数给出而不使用括号,那么只有命令会被用作参数,并且不是它的参数,因此如果您想要计算分数的平方根,则需要写成,例如,\sqrt{\frac12}而不是\sqrt\frac12

  3. 其中最值得注意的是\newtheorem

  4. Z 的语法是它自己的东西,超出了这个答案的范围。

  5. 逐字参数是另一种极端情况。基本 LaTeX 有一个命令,它接受逐字参数,并用两个匹配的非空格字符分隔它们。通过指定类型为with\verb的参数,可以获得这些语义的修改版本。v\NewDocumentCommand

  6. 我认为这种自由在某种程度上是无意的,而主要是 LaTeX 解释环境名称的低级机制的结果。

相关内容