这是我的一个消息来源
@misc{Madlena11,
Author={Chavala Madlena},
Publisher={Guardian},
Title = {Telecomix: tech support for the Arab spring},
url = {http://www.guardian.co.uk/technology/2011/jul/07/telecomix-arab-spring}
}
但是,有时我有一个没有Author
这样的来源:
@misc{RT12,
%Author={},
Publisher={RT TV Network},
Title = {Anti-ACTA day: Angry crowds take action},
url = {http://rt.com/news/acta-protests-rallies-europe-089/}
}
我的问题是,当Author
没有列出时,它不会按发布者排序Publisher
,甚至不会在参考资料中显示发布者,也不会显示 URL。我该如何解决这个问题?
答案1
使用key
字段:
@misc{RT12,
key={some string reflecting how you wish the entry alphabetized},
Publisher={RT TV Network},
Title = {Anti-ACTA day: Angry crowds take action},
url = {http://rt.com/news/acta-protests-rallies-europe-089/}
}
假设您希望将条目排序为“RT TV Network”,则使用
key={RT TV Network}
仅当参考书目样式知道该字段时才使用该url
字段。例如,
\usepackage[numeric]{natbib}
\bibliographystyle{plainnat}
然后显示 URL。并将key
使用 的内容代替作者。
例子
\begin{filecontents*}{\jobname.bib}
@misc{Madlena11,
Author={Chavala Madlena},
Publisher={Guardian},
Title = {Telecomix: tech support for the {Arab} spring},
url = {http://www.guardian.co.uk/technology/2011/jul/07/telecomix-arab-spring}
}
@misc{RT12,
key={aaaa},
Publisher={RT TV Network},
Title = {{Anti}-{ACTA} day: {Angry} crowds take action},
url = {http://rt.com/news/acta-protests-rallies-europe-089/}
}
\end{filecontents*}
\documentclass{article}
\usepackage[numbers]{natbib}
\usepackage{url}
\begin{document}
\cite{Madlena11}, \cite{RT12}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}
只是filecontents*
为了将.bib
文件放在源内。还请注意括号以强制大写。
答案2
另一个选择(特别是如果你不喜欢key
在条目开头显示该字段(或者根本不喜欢)或者必须自定义每个书目条目以使用key
而不是publisher
)是自定义 BST 文件。由于你提供的代码已经natbib
使用plainnat
,你可以在你的 TeX 存储库中找到plainnat.bst
并将具有不同名称(如plainnat-copy.bst
)的本地副本放入你的工作目录中。修改 的本地副本有四个步骤plainnat-copy.bst
:首先,更新misc
函数以考虑你使用publisher
而不是howpublished
。其次,更新函数以在没有作者时presort
按 排序。第三,编写如何按 排序的规则。第四,让你的 TeX 文件使用你新定制的 BST 文件。publisher
publisher
注意:我使用的是 2007 版本plainnat.bst
,这是截至 2022 年发布时的最新版本。
- 在 的本地副本中
plainnat-copy.bst
,搜索该misc
函数并将 的所有实例替换howpublished
为publisher
。我在此处展示新版本:
FUNCTION {misc}
{ output.bibitem
format.authors output
author format.key output
title publisher new.block.checkb
format.title output
publisher new.block.checka
publisher output
format.date output
format.issn output
format.url output
new.block
note output
fin.entry
empty.misc.check
}
- 搜索
presort
函数(以 开头FUNCTION {presort}
)。在这里工作时,请注意 BST 文件中的语言实现了后缀表示法。我们将只关注函数中间的这一部分:
{ type$ "manual" =
'author.organization.sort
'author.sort
if$
}
也许你会意识到,这是一组嵌套的如果语句将不同的排序规则应用于不同的书目条目类型,并且尚未有该misc
类型的分支。默认情况下,当算法到达最内层时如果,测试type$ "manual" =
返回 false(因为您的输入是misc
而不是manual
),因此算法会跳过下一个(第一个)选项并将author.sort
规则应用于所有misc
条目。我们将修改第二个选项,以在这些嵌套的如果语句来建立特定于条目的分支misc
。
{ type$ "manual" =
'author.organization.sort
{ type$ "misc" =
author empty$
and
'publisher.sort
'author.sort
if$
}
if$
}
对于锚定,请注意,原始版本和此修改版本中的前两行和后两行是相同的;我只用类型的新代码替换了中间一行misc
。新逻辑如下:如果条目不是类型manual
,则算法继续执行第二行,这是嵌套的下一个更深层如果语句。然后,它测试类型是否是misc
且没有作者;如果这两个条件都是真,那么它将应用规则publisher.sort
(我们将在下面的步骤 3 中编写);否则它将应用规则author.sort
,以便所有其他条目不受此更改的影响。
- 对于
publisher.sort
函数,将以下代码粘贴到您刚刚修改的函数的plainnat-copy.bst
上方,presort
以便该publisher.sort
函数位于editor.organization.sort
和presort
函数之间:
FUNCTION {publisher.sort}
{ publisher empty$
{ key empty$
{ "to sort, need author, publisher, or key in " cite$ * warning$
""
}
{ key sortify }
if$
}
{ "The " #4 publisher chop.word sortify }
if$
}
- 在您的 TeX 文件中,您需要更改此行以说明您新定制的文件:
\bibliographystyle{plainnat-copy}
。这是 MWE:
\begin{filecontents*}{\jobname.bib}
@misc{Madlena11,
Author={Chavala Madlena},
Publisher={Guardian},
Title = {Telecomix: tech support for the {Arab} spring},
url = {http://www.guardian.co.uk/technology/2011/jul/07/telecomix-arab-spring}
}
@misc{RT12,
Publisher={RT TV Network},
Title = {{Anti}-{ACTA} day: {Angry} crowds take action},
url = {http://rt.com/news/acta-protests-rallies-europe-089/}
}
\end{filecontents*}
\documentclass{article}
\usepackage[numbers]{natbib}
\usepackage{url}
\begin{document}
\cite{Madlena11}, \cite{RT12}
\bibliographystyle{plainnat-copy}
\bibliography{\jobname}
\end{document}