Por que não posso usar hyperref e \C juntos?

Por que não posso usar hyperref e \C juntos?

Hoje, atualizei do TeXLive 2015 para o TeXLive 2019 (já era hora, certo?). No entanto, estou tendo um problema que não encontrei antes. Normalmente declaro \Ccomo uma macro para os números complexos. No entanto, isso colide com alguma declaração implícita de um comando relacionado ao hyperrefpacote (que também preciso).

Eu recebi a seguinte mensagem de erro:

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

Verifiquei o manual do hyperrefpacote, mas eles não parecem definir um comando \C.

Aqui está um exemplo mínimo de trabalho:

\documentclass{article}

\usepackage{fontspec}

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


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

Observe que isso é exclusivo para \C. O documento é compilado corretamente para \R.

Responder1

Como hyperrefprecisa cobrir o Unicode para produzir marcadores, ele define uma codificação de saída própria chamada PU.

No arquivo puenc.defencontramos

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

so \Cé usado para combinar acentos graves duplos.

Você tem duas alternativas:

  1. altere o nome dos \Cnúmeros complexos para um nome diferente (talvez melhor), como \sC(conjunto C) ou o que você mais gosta;

  2. indefinir \C.

Para este último,

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

Tenha cuidado com seus favoritos e não use aquele sotaque estranho.

Responder2

Tenho talvez centenas de documentos nos quais uso \C como macro para \mathbf{C} e todos eles são perdidos devido a essa colisão. Eu escrevi um programa python para fazer substituições de palavras em documentos que executei em todos os meus documentos *.tex para alterar \C por \CC (o duplo \ é necessário para que o python entenda "\C"). Qualquer pessoa interessada pode encontrar substitui_palavra.py emhttp://www.calculo-numerico.sobralmatematica.org/programas/substitui_palavra.pyt e altere ".pyt" para ".py".

informação relacionada