関連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
非常に多くの展開を実行し、文字列を 1 文字ずつ反復処理しようとします。
標準のLaTeXでは\,
堅牢なマクロとして定義されていamsmath
ますが、
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
これは、 が\,
(1 回)拡張可能であり、堅牢ではない(拡張は堅牢である)ことを意味します。この拡張により、 の機構にいくつかの問題が発生し\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}