我想引用一篇显然已被期刊接受发表但尚未发表的文章(除了在 arXiv 上非正式发表之外)。为此,我使用了字段pubstate
。不幸的是,没有安排正式的发布日期。这意味着我的参考书目条目最终会以一对括号括住一个空字符串。(请注意,我使用的是authortitle
样式。)
在这种情况下,是否可以让 biblatex 打印“(即将发布)”来代替缺失的日期?
尝试的解决方案
我尝试按如下方式解决此问题。以下是 MWE:
\begin{filecontents}{\jobname.bib}
@article{example1,
title = "My first article",
author = "A. N. Author",
journal = "Journal of Stuff",
pubstate = "inpreparation",
}
@article{example2,
title = "My second article",
crossref = "example1",
pubstate = "submitted",
}
@article{example3,
title = "My third article",
crossref = "example1",
pubstate = "forthcoming"
}
@article{example4,
title = "My fourth article",
crossref = "example1",
pubstate = "inpress"
}
@article{example5,
title = "My fifth article",
crossref = "example1",
pubstate = "prepublished"
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authortitle,backend=biber]{biblatex}
\addbibresource{\jobname}
\addbibresource{biblatex-examples.bib}
\begin{document}
Here's my long-winded citation: \cites{example1}{example2}{example3}{example4}{example5}.
Here's one from the \texttt{biblatex} example: \cite{springer}.
\printbibliography
\end{document}
我搜索了一下,发现了一个安德鲁·斯旺的回答。不幸的是,我试图将其与authortitle
样式一起使用,而不是authordate
。经过更多搜索和阅读 biblatex 手册后,如果没有提供日期,我尝试将 pubstate 用作“假日期”。我在序言中添加了以下内容。
\renewbibmacro*{date}{%
\ifboolexpr{ test {\iffieldundef{date}} and not test {\iffieldundef{pubstate}} }%
{\printfield{pubstate}}%
{\printfield{date}}%
}
\renewbibmacro*{addendum+pubstate}{%
\printfield{addendum}%
}
结果好坏参半。
这使得未注明日期的参考文献的行为符合我的预期。不幸的是,我设法抹去了 Springer 参考文献的日期。有没有更好的(正确的?)方法来使用 biblatex 来处理这个问题?
答案1
对于biblatex
date
只是一个“虚拟”字段,biblatex
您只能访问其内部的各个部分year
,,,......当然,在month
文件中是非常真实的。day
.bib
date
如果你想检查是否没有日期,请检查year
(这是 Andrew 在他的回答,但他必须检查一个特殊year
字段)
\renewbibmacro*{date}{%
\ifboolexpr{ test {\iffieldundef{year}} and not test {\iffieldundef{pubstate}} }%
{\printfield{pubstate}}%
{\printdate}}
\renewbibmacro*{addendum+pubstate}{%
\printfield{addendum}%
\newunit\newblock
\iffieldundef{year}
{}
{\printfield{pubstate}}}