
Acabo de realizar una actualización de todos los paquetes de mi texlive
distribución (2015) y ahora tengo problemas para combinar biber
+ biblatex
con el microtype
paquete.
El error parece surgir sólo cuando se utilizan caracteres "especiales" en el bib
archivo y sólo cuando solicito imprimir la bibliografía. Aquí hay un ejemplo mínimo:
\documentclass{article}
\usepackage{filecontents}
\usepackage{microtype}
\usepackage[backend=biber]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{renyi1970,
author = {R\'enyi, Alfr\'ed},
location = {San Francisco},
publisher = {Holden-Day},
title = {Foundations of Probability},
year = {1970},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{renyi1970}
\printbibliography
\end{document}
El mensaje de error que recibo comienza así:
! Argument of \MT@res@a has an extra }.
<inserted text>
\par
l.23
I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.
Runaway argument?
##1,\OT1/cmr/m/n/10 ,##2##3\@nnil {\ifx ##2\@empty \MT@inlist@false \else \ETC.
! Paragraph ended before \MT@res@a was complete.
<to be read again>
\par
l.23
El problema desaparece si elimino el \printbibliography
comando, incluso si uso el authoryear
estilo de cita, de modo que los signos diacríticos por sí solos no generen el problema. Es decir, lo siguiente se compila como se esperaba:
\documentclass{article}
\usepackage{filecontents}
\usepackage{microtype}
\usepackage[backend=biber, citestyle=authoryear]{biblatex}
\begin{filecontents}{\jobname.bib}
@book{renyi1970,
author = {R\'enyi, Alfr\'ed},
location = {San Francisco},
publisher = {Holden-Day},
title = {Foundations of Probability},
year = {1970},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{renyi1970}
\end{document}
El error parece tener algo que ver con la interacción entre microtype
y biber
, ya que no surge solo con uno de ellos (probé microtype
con bibtex
como backend biblatex
y funcionó bien; también probé biber
sin microtype
y también funcionó bien).
Supongo microtype
que no se ha actualizado desde 2013, por lo que supongo que el problema se introdujo con la versión más nueva de biber
(2.4) o con la versión más nueva de biblatex
(3.3).
Respuesta1
Yo diría que esto es un error en biblatex
:
En biblatex_.sty
(que es la versión no heredada que se usa con biber
), encontramos justo al principio:
% Tests for emptiness, regardless whether the arg is macro or literal
% Expand everything and test as string
\def\ifempty#1{%
\edef\z{#1}%
\expandafter\ifblank\expandafter{\z}}
Ahora bien, \edef
aceptar la entrada del usuario es algo que nunca se debe hacer, punto.
El ejemplo mínimo del OP funciona para mí si lo reemplazo \edef
con \protected@edef
(que es la versión "segura para el usuario" de látex \edef
), pero no puedo prever qué otras consecuencias podría tener esto.
Respuesta2
Esto fue debido a un cambio de biblatex. Estaba tratando de aislar a los usuarios lo más posible de los cambios en las partes del nombre, pero esto no es realmente factible debido a este tipo de consecuencias. Como se mencionó, el problema no existe si usa fontenc, lo cual supongo que debería hacer de todos modos. Sin embargo, cambié la prueba problemática en biblatex 3.4 en DEV y el problema ya no ocurre.
Respuesta3
No recibo ningún error si solo agrego \usepackage[T1]{fontenc}
. No está muy claro dónde microtype
se bloquea cuando la codificación es OT1.
biblatex 2016/03/03 v3.3
ybiber version: 2.4
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{renyi1970,
author = {R\'enyi, Alfr\'ed},
location = {San Francisco},
publisher = {Holden-Day},
title = {Foundations of Probability},
year = {1970},
}
\end{filecontents}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[backend=biber]{biblatex}
\usepackage{microtype}
\addbibresource{\jobname.bib}
\begin{document}
\cite{renyi1970}
\printbibliography
\end{document}
Respuesta4
Corre biber
con
biber --output-safechars <file>
Sin embargo, tiene más sentido escribir
author = {Rényi, Alfréd},
y usando lualatex
o al menos `
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
parapdflatex