我需要在正文和括号引用中为同一参考文献定义不同的别名。例如,我希望\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}