总结:如何引用没有/不应该有的工作论文institution
?
这biblatex 条目类型report
应用于:
大学或其他机构发布的技术报告、研究报告或白皮书。
a 的必填字段report
为author
、title
、type
、institution
、year
/ date
。
符合此建议我通常将这种report
类型用于工作论文。但是,对于某些工作论文系列,添加机构似乎是多余的,并且会产生不必要的杂乱书目条目。所有工作论文系列都是这种情况,其中机构名称是系列名称的一部分。例如,“NBER 工作论文”(显然)由 NBER 发布。
为了说明该问题,请考虑以下示例:
\documentclass{scrartcl}
\usepackage[backend=biber,bibstyle=authoryear,dashed=false]{biblatex}
\addbibresource{mwe.bib}
\begin{filecontents}{mwe.bib}
@Report{Example1,
author = {Author, Sample},
date = {2020},
title = {A Report},
type = {The Institution's Working Paper Series},
number = {42}
}
@Report{Example2,
author = {Author, Sample},
date = {2020},
title = {A Report with Redundant Institution},
type = {The Institution's Working Paper Series},
number = {42},
institution = {The Institution}
}
\end{filecontents}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
- 问题:我更喜欢示例 1(无机构),但该
institution
字段是必填的。 - 解决方法/我尝试过的方法:
- 只需忽略
institution
必填字段并将其留空即可。这可行(见上文),但违反了数据模型规范。但是:这会在验证数据模型时生成许多烦人的警告,而且,我不确定 biber/biblatex 的未来版本是否会对缺少必填字段保持如此宽容。 - 提供一些占位符机构,然后清除字段,
\AtEveryBibitem{\ifentrytype{report}{\clearfield{institution}…
但因为我不想institution
清除全部报告,我需要一些恒定的“魔术占位符”(或关键字)并且institution
仅在观察这个魔术占位符的条件下清除,这很混乱,容易出错并且会使我的 BIB 文件混乱。 - 只需使用另一种不需要机构的条目类型。自然候选者可能是
misc
– 但这没有number
字段。作为替代方案,我可以(ab-)使用manual
,但这会在number
之前打印type
,而我需要相反的顺序:作者,Sample (2020c)。冗余机构报告。42. 机构工作论文系列。
- 只需使用另一种不需要机构的条目类型,再次:使用
manual
类型series={The Institution's Working Paper Series}
,但我不喜欢使用错误的条目类型(manual
)并且使用series
wheretype
更合适(IMO)。
- 只需忽略
- 问题:如何引用没有/不应该有 的工作论文
institution
?我不确定上述哪种方法最有希望,但我肯定更喜欢具有有效数据模型(不同于 (1))、合理语义(不同于 (4))和最少可能出错的事情(不同于 (2))的解决方案。所以也许 (3) 和改变 和 的顺序type
是number
最好misc
的……但我愿意接受并感谢任何建议。
答案1
总结选择选项 1。如果数据模型验证警告让您如此烦恼,请定义一个不需要的新数据模型institution
(见下文)。
“必填”字段和“可选”字段之间的区别biblatex
并不像乍一看那么严格。
除了数据模型验证代码之外,代码中没有任何biblatex
内容知道必填或必填字段。文档biblatex
说
请注意,“必填”字段并非在所有情况下都严格要求,详情请参阅 §2.3.2。标记为“可选”的字段在技术意义上是可选的。书目格式规则通常要求的不仅仅是“必填”字段。
关于“必填”和“可选”字段。§2.3.2 进一步解释了
§2.3.2缺失和可遗漏数据
§2.1.1 中标记为“必需”的字段并非在所有情况下都是必需的。此包附带的参考书目样式
title
对于大多数条目类型来说,只需一个字段即可。就参考书目而言,匿名出版的书籍、没有明确编辑的期刊或没有明确作者的软件手册应该不会有问题。但是,引用样式可能有不同的要求。例如,作者-年份引用方案显然需要一个author
/editor
和一个year
字段。
对我来说,“必填”和“可选”字段更像是对样式开发人员的提示,而不是对用户及其.bib
数据库的硬性要求。一般来说,我认为如果您的条目包含文档中列为“必填”的所有字段,那么您可以预期输出看起来是合理的。如果您没有所有必填字段,输出可能仍然没问题(在很多情况下确实如此),但如果您抱怨结果不满意,您可能站不住脚。如果您没有所有必填字段,您的参考书目并不一定很糟糕,但这并不意味着它看起来应该很好。
我认为重要的是要记住btxdoc
- 标准样式的十三种条目类型在格式化大多数条目方面表现相当不错,但没有一种仅使用十三种格式的方案可以完美地完成所有事情。因此,您可以自由发挥创意来使用这些条目类型(但如果您必须太有创意,则很有可能您使用了错误的条目类型)。
- 不要太在意字段名称。例如,有时您可能必须将出版商的地址连同出版商的名称一起放在字段中
publisher
,而不是直接将其放在address
字段中。或者有时,当您明智地使用该字段时,困难的条目效果会最好note
。- 不要太在意警告信息。例如,有时年份会出现在标题中,例如1966 年世界牛羚年鉴。在这种情况下最好省略该
year
字段并忽略 BibTeX 的警告信息。
我认为我并不完全同意最后一点中的例子,但我绝对同意其总体思路。无论如何,底线是:不要将数据模型也说真的。最终打印结果可能是你最感兴趣的。
我不能肯定地说,但看起来一些必填/可选字段确实直接取自BibTeX 文档btxdoc
。因此,在这种情况下,institution
由于历史原因而非技术原因,该字段可能为“必填”字段。
如果不包含“必填”字段,最糟糕的情况是什么?粗略地说,我认为最糟糕的情况是您的样式期望该字段存在,并在该institution
字段中或周围放置一些内容,如果该字段不存在,则看起来不合适。
让我们从更技术的角度来看待这个问题。如上所述,实际上只有一段代码biblatex
知道哪些字段是必需的,哪些是可选的:数据模型约束声明。这些约束声明被传递给 Biber 进行数据模型验证,而不会在其他任何地方使用biblatex
。因此从技术角度来看,biblatex
绝对不关心数据模型约束。它们只是用来向用户发出提示/警告。
整个“必需”/“可选”事物中更重要的方面是它允许样式开发人员做出的隐式假设。通常,样式开发人员应该以一种不遗漏可选字段不会使输出看起来很糟糕的方式编写样式。有一种观点认为,对于必需字段没有这样的期望。如果缺少必需字段,那是用户的责任。这些隐式假设没有编纂,开发人员完全可以自行决定他们希望在多大程度上依赖这些假设。
biblatex
和样式的整体工作原理biblatex
使得在大多数情况下无需额外努力即可非常轻松地防止字段丢失。仅在极少数边缘情况下才需要采取明确的预防措施来防止字段丢失。
@report
我希望,即使没有,绝大多数风格的条目仍然会看起来不错institution
。
让我们稍微讨论一下您建议的解决方法。
institution
如果您不想要,就不要填写该字段。对我来说,这听起来是最好和最简单的做法。当然,你没有给出字段
required
,但如果这样输出看起来更好,谁会责怪你呢?数据模型验证需要明确打开,而且警告无论如何都是有点人为的(如上所述),所以你完全有权利忽略它们。标准样式biblatex
极不可能发生改变,这意味着institution
现在看起来没有这些的条目将来看起来会更糟。使用(魔法或其他)占位符。
这只会欺骗数据模型验证。如果您稍后使用 删除字段值
\clearfield
,则就样式而言,该字段仍然会消失。因此,如果您担心输出结果会很糟糕,那么您仍然不安全。(以及 4.)使用不同的条目类型
这当然是可能的,但感觉上并不比其他选择好多少。你会放弃真正的语义连接,而去追求更加人为的目标,即正确获取必填字段。
我倾向于选项 1,这也许并不令人意外。
如果你对数据模型验证中收到的警告感到困扰,你可以重写数据模型约束以institution
从必填字段列表中删除(原始约束可以在blx-dm.def
)。
\documentclass{article}
\begin{filecontents}{report-wo-institution.bib}
\ResetDatamodelConstraints
\DeclareDatamodelConstraints[
article,
book,
inbook,
bookinbook,
suppbook,
booklet,
collection,
incollection,
suppcollection,
manual,
misc,
mvbook,
mvcollection,
online,
patent,
periodical,
suppperiodical,
proceedings,
inproceedings,
reference,
inreference,
report,
set,
thesis,
unpublished]{
\constraint[type=mandatory]{
\constraintfieldsxor{
\constraintfield{date}
\constraintfield{year}
}
}
}
\DeclareDatamodelConstraints[set]{
\constraint[type=mandatory]{
\constraintfield{entryset}
}
}
\DeclareDatamodelConstraints[article]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{journaltitle}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[book,mvbook,mvcollection,mvreference]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[inbook,bookinbook,suppbook]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{booktitle}
}
}
\DeclareDatamodelConstraints[booklet]{
\constraint[type=mandatory]{
\constraintfieldsor{
\constraintfield{author}
\constraintfield{editor}
}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[collection,reference]{
\constraint[type=mandatory]{
\constraintfield{editor}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[incollection,suppcollection,inreference]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{editor}
\constraintfield{title}
\constraintfield{booktitle}
}
}
\DeclareDatamodelConstraints[dataset]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[manual]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[misc,software]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[online]{
\constraint[type=mandatory]{
\constraintfield{title}
\constraintfieldsor{
\constraintfield{url}
\constraintfield{doi}
\constraintfield{eprint}
}
}
}
\DeclareDatamodelConstraints[patent]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{number}
}
}
\DeclareDatamodelConstraints[periodical]{
\constraint[type=mandatory]{
\constraintfield{editor}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[proceedings,mvproceedings]{
\constraint[type=mandatory]{
\constraintfield{title}
}
}
\DeclareDatamodelConstraints[inproceedings]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{booktitle}
}
}
\DeclareDatamodelConstraints[report]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{type}
}
}
\DeclareDatamodelConstraints[thesis]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
\constraintfield{type}
\constraintfield{institution}
}
}
\DeclareDatamodelConstraints[unpublished]{
\constraint[type=mandatory]{
\constraintfield{author}
\constraintfield{title}
}
}
\DeclareDatamodelConstraints{
\constraint[type=data, datatype=isbn]{
\constraintfield{isbn}
}
\constraint[type=data, datatype=issn]{
\constraintfield{issn}
}
\constraint[type=data, datatype=ismn]{
\constraintfield{ismn}
}
\constraint[type=data, datatype=date]{
\constraintfield{date}
\constraintfield{eventdate}
\constraintfield{origdate}
\constraintfield{urldate}
}
\constraint[type=data, datatype=pattern, pattern=\regexp{(?:sf|sm|sn|pf|pm|pn|pp)}]{
\constraintfield{gender}
}
}
\end{filecontents}
\usepackage[backend=biber,bibstyle=authoryear,dashed=false]{biblatex}
\begin{filecontents}{\jobname.bib}
@Report{Example1,
author = {Author, Sample},
date = {2020},
title = {A Report},
type = {The Institution's Working Paper Series},
number = {42},
}
@Report{Example2,
author = {Author, Sample},
date = {2020},
title = {A Report with Redundant Institution},
type = {The Institution's Working Paper Series},
number = {42},
institution = {The Institution},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
文档输出仍然相同,但是biber -V
不会显示缺少institution
s 的信息。
当然,institution
还没有给出场地。但我想这一切都归结于如果你不想给出,institution
你就必须承担不给出该领域的后果。在标准样式中(我期望大多数贡献样式都是如此),不提供 基本上不会有任何后果institution
。如果您认为未来可能产生的后果风险太大,那么您唯一的选择就是用institution
值(打印的)填充字段或采用不同的输入类型。如果第一个选项不行,那么您唯一的办法就是采用不同的类型。但不同的类型在语义上不太令人满意,可能无法尽可能准确地正确表示 的所有方面@report
。