我使用 biblatex 进行书目管理,以 Biber 作为后端style=mla-new
。我的 *.bib 中有以下书目条目:
@inbook{theodyssey,
title = "The Odyssey",
author = "Homer",
translator = "Stanley Lombardo",
booktitle = "The Norton Anthology of Western Literature",
edition = "9",
pages = "291-581",
publisher = {W. W. Norton \& Company},
year = "2014"
}
几乎所有内容都打印正确。但是,书目条目如下所示:
Homer, "The Odyssey", The Norton Anthology of Western Literature, translated by
Stanley Lombard, 9th ed., W. W. Norton &, 2014, pp. 291-581
请注意 WW Norton & Company 中的“公司”一词被删除了。我不知道该如何解决这个问题,甚至不知道为什么会发生这种情况。
答案1
该风格mla-new
包括以下步骤StyleSourcemap
:
\step[fieldsource=publisher, match=\regexp{Company|Co\.|Corporation|Corp\.|Incorporated|Inc\.|Limited|Ltd\.}, replace={}]
这会从字段中删除所有这些术语publisher
。由于这是通过 sourcemap 完成的,因此很难覆盖它,因为它会影响数据本身。
但这一定意味着,这是 MLA 风格第 8 版的要求的一部分,由 实施mla-new
。
该样式mla
不包含这样的源映射步骤,如果这对您来说是一种替代方案,并且您不想遵守该样式的最新版本的这个特性,则可以使用它。
但是,biblatex-mla
文档中提到了以下内容:
本次测试更新是为了测试与 2016 年 4 月出版的 MLA 手册第 8 版的兼容性。当前版本同时支持旧版(在
style=mla
序言中使用)和新版(使用style=mla-new
);即将推出的 biblatex-mla 版本将不再支持第 7 版,而支持第 8 版。
另一种方法mla-new
是用宏替换单词来欺骗源图,如下所示:
\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=mla-new]{biblatex}
\usepackage{filecontents}
\newcommand*{\Co}{Company}
% filecontents is used here for convenience, in your actual document, the entry would be in your regular .bib file
\begin{filecontents}{\jobname.bib}
@inbook{theodyssey,
title = "The Odyssey",
author = "Homer",
translator = "Stanley Lombardo",
booktitle = "The Norton Anthology of Western Literature",
edition = "9",
pages = "291-581",
publisher = {W. W. Norton \& \Co},
year = "2014"
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
更新:我找到了一种覆盖源映射步骤的方法,使用应用不同类型的源映射的顺序。 (user)\DeclareSourcemap
首先运行,因此我们可以使用它来将原始数据从 复制publisher
到字段listf
。\DeclareStyleSourcemap
其次是它们。 幸运的是,它们可以多次使用,并按定义顺序应用。 由于原始的是用 style 定义的(即,使用对 的调用biblatex
),我们可以稍后定义第二个,将数据从 复制listf
回publisher
。
\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=mla-new]{biblatex}
\usepackage{filecontents}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=publisher, fieldset=listf, origfieldval]
}
}
}
\DeclareStyleSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=listf, fieldset=publisher, origfieldval]
}
}
}
% filecontents is used here for convenience, in your actual document, the entry would be in your regular .bib file
\begin{filecontents}{\jobname.bib}
@inbook{theodyssey,
title = "The Odyssey",
author = "Homer",
translator = "Stanley Lombardo",
booktitle = "The Norton Anthology of Western Literature",
edition = "9",
pages = "291-581",
publisher = {W. W. Norton \& Company},
year = "2014"
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}