我想循环遍历 LaTeX 文档并收集具有多个条目的键的每个实例。
IE
\begin{document}
\lipsum[1-1]
\key{name=Peter, age=50, gender=male}
\lipsum[1-1]
\key{name=Max, age=20, gender=male}
\lipsum[1-1]
\key{name=Lena, age=90, gender=female}
\makekeylist
\end{document}
\makekeylist
应该生成一个\tabularx
包含上述条目以及它们首先出现的各自页面的类似表。
我迄今为止的尝试makeidx
并没有取得任何结果,而且我对正确的答案也有点一无所知。
谢谢大家的帮助。
答案1
\documentclass[a5paper]{article}
\usepackage{keyval,tabularx}
\usepackage{lipsum}
\makeatletter
\def\zz@table{}
\newcount\zz@count
\define@key{zz}{name}{\def\zz@name{#1}}
\define@key{zz}{age}{\def\zz@age{#1}}
\define@key{zz}{gender}{\def\zz@gender{#1}}
\newcommand\key[1]{%
\global\advance\zz@count\@ne
\label{zz\the\zz@count}%
\setkeys{zz}{name=?,age=?,gender=?}%
\setkeys{zz}{#1}%
\xdef\zz@table{\expandafter\unexpanded\expandafter{\zz@table}%
\zz@name&\zz@age&\zz@gender&\noexpand\pageref{zz\the\zz@count}\noexpand\\}%
}
\newcommand\makekeylist{%
\begin{center}
\begin{tabularx}{\textwidth}{XXXX}
Name&Age&Gender&Page\\
\hline
\zz@table
\end{tabularx}
\end{center}}
\begin{document}
\lipsum[1-1]
\key{name=Peter, age=50, gender=male}
\lipsum[1-1]
\key{name=Max, age=20, gender=male}
\lipsum[1-1]
\key{name=Lena, age=90, gender=female}
\makekeylist
\end{document}