我发现我可以有一个名为的环境env2
,但没有命令cmd2
,所以我读到了为什么某些字符不允许出现在命令序列中但我仍然想知道:
为什么环境中允许使用数字,但命令中却禁止使用数字?据我所知,数字界定了命令名称(继承自纯 TeX),但为什么该限制不适用于环境?在环境名称中也禁止使用数字不是更一致吗?
答案1
限制在于扫描仪,即 tex 的“眼睛”(用 texbook 术语来说)。任何字符序列都可以用作命令名称,但是,在 catcode 为 0 的字符(通常为\
)之后,tex 会扫描下一个非字母(catcode 中除 11 以外的字符)或连续的字母序列,并将其标记为单个 csname 标记。
这意味着\foo123
通常会被解析为标记,\foo
后跟三个标记1
、2
、3
。除非您将数字设为 catcode 11。同样,\section*
通常是标记,\section
后跟标记*
。
环境名称的使用不需要通过转义字符来解析名称,(它们使用原\csname
语,但这是一个实现细节,因此\begin{tabular}
访问\tabular
但\begin{tabular*}
访问具有名称的命令tabular*
(而不是通常通过解析生成的两个标记\tabular*
)。
因此从技术上讲,不允许在环境名称中使用数字(或其他字符)是相当困难的,尤其是在设计 Latex 时,没有可用的内存来添加这种逐字符检查。