引用:如何向 biblatex 包的文章类型添加位置和发布者字段?

引用:如何向 biblatex 包的文章类型添加位置和发布者字段?

在我的学术写作中,我必须使用出版商​​和位置字段来引用期刊文章。

梅威瑟:

\documentclass[ngerman]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage{
            babel,
            csquotes
           }
\usepackage[
            backend    = biber,
            sortlocale = auto,
            sorting    = nty,
            style      = authoryear-comp
           ]{biblatex}

\DeclareFieldFormat[article]{publisher}{#1}
\DeclareFieldFormat[article]{location}{#1}
\DeclareBibliographyDriver{article}
{
  \newunit\newblock
  \printlist{publisher}
  \newunit\newblock
  \printlist{location}
}

\begin{filecontents}{\jobname.bib}
  @article{
           Sur,
           author       = {Surname, Name},
           title        = {Title},
           journaltitle = {Journaltitle},
           year         = {2000},
          }
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

  Test \autocite[1]{Sur}.
  \printbibliography

\end{document}

但这会破坏参考书目。我认为这些\Declare行覆盖了article类型。正确的方法是什么?

答案1

为什么问题中的 MWE 的线条不起作用?

第一点是示例.bib条目实际上没有publisherlocation字段,自然我们无法从中获取发布者或位置。

第二点实际上更微妙,涉及https://github.com/plk/biblatex/issues/586。由于\DeclareBibliographyDriver宏的实现,其两个参数之间不能有任何空格。因此必须按如下方式使用

\DeclareBibliographyDriver{article}{%
  ...
}

第三,也是最重要的一点,确实会覆盖驱动程序的当前定义(正如您所假设的),因此使用您指示打印的\DeclareBibliographyDriver问题中的定义biblatex仅有的@articles 在参考书目中的出版商和位置。这不是您想要的。相反,您必须将新行插入驱动程序,同时保留其余部分,或者重新定义整个驱动程序。驱动程序通常由对不同 bibmacros 和\print...命令的许多调用组成。您可以在以下位置找到标准样式的定义standard.bbx

什么才是正确的方法?

由于驱动程序的定义通常非常复杂且很长,因此修补它们通常比重写它们更容易。xpatch包使得这一点变得非常容易。因此,您可以使用\xpatchbibmacro将驱动程序的特定位替换为另一个位(这将包括对要添加的宏的新调用)。请参阅有效地将同一补丁应用于多个 bibdrivers使用 biblatex/biber 将发布者添加到在线源?有关如何使用\xpatchbibdriverBiblatex 的 bibmacros、参考书目驱动程序、格式 - 修补或重新定义?关于修补与重新定义的一般性讨论。

在此特别的在这种情况下,直接修改 bibmacro 实际上要容易一些(通常是可能的,但一般不要指望这一点)。

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addperiod\space}%
  \usebibmacro{publisher+location+date}%
  \setunit*{\addcomma\space}%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addcomma\space}}%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue}%
  \newunit}

其中包括出版商、地点和日期,紧接着journaltitle。该设置符合 B.4.2 节中表 B.4 的要求连载作品ISO 690:2010(E) (第三版,2010-06-15)

关于 ISO 690 的几点评论

请允许我在这里添加一些有关 ISO 690 的评论。

规范的文本允许相当大的回旋余地 - 要么明确地提及其他选项,要么隐含地根本不提及某件事。一个明确的例子是参考书目中姓名的顺序。姓名列表中只有第一个姓名需要按“姓氏,名字”顺序(即family-given用语biblatex),第二个和后续姓名可以按“自然顺序”记录 - 但它们不必如此(至少这是我对“可能”的理解)。隐含地,规范没有指定姓名之间的分隔符/定界符,即使示例始终在姓氏前使用“and”(带牛津逗号),并在所有其他姓名前使用逗号。

此外,ISO 网站上公开发布的摘要状态

ISO 690:2010 并未规定参考文献或引文的具体格式。ISO 690:2010 中使用的示例并未规定格式和标点符号。

随后在 §4.4 中,该标准强调整个文档中使用的标点符号方案“纯粹是说明性的”,并不是标准的一部分。

现在还不清楚这里“样式”的定义到底是什么,但我本以为某些决定(例如名称全部大写,甚至标题格式)不属于标准。标准中没有说名称全部大写,某些标题使用斜体,这只是通过示例传达的。

一些示例甚至不一致,例如 §5.4.1 中的这些示例(也与 §§5.2.1、5.3.1 进行比较时):其中一个示例在姓氏和名字首字母之间没有逗号,而其他所有示例都这样做;另一个示例没有将“公司”名称全部大写,而其他所有示例都这样做。

该标准严格定义了引用的元素及其给出的顺序。此外,它还给出了一些关于如何显示这些元素的指导。

因此,当您获得 ISO 690 的二手资料时,这些资料通常会在实际标准之上添加自己的解释。此外,我还了解到,该标准的一些本地翻译(DIN ISO 690、ČSN ISO 690)也增加了额外的要求或使解释更加严格和狭窄。

有一种biblatex风格biblatex-iso690它遵循了捷克对该规范的(更严格的)解释。

publisher并且location对于@articles

据我所知,主流参考文献格式(APA、Chicago、MLA)均不要求在参考文献中注明出版商或所在地@articlebiblatex数据模型甚至不考虑参考文献的这两个字段@article

甚至 ISO 也不太确定它们。虽然 B.4.2 节中的表 B.4 列出了必需的出版商和位置(如上所述),但 C.6 和 C.7 中的示例都没有列出这两个字段。值得一提的是,我发现的大多数 ISO 690 二手资料也忽略了文章的出版商和位置。


\documentclass[ngerman]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage{babel,csquotes}
\usepackage[
            backend    = biber,
            style      = authoryear-comp
           ]{biblatex}

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addperiod\space}%
  \usebibmacro{publisher+location+date}%
  \setunit*{\addcomma\space}%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addcomma\space}}%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue}%
  \newunit}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{sur,
  author       = {Surname, Name},
  title        = {Title},
  journaltitle = {Journaltitle},
  year         = {2000},
  location     = {Ort},
  publisher    = {Verlag},
}
\end{filecontents}

\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}

\begin{document}
  Lorem \autocite[1]{sur} ipsum \autocite{sigfridsson}.
  \printbibliography
\end{document}

在此处输入图片描述

请注意,使用及其驱动样式,按名称-标题-年份 ( )style=authoryear排序毫无意义,这更自然,也是默认设置。此外,ISO 690 规定按时间顺序排序。sorting=ntysortingy=nyt

相关内容