有人请我解决 LaTeX+BibTeX 文档的问题。我发现,问题归结为引用中作者年份系统的滥用,如下所示:
@article{W1,
author = {Waldo, W},
title = {First paper},
year = {in prep. }
}
@article{W2,
author = {Waldo, W},
title = {Second paper},
year = {in prep. }
}
实际文件如下
\documentclass{article}
\usepackage{natbib}
\begin{document}
Cite first \cite{W1}. Cite second \cite{W2}. Cite both \cite{W1,W2}.
\bibliographystyle{plainnat}
\bibliography{test}
\end{document}
对于单个引用,它看起来是正确的:
引用第一个 Waldo [在 prep.a 中]。 引用第二个 Waldo [在 prep.b 中]。
但对于这两个项目来说,
引用 Waldo [在 prep.a,i 中]
而文档的作者希望它读起来
引用 Waldo [在准备 a,b 中]
评论 如果你将上述 bibtex 文件中的“准备中”替换为一个虚构的年份,比如 2038 年,文档就会正确显示
引用 Waldo [2038a,b]
问题:
- 为什么编号从字母变为罗马数字,并从 1 重新开始?
- 很可能这是滥用 NatBib 的作者-年份引用样式来包含“准备中”论文的错误方法。有没有更好的方法?或者有办法破解它以使其工作?目标是让已发表的论文显示“作者 [年份]”,让准备中的手稿显示“作者 [准备中]”,并正确处理同一作者的多份手稿。
答案1
广告 1:您示例中的字母“i”不是罗马数字 1,而是字段中的第一个非数字字符year
(“in prep. ”)。将 的内容替换为“still in prep. ”,您的示例将更改为“Waldo [still in prep.a,s]”。这是由具有以下定义的year
宏引起的:\NAT@parse@date
\def\NAT@parse@date#1#2#3#4#5#6@@{%
\ifnum\the\catcode`#1=11\def\NAT@year{}\def\NAT@exlab{#1}\else
\ifnum\the\catcode`#2=11\def\NAT@year{#1}\def\NAT@exlab{#2}\else
\ifnum\the\catcode`#3=11\def\NAT@year{#1#2}\def\NAT@exlab{#3}\else
\ifnum\the\catcode`#4=11\def\NAT@year{#1#2#3}\def\NAT@exlab{#4}\else
\def\NAT@year{#1#2#3#4}\def\NAT@exlab{{#5}}\fi\fi\fi\fi}
广告 2:也许有人能够破解natbib
内部机制,这样您的示例就可以正常工作。我更喜欢使用(惊讶)比布拉特克斯:
\documentclass{article}
\usepackage[style=authoryear-comp]{biblatex}
\DeclareFieldFormat{extrayear}{% = the 'a' in 'Jones 1995a'
\mknumalph{#1}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{W1,
author = {Waldo, W},
title = {First paper},
year = {in prep. }
}
@misc{W2,
author = {Waldo, W},
title = {Second paper},
year = {in prep. }
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Cite first \textcite{W1}. Cite second \textcite{W2}. Cite both \textcite{W1,W2}.
\printbibliography
\end{document}