我们正在实施一个根据输入到 HTML 表单的文本生成 TeX 文件的系统,并且出现了一个常见问题。
引用 Donald Knuth 的电子书:
另一种控制序列,例如 \',称为控制符号:它由转义字符和后跟一个非字母组成。
一位同事确信她记得有时\"
应该用括号将其与后面的字符括起来,例如{\"A}
获取我们的德语Ä
。
我引用了 Knuth 的话来回答,说我们不必担心这个,因为用户可能会在我们的文件中抛出的任何疯狂的 LaTeX 宏(除了像 这样的直接重新定义之外\def\"{foobar}
)都不能覆盖核心 TeX 语言,因此我们应该是安全的\"
。
我对吗?
答案1
首先\"
它不是一个tex原语,它是一个在纯tex中定义的宏,也是一个在latex中定义的具有不同定义的宏,所以它不是latex变化这个宏只是定义不同而已。(普通的 TeX 重音符号只需要与现代计算机的原始 7 位编码配合使用,而 latex 重音符号则需要适应当前指定的字体编码)。
但是,您所引用的语法{\"a}
与任何一个定义都无关,它是 bibtex 要求的一种惯例,即为了进行排序而将构造视为单个字母。
但一般来说,任何宏包都可以重新定义任何 tex 命令。
后
\let\def=\undefined
例如,tex 基元\def
将不再可用,除非你使用较早的
\let\saveddef=\def
或者如果你正在使用 pdftex 或类似的扩展引擎,这些引擎有一个\primitive
(或\pdfprimitive
) 命令,\primitive\def
即使 csname 标记\def
已被重新定义为其他内容(或如上所述,定义为无),也会扩展为 tex 原语