參考書目中的稀疏空間無法與載入的 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. \end, Illegal unit of measure (pt inserted). \end

有人可以提供一個想法,如何允許\,在文件的書目標題中使用細空格(),如上面的範例?

答案1

biblate-ieee適用\MakeSentenceCase*於某些(但不是全部)條目類型的標題。@article他們的標題是句子大小寫的,但@book沒有,這解釋了評論中的觀察結果。

\MakeSentenceCase是一個非常複雜且脆弱的宏,因為在 LaTeX 中字串操作有些棘手。特別是\MakeSentenceCase執行大量擴展並嘗試一次遍歷字串一個字元。

標準 LaTeX 定義\,為一個健壯的宏,但amsmath定義

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

這意味著\,可以擴展(一次)並且不健壯(它的擴展是健壯的)。這種擴充會導致機器出現一些問題,\MakeSentenceCase並產生您看到的錯誤。

有多種方法可以解決此問題。

  1. 再次變得\,堅固。問題

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

    加載後amsmath。 (請注意,在 MWE 中,\renewrobustcmdneeds是由 載入的,因此這一行應該在載入 和 後出現。)etoolboxbiblatexamsmathbiblatex

  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}

相關內容