避免 biblatex 中特定本地化字符串大写的正确方法

避免 biblatex 中特定本地化字符串大写的正确方法

我的 bib 文件中有此条目,这是一本书,但缺少位置、出版商和年份信息。我的格式如下:

@Book{ARBED1965,
  author       = {{Aciéries Réunies de Burbach-Eich-Dudelange}},
  shortauthor  = {{ARBED}},
  title        = {Un demi-siècle d'histoire industrielle 1911--1964},
  date         = {1965~},
  date+an      = {=attributed},
}

我确实使用了 biblatex 提供的“大约”日期以及相应的datecirca选项。但这导致我的参考书目中出现了一个不想要的大写“Ca。”。

布尔巴赫-艾希-迪德朗日的法国化工企业。 1911 年至 1964 年的半个世纪工业史。大约1965 年。

在 bibdriver 上下文中缺少出版商和位置信息的情况下,很容易理解为什么会发生这种情况book。我们还可以争论@book在这种情况下是否是正确的条目类型。我们还可以争论在这种情况下“circa”是否应该大写(我碰巧不喜欢它)。不过我想解决一个简单的技术方面,即:在任何情况下,避免特定本地化字符串自动大写的正确方法是什么?

我唯一能想到的就是\midsentence,例如:

\DefineBibliographyStrings{english}{%
  circa            = {\midsentence{}ca\adddot},
}

这真的是该案的最佳替代方案吗?

一位 MWE 表示:

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{ARBED1965,
  author       = {{Aciéries Réunies de Burbach-Eich-Dudelange}},
  shortauthor  = {{ARBED}},
  title        = {Un demi-siècle d'histoire industrielle 1911--1964},
  date         = {1965~},
  date+an      = {=attributed},
}
\end{filecontents}

\usepackage[style=authortitle, datecirca=true]{biblatex}
\addbibresource{\jobname.bib}

\DeclareFieldFormat{date}{%
  \ifdateannotation{date}{attributed}{\mkbibbrackets{#1}}{#1}}

\DefineBibliographyStrings{english}{%
  circa            = {\midsentence{}ca\adddot},
}

\begin{document}

\nocite{*}
\printbibliography

\end{document}

答案1

biblatex从参考书目字符串中抓取第一个“字符”,并在必要时将其大写。在此示例中,biblatex处于句首模式(因为标题后面有句号),因此它将尝试将其大写circa

避免特定字符串大写的标准技巧是在开头添加一个空组

\DefineBibliographyStrings{english}{%
  circa = {{}ca\adddot},
}

german.lbx例如,可以在(370 升

 nodate = {{ohne\space Datum}{{}o\adddot D\adddot}},

实际上,所有不产生输出并能被biblatex的大写处理程序抓取的东西都可以工作,所以你也可以尝试

circa = {\relax ca\adddot},

或(根据您的建议)

circa = {\midsentence ca\adddot},

具体来说\midsentence,它本身并没有什么用,因为在读取字符串时,已经做出了是否大写的决定。因此,它\midsentence没有帮助,因为它改变了大写跟踪器的状态,它只是因为它被大写宏所吞噬。这可以通过测试来确认

circa = {\bibsentence ca\adddot},

或者,您可以添加\midsentencedate格式中,这将产生影响

\DeclareFieldFormat{date}{%
  \midsentence
  \ifdateannotation{date}{attributed}{\mkbibbrackets{#1}}{#1}}

相关内容