在探索 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
处理长/短参数时要逐个参数,而不是一次性切换所有参数。