MAKEINDEX(1)
๐ MAKEINDEX(1) ๐
Okay bestie, this is makeindex (manual section 1, from TeX Live) ๐
โจ NAME โจ
makeindex - a general purpose, formatter-independent index processor ๐
๐ง SYNOPSIS ๐ง
makeindex [-c] [-g] [-i] [-l] [-o ind] [-p num] [-q] [-r] [-s sfile] [-t
log] [-L] [-T] [idx0 idx1 idx2...]
๐ธ DESCRIPTION ๐ธ
Okay so makeindex is a general purpose hierarchical index generator and it is literally so iconic ๐ญโจ It takes one or more input files, which are often made by a text formatter like TeX (tex(1L)) or troff(1). Then it sorts the entries and spits out an output file you can format. The index can go up to three levels (0, 1, and 2) of subitem nesting, which is giving very organized energy ๐
Quick heads up: the way words get flagged for indexing inside your main document depends on whichever formatter you're using. makeindex does NOT pick the words for you ๐
Now, the output index is hierarchical, so makeindex is basically complementary to the awk(1)-based make.index(1L) system from Bentley and Kernighan. That one is specific to troff(1), makes non-hierarchical indices, and uses a much simpler syntax for marking entries. Different vibes, both valid ๐ฆ For illustration of use with troff and TeX, check the section EXAMPLES below.
The formats of the input and output files are set in a style file ๐ By default, the input is assumed to be a .idx file, the kind LaTeX generates.
Unless you say otherwise, the base name of the first input file (idx0) is used to figure out the names of the other files ๐ For each input file name you give, a file of that name gets looked for. If it's not found and the file name has no extension, the extension .idx gets added. If no file with that name exists at all, makeindex aborts. Rip ๐
If exactly one input file was given and you didn't pick a style file with -s, makeindex will use a file with the extension .mst as the default style file, but only if it's actually there ๐
For the important notes on how to pick index keywords, read the document by Lamport cited below. Separate from picking keywords, there's a systematic way to place index terms in a document in a paper called Index Preparation and Processing, also cited below. Bookmark both, they're the real deal ๐ฅ
๐ OPTIONS ๐
-cโ Compress the in-between blanks ๐ซง Leading and trailing blanks and tabs get ignored. By default, the blanks in the index key are kept.-gโ Okay this one is for German vibes ๐ฉ๐ช It uses German word ordering from DIN 5007. Normally, makeindex orders things as: symbols, numbers, uppercase letters, then lowercase letters. German ordering goes: symbols, lowercase letters, uppercase letters, then numbers. This option also lets makeindex read the German TeX commands{"a, "o, "u and "s}as{ae, oe, ue and ss}while sorting entries. The quote character has to be redefined in a style file first (for example,redefine quote as '+'). If you don't redefine the quote character, makeindex throws an error and aborts ๐ญ-iโ Take the input from stdin ๐ฅ When you use this and skip-o, the output gets written to stdout.-lโ Letter ordering! By default, word ordering is used instead, so check the ORDERING section for the deets ๐-o indโ Useindas the output index file ๐ท By default, the file name is made by adding the extension.indto the base name of the first input file (idx0).-p numโ Set the starting page number of the output index file to be num ๐ This is super useful when the index file gets formatted separately. The argument num can be a number or one of these three slay options:anyโ The starting page is the last source page number plus 1 โจoddโ The starting page is the first odd page after the last source page number ๐evenโ The starting page is the first even page after the last source page number ๐ฆ
The last source page is found by searching backward through the log file for the first number wrapped in paired square brackets ([...]) ๐ If a page number is missing, or the log file can't be found, makeindex won't even try to set the starting page number ๐ The source log file name is made by adding the extension .log to the base name of the first input file (idx0).
-qโ Quiet mode ๐คซ No messages go to stderr. By default, progress and error messages get sent to stderr and the transcript file.-rโ Turns off implicit page range formation ๐ซ That means page ranges have to be made with explicit range operators, see SPECIAL EFFECTS below. By default, three or more successive pages get automatically shortened into a range (e.g.1โ5), so this is you saying "nah, I'm doing it myself" ๐-s styโ Usestyas the style file ๐ There's no default for this one. The environment variableINDEXSTYLEdefines the path where the style file should be found, so keep an eye on that.-t logโ Uselogas the transcript file ๐ By default, the file name is made by adding the extension.ilgto the base name of the first input file (idx0).-Lโ Sort based on locale settings ๐ Not available on all systems, so no cap, check yours first.-Tโ Special support for Thai documents ๐น๐ญ Not available on all systems either, bestie ๐ซถ
โจ STYLE FILE โจ
okay so the style file is basically makeindex's cheat sheet ๐๐ It tells makeindex what your .idx input files look like AND how the final output should look. ๐ The file can live anywhere on the path set by the environment variable INDEXSTYLE. ๐บ๏ธ Inside, you've got a bunch of specifier, attribute pairs, and they can show up in any order, no stress ๐ฆ A line starting with % is a comment, so it gets ignored ๐
Quick guide to the placeholders: <string> is any arbitrary string wrapped in double quotes ("..."), <char> is one single letter wrapped in single quotes ('...'), and <number> is a nonnegative integer ๐ข Strings can be at most 2048 characters long ๐ And if you need a literal backslash or quote inside a string, you have to escape it with a backslash ๐
Anything you don't set in the style file gets its default value, which is shown at the top of the rightmost column in the original layout โจ So you only need to write down the stuff you want to change, bestie ๐ซถ
โจ INPUT STYLE SPECIFIERS โจ
actual <char>โ defaultยด@ยด. This is the symbol that tells makeindex the next entry should show up in the output file ๐ฏarg_close <char>โ defaultยด}ยด. The closing delimiter for the index entry argument ๐arg_open <char>โ defaultยด{ยด. The opening delimiter for the index entry argument ๐encap <char>โ defaultยด|ยด. When this symbol shows up, everything after it becomes the encapsulating command for the page number ๐escape <char>โ defaultยด\\ยด. This symbol escapes whatever letter comes right after it ๐ฆ The one exception is when the letter before it is the escape symbol itself, then it's just a regular character ๐ Also,quoteworks the same way, escaping the letter that follows it, but ifquoteis preceded byescape, it's treated as an ordinary character too. โ ๏ธ The two symbols have to be different from each other, or things get chaotic ๐keyword <string>โ default"\\indexentry". This is the command that tells makeindex "hey, the argument here is an index entry" ๐ฃlevel <char>โ defaultยด!ยด. The delimiter that marks a new level of subitem ๐ธpage_compositor <string>โ default"-". This separates the parts of a composite page number, which you can read about in SPECIAL EFFECTS below ๐quote <char>โ defaultยด"ยด. This one escapes the letter immediately after it, but ifescapecomes right before it, it counts as an ordinary character instead ๐ช Same rule as before:quoteandescapemust be distinct symbols ๐ซrange_close <char>โ defaultยด)ยด. The closing delimiter that marks the end of an explicit page range ๐range_open <char>โ defaultยด(ยด. The opening delimiter that marks the start of an explicit page range ๐
โจ OUTPUT STYLE SPECIFIERS โจ
preamble <string>โ default"\\begin{theindex}\n". This is what goes at the very top of the output file ๐postamble <string>โ default"\n\n\\end{theindex}\n". This is what goes at the very bottom of the output file ๐setpage_prefix <string>โ default"\n \\setcounter{page}{". The beginning of the command that sets the starting page number ๐ขsetpage_suffix <string>โ default"}\n". The end of that same starting-page-number command ๐group_skip <string>โ default"\n\n \\indexspace\n". The vertical space that gets added before a brand new group starts ๐ซงheadings_flag <string>โ default0. This flag controls how new group headers look. Group headers get inserted before each new group, which covers symbols, numbers, and the 26 letters ๐ค A positive value puts an uppercase letter between the prefix and suffix, a negative value puts a lowercase letter there instead, and the default of 0 means no header at all ๐ โโ๏ธheading_prefix <string>โ default"". The letter heading prefix that goes in before a new letter begins ๐๏ธheading_suffix <string>โ default"". The letter heading suffix that goes in when a new letter begins ๐๏ธsymhead_positive <string>โ default"Symbols". The heading for symbols, used whenheadings_flagis positive โจsymhead_negative <string>โ default"symbols". The heading for symbols, used whenheadings_flagis negative ๐numhead_positive <string>โ default"Numbers". The heading for numbers, used whenheadings_flagis positive ๐ขnumhead_negative <string>โ default"numbers". The heading for numbers, used whenheadings_flagis negative ๐งฎitem_0 <string>โ default"\n \\item ". The command that goes between two primary (level 0) items ๐item_1 <string>โ default"\n \\subitem ". The command that goes between two secondary (level 1) items ๐ฆitem_2 <string>โ default"\n \\subsubitem ". The command that goes between two level 2 items ๐งitem_01 <string>โ default"\n \\subitem ". The command that goes between a level 0 item and a level 1 item ๐ซitem_x1 <string>โ default"\n \\subitem ". Same asitem_01, but this one is for when the level 0 item doesn't have any associated page numbers ๐ซฅitem_12 <string>โ default"\n \\subsubitem ". The command that goes between a level 1 item and a level 2 item ๐item_x2 <string>โ default"\n \\subsubitem ". Same asitem_12, but for when the level 1 item doesn't have any associated page numbers ๐ทdelim_0 <string>โ default", ". The delimiter between a level 0 key and its first page number (so by default, a comma followed by a blank) ๐delim_1 <string>โ default", ". The delimiter between a level 1 key and its first page number (default: comma followed by a blank) ๐delim_2 <string>โ default", ". The delimiter between a level 2 key and its first page number (default: comma followed by a blank) ๐ธdelim_n <string>โ default", ". The delimiter between two page numbers for the same key, at any level (default: comma followed by a blank) ๐delim_r <string>โ default"--". The delimiter between the starting and ending page numbers of a range ๐delim_t <string>โ default"". The delimiter tacked onto the end of a page list. Heads up, this one does nothing for entries that don't have a page list at all ๐คทโโ๏ธencap_prefix <string>โ default"\\". The first part of the prefix for the command that wraps around the page number ๐encap_infix <string>โ default"{". The second part of that same prefix ๐งencap_suffix <string>โ default"}".. The suffix for the command that wraps around the page number ๐page_precedence <string>โ default"rnaRA".. This sets the order that page types get sorted in ๐ The default goes: lowercase roman, then numeric/arabic, then lowercase alphabetic, then uppercase roman, then uppercase alphabetic ๐line_max <number>โ default72. The maximum length of a line in the output. Anything longer than this wraps onto the next line ๐indent_space <string>โ default"\t\t". The whitespace that goes in front of a wrapped line (by default, two tabs) ๐ชถindent_length <number>โ default16. The length ofindent_space. The default of 16 is the same thing as two tabs ๐ขsuffix_2p <string>โ default"". A delimiter that replaces both the range delimiter and the second page number in a two page list. When it's set, it overridesdelim_r. Example:"f."โจsuffix_3p <string>โ default"". A delimiter that replaces both the range delimiter and the second page number in a three page list. When it's set, it overrides bothdelim_randsuffix_mp. Example:"ff."๐suffix_mp <string>โ default"". A delimiter that replaces both the range delimiter and the second page number in a multiple page list (that means three or more pages). When it's set, it overridesdelim_r. Example:"f."๐ซ
โจ EXAMPLES โจ
๐ TeX EXAMPLE ๐
okay so first up, we've got a style file called book.ist ๐ It sets up an index for a book that can be formatted on its own, separate from the main source. bestie this is so clean ๐
preamble
"\\documentstyle[12pt]{book}
\\begin{document}
\\begin{theindex}
{\\small\n"
postamble
"\n\n}
\\end{theindex}
\\end{document}\n"
now say a certain book style needs the index (and any chapters) to start on an odd page number ๐ฆ and the input file is called foo.idx. this command line makes the output go into footmp.ind โจ
makeindex -s book.ist -o footmp.ind -p odd foo
we're using a non-default output file name here so we don't accidentally clobber the output for the book itself ๐ (presumably foo.dvi, which would've been the default name for the index output file, lol!!) ๐
๐ธ TROFF EXAMPLE ๐ธ
okay this one's a sample control file for making an index. we're gonna pretend it lives in sample.ist ๐ง
keyword "IX:"
preamble
".\\\" start of index output
\".\\\" enter two column mode
.2C
.SH
.ce
INDEX
.XS
INDEX
.XE
.R
.ps 9p
.vs 11p
.sp
.de I1
.ti 0.25i
..
.de I2
.ti 0.5i
.."
postamble "\n.\\\" end of index output"
setpage_prefix "\n.nr % "
setpage_suffix ""
group_skip "\n.sp 1.0"
headings_flag 1
heading_prefix "\n.IS\n"
heading_suffix "\n.IE"
item_0 "\n.br\n"
item_1 "\n.I1\n"
item_2 "\n.I2\n"
item_01 "\n.I1\n"
item_x1 "\n.I1\n"
item_12 "\n.I2\n"
item_x2 "\n.I2\n"
delim_0 ", "
delim_1 ", "
delim_2 ", "
delim_r "-"
delim_t "."
encap_prefix "\\fB"
encap_infix ""
encap_suffix "\\fP"
indent_space ""
indent_length 0
so the local macro package might need a little tweaking ๐ here's an example of an extension to the -ms macros. (heads up: at some sites this macro should replace a pre-existing macro with the same name, so check your setup!) ๐
.
.de IX
.ie '\\n(.z'' .tm IX: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
.el \\!.IX \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9 {\\n(PN}
..
(the string {\\n(PN} is separated from the rest of the line by a tab, so keep that tab in there ๐ซถ) if your local macro package doesn't have this extension, just pop those lines at the beginning of your file. next, here's a simple troff(1) input file that we'll pretend is called sample.txt ๐
This is a sample file to test the \fImakeindex\fP(1L)
program, and see
.IX {indexing!programs!C language}
.IX {makeindex@\fImakeindex\fP(1L)}
.bp
.rs
.IX {Knuth}
.IX {typesetting!computer-aided}
how well it functions in the \fItroff\fP(1) environment.
the main thing to know: index entries are marked with the .IX macro, and that makes the text that follows get written to stdout, along with the current page number ๐ฅ
๐ CREATING THE INDEX FILE IN THE BOURNE SHELL ๐
so to make an input file for makeindex in the Bourne shell, you want to do whatever the equivalent at your site is of this command ๐
psroff -ms -Tpsc -t sample.txt > /dev/null 2> sample.tmp
some sites will need ditroff instead of psroff, so keep that in mind โจ to filter out any genuine error messages, call in grep(1) like this:
grep '^IX: ' sample.tmp > sample.idx
๐ CREATING THE INDEX FILE USING UCSF ENHANCED TROFF/TRANSCRIPT ๐
with UCSF Enhanced troff/TRANSCRIPT, the -I option of psroff(1L) can produce both the formatter output and an index file at the same time. it's giving efficiency ๐ค
psroff -ms -I sample.inp -Tpsc sample.txt
and if you wanna suppress the formatter output, do this instead ๐
psroff -ms -I sample.inp -Tpsc -t sample.txt > /dev/null
๐ฏ COMPLETING THE INDEX ๐ฏ
no matter which of the above routes you take, the input for makeindex ends up in sample.inp ๐ซถ next step is to invoke makeindex:
makeindex -s sample.ist sample.idx
and that leaves you with troff(1)-ready output in the file sample.ind ๐
๐ ORDERING ๐
okay so by default, makeindex assumes word ordering ๐ค but if the -l option is in effect, it switches to letter ordering. the big difference: in word ordering, a blank comes before any letter in the alphabet, whereas in letter ordering, a blank doesn't count at all ๐ look at this example and you'll get it immediately:
word order letter order
sea lion seal
seal sea lion
numbers are always sorted in numeric order, no debate ๐ข
9 (nine), 123
10 (ten), see Derek, Bo
letters get sorted first without caring about case. when words are identical, the uppercase version goes before its lowercase counterpart โจ
now a special symbol is defined here as any character that isn't in the union of digits and English alphabetic characters ๐ patterns starting with special symbols come first, then numbers, then patterns starting with letters. and as a special case, a string that starts with a digit but is mixed with non-digits counts as a pattern starting with a special character. ๐ it's a whole vibe, but that's the rule ๐ญ
โจ SPECIAL EFFECTS โจ
okay so this part is where makeindex gets to show off ๐ bestie, entries can do sooo much more than plain text. Watch this:
\indexentry{alpha}{1}
\indexentry{alpha!beta}{3}
\indexentry{alpha!beta!gamma}{10}
in your input file get turned into
\item alpha, 1
\subitem beta, 3
\subsubitem gamma, 10
in the output index file. Notice that the level symbol (!) is what splits things into levels above ๐ธ
It's also possible to make an item show up in a specific form with the actual (@) operator. For instance,
\indexentry{alpha@{\it alpha\/}}{1}
will become
\item {\it alpha\/}, 1
after processing ๐ The bit before the @ is used as the sort key, and the bit after it is what actually gets written to the output file. Also, two entries with the same key, one with the actual operator and one without, count as distinct entries. Not the same girl, different vibe ๐
The item, subitem, and subsubitem fields can each have their own sort keys too:
\indexentry{aa@{\it aa\/}!bb@{\it bb\/}!cc@{\it cc\/}}{1}
This will be converted to
\item {\it aa}, 1
\subitem {\it bb}, 3
\subsubitem {\it cc}, 10
Now the encap (|) operator is the one that wraps a page number in a command you pick ๐ฆ
\indexentry{alpha|bold}{1}
will be converted to
\item alpha, \bold{1}
where, with a suitable definition for TeX, \bold{n} will expand to {\bf n}. In this example, the three output attributes linked to page encapsulation, which are encap_prefix, encap_infix, and encap_suffix, correspond to backslash, left brace, and right brace, in that order. This is how page numbers get set in different fonts! Like, the page where a keyword is defined can be in one font, the spot with a primary example in another, and everything else in a third font. Iconic organisation energy โจ
The encap operator can also make cross references:
\indexentry{alpha|see{beta}}{1}
will become
\item alpha, \see{beta}{1}
in the output file, where
\see{beta}{1}
will expand to
{\it see\/} beta
Heads up: in a cross reference like this, the page number disappears ๐
A pair of encap concatenated with range_open (|() and range_close (|)) makes an explicit page range ๐
\indexentry{alpha|(}{1}
\indexentry{alpha|)}{5}
will become
\item alpha, 1โ5
Pages indexed with the same key in between get merged into the range automatically. This is seriously useful when you want a whole section indexed, because you only need to put the range opening and closing operators at the start and end of that section. Explicit page ranges can also take an extra command to set the range in a special font:
\indexentry{alpha|(bold}{1}
\indexentry{alpha|)}{5}
will become
\item alpha, \bold{1--5}
Now, a few potential problems are worth knowing about, bestie ๐ซถ First, entries like these:
\indexentry{alpha|(}{1}
\indexentry{alpha|bold}{3}
\indexentry{alpha|)}{5}
will be interpreted as
\item alpha, \bold{3}, 1--5
but you'll get a warning message in the transcript about an inconsistent page encapsulator ๐ญ An explicit range that starts with a Roman page number and ends in Arabic is also an error. In that case, if it's possible, the range gets split into two subranges, one Roman and one Arabic. For instance,
\indexentry{alpha|(}{i}
\indexentry{alpha}{iv}
\indexentry{alpha}{3}
\indexentry{alpha|)}{7}
will be turned into
\item alpha, i--iv, 3--7
with a warning in the transcript file complaining about an illegal range formation.
Every special symbol mentioned in this section can be escaped with the quote operator ("). So
\indexentry{alpha"@beta}{1}
will actually become
\item alpha@beta, 1
when you run makeindex. The quoting power of quote gets cancelled if it's immediately preceded by escape (\). For example,
\indexentry{f\"ur}{1}
becomes
\item f\"ur, 1
which represents an umlaut-accented u to the TeX family of processors ๐ฆ
A page number can be a composite of one or more fields separated by the delimiter bound to page_compositor (-). For example, II-12 means page 12 of Chapter II. Page numbers can have up to ten fields, which is a lot of chapters, honestly ๐
๐ ASCII ENERGY ๐
Since version 2.11 of makeindex, the quote operator can quote any character in the range 1 ... 255. Character 0 is excluded because makeindex uses it internally in its source code as a string terminator. With this change, sort keys can be made for all eight-bit characters except 0. The sorting order is
- punctuation characters (in ASCII order),
- digits,
- control characters (1 ... 31),
- space (32),
- letters (ignoring case),
- characters 127 ... 255.
Here's an example that indexes all printable ASCII characters other than letters and digits, assuming the default TeX format. For convenience, the page number references are the matching ASCII ordinal values ๐
\indexentry{" @" (space)}{32}
\indexentry{"!@"! (exclamation point)}{33}
\indexentry{""@"" (quotation mark)}{34}
\indexentry{"#@"\# (sharp sign)}{35}
\indexentry{"$@"\$ (dollar sign)}{36}
\indexentry{"%@"\% (percent sign)}{37}
\indexentry{"&@"\& (ampersand)}{38}
\indexentry{"<@"$<$ (left angle bracket)}{60}
\indexentry{"=@"= (equals)}{61}
\indexentry{">@"$>$ (right angle bracket)}{62}
\indexentry{"?@"? (query)}{63}
\indexentry{"@@"@ (at sign)}{64}
\indexentry{"[@"[ (left square bracket)}{91}
\indexentry{"\@"\verb=\= (backslash)}{92}
\indexentry{"]@"] (right square bracket)}{93}
\indexentry{"^@"\verb=^= (caret)}{94}
\indexentry{"_@"\verb=_= (underscore)}{95}
\indexentry{"`@"\verb=~= (grave accent)}{96}
\indexentry{"{@"\"{ (left brace)}{123}
\indexentry{"|@"\verb="|= (vertical bar)}{124}
\indexentry{"}@"\"} (right brace)}{125}
\indexentry{"~@"\verb=~= (tilde)}{126}
Characters in the actual fields after the @ that mean something special to TeX have to be written as control sequences, or as math mode characters. Pay extra attention to how the at sign, the left and right braces, and the vertical bar are coded ๐ The index file makeindex spits out for this example looks like this:
\begin{theindex}
\item ! (exclamation point), 33
\item " (quotation mark), 34
\item \# (sharp sign), 35
\item \$ (dollar sign), 36
\item \% (percent sign), 37
\item \& (ampersand), 38
\item $<$ (left angle bracket), 60
\item = (equals), 61
\item $>$ (right angle bracket), 62
\item ? (query), 63
\item @ (at sign), 64
\item [ (left square bracket), 91
\item \verb=\= (backslash), 92
\item ] (right square bracket), 93
\item \verb=^= (caret), 94
\item \verb=_= (underscore), 95
\item \verb=~= (grave accent), 96
\item \{ (left brace), 123
\item \verb=|= (vertical bar), 124
\item \} (right brace), 125
\item \verb=~= (tilde), 126
\indexspace
\item (space), 32
\end{theindex}
๐ FILES ๐
makeindexโ executable file$TEXMFMAIN/tex/plain/makeindex/idxmac.texโ TeX macro file used by makeindex$TEXMFMAIN/tex/latex/base/makeidx.styโ TeX macro file used by makeindex
๐ SEE ALSO ๐
Check these out if you want more:
ditroff(1L)latex(1L)make.index (1L)qsort(3)tex(1L)troff(1L)
Papers and reports, if you're feeling academic ๐ค
- UCSF Enhanced troff/TRANSCRIPT โ An Overview, R. P. C. Rodgers and Conrad Huang, LSMB Technical Report 90-2, UCSF School of Pharmacy, San Francisco, 1990.
- Index Preparation and Processing, Pehong Chen and Michael A. Harrison, Software: Practice and Experience, 19(9), 897โ915, September 1988.
- Automating Index Preparation, Pehong Chen and Michael A. Harrison. Technical Report 87/347, Computer Science Division, University of California, Berkeley, 1987 (a LaTeX document supplied with makeindex).
- MakeIndex: An Index Processor for LaTeX, Leslie Lamport, February 1987 (a LaTeX document supplied with makeindex).
- Tools for Printing Indices, Jon L. Bentley and Brian W. Kernighan, Electronic Publishing โ Origination, Dissemination, and Design, 1(1), 3โ18, June 1988 (also available as: Computing Science Technical Report No. 128, AT&T Bell Laboratories, Murray Hill, NJ 07974, 1986).
๐ AUTHOR ๐
Pehong Chen, Chen & Harrison International Systems, Inc. Palo Alto, California, USA.
Manual page extensively revised and corrected, and troff(1) examples created by Rick P. C. Rodgers, UCSF School of Pharmacy.
๐ซถ ACKNOWLEDGMENTS ๐ซถ
Leslie Lamport contributed significantly to the design of MakeIndex. Michael Harrison provided valuable comments and suggestions. Nelson Beebe improved on the portable version, and maintained the source distribution for the TeX Users Group for many years. Andreas Brosig contributed to the German word ordering. The modification to the -ms macros was derived from a method proposed by Ravi Sethi of AT&T Bell Laboratories. The LOG and CONTRIB files in the makeindex source distribution record other contributions.
makeindex is currently maintained as part of the TeX Live distribution (http://tug.org/texlive); please send bug reports to tex-k@tug.org.
๐ธ And that's a wrap, bestie! This one's from the TeX Live crew, last updated 12 November 2014 ๐ Go make your indexes slay โจ๐
๐ฆ where this page comes from
- alpine 3.24: texlive-doc 2026.0-r0 ยท GPL-2.0-or-later AND GPL-3.0-or-later
- arch rolling: texlive-doc 2026.1-1 ยท GPL
- centos-stream 10: texlive-makeindex 13:20240311-6.el10 ยท MakeIndex
- centos-stream 9: texlive-makeindex 9:20200406-26.el9 ยท MakeIndex
- debian bookworm: texlive-binaries 2022.20220321.62855-5.1+deb12u2
- debian trixie: texlive-binaries 2024.20240313.70630+ds-6 ยท TeX-Live
- fedora 43: texlive-makeindex 11:svn62517-93.fc43 ยท MakeIndex
- fedora 43: texlive-makeindex 11:svn62517-95.fc43.1 ยท MakeIndex
- fedora 44: texlive-makeindex 12:svn75712-105.fc44 ยท MakeIndex
- fedora 44: texlive-makeindex 12:svn75712-111.fc44 ยท MakeIndex
- opensuse-leap 16.0: texlive-makeindex-doc 2025.221.svn62517-160000.3.1 ยท LPPL-1.0
- ubuntu jammy: texlive-binaries 2021.20210626.59705-1build1
- ubuntu jammy: texlive-binaries 2021.20210626.59705-1ubuntu0.3
- ubuntu noble: texlive-binaries 2023.20230311.66589-9build3 ยท TeX-Live
- ubuntu questing: texlive-binaries 2024.20240313.70630+ds-6ubuntu2 ยท TeX-Live
- ubuntu resolute: texlive-binaries 2025.20250727.75242+ds-5build1 ยท TeX-Live
- ๐ girlified by anthropic/claude-haiku-5.5 on : a language model's rewrite of the original, under its terms