expl3 -- 对标记列表进行排序

expl3 -- 对标记列表进行排序

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 来自Aa, 2 来自Bb,依此类推,因此

    \int_compare:nNnTF { \int_from_alph:n { ##1 } } > { \int_from_alph:n { ##2 } }

将会排序bCAAbC,而上面的代码将生成ACb

相关内容