Como fazer o hyperref funcionar com chaves bibitem contendo dois pontos e usando a opção babel French?

Como fazer o hyperref funcionar com chaves bibitem contendo dois pontos e usando a opção babel French?

Como visto emeste tópico, o \citecomando apresenta erros quando o idioma selecionado é o francês e uma chave bibitem contém um :, que é um caractere ativo no babel francês. Na verdade, os hiperlinks em questão sempre se referem à página 1 em vez da âncora do item bibliográfico.

Aparentemente, este é um bug hyperrefe pode ser resolvido de várias maneiras, por exemplo:

  • envolvendo cada um \citepor um \selectlanguage{english}...\selectlanguage{french}
  • usando o citepacote (cf.esta resposta)
  • etc.

Usar o citepacote parece a solução mais simples e elegante até agora para mim. Mas e se eunão podeusar este pacote e ainda quiser uma solução elegante, o que você acha que seria?

Responder1

Isso realmente deveria ser resolvido por hyperref, mas aqui está um hack que parece funcionar (para os dois pontos); entretanto, a melhor coisa, quando babel-frenchenvolvido, é não usar dois pontos nos rótulos.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{etoolbox}
\usepackage{hyperref}

\makeatletter
% patch \hyper@link@ so \FDP@colonspace becomes innocuous
\patchcmd{\hyper@link@}{\begingroup}{\begingroup\def\FDP@colonspace{}}{}{}
\makeatother

\begin{document}

\cite{a:b}

\newpage

\begin{thebibliography}{1}

\bibitem{a:b} X

\end{thebibliography}

\end{document}

O link na página 1 apontará para o item bibliográfico.

informação relacionada