Relacionado aProblema # 910 do GitHub plk / biblatex.
\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}
Além da saída incorreta, a compilação com MiKTeX termina com erros: Missing number, treated as zero. \end
, Illegal unit of measure (pt inserted). \end
.
Alguém pode dar uma ideia do que fazer para permitir o uso de espaços finos ( \,
) em títulos bibliográficos em documentos como o exemplo acima?
Responder1
biblate-ieee
aplica-se \MakeSentenceCase*
a títulos de alguns (mas não todos) tipos de entrada. @article
s recebem a frase do título, mas @book
não, isso explica a observação nos comentários.
\MakeSentenceCase
é uma macro muito complexa e frágil, pois a manipulação de strings é um tanto complicada em LaTeX. Em particular, \MakeSentenceCase
executa muitas expansões e tenta iterar na string um caractere por vez.
O LaTeX padrão é definido \,
como uma macro robusta, mas amsmath
define
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
o que significa que \,
pode ser expandido (uma vez) e não é robusto (sua expansão é robusta). Essa expansão causa alguns problemas no maquinário \MakeSentenceCase
e produz o erro que você vê.
Existem várias maneiras de contornar esse problema.
Torne-se
\,
robusto novamente. Emitir\renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
depois de ter carregado
amsmath
. (Observe que\renewrobustcmd
o needetoolbox
, que no MWE é carregado porbiblatex
, portanto esta linha deve vir depois de carregar ambosamsmath
ebiblatex
.)\protect
isso\,
no.bib
arquivo (como sugerido porMico nos comentários)@article{A, title = {A\protect\,b c}, }
Use um comando diferente que ainda esteja protegido (como sugerido porDavid Purton nos comentários), por exemplo , equivalente
biblatex
a .\,
\addnbthinspace
@article{A, title = {A\addnbthinspace b c}, }
Você sempre pode 'ocultar' partes da string
\MakeSentenceCase
com chaves.@article{A, title = {A{\,}b c}, }
funciona, mas não tenho certeza se o recomendaria.
Aqui está um MWE para testar as soluções sem 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}