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}
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-ieee
gilt \MakeSentenceCase*
für Titel einiger (aber nicht aller) Eintragstypen. @article
Bei s wird der Titel in Groß- und Kleinschreibung geschrieben, @book
bei s jedoch nicht. Dies erklärt die Beobachtung in den Kommentaren.
\MakeSentenceCase
ist ein sehr komplexes und anfälliges Makro, da die String-Manipulation in LaTeX ziemlich knifflig ist. Insbesondere \MakeSentenceCase
führt es ziemlich viele Erweiterungen durch und versucht, den String Zeichen für Zeichen zu durchlaufen.
Standard-LaTeX definiert \,
als robustes Makro, amsmath
definiert 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 \MakeSentenceCase
und erzeugt den angezeigten Fehler.
Es gibt mehrere Möglichkeiten, dieses Problem zu umgehen.
Wieder robust machen
\,
. Problem\renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
nachdem Sie geladen haben
amsmath
. (Beachten Sie, dass\renewrobustcmd
benötigt wirdetoolbox
, das im MWE von geladen wirdbiblatex
, daher sollte diese Zeile nach dem Laden vonamsmath
und kommenbiblatex
.)\protect
dies\,
in der.bib
Datei (wie vorgeschlagen vonMico in den Kommentaren)@article{A, title = {A\protect\,b c}, }
Verwenden Sie einen anderen Befehl, der noch geschützt ist (wie vorgeschlagen vonDavid Purton in den Kommentaren), beispielsweise das Äquivalent
biblatex
von .\,
\addnbthinspace
@article{A, title = {A\addnbthinspace b c}, }
Sie können Teile der Zeichenfolge jederzeit
\MakeSentenceCase
mit 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}