biblatex:删除不合适的 ›nodate‹

biblatex:删除不合适的 ›nodate‹

biblatex(n.d.)现在,当出版物没有指定出版日期时,就会打印(“无日期”),灰色文献和其他晦涩的格式有时就是这种情况。

在我看来这一切都很好,除了一种情况;一种我在日常工作中经常遇到的情况。

作为一名历史学家,我引用的很多材料是@UNPUBLISHED:记录、手写稿、各种从未(打算)出版的文件。它们上面可能有(非常精确的)日期,但那不是出版物,更重要的是:在处理档案中的记录时,您不会为引用的每份文档创建参考书目条目。相反,参考书目条目是对位于档案馆地下室的大量记录的引用。通常,该块对应于制作或正在制作这些记录的机构。它有某种标识符(很像图书馆索书号),但没有日期,这根本说不通。确切的文档仅以文本形式给出\cite,它通过该块中的记录编号和记录中的纸张编号进行寻址。

我想知道如何恢复到biblatex's没有日期时不打印任何内容的旧行为 - 至少对于@UNPUBLISHED。我知道我可以修改该条目类型的参考书目驱动程序,但也许有更优雅的方法。

我也想鼓励biblatex团队重新考虑这个问题。如果该领域year被定义为“出版年份”(§2.2.2),那么实际上从未出版过不足这类信息?如果将该字段设为可选字段,岂不是更有意义吗?

\documentclass{scrartcl}
\usepackage{filecontents}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents*}{testbib.bib}
%this entry represents the 2500 running meters of records left behind by the Prussian Ministry of Education, 1807--1935
@UNPUBLISHED{Kultus,
  author = {{Akten des preußischen Ministeriums der Geistlichen-, Unterrichts- und Medicinal-Angelegenheiten}},
  address = {Geheimes Staatsarchiv Preußischer Kulturbesitz, Berlin: I. HA Rep. 76},
  shorthand = {Kultus},
}
\end{filecontents*}
\bibliography{testbib}


\begin{document}
blabla\footnote{said Prussia's Minister of Education in 1812 \parencite[Nr. 123, sheet 456]{Kultus}}

\printbibliography
\end{document} 

答案1

在我看来,在这种特殊情况下添加日期字段不会太令人困惑(或错误)(这也适用于下面的第三个解决方案)。

@UNPUBLISHED{Kultus,
  author = {{Akten des preußischen Ministeriums der Geistlichen-, Unterrichts- und Medicinal-Angelegenheiten}},
  address = {Geheimes Staatsarchiv Preußischer Kulturbesitz, Berlin: I. HA Rep. 76},
  date = {1807/1935},
  shorthand = {Kultus},
}

如果您想坚持使用@unpublished,您可以简单地修改提供的一些宏来biblatex删除日期标签,如果条目类型是@unpublished并且没有定义适当的日期字段。

将其添加到你的序言中。

\renewbibmacro*{date+extrayear}{%
  \ifboolexpr{
    test {\iffieldundef{labelyear}}
    or
    (test {\ifentrytype{unpublished}}
      and
      (test {\iffieldundef{year}} and test {\iffieldundef{origyear}}))
  }
    {}
    {\printtext[parens]{\printdateextralabel}}}

\newbibmacro*{cite:labelyear+extrayear}{%
  \ifboolexpr{
    test {\iffieldundef{labelyear}}
    or
    (test {\ifentrytype{unpublished}}
      and
      (test {\iffieldundef{year}} and test {\iffieldundef{origyear}}))
  }
    {}
    {\printtext[bibhyperref]{%
       \printfield{labelyear}%
       \printfield{extrayear}}}}

注意:请注意,修改authoryear的日期宏是一件非常微妙的事情,因为这很大程度上取决于您的mergedate设置,即要以何种方式修改哪个宏。上述修改与margedate=true(= mergedate=compact) 配合得很好,这是标准设置。对于其他mergedate设置,请记住要抑制的字段是labelyear(and extrayear);在大多数情况下,用我们上面的扩展条件替换就足够了\iffieldundef{labelyear}


定义一个新的 entrytype 可能也是一个好主意@archivedocs。这样你就不必滥用该author字段了。

此类型支持authortitle所有其他标准@unpublished字段;它当然也支持dateyear。但它添加了archivesign;该location字段现在引用archive

我们需要biblatex通过 让 biber 和 知道新字段authoryear.dbx。然后,当然,我们需要为 定义一个新的驱动程序@archivedocs。对于存档和签名,我们有一个新的宏,{archive+location+sign}。为了解决日期问题,我们修改了上述日期宏(适用相同的注意事项)。

数学家协会

\documentclass[ngerman]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{csquotes}
\usepackage{babel}
\usepackage{filecontents}
\usepackage[style=authoryear]{biblatex}
\begin{filecontents*}{\jobname.bib}
@archivedocs{Kultus,
  title     = {Akten des preußischen Ministeriums der Geistlichen-, Unterrichts- und Medicinal-Angelegenheiten},
  location  = {Berlin},
  sign      = {I. HA Rep. 76},
  archive   = {Geheimes Staatsarchiv Preußischer Kulturbesitz},
  shorthand = {Kultus},
  %date      = {1807/1935},
}
\end{filecontents*}
\bibliography{\jobname}

\begin{filecontents*}{authoryear.dbx}
\ProvidesFile{authoryear.dbx}

\DeclareDatamodelFields[type=field,datatype=literal]{archive}
\DeclareDatamodelFields[type=field,datatype=literal]{sign}
\DeclareDatamodelEntryfields[archivedocs]{archive,sign}

\DeclareDatamodelConstraints[archivedocs]{
  \constraint[type=mandatory]{
    \constraintfield{title}
    \constraintfield{archive}
  }
}
\end{filecontents*}

\DeclareFieldFormat[archivedocs]{citetitle}{#1}
\DeclareFieldFormat[archivedocs]{title}{#1}

\newbibmacro*{archive+location+sign}{%
  \printfield{archive}%
  \setunit*{\addcomma\space}%
  \printlist{location}%
  \setunit{\addcolon\space}%
  \printfield{sign}%
  \newunit}

\DeclareBibliographyDriver{archivedocs}{%
  \usebibmacro{bibindex}%
  \usebibmacro{begentry}%
  \usebibmacro{author}%
  \setunit{\labelnamepunct}\newblock
  \usebibmacro{title}%
  \newunit
  \printlist{language}%
  \newunit\newblock
  \usebibmacro{byauthor}%
  \newunit\newblock
  \printfield{howpublished}%
  \newunit\newblock
  \printfield{note}%
  \newunit\newblock
  \usebibmacro{archive+location+sign}%
  \newunit\newblock
  \iftoggle{bbx:url}
    {\usebibmacro{url+urldate}}
    {}%
  \newunit\newblock
  \usebibmacro{addendum+pubstate}%
  \setunit{\bibpagerefpunct}\newblock
  \usebibmacro{pageref}%
  \newunit\newblock
  \iftoggle{bbx:related}
    {\usebibmacro{related:init}%
     \usebibmacro{related}}
    {}%
  \usebibmacro{finentry}}

\renewbibmacro*{date+extrayear}{%
  \ifboolexpr{
    test {\iffieldundef{labelyear}}
    or
    (test {\ifentrytype{archivedocs}}
      and
      (test {\iffieldundef{year}} and test {\iffieldundef{origyear}}))
  }
    {}
    {\printtext[parens]{\printdateextralabel}}}

\newbibmacro*{cite:labelyear+extrayear}{%
  \ifboolexpr{
    test {\iffieldundef{labelyear}}
    or
    (test {\ifentrytype{archivedocs}}
      and
      (test {\iffieldundef{year}} and test {\iffieldundef{origyear}}))
  }
    {}
    {\printtext[bibhyperref]{%
       \printfield{labelyear}%
       \printfield{extrayear}}}}

\begin{document}
  blabla\footnote{said Prussia's Minister of Education in 1812 \parencite[Nr. 123, sheet 456]{Kultus}}
  \nocite{*}
  \printbibliography
\end{document} 

在此处输入图片描述

相关内容