
Acabei de realizar uma atualização de todos os pacotes da minha texlive
distribuição (2015) e agora estou tendo problemas para combinar biber
+ biblatex
com o microtype
pacote.
O erro parece surgir apenas ao usar caracteres 'especiais' no bib
arquivo e somente quando peço para imprimir a bibliografia. Aqui está um exemplo 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}
A mensagem de erro que recebo começa assim:
! 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
O problema desaparece se eu remover o \printbibliography
comando, mesmo que eu use o authoryear
estilo de citação, para que os diacríticos por si só não gerem o problema. Ou seja, o seguinte é compilado conforme o esperado:
\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}
O erro parece ter algo a ver com a interação entre microtype
e biber
, já que não surge com apenas um deles (tentei microtype
com bibtex
as backend for biblatex
e funcionou muito bem; também tentei biber
sem microtype
e também funcionou bem).
Presumo que microtype
não foi atualizado desde 2013, então presumo que o problema foi introduzido com a versão mais recente de biber
(2.4) ou com a versão mais recente de biblatex
(3.3).
Responder1
Eu diria que isso é um bug em biblatex
:
Em biblatex_.sty
(que é a versão não legada usada com biber
), encontramos logo no início:
% 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}}
Agora, \edef
receber a entrada do usuário é algo que nunca deve ser feito, ponto final.
O exemplo mínimo do OP funciona para mim se eu substituir \edef
por \protected@edef
(que é a versão "segura para o usuário" do latex \edef
), mas não posso prever quais outras consequências isso pode ter.
Responder2
Isto foi devido a uma mudança no biblatex. Eu estava tentando isolar os usuários tanto quanto possível das mudanças no namepart, mas isso não é realmente viável por causa desse tipo de consequência. Como mencionado, o problema não existe se você usar o fontenc, o que presumo que você deveria fazer de qualquer maneira. Porém, mudei o teste problemático do biblatex 3.4 para DEV e o problema não ocorre mais.
Responder3
Não recebo nenhum erro se apenas adicionar \usepackage[T1]{fontenc}
. Não está muito claro onde microtype
engasga quando a codificação é OT1.
biblatex 2016/03/03 v3.3
ebiber 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}
Responder4
Correr biber
com
biber --output-safechars <file>
No entanto, faz mais sentido escrever
author = {Rényi, Alfréd},
e usando lualatex
ou pelo menos `
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
parapdflatex