我有一份包含多个参考书目的文档(使用 biblatex 和 biber 生成)。我想知道是否可以抑制仅在一个参考书目后面生成年份后的字母(extrayear)。
从上一个问题,我了解到可以通过序言中的各种调整来抑制该标签,但这当然会影响所有书目。
从 biblatex 手册(2.0 版第 188 页)中,我了解到我可以针对每个条目类型停用标签,但这对我来说不行。手册还指出,labelyear 的自定义是不是可以按每个项目/每个条目进行(附录 D)。
所以我的问题是,是否有一种解决方法可以抑制标签,例如基于每个参考书目或每个关键字。
例如,我正在考虑\AtEveryBibitem
还有一些 if/then 循环,用于过滤关键字。但不幸的是,我无法编写这样的程序……
答案1
我认为必须使用 来完成此操作,\defbibenvironment
因为要跳过 labeldate 消歧义的条目不一定只在一个书目中,正如您所说。您不能使用,\AtEveryBibItem
因为这是全局的,适用于所有书目。这样怎么样 - 您只需定义一个新的书目环境,并在需要没有 extradate 消歧义的书目时使用它。我在这里使用了 authoryear 定义的副本。如果您使用不同的样式,只需复制其“书目”bibliography 环境定义并在 itemcode 参数的开头\defbibenvironment
添加:\clearfield{extradate}
\begin{filecontents}{test.bib}
@BOOK{test1,
AUTHOR = {Alan Ambiguous},
TITLE = {The Annals of Ambiguity},
DATE = {1934}
}
@BOOK{test2,
AUTHOR = {Alan Ambiguous},
TITLE = {Unambiguous Unknowns},
DATE = {1934}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\defbibenvironment{nodis}
{\list
{}
{\setlength{\leftmargin}{\bibhang}%
\setlength{\itemindent}{-\leftmargin}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}}
{\endlist}
{\clearfield{extradate}\item}
\addbibresource{test.bib}
\begin{document}
\cite{test1} \cite{test2}
\printbibliography
\printbibliography[env=nodis]
\end{document}