我刚刚开始学习 TeX,我想找到一个目录或表格,了解 TeX 在语法上的排列方式。我可以做出有根据的猜测,但我认为如果我了解命令的工作原理,而不是简单地从互联网上复制它们(如果它们的格式符合我的要求),我会更好地自学。这很难描述,但为了您的理解,我正在寻找类似以下内容的内容:
\\
意味着你要换行*
意味着如果你的命令有一个标签,那么该标签将被删除function[]{}
允许您在中执行特定功能{}
,并在中接受参数[]
begin{}
与之配对end{}
,并允许您在它们之间格式化内容,以便您输入的命令可以格式化其中的文本
我知道最后一个可能是上面定义的子类,但它似乎很常见,可以有自己的部分。我也知道上面的所有内容可能都是不正确的。就像我说的,我看着定义表。这些定义是基于有根据的猜测。
答案1
正如评论中提到的,TeX 的语法有点复杂。此外,考虑到修改类别代码、指定参数解析模板和定义活动字符的能力,它可能完全是开放式的。
因此,我将重点关注 LaTeX 中定义的 TeX 语法子集:
命令以 开头\
。命令可以是命名命令,由一个或多个字母¹ 组成,也可以是命令符号,后面跟着\
一个非字母。命名命令后的空格将被忽略。
命令可以带参数。通常,参数的数量将少于 10 个,但可以通过一些宏技巧来使用更多参数。
LaTeX 有三种类型的参数:
- 必需参数顾名思义,它们是必需的。它们通常括在
{
…中}
,但对于单个字符或命令²的参数,可以省略括号。 - 可选参数毫不奇怪,它们是可选的。它们包含在
[
…中]
,并根据命令以及它们在命令中出现的位置而具有不同的语义。³ 常见情况包括\sqrt
使用其可选参数在 surd 上放置索引,以及使用可选参数为目录或节标题提供替代文本的节命令。 - 坐标是一对用逗号分隔的数字
(
。)
这些数字主要出现在 LaTeX 的图片模式中,该模式现已不常用,已被 Ti 取代钾Z.⁴
此外,某些命令采用的*
形式要求命令的执行略有不同。例如,当使用以下形式调用分段命令时,*
它将打印不带数字的节标题,并且不会将其参数放入目录中或影响页眉(如果分段命令通常会这样做)。相反,\verb*
在生成逐字输出时,它将打印 ␣ 来代替任何空格。⁵
还有一些环境由\begin{…}
...来描述\end{…}
。环境名称可以包含几乎任何字符,除了\
不匹配的括号。⁶ 对于*
环境形式,*
括号内是环境名称的一部分。一些软件包将使用临时约定来指示环境的替代行为,例如,环境通过其库tabularray
定义环境的版本,这些版本以 为前缀,用于生成其输出。amsmath
amsmath
+
tabularray
环境可以像命令一样接受参数,包括上述所有类型。
还有一些特殊字符需要注意:~
是不间断空格。_
并^
充当具有单个必需参数的命令以分别生成下标和上标,但仅限于数学模式。
在 pdfTeX 中,字母定义为 52 个字符,即大写字母和小写字母。可以通过修改其他 ASCII 字符的类别代码将其指定为字母,这就是
@
名称中包含内部 LaTeX 命令的工作方式。在 XeTeX 和 LuaLaTeX 中,它们都支持 Unicode,命名命令中允许使用任何 Unicode 字母。请注意,如果你将命令作为参数给出而不使用括号,那么只有命令会被用作参数,并且不是它的参数,因此如果您想要计算分数的平方根,则需要写成,例如,
\sqrt{\frac12}
而不是\sqrt\frac12
。其中最值得注意的是
\newtheorem
。钛钾Z 的语法是它自己的东西,超出了这个答案的范围。
逐字参数是另一种极端情况。基本 LaTeX 有一个命令,它接受逐字参数,并用两个匹配的非空格字符分隔它们。通过指定类型为with
\verb
的参数,可以获得这些语义的修改版本。v
\NewDocumentCommand
我认为这种自由在某种程度上是无意的,而主要是 LaTeX 解释环境名称的低级机制的结果。