texindy(1)
πΈ texindy β the LaTeX index glow-up πΈ
okay so bestie, this is the manual page for texindy, part of the xindy family (the manual name is texindy(1), if you were keeping score). Buckle up, it's a long one π
β¨ NAME β¨
texindy β create a sorted and tagged index from a raw LaTeX index. that's it, that's the whole job, and it does it so well π
β¨ SYNOPSIS β¨
texindy [-V?h] [-qv] [-iglr] [-d magic] [-o outfile.ind] [-t log] \
[-L lang] [-C codepage] [-M module] [idx0 idx1 ...]
π GNU-Style Long Options for Short Options
like, every short flag has a long-form bestie, here's the whole squad:
-V / --version
-? / -h / --help
-q / --quiet
-v / --verbose
-i / --stdin
-g / --german
-l / --letter-ordering
-r / --no-ranges
-d / --debug (multiple times)
-o / --out-file
-t / --log-file
-L / --language
-C / --codepage
-M / --module (multiple times)
-I / --input-markup (supported: latex, xelatex, omega)
β¨ DESCRIPTION β¨
so texindy is the LaTeX-specific command of xindy, the flexible indexing system. it takes a raw index as input and gives you back a merged, sorted and tagged index. the merging, sorting and tagging are all controlled by xindy modules, and don't worry β there's a convenient set of them already preloaded. slay β¨
files containing the raw index get passed as arguments. and if you pass no arguments at all? the raw index gets read from standard input instead. no cap π«Ά
there's also a genuinely good intro-level writeup of texindy in the indexing chapter of the LaTeX Companion (2nd ed.) β highly recommend, it's giving required reading π
if you wanna produce an index for LaTeX documents that use special index markup, then honestly the xindy(1) command is probably more your vibe. just saying π
texindy is basically an approach that merges together:
- support for the make-rules framework,
- its own xindy modules (for stuff like special LaTeX commands inside the index),
- and a reasonable level of MakeIndex compatibility.
iconic combo honestly π₯
β¨ OPTIONS β¨
--version/-Vβ prints out the version numbers of all the relevant components and then dips. exit stage left π--help/-h/-?β outputs the usage message plus an explanation of the options. your little cheat sheet bestie π--quiet/-qβ don't output progress messages. error messages only, periodt. π€«--verbose/-vβ output verbose progress messages. she's chatty, we love her π--debugmagic /-dmagic β output debug messages. you can pass this option multiple times. magic decides what actually gets output:
magic remark
------------------------------------------------------------
script internal progress messages of driver scripts
keep_tmpfiles don't discard temporary files
markup output markup trace, as explained in xindy manual
level=n log level, n is 0 (default), 1, 2, or 3
so like: script = the driver scripts narrating their internal progress, keep_tmpfiles = pls don't throw away the temp files, markup = spits out a markup trace exactly as explained in the xindy manual, and level=n = the log level where n is 0 (the default), 1, 2, or 3. π
--out-fileoutfile.ind /-ooutfile.ind β write the index to the file outfile.ind. if you don't pass this option, the output file's name is the base name of the first argument with the extensionindtacked on. β οΈ and if the raw index is being read from standard input, this option is mandatory β no out-file, no output, no exceptions bestie π--log-filelog.ilg /-tlog.ilg β write log messages to the file log.ilg. and heads up: these log messages are independent from the progress messages you can influence with--debugor--verbose. two different lanes, two different vibes π¦--languagelang /-Llang β the index gets sorted according to the rules of language lang. those rules live inside a xindy module that's created by make-rules. β¨
and here's the little detail that matters: if no input encoding is specified via --codepage and none is enforced by the input markup, then a xindy module for that language is searched with a latin, a cp, an iso, ascii, or utf8 encoding β in that order. order matters, bestie π
--codepageenc /-Cenc β okay so there are two totally different situations and use cases for this one. buckle in:- Input markup is
latex(which is the default).
- Input markup is
then texindy's raw input is assumed to be encoded in LaTeX Internal Character Representation (LICR). i.e., non-ASCII characters are encoded as command sequences. this option tells xindy the encoding it shall use for letter group headings. (and additionally it specifies the encoding used internally for sorting β but that part doesn't matter for the result. lowkey irrelevant but we still tell you π)
only LICR encodings for Latin script alphabets are supported; more precisely, characters that are in LaTeX latin1, latin2, and latin3 LICR encodings.
and even when you specify utf8 as the codepage, only these characters will be known. but if you're using non-Latin alphabets, you probably use (or like, should use) XeLaTeX or LuaLaTeX β and then you've got a different input markup entirely. different era, different rules πΈ
- Input markup is
xelatexoromega.
then this option is ignored; codepage utf8 is enforced. periodt. π
texindy's raw input is assumed to be UTF-8 encoded, and LICR is not used.
--modulemodule /-Mmodule β loads the xindy modulemodule.xdy. this option may be specified multiple times (stack 'em up π§). the modules are searched in the xindy search path, which you can change with the environment variableXINDY_SEARCHPATH. π«Ά--input-markupinput /-Iinput β specifies the input markup of the raw index. the supported values for input arelatex,xelatex, andomega. πlatexinput markup is the one emitted by default from the LaTeX kernel, or by theindexmacro package of David Jones, when used with standard LaTeX or pdfLaTeX.^^-notation of single byte characters is supported. usage of LaTeX'sinputencpackage is assumed as well, i.e., raw input is encoded in LICR. π¦xelatexinput markup is likelatex, but withoutinputencusage. raw input is encoded in UTF-8. LuaLaTeX has the same input markup β there's no special option value for it. (not me forgetting LuaLaTeX exists, but ok, noted π)omegainput markup is likelatexinput markup, but with Omega's^^-notation as the encoding for non-ASCII characters. LICR encoding is not used then, andutf8is enforced to be the codepage for sorting and for output of letter group headings.
β¨ SUPPORTED LANGUAGES / CODEPAGES β¨
these are the languages that are supported, bestie β the whole roster π
πΈ Latin scripts
albanian gypsy portuguese
croatian hausa romanian
czech hungarian russian-iso
danish icelandic slovak-small
english italian slovak-large
esperanto kurdish-bedirxan slovenian
estonian kurdish-turkish spanish-modern
finnish latin spanish-traditional
french latvian swedish
general lithuanian turkish
german-din lower-sorbian upper-sorbian
german-duden norwegian vietnamese
greek-iso polish
a few things you need to know, no cap:
- German recognizes two different sorting schemes to handle umlauts: normally,
aeis sorted likeae, but in phone books or dictionaries, it is sorted likea. the first scheme is known as DIN order, the second as Duden order. π - the
*-isolanguage names assume that the raw index entries are in ISO 8859-9 encoding. π gypsyis a northern Russian dialect. (fun fact of the day, you're welcome β¨)
πΈ Cyrillic scripts
belarusian mongolian serbian
bulgarian russian ukrainian
macedonian
πΈ Other scripts
greek klingon
πΈ Available Codepages
ngl this part is not yet written. π
you can look them up in your xindy distribution, inside the modules/lang/language/ directory (where language is your language, obviously). they're named variant-codepage-lang.xdy, where variant- is most often empty (for german, it's din5007 and duden; for spanish, it's modern and traditional, etc.) π¦
< Describe available codepages for each language >
< Describe relevance of codepages (as internal representation) for
LaTeX inputenc >
β¨ TEXINDY STANDARD MODULES β¨
so there's this whole set of texindy standard modules that help process LaTeX index files. some of them are automatically loaded, some of them are loaded by default (and that can be turned off with a texindy option), and others you can specify as a --module argument to achieve a specific effect. β¨
here's the full rundown β same list, same details, just cuter π
π Sorting
word-orderβ (Default) a space comes before any letter in the alphabet:index styleis listed beforeindexing. turn it off with option-l. πletter-orderβ (Add-on) spaces are ignored:index styleis sorted afterindexing.keep-blanksβ (Add-on) leading and trailing white space (blanks and tabs) are not ignored; intermediate white space is not changed. π«Άignore-hyphenβ (Add-on) hyphens are ignored:ad-hocis sorted asadhoc.ignore-punctuationβ (Add-on) all kinds of punctuation characters are ignored: hyphens, periods, commas, slashes, parentheses, and so on. all of it, gone, bye πnumeric-sortβ (Auto) numbers are sorted numerically, not like characters:V64appears beforeV128. π’
π Page Numbers
page-rangesβ (Default) appearances on more than two consecutive pages are listed as a range:1--4. turn it off with option-r. πff-rangesβ (Add-on) uses the implicitffnotation for ranges of three pages, and explicit ranges thereafter:2f,2ff,2--6.ff-ranges-onlyβ (Add-on) uses only implicit ranges:2f,2ff. β¨book-orderβ (Add-on) sorts page numbers with the common book numbering scheme correctly β Roman numerals first, then Arabic numbers, then others:i,1,A. π
π Markup and Layout
texβ (Auto) handles basic TeX conventions. πlatex-loc-fmtsβ (Auto) provides LaTeX formatting commands for page number encapsulation.latexβ (Auto) handles LaTeX conventions, both in raw index entries and output markup; impliestex. πΈmakeindexβ (Auto) emulates the default MakeIndex input syntax and quoting behavior. π¦latin-lettergroupsβ (Auto) layout contains a single Latin letter above each group of words starting with the same letter. π€german-styβ (Add-on) handles umlaut markup of babel'sgermanandngermanoptions. π©πͺ
and that's where part 1 wraps, bestie β part 2 is coming, don't go anywhere π«Ά
π COMPATIBILITY TO MAKEINDEX π
okay so real talk bestie: xindy does not claim to be completely compatible with MakeIndex, because if it were, that would prevent some of its enhancements. that said, we strive to deliver as much compatibility as possible. π«Ά the most important incompatibilities are:
- for raw index entries in LaTeX syntax,
\index{aaa|bbb}is interpreted differently. for MakeIndex,bbbis markup that is output as a LaTeX tag for this page number. for xindy, this is a location attribute, an abstract identifier that will be later associated with markup that should be output for that attribute.
for straight-forward usage, when bbb is textbf or similar, we supply location attribute definitions that mimic MakeIndex's behaviour. β¨
for more complex usage, when bbb is not an identifier, no such compatibility definitions exist and may also not been created with current xindy. such a situation is reported to exist for the memoir LaTeX class. π
programmers who know Common Lisp and Lex and want to work on a remedy should please contact the author. (not me saying this is your main character moment β go off π)
- if you have an index rage π€ and a location attribute, e.g.,
\index{key\(attr}starts the range, one needs (1) to specify that attribute in the range closing entry as well (i.e., as\index{key\)attr}) and (2) one needs to declare the index attribute in an xindy style file.
MakeIndex will output the markup \attr{page1--page2} for such a construct. this is not possible to achieve in xindy, output will be \attrMarkup{page1}--\attrMarkup{page2}. (this is actually considered a bug, but not a high priority one. π)
the difference between MakeIndex page number tags and xindy location attributes was already explained in the previous item.
- the MakeIndex compatibility definitions support only the default raw index syntax and markup definition. it is not possible to configure raw index parsing or use a MakeIndex style file to describe output markup. periodt. π₯
πΈ ENVIRONMENT πΈ
TEXINDY_AUTO_MODULEβ this is the name of the xindy module that loads all auto-loaded modules. the default istexindy. slay, that's it, that's the whole variable π
π AUTHOR π
Joachim Schrod
π LEGALESE π
Copyright (c) 2004-2014 by Joachim Schrod.
texindy is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. π
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. (fr fr, read the license, bestie β it's giving legally binding π)
and that's the whole page, no cap π¦ this was Release 2.5.1, dated 2020-05-28, and yes it lives at texindy(1). go index something iconic π
β¨
π¦ where this page comes from
- alpine 3.24: texmf-dist-binextra-doc 2026.0-r0 Β· LPPL-1.0 AND LPPL-1.1 AND LPPL-1.2 AND LPPL-1.3a AND LPPL-1.3c AND GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms