如何在 Texlive 2014 上将 \raisebox 与 \enumerate 结合使用?

如何在 Texlive 2014 上将 \raisebox 与 \enumerate 结合使用?

我遇到了一个奇怪的问题,同一段代码在一台安装了 Texlive 2013 的电脑上编译正常,而在另一台运行 Texlive 2014 的电脑上却编译不通过。两台电脑都在 Ubuntu 14.10 上使用 Luatex。

该代码的目的是调整数字列表项中的垂直间距。以下是 MWE:

\documentclass{article}
\usepackage{enumitem}
\setlist[enumerate]{label=\raisebox{0.5em}{\arabic*}}
\usepackage{realscripts}
\begin{document}
\begin{enumerate}
\item Here is an item.
\end{enumerate}
\end{document}

重复一遍,这在 texlive 2013 上运行良好。在 texlive 2014 上会产生以下错误:

! Use of \\enumerate doesn't match its definition.
\@ifnextchar ... \reserved@d =#1\def \reserved@a {
                                              #2}\def \reserved@b {#3}\f...
l.7 \item
    Here is an item.

请注意,此处的使用\realscripts很重要,原因我不明白。它最初包含在我正在写的书中。但当我尝试删除所有内容以识别此问题时,我发现删除它会产生与上述相同的错误,即使在 texlive 2013 上也是如此。

原始代码使用了已弃用的形式\setenumerate,产生了同样的错误。

有任何想法吗?

答案1

你需要\protect \raisebox。(至少你需要在 2015 年乳胶版本发布之前这样做:在下一个乳胶版本的测试版本中,原始文档可以正常运行而不会出现错误)

\documentclass{article}
\usepackage{enumitem}
\setlist[enumerate]{label=\protect\raisebox{0.5em}{\arabic*}}

\begin{document}
\begin{enumerate}
\item Here is an item.
\end{enumerate}
\end{document}

事实上,它在 2013 年没有导致错误,在 2015 年也不会导致错误,但在 2014 年却导致错误,这些都有关。 \resizebox是(或现在也是)一个脆弱的命令,因此需要,\protect但是fixltx2e与 latex 一起分发的软件包修复了各种问题,包括使其变得\raisebox健壮,这样它就不需要了\protect。从 2015 年起fixltx2e就不需要了,并且默认情况下会启用改进,旧版本的fontspec(包含在内realscripts)曾经加载fixltx2efontspec停止这样做以避免与字体选择无关的副作用(像这样:-)。(感谢@cfr 为我提供 2013 年的跟踪以供比较)

相关内容