按字母顺序重复附录中的项目

按字母顺序重复附录中的项目

我想创建一个命令(或环境),它接受一个名称,打印其内容,并按名称的字母顺序重复附录中的内容。

例如:

\monkeyInfo{tamarin}{
Tamarins are awesome monkeys.\\
%Maybe more text...
%Maybe a figure...
%etcetc
}

\monkeyInfo{capuchin}{
There was a capuchin monkey on Friends.\\
%more here...
%more...
}

然后,稍后在附录中,会出现如下内容:

\chapter{Alphabetical Monkeys}

\includeMonkeyInfos

在输出中,在正常文本中,Tamarin 条目应该位于 Capuchin 之前。在附录中,它们应该重复,但按字母顺序排列,因此 Capuchin 条目将位于 Tamarin 之前。

为此创建宏/环境的正确方法是什么?

答案1

我建议使用datatool管理数据,因为它还可用于对数据库进行排序并按您想要的方式打印所有内容。下面简要介绍一下它的外观:

在此处输入图片描述

\documentclass{article}

\usepackage{datatool}

\DTLnewdb{monkey}

\newcommand{\monkeyInfo}[2]{%
  \par\noindent
  #1:\space\ignorespaces #2% Set the info associated with this particular monkey
  \DTLnewrow{monkey}% Add a new row to the monkey database
  \DTLnewdbentry{monkey}{name}{#1}% Insert monkey name
  \DTLnewdbentry{monkey}{description}{#2}% Insert the monkey description
}

\newcommand{\includeMonkeyInfos}{%
  \dtlsort{name=ascending}{monkey}{\dtlcompare}% Sort database by name
  \DTLforeach{monkey}{%
    % Define variables for each key
    \MonkeyName=name,
    \MonkeyDescription=description%
  }{%
    % How each item in the database should be set
    \par\addvspace{.25\baselineskip}
    \noindent\textbf{\MonkeyName}: \MonkeyDescription
  }%
}

\begin{document}

\section{Monkeys}

\monkeyInfo{tamarin}{%
Tamarins are awesome monkeys.\\
%Maybe more text...
%Maybe a figure...
%etcetc
}

\monkeyInfo{capuchin}{%
There was a capuchin monkey on Friends.\\
%more here...
%more...
}

\appendix

\section{Appendix}

\includeMonkeyInfos

\end{document}

请注意,datatool无法处理其存储的定义中的段落(空行)。如果要这样做,您需要使用\DTLpar。如果您知道要提供的内容的结构,最好定义一个适应的输入格式。这也允许您以一致的方式格式化内容。但除此之外,内容的基本用法按原样工作。

相关内容