自从几天前我上次更新 TeXlive2020 安装以来,我遇到了以下问题。多年来,我一直在使用宏\newcommand{\C}{\mathbf{C}}
来输入复数。突然,我收到以下错误消息:
LaTeX Error: Command \C already defined.
Or name \end... illegal, see p.192 of the manual.
LaTeX Error: Command \U already defined.
Or name \end... illegal, see p.192 of the manual.
LaTeX Error: Command \G already defined.
Or name \end... illegal, see p.192 of the manual.
Using `latexdef -f C` I got `\C: undefined`
我检查了此处的条目tex.stackexchange.com
,发现这似乎与有关hyperref-package
。事实上,如果我运行带有或不带有 hyperref 的 TeX,我会收到不同的消息:
没有:
\long macro:->\mathbf {C}
\long macro:#1->\mathfrak {U}(#1)
\long macro:->\mathcal {G}
和:
macro:->\PU-cmd \C \PU\C
macro:->\PU-cmd \U \PU\U
macro:->\PU-cmd \G \PU\G
我必须说,我的定义是在 hyperref-package 之后调用的。如果我\newcommand{\C}{\mathbf{C}}
在调用之后定义hyperref
,一切都会正常工作。我想知道为什么现在会发生这种情况,而不是以前所有年份都发生这种情况。
操作系统:Mac OS X 11.2
(Big Sur)TeXlive2020 via MacTeX-2020
,。
备注:我刚刚(2020/02/01 下午 1 点)更新了系统,已经\C-problem
解决了,但是\G
问题\U
仍然存在。
答案1
hyperref 将 pdflatex 的默认编码从 pdfdoc 切换为 unicode(unicode 引擎已经使用这种编码很长时间了)。这样做是为了简化代码并协调不同引擎的行为。
这一变化意味着 hyperref 现在可puenc.def
通过所有引擎加载。puenc.def
包含书签所需的大量文本符号定义,包括一些重音命令的定义,例如西里尔文中的\C
、\G
和\U
。
ctan 上已经有了一个新的超引用,可以减少冲突:
\C
\CYRDZE
仅当先前定义了西里尔命令时才会被定义。
\U
将在下次更新中处理类似问题。
\G
已被移至额外文件,可以手动加载。
另请参阅此处的 github 问题https://github.com/latex3/hyperref/issues/170