expl3 par とシーケンス

expl3 par とシーケンス

expl3 を調べていて、自分のコードの一部を 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長い引数/短い引数を一度に切り替えるのではなく、引数ごとに処理することに注意してください。

関連情報