.png)
Относится к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
Для s заголовки преобразуются в предложения с заглавной буквой, а для @book
s — нет, что объясняет замечание в комментариях.
\MakeSentenceCase
очень сложный и хрупкий макрос, поскольку манипуляция строками в LaTeX довольно сложна. В частности, \MakeSentenceCase
выполняет довольно много расширений и пытается перебрать строку по одному символу за раз.
Стандартный LaTeX определяется \,
как надежный макрос, но amsmath
определяет
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
что означает, что \,
может быть расширено (один раз) и не является надежным (его расширение надежно). Это расширение вызывает некоторые проблемы в механизме \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}