![如何高效地创建条件变体?](https://linux22.com/image/314547/%E5%A6%82%E4%BD%95%E9%AB%98%E6%95%88%E5%9C%B0%E5%88%9B%E5%BB%BA%E6%9D%A1%E4%BB%B6%E5%8F%98%E4%BD%93%EF%BC%9F.png)
假设我有以下内容:
\prg_new_conditional:Nnn \sean_cond:n { T,F,TF } { \prg_return_false: }
我如何有效地创建以下内容?(此列表是任意的。)
\sean_cond:nT \sean_cond:nF \sean_cond:nTF
\sean_cond:oT \sean_cond:oF \sean_cond:oTF
\sean_cond:VT \sean_cond:VF \sean_cond:VTF
我知道我可以(可能)使用类似下面的东西,但我觉得这比需要的更难。
\cs_generate_variant:Nn \sean_cond:nT { o, V }
\cs_generate_variant:Nn \sean_cond:nF { o, V }
\cs_generate_variant:Nn \sean_cond:nTF { o, V }
答案1
2017 年 12 月发布的expl3
新增
\prg_generate_conditional_variant:Nnn
这简化了变体的定义。
以下是示例:
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\prg_new_conditional:Nnn \sean_cond:n { T, F, TF } { \prg_return_false: }
\prg_generate_conditional_variant:Nnn \sean_cond:n { o, V } { T, F, TF }
\cs_show:N \sean_cond:nT
\cs_show:N \sean_cond:nF
\cs_show:N \sean_cond:nTF
\cs_show:N \sean_cond:oT
\cs_show:N \sean_cond:oF
\cs_show:N \sean_cond:oTF
\cs_show:N \sean_cond:VT
\cs_show:N \sean_cond:VF
\cs_show:N \sean_cond:VTF
\stop
所有九个功能都将被定义。