我想创建一个命令(或环境),它接受一个名称,打印其内容,并按名称的字母顺序重复附录中的内容。
例如:
\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
。如果您知道要提供的内容的结构,最好定义一个适应的输入格式。这也允许您以一致的方式格式化内容。但除此之外,内容的基本用法按原样工作。