答案1
只需清除字段即可完成此操作extradate
。请注意,此解决方案适用于您的特定用例,但在其他情况下可能会导致意外结果。在这种情况下,moewe 的解决方案更加强大。请参阅那里的评论以了解一些讨论。
\begin{filecontents}{\jobname.bib}
@book{Chomsky1986,
Address = {Cambridge Mass.},
Author = {Noam Chomsky},
Publisher = {{MIT} Press},
Title = {Barriers},
Year = {1986}}
@book{Chomsky1986b,
Address = {New York},
Author = {Noam Chomsky},
Publisher = {Praeger},
Title = {Knowledge of Language: its nature, origin and use},
Year = {1986}}
\end{filecontents}
\documentclass{article}
\usepackage[
citestyle=verbose-ibid,
bibstyle=authoryear-ibid,
]
{biblatex}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{extradate}{}
\begin{document}
\autocite{Chomsky1986b,Chomsky1986}
\printbibliography
\end{document}
答案2
由于我不太喜欢用空字段格式来抑制字段,所以这里有一个直接重新定义所涉及的命令的解决方案。
\documentclass{article}
\usepackage[
citestyle=verbose-ibid,
bibstyle=authoryear-ibid,
]{biblatex}
\renewbibmacro*{date+extradate}{%
\iffieldundef{labelyear}
{}
{\printtext[parens]{\printdate}}}
\renewbibmacro*{bbx:ifmergeddate}[2]{#1}%
\addbibresource{biblatex-examples.bib}
\begin{document}
\autocite{knuth:ct:b,knuth:ct:c}
\printbibliography
\end{document}
稍微不那么激进的方法仍然会留下痕迹,labeldate
只需重新定义date+extradate
如下(保持bbx:ifmergeddate
不变)
\renewbibmacro*{date+extradate}{%
\iffieldundef{labelyear}
{}
{\printtext[parens]{%
\iflabeldateisdate
{\printdate}
{\printlabeldate}}}}%
删除额外日期的另一种但更直接的方法是
\DeclareFieldInputHandler{extradate}{\def\NewValue{}}