sidenotes 包的奇怪输出

sidenotes 包的奇怪输出

虽然我已经成功使用该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}

生成此输出,

ResultPDF

注意输出中的“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}

workaround for side notes

相关内容