在 natbib 中使用不同的别名来引用文本和括号

在 natbib 中使用不同的别名来引用文本和括号

我需要在正文和括号引用中为同一参考文献定义不同的别名。例如,我希望\citetalias{Miller2012}得到“Miller et al. [2012, Paper 1]”,而\citepalias{Miller2012}应该得到“[Miller et al., 2012, Paper 1]”。

natbib是否有某种方法可以通过使用命令的通用版本来实现此目的\defcitealias?还有其他选择吗?

我需要论文编号与年份一起出现在这篇论文的所有引用中。尝试在文件的年份字段中直接包含“论文 1”.bib会导致在同时引用多个参考文献时出现问题,这似乎是一个糟糕的解决方案。

谢谢您的任何建议!

答案1

“还有其他选择吗?”biblatex(具有natbib兼容性选项)。附加包选项style=authoryear,maxcitenames=2应产生与 相当接近的输出natbib。要在某些 bibentries 的年份后添加“, Paper~x”,

  • 将论文编号添加为文件usera.bib这些条目的字段;

  • usera定义一个 bibmacro ,如果该字段已定义,则打印“,Paper~”加上该字段的内容;

  • 将上述bibmaco添加到labelyear(如果extrayear为空)的格式定义中extrayear

  • 如果您不想在参考书目中出现“,Paper~x”,请添加\AtEveryBibitem{\clearfield{usera}}


\documentclass{article}

\usepackage[style=authoryear,maxcitenames=2,natbib=true]{biblatex}

\newbibmacro*{papernum}{%
  \iffieldundef{usera}{%
  }{%
    \addcomma\space
    Paper~\printfield{usera}%
  }%
}

\DeclareFieldFormat{labelyear}{%
  \stripzeros{#1}%
  \iffieldundef{extrayear}{%
    \usebibmacro{papernum}%
  }{%
  }%
}

\DeclareFieldFormat{extrayear}{%
  \iffieldnums{labelyear}
    {\mknumalph{#1}\usebibmacro{papernum}}
    {\mkbibparens{\mknumalph{#1}\usebibmacro{papernum}}}}

\AtEveryBibitem{\clearfield{usera}}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
}
@misc{Mil12x,
  usera = {1},
  author = {Miller, M. and Author, A. and Buthor, B.},
  year = {2012},
  title = {Malcom},
}
@misc{Mil12y,
  usera = {2},
  author = {Miller, M. and Author, A. and Buthor, B.},
  year = {2012},
  title = {Mike},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

\citet{Mil12x}

\citep{Mil12x}

\citet{A01,Mil12y}

\citep{A01,Mil12y}

\printbibliography

\end{document}

在此处输入图片描述

相关内容