Latex3: xparse не работает в ConTeXt MkIV

Созданный на 18 июн. 2020  ·  7Комментарии  ·  Источник: latex3/latex3

Следующее происходит, когда кто-то пытается использовать 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

bug generic-mode xparse

Все 7 Комментарий

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги