今天,我从 TeXLive 2015 更新到了 TeXLive 2019(是时候了,对吧?)。但是,我遇到了一个以前从未遇到过的问题。我通常会将\C
复数声明为宏。但是,这与与包相关的命令的某些隐式声明相冲突hyperref
(我也需要它)。
我收到以下错误消息:
! LaTeX Error: Command \C unavailable in encoding TU.
我检查了该包的手册hyperref
,但他们似乎没有定义命令\C
。
这是一个最小的工作示例:
\documentclass{article}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{amssymb}
\DeclareMathOperator{\C}{\mathbb{C}}
\DeclareMathOperator{\R}{\mathbb{R}}
\usepackage{hyperref}
\begin{document}
$\C$
\end{document}
请注意,这是 所特有的\C
。该文档可正确编译\R
。
答案1
由于hyperref
需要覆盖 Unicode 来制作书签,因此它定义了一个自己的输出编码,称为PU
。
在文件中puenc.def
我们发现
\DeclareTextCommand{\C}{PU}[1]{#1\83\017}% U+030F
so\C
用于组合双重音符号。
您有两种选择:
\C
将复数的名称更改为不同的(可能更好)的名称,例如\sC
(集合 C)或您最喜欢的名称;取消定义
\C
。
对于后者,
\documentclass{article}
\usepackage{fontspec}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{hyperref}
\let\C\relax
\DeclareMathOperator{\C}{\mathbb{C}}
\DeclareMathOperator{\R}{\mathbb{R}}
\begin{document}
$\C$
\end{document}
小心你的书签,确保不要使用奇怪的口音。
答案2
我可能有上百个文档,其中我使用 \C 作为 \mathbf{C} 的宏,由于这种冲突,它们全部丢失了。我编写了一个 Python 程序来替换文档中的单词,并在我所有的 *.tex 文档上运行该程序,将 \C 更改为 \CC(双 \ 是 Python 理解“\C”所必需的)。任何感兴趣的人都可以在以下位置找到 substitui_palavra.pyhttp://www.calculo-numerico.sobralmatematica.org/programas/substitui_palavra.pyt 并将“ .pyt”更改为“ .py”。