我遇到了一个奇怪的问题,同一段代码在一台安装了 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
)曾经加载fixltx2e
但fontspec
停止这样做以避免与字体选择无关的副作用(像这样:-)。(感谢@cfr 为我提供 2013 年的跟踪以供比较)