虽然我已经成功使用该sidenotes
软件包多年,但它突然停止了运行。以下是代码,
\documentclass[oneside]{book}
\usepackage[utf8]{inputenc}
\usepackage{sidenotes}
\begin{document}
Here is some text. And some more. Here is a margin note \marginnote{I am a margin note}.
Here is some text. And some more. Here is a footnote\footnote{I am a footnote}.
Here is some text. And some more. Here is a sidenote\sidenote{I am a side note}.
\end{document}
生成此输出,
注意输出中的“3sp”!我还收到以下错误:
! Missing number, treated as zero.
<to be read again>
\tex_let:D
l.165 ... is a sidenote\sidenote{I am a side note}
和
Illegal unit of measure (pt inserted).<to be read again>
我相信这是在我通过 Tex Live Utility 更新了几十个软件包之后开始发生的。看起来好像某个地方损坏了,但我可能错了。
我将非常感激任何能够帮助我解决该问题的帮助。
答案1
问题是由于xparse.sty
版本更改造成2017/02/10 v6878
的。我的理解是,解决更改所导致的问题的更新已推送到 CTAN。然而,似乎情况并非如此(目前?)。
该问题会影响宏定义时不带参数的处理\NewDocumentCommand
。据我了解,这一变化意味着宏的处理方式与带参数的定义相同。这会破坏依赖于先前快速实现的代码,当定义指定不带参数的宏时会使用该快速实现。
您可以使用 来解决这个问题,但效果并不令人满意\DeclareExpandableDocumentCommand
。这并不理想,因为它不能避免覆盖现有的宏名\NewDocumentCommand
。
或者,您可以回到 LaTeX 2e 语法,将其视为当前expl3
实现中的差距。
目前,LaTeX 3 开发人员似乎尚未就适当的方法达成普遍共识,因为它是一项正在进行的工作。但是,显然它sidenotes
从未得到支持。它只是happened to work
。但sidenotes
并不是唯一的,而且,根本不清楚它是否不受支持或应该做什么。事实上,据我所知,后者仍然不清楚,但这是正在进行的讨论的主题。
然而,尽管如此,最好的选择可能是按如下方式解决问题,避免expl3
将来发生变化时出现问题,并依赖稳定的 LaTeX 2e 实现。
\documentclass[oneside]{book}
\usepackage[utf8]{inputenc}
\usepackage{sidenotes}
\makeatletter
\renewcommand* \@sidenotes@multisign {3sp}
\makeatother
\begin{document}
Here is some text. And some more. Here is a margin note \marginnote{I am a margin note}.
Here is some text. And some more. Here is a footnote\footnote{I am a footnote}.
Here is some text. And some more. Here is a sidenote\sidenote{I am a side note}.
\end{document}