amsmath がロードされていると参考文献の薄いスペースが機能しない (biblatex + IEEE スタイル)

amsmath がロードされていると参考文献の薄いスペースが機能しない (biblatex + IEEE スタイル)

関連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. \endIllegal unit of measure (pt inserted). \end

\,上記の例のような文書の書誌タイトルで細いスペース ( ) を使用できるようにするにはどうすればよいか、誰かアイデアを提供してもらえますか?

答え1

biblate-ieee\MakeSentenceCase*一部の (ただしすべてではない) エントリ タイプのタイトルに適用されます。@articleのタイトルは文頭大文字に変換されますが、 は@book変換されません。これが、コメントの観察結果を説明しています。

\MakeSentenceCaseは、LaTeX での文字列操作がやや難しいため、非常に複雑で壊れやすいマクロです。特に、\MakeSentenceCase非常に多くの展開を実行し、文字列を 1 文字ずつ反復処理しようとします。

標準のLaTeXでは\,堅牢なマクロとして定義されていamsmathますが、

\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}

これは、 が\,(1 回)拡張可能であり、堅牢ではない(拡張は堅牢である)ことを意味します。この拡張により、 の機構にいくつかの問題が発生し\MakeSentenceCase、表示されているエラーが生成されます。

この問題を回避する方法はいくつかあります。

  1. 再び堅牢にする\,。問題

    \renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
    

    をロードした後amsmath。( には が\renewrobustcmd必要ですetoolboxが、これは MWE では によってロードされるbiblatexため、この行はamsmathと の両方をロードした後に置く必要がありますbiblatex。)

  2. \protectこれをファイル\,内に.bib記述します(ミコ コメント欄

    @article{A,
      title = {A\protect\,b c},
    }
    
  3. 保護されたままの別のコマンドを使用する(デビッド・パートン コメント欄) は、たとえばbiblatex\,同等です\addnbthinspace

    @article{A,
      title = {A\addnbthinspace b c},
    }
    
  4. \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}

関連情報