為什麼我不能同時使用 hyperref 和 \C?

為什麼我不能同時使用 hyperref 和 \C?

今天,我從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用於組合雙重音。

您有兩種選擇:

  1. \C將複數的名稱更改為不同的(可能更好)名稱,例如\sC(集合 C)或您最喜歡的名稱;

  2. 取消定義\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”。

相關內容