命令 \C 已定义且 hyperref 包

命令 \C 已定义且 hyperref 包

自从几天前我上次更新 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

相关内容