Как заставить hyperref работать с ключами bibitem, содержащими двоеточие, и использовать опцию babel french?

Как заставить hyperref работать с ключами bibitem, содержащими двоеточие, и использовать опцию babel french?

Как видно вэта тема, \citeкоманда глючит, когда выбран французский язык и ключ bibitem содержит :, который является активным символом в babel french. Действительно, соответствующие гиперссылки всегда ссылаются на страницу 1 вместо привязки к элементу библиографии.

По-видимому, это ошибка hyperref, которую можно устранить несколькими способами, например:

  • охватывая \citeкаждый \selectlanguage{english}...\selectlanguage{french}
  • используяcite пакета (см.этот ответ)
  • и т. д.

Используяcite пакета кажется мне самым простым и элегантным решением на данный момент. Но что, если яне могуиспользуете этот пакет и все равно хотите элегантное решение, как вы думаете, каким оно будет?

решение1

На самом деле это должно быть решено с помощью hyperref, но вот хак, который, кажется, работает (для двоеточия); однако, лучшее, что можно сделать, если babel-frenchэто необходимо, — не использовать двоеточия в метках.

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

Ссылка на странице 1 будет указывать на элемент библиографии.

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