% -*-latex-*-
%%% ====================================================================
%%%  @LaTeX-file{
%%%     author          = "Nelson H. F. Beebe",
%%%     version         = "1.00",
%%%     date            = "23 December 1997",
%%%     time            = "10:49:08 MST",
%%%     filename        = "authidx.ltx",
%%%     address         = "Center for Scientific Computing
%%%                        University of Utah
%%%                        Department of Mathematics, 105 JWB
%%%                        155 S 1400 E RM 233
%%%                        Salt Lake City, UT 84112-0090
%%%                        USA",
%%%     telephone       = "+1 801 581 5254",
%%%     FAX             = "+1 801 581 4148",
%%%     URL             = "http://www.math.utah.edu/~beebe",
%%%     checksum        = "56883 865 3546 28518",
%%%     email           = "beebe@math.utah.edu, beebe@acm.org,
%%%                        beebe@ieee.org (Internet)",
%%%     codetable       = "ISO/ASCII",
%%%     keywords        = "AmSTeX, awk, author/editor index, e-plain
%%%                        TeX, LaTeX 2.09, LaTeX 2e, makeindex, plain
%%%                        TeX, TUGboat",
%%%     supported       = "yes",
%%%     docstring       = "This document is the TUGboat article
%%%                        describing, and announcing, the authidx
%%%                        author/editor indexing package.  It is
%%%                        included with the software distribution by
%%%                        the kind permission of the TUGboat editors.
%%%
%%%                        To typeset this document, you need the
%%%                        following LaTeX packages available in your
%%%                        (La)TeX inputs path:
%%%
%%%                            authidx	[in this directory]
%%%                            ltugboat [CTAN archive]
%%%                            makeidx	[standard LaTeX]
%%%                            newcent	[CTAN archive]
%%%                            path	[CTAN archive]
%%%                            tugmods	[in this directory]
%%%
%%%                        You may use either LaTeX 2.09 or 2e; with
%%%                        2.09, the newcent package is not required.
%%%
%%%                        The checksum field above contains a CRC-16
%%%                        checksum as the first value, followed by the
%%%                        equivalent of the standard UNIX wc (word
%%%                        count) utility output of lines, words, and
%%%                        characters.  This is produced by Robert
%%%                        Solovay's checksum utility.",
%%%  }
%%% ====================================================================

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% NB: This document can be set with either LaTeX 2.09 or LaTeX 2e;   %%
%% it will adapt automatically.  In the event that the older version  %%
%% is used, we fall back to Computer Modern fonts, instead of using a %%
%% PostScript font for pleasant variety.                              %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\ifx \documentclass \undefined
    \let \documentclass = \documentstyle
    \newcommand{\emph}[1]{{\em #1\/}}
    \newcommand{\textsc}[1]{{\sc #1}}
    \newcommand{\textsl}[1]{{\sl #1}}
    \newcommand{\texttt}[1]{{\tt #1}}
    \newcommand{\usepackage}[1]{\makeatletter\input #1.sty\makeatother}
\fi

\documentclass[twoside]{ltugboat}

\setcounter{page}{1001}          % initial page number in TUGboat

\PrelimDraftfalse

\vol 19, 1.

\issdate March, 1998.

\ifx \textbf \undefined
    % must be LaTeX 2.09, which lacks standard font packages
\else
    \usepackage{newcent}
\fi

\usepackage{makeidx}
\usepackage{authidx}    % must come AFTER makeidx to avoid complaints
                        % about \see being redefined
\usepackage{path}
\usepackage{tugmods}    % special modifications of authidx macros
                        % for use in TUGboat two-column article

% The normal definition of \AmSTeX with \cal fails
% with the newcent package, so we provide
% alternate definitions.
\ifx \AmSTeX \undefined
    \newcommand{\AmSTeX}{AmS\TeX}%
\else
    \renewcommand{\AmSTeX}{AmS\TeX}%
\fi

\ifx \La \undefined
    \newcommand{\La}{L\kern-.36em\raise.3ex}% prefix of \LaTeX{}
\fi

\ifx \POSTSCRIPT \undefined
    \newcommand{\POSTSCRIPT}{{\sc Post\-Script}}%
\fi
\makeauthoreditorindex

\makeindex

\hbadness = 10000        % suppress most complaints about underfull boxes

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Here are some private commands that provide for consistent usage of
%% fonts, and indexing, in this document.  Because of the short text
%% width in a two-column journal, line-breaking problems are common, and
%% we help out by defining a discretionary invisible hyphen, \?, which
%% is used in long arguments to the other macros.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\?}{\penalty0}% for hyphenless line breaking


\newcommand{\COMMAND}[1]{\texttt{{\char92}#1}\XCOMMAND{#1}}%
\newcommand{\XCOMMAND}[1]{\index{#1@\protect\texttt{{\char92}#1}}}

\newcommand{\ENVIRONMENT}[1]{\texttt{#1}\XENVIRONMENT{#1}}
\newcommand{\XENVIRONMENT}[1]{\index{#1@\protect\texttt{#1}}}

\newcommand{\FILE}[1]{\textsl{#1}\XFILE{#1}}
\newcommand{\XFILE}[1]{\index{#1@\protect\textsl{#1}}}

\newcommand{\PROGRAM}[1]{\textsc{#1}\XPROGRAM{#1}}
\newcommand{\XPROGRAM}[1]{\index{#1@\protect\textsc{#1}}}

\newcommand{\X}[1]{#1\index{#1}}

\pagestyle{headings}

\title{%
        \PROGRAM{auth\?idx}: An Author\slash Editor
        Indexing Package
}

\author{%
        Nelson H. F. Beebe
}

\address{%
        Center for Scientific Computing\\
        University of Utah\\
        Department of Mathematics, 105 JWB\\
        155 S 1400 E RM 233\\
        Salt Lake City, UT 84112-0090\\
        USA\\
        Tel: +1 801 581 5254\\
        FAX: +1 801 581 4148\\
        WWW URL: \protect\path=http://www.math.utah.edu/~beebe/=
}

\typeout{====================TO THE EDITOR: I'm adjusting signaturewidth to allow my long URL to fit!}
\setbox0=\hbox{\hspace*{1pc}\protect\path=http://www.math.utah.edu/~beebe/=}
\signaturewidth=\wd0

\netaddress[\network{Internet}]
{
        beebe@math.utah.edu,
        beebe@acm.org,
        beebe@ieee.org
}

\begin{document}

%% \mbox{}\newpage % force empty first column to match TUGboat copy

\maketitle

\tableofcontents

  \begin{abstract}
This document describes \PROGRAM{auth\?idx}, a
package for automatic generation of author\slash
editor indexes, and citation page references, with
AmS\TeX{}, \LaTeX{}, e-plain \TeX{}, and plain \TeX{}.
  \end{abstract}

\section{Introduction}

Sadly, the bibliographic data provided in many
technical publications is sparse, inaccurate, and
hard to use as a resource in itself.  Some of this
can be attributed to the pain that authors and
typists suffer in preparing bibliographic data for
publication, and some is also certainly due to
human egos: most authors would rather write about
what \emph{they} have done, than about what
\emph{others} have produced.

The availability of large bibliographic databases,
such as those in the \TeX{} User Group%
bibliography archive%
\index{tex user group bibliography archive@\TeX{} User Group bibliography archive}%
\index{bibliography archive!tex user group@\TeX{} User Group}
at the author's FTP site,
\path=ftp://ftp.math.utah.edu/pub/tex/bib=,
and the huge Computer Science archive at
\path=ftp://ftp.ira.uka.de/pub/bibliography= in
Karlsruhe,\index{Karlsruhe bibliography archive}%
\index{bibliography archive!Karlsruhe}
Germany, offers interesting possibilities for
substantially improving the traditional citation
bibliographies in technical documents.

First of all, when literate references are readily
available in marked-up form that can be converted
automatically to the style required by the
publisher or organization, much of the tedium of
citing references in documents is eliminated.  For
example, with my favorite bibliographic system,
\BibTeX{}%
\index{bibtex@\BibTeX{}}
\cite[pp.~155--164]{Lamport:1994:LDP}, all
that I require in the running text of this article
for the citation in this sentence is the text
\path=\cite[pp.~155--164]{Lamport:1994:LDP}=, plus
two simple \COMMAND{biblio\?graphy}
and
\COMMAND{biblio\?graphy\?style}
declarations near the end of this document, and an
invocation of the \BibTeX{} program between
\LaTeX{} runs.

Second, when a fast and powerful search engine is
used to access a large bibliographic archive, such
as the \PROGRAM{bibsearch}
\cite{Witten:1994:MGC} system at my site (a simple
interface to the \PROGRAM{mg} database system
\cite{Witten:1994:MGC}), authors can readily
locate many references that they might otherwise
have overlooked, and they are therefore much more
likely to provide more extensive bibliographies in
their documents.

  \begin{sloppypar}
Third, when bibliographic data access is easy, and
the collection is large, authors are likely to
turn up many interesting references that they had
not previously encountered, thereby enriching
their own ideas, and promoting intellectual
progress by building on the work of others.
  \end{sloppypar}

\section{The book bibliography problem}

% 86 visitors from 6 countries
% 179 PostScript figures
% 573 references
% 1088 authors indexed

During 1995--1996, at the University of Utah, with
U.S. \X{National Science Foundation} support, we
hosted a \emph{Special Year in Mathematical
Biology}.%
\index{mathematical biology}
This brought together eighty-six outside
researchers in the field (graduate students,
post-doctoral fellows, and visiting faculty) from
six countries, for visits ranging from a few days
to several months, at our Mathematics and Biology
departments.  At the conclusion of this activity,
we set about to prepare a book
\cite{Othmer:1997:CSM} to document the research
carried out during the Special Year.

I was the consulting technical editor on the book,
and its production took almost six months of
extremely intense work on the part of the
contributing authors, editors, and technical
support people.  Work began in June, and the day
before Thanksgiving in late November, I uploaded
the final completed \POSTSCRIPT{} files to the
publisher's printer shop. Just five weeks later,
the book was available in bookstores.

The book has 573 literature references, every one
of which was checked against library catalogs and
journal databases.  Though tedious, this checking
was extremely worthwhile, since it uncovered
scores of errors and omissions which were repaired
before publication.

Since the book documents forefront research in the
relatively young field of mathematical biology,
most of its references were to work of the last
two decades, and researchers and students who use
the book will very likely want to read many of
those publications.

With conventional bibliographies, the bibliography
is of little use in itself, since one has no easy
way to find out where in the text a particular
publication was cited, and why, unless, of course,
one has an author who is as conscientious as
Donald E.~Knuth is about indexing cited authors.

I therefore decided that the bibliography in our
book would be different: every bibliographic entry
would contain a list of page numbers in the book
where the publication was cited, and every author
of every publication would be indexed.  This
latter index is important, because good scientific
research often requires reading all of the
publications of a prominent author in a particular
area.  In addition, book entries would contain
\X{International Standard Book Number (ISBN)} values,
providing unique identifiers that can be helpful
in locating books in libraries, or ordering them
through bookstores.

The problem with this objective is that with
hundreds of citations, and over a thousand authors
in the bibliography, accurate manual preparation
of the cross-references and index is humanly
impossible.  Computers, however, get neither
bored, nor tired, so they can accomplish the job,
given suitable software.  At the start of this
project, such software did not exist.

\section{Preparing to solve the problem}

To understand how I solved the problem, it is
useful to review how citations in the running text
eventually produce a reference to a bibliographic
entry.  While the description here assumes
(\La)\TeX{} and \BibTeX{}, \emph{any} document
formatting and bibliographic systems will have to
do something similar.

First, the presence of a citation in the running
text, such as \verb=\cite{Lamport:1994:LDP}=,
results in the entry on an auxiliary file of a
line containing the citation label, such as
%
\begin{verbatim}
\citation{Lamport:1994:LDP}
\end{verbatim}
%
Since the expansion of that citation in the
running text may not be known until the
bibliographic data has been retrieved, the amount
of space that it requires is initially uncertain,
and consequently, the typesetting system must make
at least two passes over the document before line-
and page-breaking decisions can be finalized.

Second, when the bibliographic software reads the
auxiliary file, it must locate the requested
citations in one or more bibliographic database
files, and then format them for inclusion in the
bibliography according to the specified style.  For
\BibTeX{}, this might mean that the database
entry%
\index{bibtex sample entry@\BibTeX{} sample entry}

\begin{small}
\begin{verbatim}
@Book{Lamport:1994:LDP,
  author =    "Leslie Lamport",
  title =     "{\LaTeX}: {A} Document
              Preparation System: User's
              Guide and Reference
              Manual",
  publisher = pub-AW,
  address =   pub-AW:adr,
  edition =   "Second",
  pages =     "xvi + 272",
  year =      "1994",
  ISBN =      "0-201-52983-1",
  LCCN =      "Z253.4.L38L35 1994",
  acknowledgement = ack-nhfb,
  bibdate =   "Wed Aug 10 09:55:59 1994",
}
\end{verbatim}
\end{small}

\noindent
is retrieved and reformatted in an output
bibliography file as
%
\begin{small}
\begin{verbatim}
\bibitem{Lamport:LDP94}
Leslie Lamport.
\newblock {\em {\LaTeX}: {A} Document
  Preparation System: User's Guide and
  Reference Manual}.
\newblock Ad{\-d}i{\-s}on-Wes{\-l}ey,
  Reading, MA, USA, second edition, 1994.
\newblock \showISBN{0-201-52983-1}.
\newblock xvi + 272 pp.
\newblock \showLCCN{Z253.4.L38L35 1994}.
\end{verbatim}
\end{small}
%
which is finally typeset by \LaTeX{} in the form
shown in the bibliography at the end of this
document.

Several modifications of the citation process are
required for our book indexing project:
\begin{itemize}
  \item each citation recorded in the auxiliary file
        must also include its page number;
  \item the page numbers must not interfere with
        the bibliographic data extraction;
  \item the page number lists for each cited
        publication must be collected, sorted, and
        merged to remove duplicates, and then
        included in the corresponding bibliography
        entry;
  \item the authors and\slash or editors of each cited
        entry must be extracted and added to an
        auxiliary index file;
  \item the author\slash editor index file must be
        sorted, merged, and formatted for
        inclusion in an index.
\end{itemize}

For (\La)\TeX{}, access to page numbers is
complicated by the asynchronous nature of \TeX{}'s
page breaking algorithm: the output routine can be
called at any time, either implicitly or
explicitly, and it may choose to delay some of the
accumulated potential output material until the
next page.  Thus, \TeX{} does not have a single
variable that reliably records the `current page
number'.  Fortunately, \TeX{}'s author saw the
need for this, and provided a \COMMAND{write}
command whose argument is not evaluated until the
\X{output routine} has made its page-breaking decision
and the text is sent to the output file
\cite[pp.~215, 217]{Knuth:1984:TB}.  Thus, the same
mechanism that is used for writing page numbers in
table-of-contents, list-of-figures,
list-of-tables, and index files can be used for
recording the citation page numbers.

\section{The user interface}

Once the package is properly installed in the
local \TeX{} system, to use it, you first need to
load it near the start of your document file:

\medskip
\noindent
\begin{tabular}{@{}l@{\hspace{1ex}}l@{}}
  \LaTeX{} 2e    & \COMMAND{usepackage\{authidx\}}\\
  \LaTeX{} 2.09  & \COMMAND{documentstyle[authidx]\{\ldots\}}\\
  \AmSTeX \\
  e-plain \TeX{} & \COMMAND{input} \FILE{authidx.sty}\\
  plain \TeX{}   &
\end{tabular}
\medskip

After loading the package, you need to request
that data for the author\slash editor index be
written on this run:

\noindent
\COMMAND{makeauthoreditorindex}

\noindent
This command might be commented out during
development to save a bit of time.

Although it is rarely necessary, or desirable, to do
so, it \emph{is} possible to write extra entries to the
indexing file without citing them in the running
text:

\noindent
\COMMAND{authoreditorindex\{\emph{\BibTeX-label\}}}

\noindent
This command is used internally by the modified
\COMMAND{cite} command to record the citation label
in the indexing file.

The \COMMAND{biblio\?graphy} command has been modified
to create \COMMAND{bib\?data} entries in both the
normal auxiliary file, and the author\slash editor
indexing file.

The index is printed inside a
\ENVIRONMENT{the\?author\?editor\?index}
environment, which is generated automatically when
the user issues the
\COMMAND{print\?author\?editor\?index}
command.

\LaTeX{} users will recognize the similarity of
these to \FILE{makeidx.\?sty}, \COMMAND{make\?index},
\COMMAND{index}, \ENVIRONMENT{the\?index}, and
\COMMAND{print\?index}.

For additional user control over the author\slash
editor index, the user may provide alternate
definitions of the following macros, with
\COMMAND{re\?new\?com\?mand} (in \LaTeX{}) or
\COMMAND{def} (in other \TeX{} formats):
%
\begin{verbatim}
\def \AEnamefontfirst #1{{\sc #1}}%
\def \AEnamefontrest  #1{{\rm #1}}%
\def \AEpagefontfirst #1{{\bf #1}}%
\def \AEpagefontrest  #1{{\rm #1}}%
\end{verbatim}
%
As shown, each takes a single argument, and allows
typesetting the first author or page number
differently from the remaining ones.

The reason for offering alternate typesetting of
first and remaining authors is the tradition, in
many fields, of referring to a multi-author work
by the first author alone, or as a colleague once
remarked to me:

\begin{quote}
If you see a reference to a paper by \emph{Smith
et al.}, then you know that Smith got the credit,
but Al did the work!
\end{quote}

\noindent
Personally, I deplore this practice, and try very
hard to avoid use of \emph{et al.}, and the
corresponding \emph{and others} in \BibTeX{}
files.

The default definitions of these font macros do
not specify a font \emph{size}, so in \LaTeX{},
they will automatically inherit the prevailing
font size.  This allows you to use \LaTeX{} input
like this:
%
\begin{verbatim}
\begin{small}
    \printauthoreditorindex
    \printindex
\end{small}
\end{verbatim}
%
to typeset the indexes in smaller type, as is
commonly done.

The \ENVIRONMENT{the\?author\?editor\?index}
environment is modeled very closely on \LaTeX{}'s
\ENVIRONMENT{the\?index} environment.  It switches
to two-column mode, which starts a new page, then
begins an unnumbered section or chapter with the
title \emph{Author\slash Editor Index}, sets the
even- and odd-page running heads to
\emph{AUTHOR\slash EDITOR INDEX}, sets the page
style to \emph{plain} for the first page of the
index, and defines \COMMAND{item} to be the same
as the internal \LaTeX{} \COMMAND{@idxitem} macro.

While this default behavior will often be
adequate, many documents may require something
different, such as for the three-column indexing
used in our book \cite{Othmer:1997:CSM}.

Rather than trying to parametrize bits and pieces
of this environment with user-customizable macros,
it seems to make more sense to simply advise the
user to redefine
\ENVIRONMENT{the\?author\?editor\?index}
completely when needed, with
\COMMAND{renewenvironment} in \LaTeX{}, or
\COMMAND{def} in other \TeX{} formats.

For example, for a journal article such as this
one, starting a new page and changing page headers
is unnecessary, so this simple redefinition
suffices:

%
\begin{verbatim}
\renewenvironment
    {theauthoreditorindex}%
 {%
  \section*{Author/editor index}%
  \setlength{\parindent}{0pt}%
  \setlength{\parskip}{0pt plus 0.3pt}%
  \renewcommand{\item}%
  {%
   \par
   \setlength{\hangindent}{40pt}%
  }%
 }%
 {%
  \relax
 }
\end{verbatim}
%
\noindent
The corresponding redefinition of
\ENVIRONMENT{the\?index} differs from this only in
the section heading.

In a large bibliography, it may be useful to
include author\slash editor page references to the
bibliography itself:
%
\begin{verbatim}
\bibliographyindextrue
\end{verbatim}
%
You can turn off this feature with
%
\begin{verbatim}
\bibliographyindexfalse
\end{verbatim}
%
The default setting is \emph{true}.

Finally, the appearance of page-number
cross-references in the bibliography can be
controlled by redefining this macro:
%
\begin{verbatim}
\def \bibindex #1{\{{\bf #1}\}}
\end{verbatim}
%
The argument to \COMMAND{bibindex} is a
comma-separated list of page numbers, in ascending
order, with consecutive page numbers collapsed to
page ranges.

In summary, here is what a typical input file for
\LaTeX{} 2e might look like:
%
\begin{verbatim}
\documentclass{book}
  \usepackage{makeidx}
  \usepackage{authidx}
  \makeauthoreditorindex
  \makeindex
\begin{document}
  ...
  \printauthoreditorindex
  \printindex
\end{document}
\end{verbatim}%
\index{latex sample file@\LaTeX{} sample file}%
\XPROGRAM{auth\?idx}%
\XCOMMAND{makeauthoreditorindex}%
\XPROGRAM{make\?idx}%
\XCOMMAND{make\?index}%
\XCOMMAND{print\?author\?editor\?index}%
\XCOMMAND{print\?index}

The \PROGRAM{auth\?idx} package must be included
\emph{after} the \PROGRAM{make\?idx} package, because
the latter fails to check for a prior definition
of one macro (\COMMAND{see}) that \PROGRAM{auth\?idx}
also must define in case it is used without the
other package.

\section{Running the programs}

Besides \TeX{}, \BibTeX{}, and \PROGRAM{make\?index},
there is one additional program needed to complete
the author\slash editor indexing job: \PROGRAM{auth\?idx}.
Its task is to combine the data in the
author\slash editor index file (\FILE{.aei})
created in the (\La)\TeX{} runs with data
extracted from the \BibTeX{} database files to
produce a modified index file (\FILE{.ida}) that
is suitable for input to \PROGRAM{make\?index}.

Here is the sequence of job steps that needs to be
run on a \X{UNIX} system:
%
\begin{verbatim}
latex mybook.ltx
bibtex mybook
latex mybook.ltx
bibtex mybook
authidx mybook.aei > mybook.ida
mv mybook.bbl mybook.tmp
authidx mybook.aei mybook.tmp \
    > mybook.bbl
makeindex -o mybook.ina mybook.ida
makeindex -o mybook.ind mybook.idx
latex mybook.ltx
\end{verbatim}
%
\noindent
The steps on most other operating systems would be
very similar to these.

The second \PROGRAM{bibtex} run is needed to
handle bibliographic data that contains
\COMMAND{cite} commands for cross-referencing; it
can be omitted if this is not the case.

The second \PROGRAM{auth\?idx} run modifies the
\FILE{.bbl} file to include page-number cross
references.

Since the above steps will likely need to be done
several times during document development, these
commands should be encapsulated in a single
command file, or better, a \FILE{Make\?file},
since the \PROGRAM{make} program will check stated
file dependencies to avoid running unnecessary
steps.

\section{Portability considerations}

The \PROGRAM{auth\?idx} program is approximately 1000
lines of code in the \PROGRAM{awk} programming
language
\cite{Aho:1988:APL,Dougherty:1990:SA,Dougherty:1997:SA,Robbins:1996:EAP}.

\PROGRAM{awk} is a simple, and clean, text
processing language that is ideally suited to this
task.  I have written over a hundred thousand
lines of code in that language, and found that
equivalent programs in other languages are
invariably significantly longer, and much harder
to get right.

In addition, \PROGRAM{awk} is an \X{IEEE} \X{POSIX}
\cite{Gallmeister:1995:PPR,IEEE:POSIX.2-93-vol1,IEEE:POSIX.2-93-vol2,Lewine:1991:PPG,Zlotnick:PSP91}
standard, and since POSIX conformance is available
(though not necessarily installed by default) for
virtually all commercial operating systems, you
should expect your system vendor to provide it.

To find out whether your system has POSIX
compliance, visit
\path=http://nemo.ncsl.nist.gov/posix/151-1reg=
and
\path=http://nemo.ncsl.nist.gov/posix/151-2reg= on
the \X{World-Wide Web}, or send electronic mail to
\path=posix@nist.gov= with this text:
%
\begin{verbatim}
send help
send 151-1reg
send 151-2reg
\end{verbatim}

The most obvious omission among the many systems
listed is the \X{Apple Macintosh}%
\index{Macintosh!Apple}
operating system; only the \X{A/UX} and
\X{MachTen} operating systems on the Macintosh
hardware platform have \X{POSIX} compliance.  By
searching on the Web,%
\index{World-Wide Web}
I located a reference to a port of \PROGRAM{awk}
to the \X{Macintosh Programmer's Workbench (MPW)},
but at the time of writing this, the link was
unreachable.

There are also independent commercial
implementations of the language for the IBM PC
platform, and at least four freely-distributable
implementations: \PROGRAM{bawk},
\PROGRAM{gawk}, \PROGRAM{mawk}, and
\PROGRAM{nawk}, the last of which is from the
original developers at AT\&T \cite{Aho:1988:APL},
with continued improvements.  The \PROGRAM{awk}
development groups are in close contact, so the
implementations retain fidelity to the original
language definition \cite{Aho:1988:APL}.

The book about the \X{Free Software Foundation}'s
\X{GNU} implementation, \PROGRAM{gawk}
\cite{Robbins:1996:EAP}, is also available in
\TeX{}info form for use online in the \X{GNU}
\PROGRAM{Emacs} \PROGRAM{info} system, or for
separate typesetting and printing, but I use my
bound copy a good deal too.

More details on sources of \PROGRAM{awk}
implementations are included in the documentation
in the \PROGRAM{auth\?idx} distribution.

\section{Availability}

The master archive location for the
\PROGRAM{auth\?idx} package distribution is
\path=ftp://ftp.math.utah.edu/pub/tex/authidx=. By
the time you read this, it should also be mirrored
to the \X{Comprehensive \TeX{} Archive Network
(CTAN)}; try \verb=finger ctan@tug.org= to find a
CTAN mirror site near you.

\section{Conclusions}

The bibliography and indexes which follow this
section demonstrate, for this short document, what
the \PROGRAM{auth\?idx} package can do.  For a much
bigger example, see our mathematical biology book
\cite{Othmer:1997:CSM}.  That book has separate
bibliographies in each chapter, demonstrating that
\PROGRAM{auth\?idx} can be used even for documents
with multiple bibliographies.

The beauty of the package is that it makes much
better bibliographies and indexes available for
very little effort on the part of the author:
three extra lines in the input file, and four
extra commands to be executed during the
typesetting.

As the utility of its features becomes more widely
known and appreciated, I hope that this package
will receive wide use in the \TeX{} community, and
that publishers will adopt it for their routine
technical book production.

Provided that \BibTeX{} bibliographic databases
are used, \PROGRAM{auth\?idx} and a very simple
\PROGRAM{make\?index} style file that produces SGML
instead of \TeX{} would make the package available
to those many publishers who use SGML markup for
documents.

With an alternate bibliographic database format,
the \PROGRAM{auth\?idx} program would have to be
rewritten, but I expect that major portions of the
existing \PROGRAM{awk} code could be reused, so
that the revision might take only a day or two of
work.

\bibliographystyle{is-plain}

\bibliographyindexfalse
\bibliography{authidx}

\begin{small}
    \raggedright
    \renewcommand{\index}[1]{}% suppress indexing in the index!
    \printauthoreditorindex
    \printindex
\end{small}

\makesignature

\end{document}
%%% This is for GNU Emacs file-specific customization:
%%% Local Variables:
%%% fill-column: 50
%%% End:
