相关GitHub plk / biblatex 问题 #910。
\documentclass{article}
\usepackage{amsmath}
\usepackage[style=ieee]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Article{A,
title = {A\,b c},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Text~\cite{A}.
\printbibliography
\end{document}
除了不正确的输出之外,使用 MiKTeX 进行编译还会以错误结束:Missing number, treated as zero. \end
,Illegal unit of measure (pt inserted). \end
。
有人可以提供一个想法,如何允许\,
在像上面的例子这样的文档的书目标题中使用细空格()吗?
答案1
biblate-ieee
适用\MakeSentenceCase*
于某些(但不是全部)条目类型的标题。s@article
的标题句子大小写,但@book
s 没有,这解释了评论中的观察结果。
\MakeSentenceCase
是一个非常复杂且脆弱的宏,因为在 LaTeX 中字符串操作有些棘手。特别是\MakeSentenceCase
执行大量扩展并尝试一次一个字符地遍历字符串。
标准 LaTeX 定义\,
为一个强大的宏,但amsmath
定义
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
这意味着\,
可以扩展(一次)并且不稳健(其扩展是稳健的)。此扩展会导致机械方面出现一些问题,\MakeSentenceCase
并产生您看到的错误。
有多种方法可以解决这个问题。
使其
\,
再次变得强大。问题\renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
加载后
amsmath
。(请注意,\renewrobustcmd
需要etoolbox
,在 MWE 中由 加载biblatex
,因此此行应在加载amsmath
和之后biblatex
。)\protect
\,
文件中的这个.bib
(正如建议的那样米科 在评论中)@article{A, title = {A\protect\,b c}, }
使用仍然受保护的其他命令(如建议的那样大卫·普顿 在评论中),例如
biblatex
的\,
等价物\addnbthinspace
。@article{A, title = {A\addnbthinspace b c}, }
\MakeSentenceCase
您可以随时用花括号“隐藏”字符串的各部分。@article{A, title = {A{\,}b c}, }
有效,但我不确定是否推荐它。
这里有一个 MWE,用于测试无需的解决方案biblatex-ieee
。
\documentclass{article}
\usepackage{amsmath}
\usepackage[style=numeric]{biblatex}
\DeclareFieldFormat{titlecase}{\MakeSentenceCase*{#1}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{A,
title = {A\,b c},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Text~\cite{A}.
\printbibliography
\end{document}