继续LaTeX 标签:长度限制,不同的标签是否也总是被 (La)TeX 视为不同?假设两个标签适合buf_size
池大小(并且涉及标签的相应行.aux
也适合文件),这些标签是否也总是被视为不同?还是忽略大小写差异,如 BASIC 中一样(例如ABC
= abc
)?或者平等检查仅基于
答案1
\label{foo}
本质上是\expandafter\def\csname r@foo\endcsname
并且\ref{foo}
本质上是\expandafter\somecommand\csname r@foo\endcsname
通过写入辅助文件与一些间接方式结合在一起,因此定义在运行之间仍然存在。
因此标签的规则通常只是 csnames 的规则。因此与环境名称或键的名称相同keyval
...
答案2
来自errorlog.tex
(PDF 版本可在 TeX Live 中找到)
TeX78 中控制序列名称的长度有一个界限(知道这个界限是什么并不重要),但 Knuth 意识到这是一个大问题。
如果 LaTeX 是为 TeX78 编写的(但事实并非如此),那么两个不同的标签可以被视为相等,因为 的目的\label
是定义控制序列名称。另一方面,这样的任务对于 TeX78 来说是不可能的,因为 TeX78\csname
于 1982 年 11 月 13 日推出:
因此,长度或任何字符(包括字母大小写)不同的标签被视为不同。
TeX 通常区分大小写。TeX 生态系统中的每个程序可能都不相同;例如,当涉及字段名称的输入类型时,BibTeX 不区分大小写:您可以输入
@book{...}
@BOOK{...}
@BoOk{...}
或者
author = {...},
Author = {...},
AUTHOR = ,
没有区别。
有些包可能会将只有字母大小写不同的键视为相同。例如,在usebib
读取.bib
文件时,就必须处理上述问题。
当然,如果标签太长,无法放入buf_size
,pool_size
则会收到“超出容量”错误,问题也就没有意义了。