我正在尝试按字母顺序对需要扩展的元素数组进行排序。我使用了以下排序代码的修改版本这个答案,但我看到的是未排序的列表“Doga, Kittya1, Doga1”,而我期望的是已排序的扩展元素:“Doga, Doga1, Kittya1,”。显然我做错了,因为它甚至没有根据变量名称进行排序。此外,我想识别最后一次迭代,而不是在这种情况下打印逗号。我无法找到合适的数据工具变量。
\documentclass{article}
\usepackage{datatool}
\newcommand{\cat}[2][]{Kitty%
\ifthenelse{\equal{#1}{}}{}{%
\ifthenelse{\equal{#2}{}}{$_{\small{#1}}$}
{$_{\small{#1#2}}$}}%
}
\newcommand{\dog}[2][]{Dog%
\ifthenelse{\equal{#1}{}}{}{%
\ifthenelse{\equal{#2}{}}{$_{\small{#1}}$}
{$_{\small{#1#2}}$}}%
}
\def\CA{\cat[a]{1}}
\def\CB{\cat[b]{1}}
\def\DA{\dog[a]}
\def\DB{\dog[a]{1}}
\newcommand{\sortitem}[1]{%
\DTLnewrow{list}% Create a new entry
\DTLnewdbentry{list}{description}{#1}% Add entry as description
}
\newenvironment{sortedlist}{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}% Create new/discard old list
}{%
\DTLsort{description}{list}% Sort list
\DTLforeach*{list}{\theDesc=description}{%
\theDesc
, }% Print each item
}
\begin{document}
\begin{sortedlist}\sortitem{\DB}\sortitem{\CA}\sortitem{\DA}\end{sortedlist}
\end{document}
答案1
Ifthenelse 在环境中不起作用\DTLnewdbentry
,我使用 更改了您的代码\ifx
。我还必须\dtlexpandnewvalue
在数据库条目之前添加:让命令和定义在存储之前展开。此外,在 dogA 中,您给出了可选参数而不是强制参数,这个错误使其定义要求下一个参数并在,
扩展后采用。A 给出了一个空的强制参数……但我想我可以用 替换[]
。{}
最后,\small
在数学模式中不起作用。(搜索“latex 更改数学参数”的方法。)。
代码在这里:
\documentclass{article}
\usepackage{datatool}
\usepackage{tikz}
\usepackage{ifthen}
\newcommand{\cat}[2][]{Kitty%
\ifx#1\empty\relax\else
\ifx#2\empty\small{$_{#1}$}\else\small{$_{#1#2}$}\fi\fi%
}
\newcommand{\dog}[2][]{Dog%
\ifx#1\empty\relax\else
\ifx#2\empty\small{$_{#1}$}\else\small{$_{#1#2}$}\fi\fi%
}
\def\CA{\cat[a]{1}}
\def\CB{\cat[b]{1}}
\def\DA{\dog[a]{}}
\def\DB{\dog[a]{1}}
\newcommand{\sortitem}[1]{%
\DTLnewrow{list}%
\dtlexpandnewvalue
\DTLnewdbentry{list}{description}{#1}%
}
\newenvironment{sortedlist}{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}% Create new/discard old list
}{%
\DTLsort*{description}{list}% Sort list
\DTLforeach*{list}{\theDesc=description}{%%
\theDesc
, }% Print each item
}
\begin{document}
Unsorted:
\DB,\CA,\DA,\CB
Sorted:
\begin{sortedlist}
\foreach \i in {\DB,\CA,\DA,\CB}{\sortitem{\i}}
\end{sortedlist}
\end{document}
结果如下:
我已经链接:根据参数对数据工具中的数据进行排序
这里还有一个类似的问题,我在上面解释了这个问题,\ifthenelse
但它可能被删除了。所以这两个问题给出了一个完整的答案。(可能它在某种程度上是重复的,但它与已删除的重复,因为链接\random
也失败了)。