I would take a slightly different approach than Seamus.
We first define a list to hold all the names. The list is to be delimited by commas:
\def\alist{}% {George, Martin, Seamus, Yiannis}
We then define helper macros to add a person to the list. At the same time we create a command on the fly to hold the Bio. For example typing \Mary will typeset the Bio for the person.
To print the Bios in the appendix we simply type,
\PrintBios
We also add a few helper functions to keep the list sorted, so that we can print them alphabetically. These are borrowed for the listings package (just a BubbleSort).
To loop through the list we use the @for from the LaTeX kernel.
Here is a minimal that includes all these. The Bios are just paragraphs from the lipsum package.
\documentclass[11pt]{book} \usepackage{lstdoc,lipsum} \begin{document} \makeatletter \def\alist{} \let\sort\lst@BubbleSort \def\addtolist#1#2{ \lst@lAddTo\alist{#2} } \long\gdef\addPerson#1#2{\addtolist\alist{#1,}} \def\AddBio#1#2{% \long\expandafter\gdef\csname#1\endcsname{\textbf{#1}: #2} \addPerson{#1}{#2} \sort\alist } \def\PrintBios{% \@for \i:=\alist\do{% \csname\i\endcsname} } %example \AddBio{Yiannis}{\lipsum[2]} \AddBio{Mary}{\lipsum[3]} \AddBio{Ann}{\lipsum[1]} % print the biographies \PrintBios \makeatother \end{document}
I am not too sure how fast it will be for hundreds of Bios, but for about 100-200 the compiling time was imperceptible.