Использование пакета doi с hyperref pagebacklinks=true

Использование пакета doi с hyperref pagebacklinks=true

Насколько я понимаю, если я хочу использовать и пакет doi, и настройку pagebackref=true для hyperref, мне нужно сначала загрузить hyperref (поскольку в противном случае doi загрузит его, а pagebackref=true не сможет впоследствии быть установлена ​​с помощью \hypersetup), что-то вроде этого:

\usepackage[pagebackref=true]{hyperref}
\usepackage{doi}

Однако когда я это делаю, пакет doi больше не может экранировать некоторые символы, например, двойное подчеркивание в «COLI_a_00057» в следующем минимальном примере:

\documentclass{article}
% Remove the {hyperref} line below to get this to compile
\usepackage[pagebackref=true]{hyperref}
\usepackage{doi}
\begin{document}

\cite{fort:cl11}

\begin{thebibliography}{1}

\bibitem[{Fort et~al.(2011)Fort, Adda, and Cohen}]{fort:cl11}
Fort, Karën; Gilles Adda; and K.~Bretonnel Cohen (2011).
\newblock {Amazon Mechanical Turk}: Gold mine or coal mine?
\newblock \emph{Computational Linguistics}, 37(2):413--420.
\newblock \doi{10.1162/COLI_a_00057}.

\end{thebibliography}

\end{document}

Если я включу эту строку \usepackage[pagebackref=true]{hyperref}

Я получаю следующий вывод ошибки (с рабочей обратной ссылкой на страницу 1):

! Missing $ inserted.
<inserted text> 
            $
l.15 

? 
! Double subscript.
<argument> \Hy@safe@activesfalse 10.1162/COLI_a_
                                            00057
l.15 

? 
! Missing $ inserted.
<inserted text> 
            $
l.15 

Если я его удалю, то получу рабочую библиографическую запись со ссылкой DOI на 10.1162/COLI_a_00057, но (очевидно) без обратной ссылки.

Могу ли я использовать и doi, и hyperref с pagebacklinks=true?

решение1

Пакет backref, который используется для pagebackrefопции, изменяет catcodes в библиографии, чтобы найти конец записей библиографии. Это нарушает все, что зависит от определенных catcodes, таких как URL, дословный текст и DOI. Как объясняется в backrefруководстве, изменения catcode могут быть приостановлены с помощью \backrefparscanfalse, но тогда вы несете ответственность за то, чтобы указать, backrefгде заканчиваются ваши записи библиографии, и список страниц может быть записан. Следующее работает без изменения DOI:

\documentclass{article}

\usepackage[pagebackref=true]{hyperref}
\usepackage{doi}
\begin{document}

\cite{fort:cl11}

\begin{thebibliography}{1}

\backrefparscanfalse
\bibitem[{Fort et~al.(2011)Fort, Adda, and Cohen}]{fort:cl11}
Fort, Karën; Gilles Adda; and K.~Bretonnel Cohen (2011).
\newblock {Amazon Mechanical Turk}: Gold mine or coal mine?
\newblock \emph{Computational Linguistics}, 37(2):413--420.
\newblock \doi{10.1162/COLI_a_00057}.
\backrefprint\backrefparscantrue

\end{thebibliography}
\end{document}

В вероятном случае, если вы настраиваете свою thebibliographyсреду не вручную, а с помощью BibTeX и некоторого стиля библиографии, см.этот ответкак изменить стиль библиографии, чтобы автоматически вставлять команду \backrefparscanfalseи \backrefprint\backrefparscantrueдо и после элементов библиографии.

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