\bibitem 标签的链接目标

\bibitem 标签的链接目标

这是一个不符合我要求的 MWE:

\documentclass{article}
\usepackage[colorlinks=true,citecolor=magenta,urlcolor=cyan]{hyperref}

\begin{document}
Let's quote \emph{Einstein} \cite{Einstein:1905a}.

\newpage

\begin{thebibliography}{W00}
\bibitem[\href{https://einsteinpapers.press.princeton.edu/vol2-doc/311}{E05}]{Einstein:1905a}
Albert Einstein,
\newblock Zur {E}lektrodynamik bewegter {K}\"orper.
\newblock \emph{Ann. Physik. (4)} \textbf{17} (1905) 891--921.
\end{thebibliography}
\end{document}

期望的行为:在文本(第 1 页)标签 E05 是指向参考书目条目的内部(洋红色)超链接。而在参考书目条目本身(第 2 页)是指向 princeton.edu 的外部(青色)超链接。

获得的行为:两者都是 princeton.edu 的外部(青色)链接。(当徘徊Skim.app 中的第一个链接我仍然看到它想要指向第二个,但是点击它将我发送到 princeton.edu。)

问题:我怎样才能获得期望的行为?

注意:我非常清楚如何使用 biblatex 获得所需的行为。我的问题是,我的合著者坚持使用手动 bbl。(此外,期刊不喜欢 biblatex。)

答案1

不要\href在 的可选参数中使用\bibitem。可选参数应仅包含引文标签。如果使用,hyperref引文标签将自动链接到参考书目条目。

您可以通过将整个参考书目条目包装起来来链接它\href{<link>}{...}

\documentclass{article}
\usepackage[colorlinks=true,citecolor=magenta,urlcolor=cyan]{hyperref}

\begin{document}
Let's quote \emph{Einstein} \cite{Einstein:1905a}.

\newpage

\begin{thebibliography}{W00}
\bibitem[E05]{Einstein:1905a}\href{https://einsteinpapers.press.princeton.edu/vol2-doc/311}{%
Albert Einstein,
\newblock Zur {E}lektrodynamik bewegter {K}\"orper.
\newblock \emph{Ann. Physik.~(4)} \textbf{17} (1905) 891--921.}
\end{thebibliography}
\end{document}

链接的参考书目条目。


这是另一种解决方案,它仅链接参考书目中的 biblabel。我们引入了一个\linkedbibitem工作方式类似的\bibitem,但对 URL 有一个额外的强制参数(如果没有 URL,可以将其留空,但必须始终给出,以使定义更简单)。

我们\linkedbibitem只需保存 URL。然后我们重新定义\@BIBLABELhyperref的版本),以便在给出链接时\@biblabel应用。\href

我们可以使用hyperref's\hyper@normalise来使\linkedbibitem接受其他特殊字符,如$_甚至%和 而#不会产生任何抱怨。

\documentclass{article}
\usepackage[colorlinks=true,citecolor=magenta,urlcolor=cyan]{hyperref}

\usepackage{etoolbox}

\makeatletter
\newcommand*{\@linkedbibitem}[1]{%
  \def\this@biblink{#1}%
  \bibitem}

\newcommand*{\linkedbibitem}{\hyper@normalise\@linkedbibitem}

\renewcommand*{\@BIBLABEL}[1]{%
  \ifdefvoid\this@biblink
    {[#1]}
    {\expandafter\href\expandafter{\this@biblink}%
       {[#1]}}}
\makeatother

\begin{document}
Let's quote \emph{Einstein} \cite{Einstein:1905a}.

\newpage

\begin{thebibliography}{W00}
\linkedbibitem{https://einsteinpapers.press.princeton.edu/vol2-doc/311#a}[E05]{Einstein:1905a}
Albert Einstein,
\newblock Zur {E}lektrodynamik bewegter {K}\"orper.
\newblock \emph{Ann. Physik.~(4)} \textbf{17} (1905) 891--921.
\end{thebibliography}
\end{document}

相关内容