我正在尝试更新我的 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
。没有规定禁止在author
或editor
领域使用组织或公司(在书目条目的“作者”字段中使用“公司作者”(完整拼写出姓名)),因此非个人作者不应自动地被推入到organization
田野中。author
并且editor
是描述功能或者角色实体的属性,而不是其本体属性。如果组织/非个人接管了该角色,那么在文件中这样命名是完全可以的.bib
。organization
另一方面,字段与字段更相似publisher
。另请参阅我的评论当没有作者时,引用出版商和日期 - 例如网站,如果没有作者使用组织或机构和当没有提供作者时,为什么 biblatex 默认使用标题而不是作者,我该如何将其更改为使用 journaltitle?。
这里使用author
/而不是不仅使宏的代码更简单,而且不需要对参考书目驱动程序进行结构类似的更改。editor
organization
cite