LA TEX3 具有根据用户定义的比较对列表变量(序列、标记列表或逗号列表)进行排序的功能。
我尝试将interface3
手册示例改编为令牌列表,但失败了。
!缺失数字,视为零。
也许该参数BCA
被视为一个标记,也就是说排序过程缺少一秒钟,但是接下来如何进行BCA
转换ABC
?
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_foo_tl
\NewDocumentCommand{\Sort}{m}{%
\tl_set:Nn \l_foo_tl { #1 }
\tl_sort:Nn \l_foo_tl
{
\int_compare:nNnTF { ##1 } > { ##2 }
{ \sort_return_swapped: }
{ \sort_return_same: }
}
\l_foo_tl
}
\ExplSyntaxOff
\begin{document}
\Sort{BCA}
\end{document}
答案1
你需要比较数字。如果您的输入仅包含字符,则可以使用
`<char>
这是一个有效的代码:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_tarass_sort_tl
\NewDocumentCommand{\Sort}{m}
{
\tl_set:Nn \l_tarass_sort_tl { #1 }
\tl_sort:Nn \l_tarass_sort_tl
{
\int_compare:nNnTF { `##1 } > { `##2 }
{ \sort_return_swapped: }
{ \sort_return_same: }
}
\tl_use:N \l_tarass_sort_tl
}
\ExplSyntaxOff
\begin{document}
\Sort{BCA}
\end{document}
如果要考虑相同字母的大小写版本,请使用\int_from_alph:n
返回 1 来自A
或a
, 2 来自B
或b
,依此类推,因此
\int_compare:nNnTF { \int_from_alph:n { ##1 } } > { \int_from_alph:n { ##2 } }
将会排序bCA
为AbC
,而上面的代码将生成ACb
。