相關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*
於某些(但不是全部)條目類型的標題。@article
他們的標題是句子大小寫的,但@book
沒有,這解釋了評論中的觀察結果。
\MakeSentenceCase
是一個非常複雜且脆弱的宏,因為在 LaTeX 中字串操作有些棘手。特別是\MakeSentenceCase
執行大量擴展並嘗試一次遍歷字串一個字元。
標準 LaTeX 定義\,
為一個健壯的宏,但amsmath
定義
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
這意味著\,
可以擴展(一次)並且不健壯(它的擴展是健壯的)。這種擴充會導致機器出現一些問題,\MakeSentenceCase
並產生您看到的錯誤。
有多種方法可以解決此問題。
再次變得
\,
堅固。問題\renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
加載後
amsmath
。 (請注意,在 MWE 中,\renewrobustcmd
needs是由 載入的,因此這一行應該在載入 和 後出現。)etoolbox
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}