如何将 natbib \biblabel 更改为作者年份标签而不是数字?

如何将 natbib \biblabel 更改为作者年份标签而不是数字?

我使用的natbib是作者-年份样式。对于参考文献列表,我想添加与我\citep在文本中获得的相同的标签,即 [作者,年份]。我重新定义了\biblabel,但我只能获得参考编号,即 [1]:

\documentclass{article}
\RequirePackage{natbib}
\makeatletter 
\renewcommand\NAT@biblabel[1]{[#1]} 
\makeatother
\begin{document}

Text \citep{ref}

\bibliographystyle{plainnat}
\bibliography{References}

\end{document}

我怎样才能获得作者和年份?

答案1

该软件包的作者natbibPatrick Daly 好心地为我提供了一个非常有效的解决方案(但可能需要针对其他情况进行测试/修改)。

为了使用\NAT@biblabel我尝试过的 的重新定义,\@lbibitem需要进行更改。以下\@lbibitem和的定义\NAT@biblabel可以放在一个单独的文件中,称为。如果存在,natbib.cfg它将作为最后的内容加载。或者,它可以包含在 LaTeX 文档序言中(带有... )。natbib\makeatletter\makeatother

\def\@lbibitem[#1]#2{%
  \if\relax\@extra@b@citeb\relax\else
    \@ifundefined{br@#2\@extra@b@citeb}{}{%
     \@namedef{br@#2}{\@nameuse{br@#2\@extra@b@citeb}}%
    }%
  \fi
  \@ifundefined{b@#2\@extra@b@citeb}{%
   \def\NAT@num{}%
  }{%
   \NAT@parse{#2}%
  }%
  \def\NAT@tmp{#1}%
  \expandafter\let\expandafter\bibitemOpen\csname NAT@b@open@#2\endcsname
  \expandafter\let\expandafter\bibitemShut\csname NAT@b@shut@#2\endcsname
  \@ifnum{\NAT@merge>\@ne}{%
   \NAT@bibitem@first@sw{%
    \@firstoftwo
   }{%
    \@ifundefined{NAT@b*@#2}{%
     \@firstoftwo
    }{%
     \expandafter\def\expandafter\NAT@num\expandafter{\the\c@NAT@ctr}%
     \@secondoftwo
    }%
   }%
  }{%
   \@firstoftwo
  }%
  {%
   \global\advance\c@NAT@ctr\@ne
   \@ifx{\NAT@tmp\@empty}{\@firstoftwo}{%
    \@secondoftwo
   }%
   {%
    \expandafter\def\expandafter\NAT@num\expandafter{\the\c@NAT@ctr}%
    \global\NAT@stdbsttrue
   }{}%
   \bibitem@fin
%   \item[\hfil\NAT@anchor{#2}{\NAT@num}]%
   \item[\hfil\NAT@anchor{#2}{\citealp{#2}}]% <<<<<< Changed here
   \global\let\NAT@bibitem@first@sw\@secondoftwo
   \NAT@bibitem@init
  }%
  {%
   \NAT@anchor{#2}{}%
   \NAT@bibitem@cont
   \bibitem@fin
  }%
  \@ifx{\NAT@tmp\@empty}{%
    \NAT@wrout{\the\c@NAT@ctr}{}{}{}{#2}%
  }{%
    \expandafter\NAT@ifcmd\NAT@tmp(@)(@)\@nil{#2}%
  }%
}%

\renewcommand\NAT@biblabel[1]{[#1]}

答案2

为了支持 backref,我不得不摆弄一些东西。一定有一种方法可以做到这一点,这样即使您不使用 backref 也可以工作(但我现在太累了,不想再查找了)。但是如果有人将它与 backref 一起使用,您可以使用以下命令阻止它在 bibitem 中包含对标签的引用:

\item[\hfil\NAT@anchor{#2}{\backrefsetup{disable}\citealp{#2}\backrefsetup{enable}}]% <<<<<< Changed here

相关内容