
Насколько я понимаю, если я хочу использовать и пакет 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
до и после элементов библиографии.