
Изучая 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
здесь длинные/короткие аргументы обрабатываются по отдельности, а не переключаются все аргументы за один раз.