expl3 par 和序列

expl3 par 和序列

在探索 expl3 的过程中,我一直在更新我的一些代码,并且遇到了一个我没有预料到的有趣问题。

我收到一个奇怪的错误,我认为这是由于尝试将多个段落存储到一个序列中而导致的。我在 interface3 手册中没有找到任何内容,有人知道解决这个问题的方法吗?

对于那些感兴趣的人,我在下面提供了变量存储的旧方法和新方法。

这是我的旧代码。

\newcommand{\@supernote}{}
\newcommand{\supernote}[1]{\renewcommand\@supernote{#1}}

这是我的新代码。

\seq_new:N \itemsupernote
\NewDocumentCommand{\supernote}{sm} {
    \seq_put_right:Nn \itemsupernote {#2}
}

调用该函数的方式相同

\supernote{Here is my example

and here is the other half}

这是我使用新方法时遇到的错误,希望它能有所帮助。

runaway argument? {here is my example Paragraph ended before \supernote was omplete.
<to be read again> \par l.109 

答案1

问题不在于代码层(代码层全是“长”),而在于您的界面设置。由于文档命令更常见的情况是它们只应接收短文本,xparse因此标准情况下会创建“短”命令。要使参数“长”,您需要使用+

\NewDocumentCommand \supernote { s +m }
  {
    \seq_put_right:Nn \itemsupernote {#2}
  }

请注意,xparse处理长/短参数时要逐个参数,而不是一次性切换所有参数。

相关内容