Почему я не могу использовать 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(set 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.py наhttp://www.calculo-numerico.sobralmatematica.org/programas/substitui_palavra.pyt и измените «.pyt» на «.py».

Связанный контент