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