Wenig Platz in der Bibliographie funktioniert nicht, wenn amsmath geladen ist (Biblatex + IEEE-Stil)

Wenig Platz in der Bibliographie funktioniert nicht, wenn amsmath geladen ist (Biblatex + IEEE-Stil)

BezüglichGitHub plk / biblatex-Problem Nr. 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}

Bildbeschreibung hier eingeben

Abgesehen von der falschen Ausgabe endet die Kompilierung mit MiKTeX mit folgenden Fehlern: Missing number, treated as zero. \end, Illegal unit of measure (pt inserted). \end.

Kann jemand eine Idee haben, was man tun kann, um die Verwendung von kleinen Leerzeichen ( \,) in bibliographischen Titeln in Dokumenten wie dem obigen Beispiel zu ermöglichen?

Antwort1

biblate-ieeegilt \MakeSentenceCase*für Titel einiger (aber nicht aller) Eintragstypen. @articleBei s wird der Titel in Groß- und Kleinschreibung geschrieben, @bookbei s jedoch nicht. Dies erklärt die Beobachtung in den Kommentaren.

\MakeSentenceCaseist ein sehr komplexes und anfälliges Makro, da die String-Manipulation in LaTeX ziemlich knifflig ist. Insbesondere \MakeSentenceCaseführt es ziemlich viele Erweiterungen durch und versucht, den String Zeichen für Zeichen zu durchlaufen.

Standard-LaTeX definiert \,als robustes Makro, amsmathdefiniert aber

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

was bedeutet, dass es \,(einmal) erweitert werden kann und nicht robust ist (seine Erweiterung ist robust). Diese Erweiterung verursacht einige Probleme in der Maschinerie \MakeSentenceCaseund erzeugt den angezeigten Fehler.

Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.

  1. Wieder robust machen \,. Problem

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

    nachdem Sie geladen haben amsmath. (Beachten Sie, dass \renewrobustcmdbenötigt wird etoolbox, das im MWE von geladen wird biblatex, daher sollte diese Zeile nach dem Laden von amsmathund kommen biblatex.)

  2. \protectdies \,in der .bibDatei (wie vorgeschlagen vonMico in den Kommentaren)

    @article{A,
      title = {A\protect\,b c},
    }
    
  3. Verwenden Sie einen anderen Befehl, der noch geschützt ist (wie vorgeschlagen vonDavid Purton in den Kommentaren), beispielsweise das Äquivalent biblatexvon .\,\addnbthinspace

    @article{A,
      title = {A\addnbthinspace b c},
    }
    
  4. Sie können Teile der Zeichenfolge jederzeit \MakeSentenceCasemit geschweiften Klammern „verstecken“.

    @article{A,
      title = {A{\,}b c},
    }
    

    funktioniert, aber ich bin nicht sicher, ob ich es empfehlen würde.


Hier ist ein MWE zum Testen der Lösungen ohne 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}

verwandte Informationen