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
字段了。
此类型支持author
和title
所有其他标准@unpublished
字段;它当然也支持date
和year
。但它添加了archive
和sign
;该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}