首先,xparse
我想使用以下命令创建:
\DeclareDocumentCommand{\c}{ s > { \SplitList { ; } } r""}
{
% do something
}
它基本上应该只做以下事情:
- 如果 s 为假(没有给出星号),则转换
"f;g;h;..."
为f » g » h » ...
- 如果 s 为真,则转换
"f;g;h;..."
为fgh...
(给出星号)
整个目的是能够重新定义命令以基本上逆转顺序,即:
- 如果 s 为假(没有给出星号),则转换
"f;g;h;..."
为... « h « g « f
- 如果 s 为真,则转换
"f;g;h;..."
为...hgf
(给出星号)
我怎样才能使用“高级函数”很好地做到这一点?我已经在使用,xparse, xstring
并且我认为etoolbox
或类似的东西可能会有所帮助。我真的不想处理“低级” TeX 编程,如果这有任何意义的话。
答案1
并非真正“高级”,但由于xparse
无论如何都会使用并且无论如何SplitList
都会expl3
:
该\convert
命令使用第一个带星号的参数进行f>g>h
拆分,第三个参数用于反转顺序。
它使用一个\seq_...
变量,将输入分成;
标记并将它们粘合在一起(或有效地替换;
)>
并最终反转顺序。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\DeclareDocumentCommand{\convert}{sr""s}
{
\seq_set_split:Nnn \l_tmpa_seq {;} {#2}
\IfBooleanT{ #3 }{%
\seq_reverse:N \l_tmpa_seq
}
\IfBooleanTF{#1}{%
\seq_use:Nn \l_tmpa_seq {}%
}{%
\seq_use:Nn \l_tmpa_seq {$>$}
}
}
\ExplSyntaxOff
\begin{document}
\convert"f;g;h"
\convert*"f;g;h"
\convert*"f;g;h"*
\convert"f;g;h"*
\end{document}