我们需要写一篇论文来描述接口列表。但是作业要求我们需要按字母顺序对接口进行排序。因为这个列表很长(超过 20 个),所以我正在寻找一种方法来按字母顺序对子部分(每个子部分描述一个接口)进行排序。无需自己移动代码。
是否有一个包可以处理这个问题?
以下是代码示例:
\newcommand{\interfaceItem}[5]{
\subsection{#1}\label{interfaceItem:#1}
\paragraph{Paragraph 1}#2
\paragraph{Paragraph 2}#3
\paragraph{Paragraph 3}#4
\paragraph{Paragraph 4}#5
}
答案1
这是一个实现:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\interfaceItem}{mmmmm}
{
\seq_put_right:Nn \l_commusoft_interfaces_seq {#1}
\cs_new:cpn { commusoft_interface_#1: } {
\subsection{#1}\label{interfaceItem:#1}
\paragraph{Paragraph 1}#2
\paragraph{Paragraph 2}#3
\paragraph{Paragraph 3}#4
\paragraph{Paragraph 4}#5
}
}
\NewDocumentCommand{\printInterfaces}{ }
{
\seq_sort:Nn \l_commusoft_interfaces_seq
{
\string_compare:nnnTF {##1} {>} {##2} {\sort_return_swapped:} {\sort_return_same:}
}
\seq_map_inline:Nn \l_commusoft_interfaces_seq { \use:c { commusoft_interface_##1: } }
}
\seq_new:N \l_commusoft_interfaces_seq
\prg_new_conditional:Npnn \string_compare:nnn #1 #2 #3 {TF}
{
\if_int_compare:w \pdftex_strcmp:D {#1}{#3} #2 \c_zero
\prg_return_true:
\else:
\prg_return_false:
\fi
}
\ExplSyntaxOff
\interfaceItem{A}{A1}{A2}{A3}{A4}
\interfaceItem{C}{C1}{C2}{C3}{C4}
\interfaceItem{B}{B1}{B2}{B3}{B4}
\begin{document}
\printInterfaces
\end{document}
然而,更简单的策略可以更容易:
\makeatletter
\newcommand{\interfaceItem}[5]{
\@namedef{interface@\detokenize{#1}}{%
\subsection{#1}\label{interfaceItem:#1}
\paragraph{Paragraph 1}#2
\paragraph{Paragraph 2}#3
\paragraph{Paragraph 3}#4
\paragraph{Paragraph 4}#5
}
}
\newcommand{\printInterface}[1]{%
\@nameuse{interface@\detokenize{#1}}%
}
\makeatother
你可以像前面一样在序言中定义你的接口,
\interfaceItem{A}{A1}{A2}{A3}{A4}
\interfaceItem{C}{C1}{C2}{C3}{C4}
\interfaceItem{B}{B1}{B2}{B3}{B4}
然后说
\printinterface{A}
\printinterface{B}
\printinterface{C}
对短命令列表进行排序比对大块代码进行排序更容易。
答案2
TeX 是图灵完备语言,因此我相信这个问题可以“轻松”解决。但是,最好使用标准 Unix 工具(至少在 Unix 上)来完成此操作。创建一个目录接口您将在其中创建一个单独的.tex文件中每个接口的描述。例如
z-interface.tex
a-interface.tex
q-interface.tex
b-interface.tex
现在做类似的事情
ls interfaces > interface-names.txt
这将创建 interface-names.txt 文件,其中接口按字母顺序排序。使用 awk,您可以轻松地\input
在每个文件名前面添加 TeX 命令。例如
awk '{print "\\input",$1}' interface-names.txt > interface-names.tex
现在只需输入以下行
\input interface-names.tex
进入你的主要.tex文件,你将拥有所有子部分,只要主文件.tex文件和接口.tex文件位于同一目录中。