这个问题引出了包中的一个新功能:
biblatex
罗伯特·布林赫斯特,印刷风格的要素,规则 2.1.5 规定“在首字母字符串内添加很少的空格或不添加空格。“
如果启用了biblatex
的firstinits
选项,“所有名字和中间名都将呈现为首字母”(手册第 54 页)。但是,这会~
在首字母之间产生连线( ),即不可断开的单词间空格。(请参阅.bbl
我编译的示例的 -file。)我如何用细空格(\,
)替换这些连线,从而遵循 Bringhurst?
\documentclass{article}
\usepackage[firstinits=true]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{Knu86,
author = {Knuth, Donald E.},
year = {1986},
title = {The \TeX book},
}
\end{filecontents}
\bibliography{\jobname}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案1
[更新至 biber 0.9+,2011 年 4 月]
您可以使用以下方式自定义\bibinitdelim
:
\renewrobustcmd*{\bibinitdelim}{\,}
请参阅 biblatex 手册第 3.12.4 节以获取所有名称间距宏的列表。
旧答案:
只是更新一下 - biber 0.8.3/biblatex 1.3 刚刚发布,他们解决了这个问题。Biber 不再对名称中的任何排版进行硬编码---它只使用可以从 biblatex 更改的宏。请参阅新 biblatex 手册的第 3.11.4 节。
[删除了误导性的 biber 0.8.2 评论,这些评论现已过时]
实际上,如果再更连贯地思考一下,我们很快要做的就是在 biblatex 中将其设为一个宏,这样您就可以在 biblatex 中重新定义任何首字母分隔符。可能在 1.3/0.8.3 中
答案2
对于不成立的情况,此解决方案并不完全通用firstinits
,但是它确实可以满足您的要求:
\documentclass{article}
\RequirePackage[firstinits=true]{biblatex}
\bibliography{xampl}
\renewcommand*{\mkbibnamefirst}[1]{{\let~\,#1}}
\makeatother
\begin{document}
\nocite{whole-collection}
\printbibliography
\end{document}
此代码使用 的biblatex
钩子来打印“名字”(在本例中为首字母),并替代~
。\,
(我不确定是否需要嵌套的括号,但小心一点也无妨。)
当firstinits
不生效时,这会导致某人的名字和首字母之间出现很窄的空格,这可能不是理想的情况。因此,您可能希望将上述定义限定为
\renewcommand*{\mkbibnamefirst}[1]{{\iffirstinits{\let~\,}{}#1}}
答案3
biblatex.bst
首字母之间的分隔符是少数在文件中定义而不是在 LaTeX 级别定义的元素之一。如果你看一个biblatex
样式文件,您会发现biblatex
内核提供了全名和首字母缩写。追溯一下,这些来自 BibTeX 的format.name$
功能。我怀疑定制此功能的唯一方法(目前)是破解该过程以对首字母缩写进行搜索和替换。当然,更长期的解决方案是提出功能请求。
为了解释其firstinits
工作原理,它是一个开关,您可以在biblatex
样式中使用它来选择内核提供给样式的全名或首字母biblatex
。因此,当样式获取数据时,首字母本身的格式化已经完成。