
Я только что выполнил обновление всех пакетов в своем texlive
дистрибутиве (2015), и теперь у меня возникли проблемы с объединением biber
+ biblatex
с microtype
пакетом.
Ошибка, похоже, возникает только при использовании "специальных" символов в файле bib
и только когда я прошу распечатать библиографию. Вот минимальный пример:
\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}
Сообщение об ошибке, которое я получаю, начинается так:
! 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
Проблема исчезает, если я удаляю \printbibliography
команду, даже если я использую authoryear
стиль цитирования, так что диакритические знаки сами по себе не создают проблему. То есть следующее компилируется, как и ожидалось:
\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}
Ошибка, по-видимому, как-то связана с взаимодействием между microtype
и biber
, поскольку она возникает не только с одним из них (я пробовал microtype
с bibtex
в качестве бэкенда для biblatex
, и все работало отлично; я также пробовал biber
без него microtype
, и все тоже работало отлично).
Насколько я понимаю, microtype
обновление не производилось с 2013 года, поэтому предполагаю, что проблема возникла в новой версии biber
(2.4) или в новой версии biblatex
(3.3).
решение1
Я бы сказал, что это ошибка biblatex
:
В biblatex_.sty
(это не устаревшая версия, которая используется с biber
), мы находим в самом начале:
% 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}}
Теперь, \edef
ввод данных пользователем — это то, чего никогда не следует делать, и точка.
Минимальный пример автора статьи у меня работает, если я заменю его \edef
на \protected@edef
(что является «безопасной для пользователя» версией латекса \edef
), но я не могу предвидеть, какие еще последствия это может иметь.
решение2
Это произошло из-за изменения biblatex. Я пытался максимально оградить пользователей от изменений части имени, но это нереально из-за такого рода последствий. Как уже упоминалось, проблема не возникает, если вы используете fontenc, что, как я предполагаю, вы должны делать в любом случае. Однако я изменил проблемный тест в biblatex 3.4 на DEV, и проблема больше не возникает.
решение3
Я не получаю ошибки, если просто добавляю \usepackage[T1]{fontenc}
. Не совсем понятно, где microtype
засоры, когда кодировка OT1.
biblatex 2016/03/03 v3.3
иbiber 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}
решение4
Бежать biber
с
biber --output-safechars <file>
Однако имеет смысл написать
author = {Rényi, Alfréd},
и используя lualatex
или по крайней мере `
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
дляpdflatex