在 biblatex 中,将日记中的句号视为缩写点

在 biblatex 中,将日记中的句号视为缩写点

我希望在使用biblatexwithbiber作为后端时,文章引用的期刊和卷号之间始终有一个逗号。不幸的是,期刊和卷之间的标点符号不一致。最后一个单词缩写的期刊在期刊和卷之间没有逗号,单词“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字段中所有尾随的句点视为缩写点。

如果您只希望在特定情况下这样做,您可以考虑手动添加\isdotjournal字段(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}

在此处输入图片描述

相关内容