O seguinte ocorre quando se tenta usar xparse em 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
Em vez de "Apenas foo bar e foo" aparece "@ traceoff @ traceon Apenas foo @ traceoff @ traceon bar e foo".
errorfile.pdf
O código espera que @ tenha a letra catcode. Portanto, o seguinte funciona, mas não sei quanto do xparse realmente funciona no contexto - a ideia de definições e sintaxe de comando é bem diferente aqui.
~~~~
\ input expl3-generic
\ catcode \@=11
\input xparse-generic
\catcode
\ @ = 12
\ starttext
NewDocumentCommand \ hello {om}
{
\ IfNoValueTF {# 1}
{Somente 2}
{# 1 e # 2}
}
\ hello {foo} \ hello [bar] {foo}
\ stoptext
~~~~
xparse-generic
é muito mais um substituto para as mudanças futuras: ele não foi testado com TeX simples ou ConTeXt, então não estou surpreso que falhe aqui. É provável que tenhamos tudo resolvido assim que chegarmos ao outono.
Estou muito satisfeito por isso funcionar: para ConTeXt, acho que podemos ter que adicionar \start...
/ \stop...
configuração do ambiente.
Eu li sobre compatibilidade com ConTeXt, então estou testando para o caso de haver algum tipo de código compatível, já que MkIV tem seu próprio tratamento idiomático de argumentos opcionais ( \dosingleempty
, \dodoubleempty
, etc). Estou satisfeito também.
Até recentemente, xparse
era puramente um pacote LaTeX2e. Vamos fundir a maior parte dele em expl3-generic
no outono, momento em que fará parte da oferta de plataforma neutra, mas não há planos para tornar o idom mais 'neutro'. Obviamente, o ConTeXt ainda usa argumentos o
- e m
-type no principal.
@JairoAdelRio Algum tempo atrás eu escrevi algum tipo de camada de compatibilidade para permitir xparse
em Plain e ConTeXt para o pacote scontents
(https://github.com/pablgonz/scontents). Talvez você possa pegar algumas idéias (não tenho certeza se são boas ;-) lá.
No momento em que xparse
estava inteiramente em xparse.sty
, grande parte da camada de compatibilidade estava definindo \ProvidesPackage
e assim por diante. Hoje em dia seria muito mais fácil com xparse-generic
, mas isso provavelmente mudará em versões futuras, então eu esperaria um pouco, se possível
Acho que o ponto de @ u-fischer está certo, além do que a próxima fusão para expl3
deve abordar mais coisas: Estou fechando.