艾伦的回答之前的一个问题让我有了在不同的领域尝试类似的事情的想法,但结果并不像我预期的那样。
根据本 APA 指导(具体来说,Chelsea 写道,“...每个参考文献只需要一条‘来源信息’(出版商名称和位置、检索 URL 或 DOI),因此 APA 建议您遵循这一做法。”),我希望有时可以选择不打印书籍(或任何参考文献类型)的“url”字段的内容。但我不想从我的.bib
文件中删除 URL 来实现这个目标。我想将这些数据保留在我的.bib
文件中,以用于其他样式或仅供我自己使用LaTeX
。
因此,按照艾伦的例子,我在输入文件中添加了以下内容:
\def\PrintURL{PrintURL}
\DeclareFieldFormat[book]{url}{\iffieldequals{pubstate}{\PrintURL}{#1}{}}
我不使用“pubstate”字段,所以我想我会像 Alan 使用“type”字段一样使用它。从这个代码示例中,我确信很明显我不是任何语言的程序员,但我认为他的例子也许是我可以推广的东西,因此我进行了上述尝试。
但正如我所说,它并没有像我想象的那样发挥作用。当我不希望显示 URL(并将“pubstate”字段留空)时,它确实会抑制 URL 本身的打印,但它仍然会打印“检索自”,就像打印 URL 一样。当我做想要打印 URL,在“pubstate”字段中输入字符串“PrintURL”确实会导致 URL 按照我想要的方式打印,但是它不能对 URL 进行正确的换行。
我感觉这是我犯的一个非常愚蠢的错误,因为我甚至没有LaTeX
输入文件中编程的基础知识。如果有人能给我提供关于这个主题的入门指南,我将不胜感激。
当然,如果有人愿意指出我的错误,我也会非常感激。
PS。感谢@matth的评论。我认为这是一个很棒的评论,因为阅读它并根据该问题尝试我的输入文件后,我发现@PLK 似乎已经将解决方案(@JosephWright 或@lockstep 或另一个我不知道的解决方案)实现为 biblatex-apa 样式,而我之前从未意识到这一点。我之所以这样说,是因为在我的实验中,我向我的一个.bib
已经有 DOI 的条目添加了一个 URL,并发现对于在“url”和“doi”字段中都包含数据的此类条目,只有 doi 出现在我生成的参考列表中,而如果我从“doi”字段中删除 DOI,则 URL 会显示出来。非常好!!
但是,对于 APA 样式合规性,同样的解决方案应该(我认为,仅基于 Chelsea 的评论和我有限的理解)也应该以某种方式解决“出版商”和“位置”字段中数据的存在与否(其中一个?两个?)。因为我认为她在那篇博客评论中说过,符合 APA 样式的参考列表的每个源条目中应该只存在三个“源信息”中的一个((1) 出版商名称和位置,或 (2) 检索 URL,或 (3) DOI)。
但我发现,我的参考文献列表中同时出现了 (1) 出版商/位置和 (2) DOI 或 URL(无论哪个包含数据),这就是我首先提出这个问题的原因。在提出这个问题时,我从未想到处理至少部分问题的逻辑已经到位。感谢 @PLK 预见到了这个问题并已经实施了该部分的解决方案。
答案1
这也很容易做到。我假设doi
和url
字段胜过publisher
和location
字段,因此实现此目的的方法是仅在doi
和url
字段未定义时才打印这些字段。因此我们添加以下内容:
\renewbibmacro*{location+publisher}{%
\iffieldundef{doi}{
\iffieldundef{url}{
\printlist{location}%
\setunit*{\addcolon\space}%
\printlist{publisher}%
\newunit}{}}{}
}
我必须说,我发现 APA 的这个规则很奇怪:出版商和地点通常只印在书上,在我看来,出版商是一个重要的信息,与“来源”信息关系不大,而与提供有关来源可靠性的信息关系更大。如果一本书是由一家大型大学出版社出版的,那么这个事实比出版商是“Joe's Spiralbound Book Barn”更能说明问题。不知何故,仅仅有一个出版商并doi
不能解决这个问题。
这是一个示例文档,其中包含三个 bib 条目,其中包含不同数量的源信息。
\documentclass[endnotes]{apa6e}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=apa]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\title{A title}
\author{An Author}
\shorttitle{A title}
\authornote{}
\abstract{An abstract}
\begin{filecontents}{\jobname.bib}
@book{Chomsky1981,
Address = {Dordrecht},
Author = {Noam Chomsky},
Booktitle = {Lectures on Government and Binding},
Publisher = {Foris Publications},
Title = {Lectures on Government and Binding},
Url = {http://url.url.url},
Year = {1981}}
@book{Chomsky1986,
Address = {Cambridge, MA},
Author = {Chomsky, Noam},
Booktitle = {Barriers},
Doi = {http://doi.doi.doi},
Publisher = {{MIT} Press},
Title = {Barriers},
Url = {http://url.url.url},
Year = {1986}}
@book{Chomsky1982,
Address = {Cambridge, MA},
Author = {Noam Chomsky},
Booktitle = {Some Concepts and Consequences of the Theory of Government and Binding},
Publisher = {{MIT} Press},
Title = {Some Concepts and Consequences of the Theory of Government and Binding},
Year = {1982}}
\end{filecontents}
\addbibresource{\jobname.bib}
\renewbibmacro*{location+publisher}{%
\iffieldundef{doi}{
\iffieldundef{url}{
\printlist{location}%
\setunit*{\addcolon\space}%
\printlist{publisher}%
\newunit}{}}{}
}
\begin{document}
\begin{itemize}
\item An entry with Publisher and URL: \cite{chomsky1981}
\item An entry with only Publisher. \cite{chomsky1982}
\item An entry with Publisher, DOI and URL: \cite{chomsky1986}
\end{itemize}
\urlstyle{rm}
\printbibliography
\end{document}