Biblatex 字段组织未显示在 footcite 中

Biblatex 字段组织未显示在 footcite 中

我正在尝试更新我的 footcite 的宏。对于书籍和其他内容,它按预期工作。但对于在线类型,我遇到了一些问题。

我想显示作者,如果没有作者,我想显示组织。

作者/组织、年份、“Onlinequelle”

\renewbibmacro*{cite}{%
  \ifentrytype{online}%
    {
    \iffieldundef{author}
      {\printnames{labelname}}
      {\printlist{organization}}
    {\usebibmacro{cite:labeldate+extradate}}
    \printtext[]{Onlinequelle}
    }
   {
  \iffieldundef{shorthand}
    {\ifthenelse{\ifnameundef{labelname}}
       {\usebibmacro{cite:label}%
        \setunit{\printdelim{nonameyeardelim}}
        }
       {\printnames{labelname}%
        \setunit{\printdelim{nameyeardelim}}}%
       \ifboolexpr{   test {\iffieldundef{labelyear}}
                 or test {\iffieldequalstr{labelyear}{nodate}}}
       {\usebibmacro{cite:labeltitle}}
       {\usebibmacro{cite:labeldate+extradate}}}
    {\usebibmacro{cite:shorthand}}}
    }

我得到这个结果: 在此处输入图片描述

@Online{Inc2015,
  citationkey  = {Inc2015},
  title        = {Class ArrayList<E>},
  url          = {https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html},
  year         = {2015},
  note         = {in: Java™ Platform, Standard Edition 7 API Specification},
  organization = {Oracle America Inc.},
  urldate      = {2021-01-03},
}

答案1

author是名称字段,因此您需要询问\ifnameundef是否给出了 ,而不是\iffieldundef。由于author不是字段,而是名称列表,因此\iffieldundef{author}始终给出 true,因此您的代码永远不会得到\printlist{organization}。您需要\ifnameundef在这里使用。

由于您打印labelname,因此您可能不应该测试author,而是测试labelname

总共

    \iffieldundef{author}
      {\printnames{labelname}}
      {\printlist{organization}}

应该

    \ifnameundef{labelname}
      {\printnames{labelname}}
      {\printlist{organization}}%

问题中显示的代码可能会产生几个虚假空格,因为它缺少%注释行尾。详细了解为什么需要%在某些行末尾添加行尾的百分号 (%) 有什么用?(为什么我的宏会产生额外的空间?)

简化代码的其他部分并使用biblatex标准样式的缩进样式,我可能会将您的代码编写为

\NewBibliographyString{onlineresource}

\DefineBibliographyStrings{german}{
  onlineresource = {Onlinequelle},
}

\renewbibmacro*{cite}{%
  \ifentrytype{online}%
    {\ifnameundef{labelname}
       {\printnames{labelname}}
       {\printlist{organization}}
     \setunit{\printdelim{nameyeardelim}}%
     \usebibmacro{cite:labeldate+extradate}%
     \setunit{\addspace}%
     \bibstring{onlineresource}}
   {\iffieldundef{shorthand}
      {\ifnameundef{labelname}
         {\usebibmacro{cite:label}%
          \setunit{\printdelim{nonameyeardelim}}}
         {\printnames{labelname}%
          \setunit{\printdelim{nameyeardelim}}}%
       \iffieldequalstr{labeldatesource}{nodate}
         {\usebibmacro{cite:labeltitle}}
         {\usebibmacro{cite:labeldate+extradate}}}
      {\usebibmacro{cite:shorthand}}}}

(未经测试,因为您没有提供用于测试的示例文档。)


organization在这种情况下,我认为将“升级”为author(或如果更合适的话)通常完全没问题editor。没有规定禁止在authoreditor领域使用组织或公司(在书目条目的“作者”字段中使用“公司作者”(完整拼写出姓名)),因此非个人作者不应自动地被推入到organization田野中。author并且editor是描述功能或者角色实体的属性,而不是其本体属性。如果组织/非个人接管了该角色,那么在文件中这样命名是完全可以的.biborganization另一方面,字段与字段更相似publisher。另请参阅我的评论当没有作者时,引用出版商和日期 - 例如网站如果没有作者使用组织或机构当没有提供作者时,为什么 biblatex 默认使用标题而不是作者,我该如何将其更改为使用 journaltitle?

这里使用author/而不是不仅使宏的代码更简单,而且不需要对参考书目驱动程序进行结构类似的更改。editororganizationcite

相关内容