在将引文格式更改为字母顺序后,hyperref 不会取消引用引文

在将引文格式更改为字母顺序后,hyperref 不会取消引用引文

我按照以下格式将引文格式转换为字母顺序答案。但是,它在 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}

相关内容