尝试的解决方案

尝试的解决方案

我想引用一篇显然已被期刊接受发表但尚未发表的文章(除了在 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}

第一次尝试:pubstate,期刊,无日期

我搜索了一下,发现了一个安德鲁·斯旺的回答。不幸的是,我试图将其与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 中消失的日期

这使得未注明日期的参考文献的行为符合我的预期。不幸的是,我设法抹去了 Springer 参考文献的日期。有没有更好的(正确的?)方法来使用 biblatex 来处理这个问题?

答案1

对于biblatex date只是一个“虚拟”字段,biblatex您只能访问其内部的各个部分year,,,......当然,在month文件中是非常真实的。day.bibdate

如果你想检查是否没有日期,请检查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}}}

相关内容