据我所知,如果我想同时使用 doi 包和 hyperref 的 pagebackref=true 设置,我需要先加载 hyperref(因为否则 doi 将加载它,并且随后无法通过 \hypersetup 设置 pagebackref=true),如下所示:
\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
更改参考书目中的 catcode 以查找参考书目条目的结尾。这会破坏所有依赖某些 catcode 的内容,如 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