论文集使用句号代替逗号 biblatex

论文集使用句号代替逗号 biblatex

会议纪要中年份前的标点符号是句号。

文章中年份前的标点符号是逗号。

是否有一些参数/参数可以传递给 biblatex/biber 以使这个标点符号统一?

一个 MWE 示例,带有一些轻微的格式选择。

\documentclass{article}
\usepackage[backend=biber]{biblatex}
\bibliography{mwepubs.bib}
% Removes months from citations
\AtEveryBibitem{\clearfield{month}}
\AtEveryCitekey{\clearfield{month}}

% Removes the ``In'' before journals/venues
\renewbibmacro{in:}{}

% Remove parentheses from years in articles
\renewbibmacro*{issue+date}{%
  \setunit{\addcomma\space}% NEW
    \iffieldundef{issue}
      {\usebibmacro{date}}
      {\printfield{issue}%
       \setunit*{\addspace}%
       \usebibmacro{date}}% NEW
  \newunit}

\begin{filecontents}{mwepubs.bib}
@article{Art1,
  title = {Article Title One},
  author = {Author One and Author Two},
  journal = {Best Journal},
  url = {http://www.google.com},
  year = {2021},
}
@inproceedings{Proc1,
  author       = {Again One and Again Two},
  title        = {Proceedings Title},
  booktitle    = {Venue where},
  pages        = {1--71},
  year         = {2018},
  doi          = {10.10000/1000},
}
\end{filecontents}

\begin{document}
\fullcite{Art1}
\fullcite{Proc1}
\end{document}

输出结果如下:

混合句号和逗号的图像

请注意,一年之前的逗号和另一年之前的句号。

答案1

标点符号biblatex通常由标点符号缓冲区异步处理。样式代码将标点符号添加到缓冲区(覆盖其先前的状态),并在下次打印biblatex字段时打印并清空缓冲区。这可以避免biblatex重复标点符号和标点符号冲突。它还为我们提供了一种相当直接的方法来强制在某个字段之前使用标点符号。控制字段后的标点符号比较棘手。对于那些想了解更多关于标点符号缓冲区的人,我会留下一个链接\setunit 和 \newunit 起什么作用?\setunit*{<punct>} 和 \setunit{\add<punct>} 之间有什么区别。第二篇文章链接到该网站上关于标点符号缓冲区的更多讨论。

标准biblatex驱动程序主要用于\newunitpunct字段之间的标点符号(此命令可由用户重新定义,默认情况下是句点加空格)。但是,有几个例外,例如,我们nametitledelim在作者/编辑(和authoryear类似样式中的年份)和标题之间以及在字段\bibpagespunct之前获取标点符号。这使用户更容易进行自定义,因为他们只需重新定义这些分隔符或命令即可。我们还在+ +块pages中获取各种(硬编码)标点符号。这些更难定制:用户需要直接重新定义所涉及的 bibmacros。publisherlocationdate

标准样式还在 和journal+issuetitlebibmacros中硬编码了不同的标点符号volume+number+eid,这些标点符号用于为 s 排版大多数期刊信息@article。特别是,出版年份排版在括号中,因此如果volume存在 ,则通常在其前面加一个空格(我猜是因为年份被视为从属于该volume字段)。相关的 bibmacros 如下所示(参见standard.bbxv3.19 中的第 784-804 行

\newbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addspace}%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addspace}}%
  \usebibmacro{volume+number+eid}%
  \setunit{\addspace}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}

\newbibmacro*{volume+number+eid}{%
  \printfield{volume}%
  \setunit*{\adddot}%
  \printfield{number}%
  \setunit{\bibeidpunct}%
  \printfield{eid}}

在标准样式中,没有简单的开关可以使这些标点符号相同。您必须重新定义这些 bibmacros。以下方法可能有效(我们只需将\setunit{\addspace}之前的替换\usebibmacro{issue+date}为)。journal+issuetitle\setunit{\addperiod\space}

\documentclass{article}
\usepackage[backend=biber]{biblatex}

\DeclareFieldInputHandler{month}{\def\NewValue{}}

\renewbibmacro{in:}{}

\renewbibmacro*{journal+issuetitle}{%
  \usebibmacro{journal}%
  \setunit*{\addspace}%
  \iffieldundef{series}
    {}
    {\newunit
     \printfield{series}%
     \setunit{\addspace}}%
  \usebibmacro{volume+number+eid}%
  \setunit{\addperiod\space}%
  \usebibmacro{issue+date}%
  \setunit{\addcolon\space}%
  \usebibmacro{issue}%
  \newunit}

\renewbibmacro*{issue+date}{%
  \printfield{issue}%
  \setunit*{\addspace}%
  \usebibmacro{date}%
  \newunit}

\begin{filecontents}{\jobname.bib}
@article{Art1,
  title   = {Article Title One},
  author  = {Author One and Author Two},
  journal = {Best Journal},
  url     = {http://www.google.com},
  year    = {2021},
}
@inproceedings{Proc1,
  author       = {Again One and Again Two},
  title        = {Proceedings Title},
  booktitle    = {Venue where},
  pages        = {1--71},
  year         = {2018},
  doi          = {10.10000/1000},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\fullcite{Art1}

\fullcite{Proc1}
\end{document}

作者一和作者二。“文章标题一”。最佳期刊。2021 年。网址:http://www.google.com 再次一和再次二。“会议论文集标题”。地点。2018 年,第 1-71 页。doi:10.10000/1000

相关内容