![在将引文格式更改为字母顺序后,hyperref 不会取消引用引文](https://linux22.com/image/345911/%E5%9C%A8%E5%B0%86%E5%BC%95%E6%96%87%E6%A0%BC%E5%BC%8F%E6%9B%B4%E6%94%B9%E4%B8%BA%E5%AD%97%E6%AF%8D%E9%A1%BA%E5%BA%8F%E5%90%8E%EF%BC%8Chyperref%20%E4%B8%8D%E4%BC%9A%E5%8F%96%E6%B6%88%E5%BC%95%E7%94%A8%E5%BC%95%E6%96%87.png)
我按照以下格式将引文格式转换为字母顺序这答案。但是,它在 hyperref 中产生了异常行为。虽然 PDF 中的引文仍然可以点击,但当我点击它们时什么也没有发生。(使用 hyperref,当单击引用时,应该取消引用,并且 PDF 查看器应该跳转到声明引用的参考书目页面。)
梅威瑟:
\documentclass[12pt]{article}
\usepackage{hyperref, lipsum}
\makeatletter
\renewcommand\@bibitem[1]{\item\if@filesw \immediate\write\@auxout{%
\string\bibcite{#1}{\theenumiv}}\fi\ignorespaces} %%% instead of \the\value{\@listctr}
\renewenvironment{thebibliography}[1]
{\section*{\refname}
\@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
\list{\@biblabel{\alph{enumiv}}}% %% instead of "\@arabic\c@enumiv"
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\alph{enumiv}}}%
%% instead of "\@arabic\c@enumiv"
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
\makeatother
\begin{document}
\lipsum[1]
\cite{A1}
\lipsum[2]
\pagebreak
\begin{thebibliography}{9}
\bibitem{A1}{John (2011)}
\bibitem{B1}{Carl (2015)}
\end{thebibliography}
\end{document}
有什么办法可以解决这个问题吗?我正在使用 XeLaTeX 引擎来编译文档。(因为我打算稍后使用 polyglossia 包。)
我尝试识别问题:
经过一番调查,我发现当我续订时仅有的 \@bibitem
命令而不是\thebibliography
环境,引用取消引用错误仍然存在。
\@bibitem
然后我尝试了下面的代码,它与原来的定义完全相同LaTeX 书目手册。错误也在这里。
谁能解释一下到底发生了什么?
\documentclass[12pt]{article}
\usepackage{hyperref, lipsum}
\makeatletter
\renewcommand\@bibitem[1]{\item\if@filesw \immediate\write\@auxout{%
\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
\makeatother
\begin{document}
\lipsum[1]
\cite{A1}
\lipsum[2]
\pagebreak
\begin{thebibliography}{9}
\bibitem{A1}{John (2011)}
\bibitem{B1}{Carl (2015)}
\end{thebibliography}
\end{document}
答案1
主要问题是,hyperref
重新定义 bib 命令后必须加载包,因为它也会修改这些命令。我建议修改一下\bibitem
,这样\thebibliography
侵入性会小一点。
\documentclass[12pt]{article}
\usepackage{hyperref, lipsum}
\usepackage{xpatch}
\makeatletter
\xpatchcmd\@bibitem{\the\value}{\alph}{}{}
\xpatchcmd\thebibliography{\@arabic}{\@alph}{}{}
\makeatother
\begin{document}