我正在使用 biblatex,目前我的期刊标题似乎没有标准的大写结构。例如,我有一个 bib 文件,其中
@article{makarov2021barrier,
title={Barrier Crossing Dynamics from Single-Molecule Measurements},
author={Makarov, Dmitrii E},
journal={The Journal of Physical Chemistry B},
volume={125},
number={10},
pages={2467--2476},
year={2021},
publisher={ACS Publications}
}
@article{clegg1995fluorescence,
title={Fluorescence resonance energy transfer},
author={Clegg, Robert M},
journal={Current opinion in biotechnology},
volume={6},
number={1},
pages={103--110},
year={1995},
publisher={Elsevier}
}
@article{dill2012protein,
title={The protein-folding problem, 50 years on},
author={Dill, Ken A and MacCallum, Justin L},
journal={science},
volume={338},
number={6110},
pages={1042--1046},
year={2012},
publisher={American Association for the Advancement of Science}
}
给出了这个书目
D. E. Makarov. “Barrier Crossing Dynamics from Single-Molecule Measurements”. In: The Journal of Physical Chemistry B 125.10 (2021), pp. 2467–2476
R. M. Clegg. “Fluorescence resonance energy transfer”. In: Current opinion in biotechnology 6.1 (1995), pp. 103–110.
K. A. Dill and J. L. MacCallum. “The protein-folding problem, 50 years on”. In: science 338.6110 (2012), pp. 1042–1046
请注意,一个参考书目中有三种不同的大写格式(重要单词、第一个单词、无大写)!大写似乎直接取自 bib 文件,没有经过任何修改。
有没有办法统一 biblatex 中的期刊大写字母?我看到一些 stack exchange 帖子针对 bibtex 做了这件事,但目前还没有针对 biblatex 的帖子。理想情况下,我希望使用上面的“重要单词”约定,但我会接受至少统一的任何约定。
答案1
biblatex
(像 BibTeX)只有将字符串可靠地转换为句子大小写(第一个单词大写,其余小写)的函数。有将单词大写的函数,但没有内置函数来生成真正的标题大小写,其中某些类型的单词不应大写。
这意味着您应该在.bib
文件中的所有标题都采用标题大小写(“重要单词大写”),并允许/BibTeX 根据需要将标题转换为句子大小写。请注意,您仍然需要使用花括号(或在较新的版本biblatex
中使用)“保护”不能小写的部分(名称、缩写、数学等)。(另请参阅biblatex
\NoCaseChange{...}
在参考书目数据库中存储标题时,应使用什么大小写?,Bibtex 中“标题大小写”的实现,BibTeX 在创建 .bbl 文件时丢失大写字母)
您可能能够找到一些尝试biblatex
自动将标题转换为标题大小写的 LaTeX 代码(可能与兼容),但我认为我还没有看到值得信赖的解决方案。(有如何让 BibLaTeX-chicago 使用标题大小写?奥黛丽肯定知道biblatex
,但仍然......)
如果您不想手动浏览.bib
文件,您可能更有机会找到一些外部工具来规范化您的.bib
文件。
答案2
我在问题中应该强调的是,我更感兴趣的是统一我的参考书目,而不是将期刊标题设为标准标题大小写。由于真正的标题大小写似乎很难实现,所以我想出了一个替代方案:使用大写。我认为,如果所有字母都大写,就没有人会抱怨大写错误的字母。
为了强制所有日记条目、书名和出版商大写,我在序言中添加了这段代码:
\DeclareFieldFormat{uppercase}{\MakeUppercase{#1}}
\DeclareListFormat{uppercase}{\MakeUppercase{#1}}
\renewbibmacro*{journal}{%
\ifboolexpr{
test {\iffieldundef{journaltitle}}
and
test {\iffieldundef{journalsubtitle}}
}
{}
{\printtext[journaltitle]{%
\printfield[uppercase]{journaltitle}%
\setunit{\subtitlepunct}%
\printfield[uppercase]{journalsubtitle}}}}
\renewbibmacro*{booktitle}{%
\ifboolexpr{
test {\iffieldundef{booktitle}}
}
{}
{\printtext[booktitle]{%
\printfield[uppercase]{booktitle}}}}
\renewbibmacro*{publisher+location+date}{%
\printlist[uppercase]{publisher}%
\iflistundef{location}
{\setunit*{\addcomma\space}}
{\setunit*{\addcolon\space}}%
\printlist{location}%
\setunit*{\addcomma\space}%
\usebibmacro{date}%
\newunit}
\addbibresource{main.bib}
新的参考书目如下:
Ken A Dill and Justin L MacCallum. “The protein-folding problem, 50 years on”. In: SCIENCE 338.6110 (2012), pp. 1042–1046
Robert M Clegg. “Fluorescence resonance energy transfer”. In: CURRENT OPINION IN BIOTECHNOLOGY 6.1 (1995), pp. 103–110
Dmitrii E Makarov. “Barrier Crossing Dynamics from Single-Molecule Measurements”. In: THE JOURNAL OF PHYSICAL CHEMISTRY B 125.10 (2021), pp. 2467–2476
它可能不是最漂亮的,但至少它是统一的,而且我不必重写我的.bib 文件。
LaTeX 代码的灵感来自于我在github如果我有更多时间,我认为这个解决方案可能会扩展为创建一个真正的自动标题大小写算法,但在此之前我认为大写对我来说已经足够好了。