当尝试在 ConTeXt Mark IV (LuaTeX) 中使用 xparse 时会发生以下情况
\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”。
错误文件.pdf
代码期望 @ 具有 catcode 字母。 所以下面的工作,但我不知道有多少 xparse 在上下文中实际工作 - 命令定义和语法的想法在这里完全不同。
~~~~
\input expl3-generic
\catcode \@=11
\input xparse-generic
\catcode
\@=12
\开始文本
NewDocumentCommand\hello{om}
{
\IfNoValueTF{#1}
{仅#2}
{#1 和 #2}
}
\hello{foo} \hello[bar]{foo}
\停止文本
~~~~
xparse-generic
是即将到来的变化的占位符:它没有用普通的 TeX 或 ConTeXt 进行过测试,所以我并不惊讶它在这里失败。 一旦我们到了秋天,我们可能会更加稳定。
我很高兴这一切都有效:对于 ConTeXt,我想我们可能需要添加\start...
/ \stop...
环境设置。
我已经阅读了与 ConTeXt 的兼容性,所以我正在测试它以防有某种交叉兼容的代码,因为 MkIV 有它自己的可选参数的惯用处理( \dosingleempty
, \dodoubleempty
, 等等)。 我也很高兴。
直到最近, xparse
纯粹是一个 LaTeX2e 包。 我们将在秋季将其大部分合并到expl3-generic
中,届时它将成为平台中立产品的一部分,但没有计划使 idom 更加“中立”。 当然,ConTeXt 在 main 中仍然使用o
- 和m
- 类型的参数。
@JairoAdelRio前段时间我编写了某种兼容层,允许xparse
在普通和 ConTeXt 中用于scontents
包(https://github.com/pablgonz/scontents)。 也许您可以在那里采取一些想法(不确定它们有多好;-)。
当时xparse
完全在xparse.sty
,所以大部分兼容层都在定义\ProvidesPackage
等等。 现在使用xparse-generic
会容易得多,但这可能会在未来的版本中改变,所以如果可能的话我会等一下
我认为@u-fischer 的观点是正确的,加上即将到来的合并到- expl3
应该解决更多问题:我要结束了。