¿Por qué no puedo usar hyperref y \C juntos?

¿Por qué no puedo usar hyperref y \C juntos?

Hoy actualicé de TeXLive 2015 a TeXLive 2019 (ya era hora, ¿verdad?). Sin embargo, tengo un problema que no había encontrado antes. Normalmente lo declaro \Ccomo una macro para los números complejos. Sin embargo, esto choca con alguna declaración implícita de un comando relacionado con el hyperrefpaquete (que también necesito).

Recibo el siguiente mensaje de error:

! LaTeX Error: Command \C unavailable in encoding TU.

Revisé el manual del hyperrefpaquete, pero no parece definir un comando \C.

Aquí hay un ejemplo de trabajo mínimo:

\documentclass{article}

\usepackage{fontspec}

\usepackage{amsmath}
\usepackage{amssymb}
\DeclareMathOperator{\C}{\mathbb{C}}
\DeclareMathOperator{\R}{\mathbb{R}}
\usepackage{hyperref}


\begin{document}
$\C$
\end{document}

Tenga en cuenta que esto es exclusivo de \C. El documento se compila correctamente para \R.

Respuesta1

Dado que hyperrefnecesita cubrir Unicode para producir marcadores, define una codificación de salida propia llamada PU.

En el archivo puenc.defencontramos

\DeclareTextCommand{\C}{PU}[1]{#1\83\017}% U+030F

por lo que \Cse utiliza para combinar el acento de doble tumba.

Tienes dos alternativas:

  1. cambie el nombre de \Clos números complejos a un nombre diferente (quizás mejor), como \sC(conjunto C) o el que más le guste;

  2. indefinir \C.

Para despues,

\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}

Ten cuidado con tus marcadores y asegúrate de no utilizar ese acento extraño.

Respuesta2

Tengo quizás cientos de documentos en los que uso \C como macro para \mathbf{C} y todos se pierden debido a esta colisión. Escribí un programa en Python para realizar sustituciones de palabras en documentos que he ejecutado en todos mis documentos *.tex para cambiar \C por \CC (el doble \ es necesario para que Python entienda "\C"). Cualquier persona interesada puede encontrar sustitutoi_palavra.py enhttp://www.calculo-numerico.sobralmatematica.org/programas/substitui_palavra.pyt y cambie ".pyt" a ".py".

información relacionada