Следующее происходит, когда кто-то пытается использовать xparse в ConTeXt Mark IV (LuaTeX)
\input expl3-generic
\input xparse-generic
\starttext
\NewDocumentCommand\hello{om}
{
\IfNoValueTF{#1}
{Only #2}
{#1 and #2}
}
\hello{foo} \hello[bar]{foo}
\stoptext
Вместо «Only foo bar and foo» появляется «@ traceoff @ traceon Only foo @ traceoff @ traceon bar and foo».
errorfile.pdf
Код ожидает, что @ будет иметь букву catcode. Итак, следующее работает, но я не знаю, какая часть xparse действительно работает в контексте - идея определений команд и синтаксиса здесь совершенно другая.
~~~~
\ input Exp3-generic
\ catcode \@=11
\input xparse-generic
\catcode
\ @ = 12
\ starttext
NewDocumentCommand \ hello {om}
{
\ IfNoValueTF {# 1}
{Только №2}
{# 1 и # 2}
}
\ привет {фу} \ привет [бар] {фу}
\ stoptext
~~~~
xparse-generic
- это в значительной степени заполнитель для предстоящих изменений: он не тестировался с простым TeX или ConTeXt, поэтому я не удивлен, что здесь он не работает. Скорее всего, мы разберемся с этим, когда дойдем до осени.
Я очень рад, что это вообще работает: для ConTeXt, я думаю, нам, возможно, придется добавить \start...
/ \stop...
настройку среды.
Я читал о совместимости с ConTeXt, поэтому я тестирую его на случай, если есть какой-то кросс-совместимый код, поскольку MkIV имеет собственную идиоматическую обработку необязательных аргументов ( \dosingleempty
, \dodoubleempty
, так далее). Я тоже доволен.
До недавнего времени xparse
был просто пакетом LaTeX2e. Осенью мы собираемся объединить большую часть его в expl3-generic
, после чего он станет частью платформенно-нейтрального предложения, но мы не планируем делать idom более «нейтральным». Конечно, ConTeXt по-прежнему использует аргументы типа o
- и m
в основном.
@JairoAdelRio Некоторое время назад я написал какой-то уровень совместимости, чтобы разрешить xparse
как в Plain, так и в ConTeXt для пакета scontents
(https://github.com/pablgonz/scontents). Может быть, вы сможете взять там какие-нибудь идеи (не уверен, насколько они хороши ;-).
В то время xparse
целиком находился в xparse.sty
, поэтому большая часть уровня совместимости определяла \ProvidesPackage
и так далее. В настоящее время было бы намного проще с xparse-generic
, но это, вероятно, изменится в будущих выпусках, поэтому я бы немного подождал, если возможно.
Я думаю, что точка зрения @ u-fischer верна, плюс предстоящее слияние в expl3
должно решить больше вопросов: я закрываюсь.