我使用的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
该软件包的作者natbib
Patrick 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