xparse 的布尔标志以及 xparse 的一般用法

xparse 的布尔标志以及 xparse 的一般用法

我想定义一个语法如下的环境

\begin{myenv}{arg1,arg2}[opt_1,opt_2,...,opt_n]
body, taking several lines
\end{myenv}

其中一个可选参数是数值,其他可选参数都应视为布尔标志。在环境定义中,我想使用类似的东西\ifthenelse来处理这些标志的各种情况。

碰巧的是,arg1 是一个字符串,将用作外部文件名,arg2 是一个数值,将写入不同的外部文件,而可选参数则用于精确控制将什么内容写入何处。环境主体也可以(或不可以)写入外部文件。

上面的语法可能不太容易实现。我一直在研究xparse,但没有取得太大进展。

为了理解其中的原理xparse,我尝试过

\documentclass{article}



\usepackage{xparse}

\NewDocumentCommand{\testguts}{ m m }{%
  arg1 is #1
  arg2 is #2
  }
\NewDocumentEnvironment{myenv}{ > { \SplitArgument { 2 } { , } } m t b}{%
  \testguts #1%
  optional is #2%
  and body is #3%
  that's it%
}{nothing post}

\begin{document}

\begin{myenv}[option]
random body
\end{myenv}

\end{document}

但会出现“非法参数编号”错误。看起来参数#3未定义?为什么?

如果删除对的引用#3(注释掉该行),则输出为

arg1 is first arg2 is second -NoValue-optional is Γthat’s it[option] random body nothing post

发生了什么事\SplitArgment?为什么必须将其输出输入到单独的命令 ( \testguts) 才能查看已解析出的各个部分?

抛开这个谜团不谈,上面的第一部分是有意义的。很清楚从哪里来arg1 is first arg2 is second的。但-NoValue-optional接下来的事情为什么会这样,从哪里来的Γ

文档xparse中说它似乎t可以用作布尔标志的可选参数,这正是我想要的,但我不知道如何让它工作。理想情况下,应该可以说“\IfNoValueTF{keyword}{false case}{true case}”,但我试过的方法都没有奏效。

相关内容