Biber 2.4, микротип и специальные символы

Biber 2.4, микротип и специальные символы

Я только что выполнил обновление всех пакетов в своем 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

Связанный контент