Biber 2.4、微型字体和特殊字符

Biber 2.4、微型字体和特殊字符

我刚刚对我的发行版 (2015) 中的所有软件包进行了更新texlive,现在我无法将biber+biblatexmicrotype软件包结合起来。

错误似乎仅在文件中使用“特殊”字符时出现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(这是 Latex 的“用户安全”版本)替换,OP 的最小示例对我来说是可行的\edef,但我无法预见这可能会产生哪些其他后果。

答案2

这是由于 biblatex 更改造成的。我试图尽可能地让用户免受 namepart 更改的影响,但由于这种后果,这实际上不可行。如前所述,如果您使用 fontenc,则不存在此问题,我认为您应该这样做。但是,我在 DEV 上的 biblatex 3.4 中更改了有问题的测试,问题不再发生。

答案3

如果我只是添加,就不会出现错误。当编码为 OT1 时,\usepackage[T1]{fontenc}并不清楚阻塞在哪里。microtype

biblatex 2016/03/03 v3.3biber 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

相关内容