Relacionado conGitHub plk/biblatex número 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}
Aparte del resultado incorrecto, la compilación con MiKTeX finaliza con errores: Missing number, treated as zero. \end
, Illegal unit of measure (pt inserted). \end
.
¿Alguien puede darnos una idea de qué hacer para permitir el uso de espacios finos ( \,
) en títulos bibliográficos en documentos como el ejemplo anterior?
Respuesta1
biblate-ieee
se aplica \MakeSentenceCase*
a títulos de algunos (pero no todos) tipos de entrada. @article
Los s obtienen la oración del título en mayúsculas y minúsculas, pero @book
los s no, eso explica la observación en los comentarios.
\MakeSentenceCase
Es una macro muy compleja y frágil ya que la manipulación de cadenas es algo complicada en LaTeX. En particular, \MakeSentenceCase
realiza bastantes expansiones e intenta iterar a través de la cadena un carácter a la vez.
El estándar LaTeX se define \,
como una macro robusta, pero amsmath
define
\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
lo que significa que \,
se puede expandir (una vez) y no es robusto (su expansión es robusta). Esta expansión causa algunos problemas en la maquinaria \MakeSentenceCase
y produce el error que ves.
Hay varias formas de solucionar este problema.
Hazlo
\,
robusto de nuevo. Asunto\renewrobustcmd{\,}{\tmspace+\thinmuskip{.1667em}}
después de haber cargado
amsmath
. (Tenga en cuenta que\renewrobustcmd
necesitaetoolbox
, que en MWE se carga conbiblatex
, por lo que esta línea debe aparecer después de cargar ambosamsmath
ybiblatex
).\protect
esto\,
en el.bib
archivo (como lo sugieremico en los comentarios)@article{A, title = {A\protect\,b c}, }
Utilice un comando diferente que todavía esté protegido (como lo sugiereDavid Purton en los comentarios), por ejemplo el equivalente
biblatex
de .\,
\addnbthinspace
@article{A, title = {A\addnbthinspace b c}, }
Siempre puedes "ocultar" partes de la cadena
\MakeSentenceCase
con llaves.@article{A, title = {A{\,}b c}, }
Funciona, pero no estoy seguro si lo recomendaría.
Aquí hay un MWE para probar las soluciones sin 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}