LaTeX 可以改变核心 TeX 命令的行为吗?

LaTeX 可以改变核心 TeX 命令的行为吗?

我们正在实施一个根据输入到 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 原语

相关内容