我希望在使用biblatex
withbiber
作为后端时,文章引用的期刊和卷号之间始终有一个逗号。不幸的是,期刊和卷之间的标点符号不一致。最后一个单词缩写的期刊在期刊和卷之间没有逗号,单词“Vol.”大写。最后一个单词未缩写的期刊有逗号,单词“vol.”不大写。我可以通过取消注释下面 MWE 中注释的行来修复大写问题,但逗号问题相当令人困惑。如果这个修复程序在某个答案中,我很抱歉,但我找不到它(或者至少,我不知道要搜索什么!)。
目前输出:
[1] 第一作者。“Blah Blah 2”。在:Am. J. Phys.第 72 卷,第 3 期(2004 年 3 月),第 367-375 页。
[2] 第二作者。“Blah blah”。在:能源燃料,第 27 卷,第 12 期(2013 年 12 月),第 7778-7789 页。
预期输出:
[1] 第一作者。“Blah Blah 2”。在:Am. J. Phys., 第 72 卷,第 3 期(2004 年 3 月),第 367-375 页。
[2] 第二作者。“Blah blah”。在:能源燃料,第 27 卷,第 12 期(2013 年 12 月),第 7778-7789 页。
梅威瑟:
\documentclass{article}
\usepackage{filecontents}
\usepackage[
backend=biber,
citestyle=numeric-comp,
]{biblatex}
\addbibresource{\jobname}
% \DefineBibliographyStrings{english}{%
% volume = {\lowercase{v}ol\adddot}, % avoid capitalization after dots.
% }
\DeclareFieldFormat[article]{volume}{\bibstring{volume}\addspace #1}
\DeclareFieldFormat[article]{number}{\bibstring{number}\addspace #1}
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%<---- was \setunit*{\adddot}%
\printfield{number}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\setunit*{\addcomma\addspace}%<---- was \setunit*{\addspace}%
\iffieldundef{series}
{}
{\newunit
\printfield{series}%
\setunit{\addspace}}%
\usebibmacro{volume+number+eid}%
\setunit{\addspace}%
\usebibmacro{issue+date}%
\setunit{\addcolon\space}%
\usebibmacro{issue}%
\newunit}
\begin{filecontents*}{\jobname.bib}
@article{York2004,
author = {Author, First},
journal = {Am. J. Phys.},
month = mar,
number = {3},
pages = {367--375},
title = {{Blah Blah 2}},
volume = {72},
year = {2004}
}
@article{Baumgardner2013a,
author = {Author, Second},
journal = {Energy Fuel},
month = dec,
number = {12},
pages = {7778--7789},
title = {{Blah blah}},
volume = {27},
year = {2013}
}
\end{filecontents*}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案1
问题在于biblatex
将缩写点journal = {Am. J. Phys.}
视为文字句号(句子的结尾)。
我们可以biblatex
通过使用以下方法来停止这样做\isdot
\DeclareFieldFormat{journaltitle}{\mkbibemph{#1\isdot}}
根据biblatex
文档§4.7.3添加标点符号,第 191 页:
\isdot
将先前插入的文字句点转换为缩写点。与 不同\adddot
,如果此命令前面没有句点,则不会插入任何内容。
此解决方案将把journal
字段中所有尾随的句点视为缩写点。
如果您只希望在特定情况下这样做,您可以考虑手动添加\isdot
到journal
字段(journal = {Am. J. Phys.\isdot}
或journal = {Am\adddotspace J\adddotspace Phys\adddot}
使用针对这些事项提供的命令主机写入biblatex
)。但不建议这样做,因为它会使.bib
文件的可移植性降低。
平均能量损失
\documentclass{article}
\usepackage{filecontents}
\usepackage[
backend=biber,
citestyle=numeric-comp,
]{biblatex}
\addbibresource{\jobname.bib}
\DeclareFieldFormat{journaltitle}{\mkbibemph{#1}\isdot}
\DeclareFieldFormat[article]{volume}{\bibstring{volume}\addspace #1}
\DeclareFieldFormat[article]{number}{\bibstring{number}\addspace #1}
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%<---- was \setunit*{\adddot}%
\printfield{number}%
\setunit{\addcomma\space}%
\printfield{eid}}
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\setunit*{\addcomma\addspace}%<---- was \setunit*{\addspace}%
\iffieldundef{series}
{}
{\newunit
\printfield{series}%
\setunit{\addspace}}%
\usebibmacro{volume+number+eid}%
\setunit{\addspace}%
\usebibmacro{issue+date}%
\setunit{\addcolon\space}%
\usebibmacro{issue}%
\newunit}
\begin{filecontents*}{\jobname.bib}
@article{York2004,
author = {Author, First},
journal = {Am. J. Phys.},
month = mar,
number = {3},
pages = {367--375},
title = {{Blah Blah 2}},
volume = {72},
year = {2004}
}
@article{Baumgardner2013a,
author = {Author, Second},
journal = {Energy Fuel},
month = dec,
number = {12},
pages = {7778--7789},
title = {{Blah blah}},
volume = {27},
year = {2013}
}
\end{filecontents*}
\begin{document}
\nocite{*}
\printbibliography
\end{document}