为什么“准备中”的论文与“一年后的”论文表现不同?

为什么“准备中”的论文与“一年后的”论文表现不同?

有人请我解决 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. 为什么编号从字母变为罗马数字,并从 1 重新开始?
  2. 很可能这是滥用 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}

在此处输入图片描述

相关内容