biblatex - 如何在句号后强制出现冒号?

biblatex - 如何在句号后强制出现冒号?

我想在句号后打印一个冒号,即人力资源(德文版编辑)。如何实现在字符串后面添加冒号{editors}

图片

在此处输入图片描述

平均能量损失

\documentclass[
a4paper,
12pt,
ngerman
]{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}

\usepackage[
language=german,
style=authoryear-ibid,
backend=biber,
hyperref=true,
dashed=false,
isbn=false,
doi=false,
maxcitenames=2,
maxbibnames=99,
sorting=nyt,
firstinits=true,
uniquename=init,
uniquelist=false,
autocite=footnote,
ibidtracker=true,
date=comp,
mincrossrefs=1,
]{biblatex}
\usepackage{xpatch}

\DefineBibliographyStrings{german}{%
    byeditor = {Hrsg.},%
    byeditor = {Hrsg.},%
    andothers={et \addabbrvspace al\adddot},
}
\renewbibmacro*{byeditor+others}{%
    \ifnameundef{editor}
    {}
    {\usebibmacro{byeditor+othersstrg}%
        \setunit{\addcolon\addspace}%
        \printnames[byeditor]{editor}%
        \newunit%
        \clearname{editor}%
        \newunit}
    \usebibmacro{byeditorx}%
    \usebibmacro{bytranslator+others}}

\begin{filecontents}{\jobname.bib}
@incollection{abc,
Title                    = {Stuff},
Author                   = {Lamp, Jones},
Date                     = {2011},
Crossref ={ddd}
}
@collection{ddd,
    Title= {Words},
    Editor={Smith, John and Doe, Jane},
    Date={2012},
    Location={Towntown}
}
\end{filecontents}

\addbibresource{\jobname.bib}
\nocite{*}

\listfiles

\begin{document}
Words.

\printbibliography
\end{document}

答案1

这种行为是由于biblatex的标点符号跟踪器造成的。biblatex它会尽其所能地避免使用“.,”或“:。”等双重标点符号。

“.”字符可以有不同的“含义”,它可以是(1)句号表示句子的结束,或者(2)它可以是缩写点表示缩写。默认情况下,biblatex的标点符号跟踪器会将遇到的任何“。”视为句号(即句子结尾)。显然,句号后面直接出现冒号是不可取的。

但是在这里,“Hrsg.”中的“.”是一个缩写点,因此(与句号不同)并不特别反对后面跟冒号或逗号。

因此,我们需要做的就是确保“ biblatexHrsg.”中的“.”是一个点。这可以通过以下\isdot命令完成(请参阅biblatex文档§4.7.3添加标点符号,第 199 页)

\isdot将先前插入的文字句点转换为缩写点。与 不同\adddot,如果此命令前面没有句点,则不会插入任何内容。

那就这样吧byeditor = {Hrsg.\isdot}

然而,在这种特殊情况下(特别是在定义 bibstring 时),\adddot更为合适(参见前面提到的章节的第 198 页)。文档

\adddot添加句号,除非句号前面没有任何标点符号。此命令的目的是在缩写后插入点。以这种方式插入的任何点都会被其他标点命令识别为点。此命令还可用于将先前插入的文字句号转换为缩写点。

所以我们只需写

byeditor = {Hrsg\adddot}

相关内容