今天,我從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”。