Un índice, la lista alfabetizada de términos y números de página al final de un libro, lo construye LaTeX siempre que marques los términos en el texto. Lo hacen tres piezas: declarar \makeindex en el preámbulo, colocar \index{…} en cada punto que quieras indexar y llamar a \printindex donde deba aparecer la lista. La salvedad es que la ordenación no la hace LaTeX, sino un programa separado, makeindex (mendex / upmendex para japonés); por tanto, como bibtex, necesita una pasada adicional. Esta página recorre las declaraciones iniciales, la sintaxis de las entradas (! subentradas, @ claves de ordenación, | encapsulación de páginas), el proceso de compilación, la ordenación japonesa, el ajuste de estilos y el paquete moderno imakeidx.
Las cuatro piezas de un índice
Los comandos de indexación estándar vienen del paquete makeidx. Cárgalo en el preámbulo y después declara \makeindex; desde ese momento LaTeX escribe las entradas del índice en un archivo separado (.idx). Solo queda marcar los términos y decir dónde debe imprimirse la lista.
\usepackage{makeidx}— carga los comandos de indexación (preámbulo).\makeindex— la declaración que activa la recopilación del índice (preámbulo). Sin ella,\indexse ignora silenciosamente.\index{entry}— la marca que colocas en el cuerpo donde aparece un término. Allí no se imprime nada; solo se registra el número de página actual.\printindex— el comando que compone el índice terminado, normalmente al final del documento.
La idea clave es que \index es una marca invisible. Sigues escribiendo la palabra en el cuerpo del texto y añades \index{…} justo después (random numbers\index{random numbers} are used). El número de página del punto marcado es el que se registra para esa entrada.
Escribir entradas de índice
El argumento de \index tiene su pequeña sintaxis para subentradas, claves de ordenación, rangos de páginas, formato de números de página y referencias cruzadas. Se basa en cuatro caracteres especiales interpretados por makeindex (no por LaTeX): !, @, | y ".
Subentradas (!). Un signo de exclamación separa niveles. \index{animals!cats} crea una entrada principal “animals” con una subentrada “cats” debajo. Repetir ! anida hasta tres niveles (más aún con la familia mendex / upmendex).
Clave de ordenación (@). Escrita como sortkey@display, separa la cadena usada para ordenar de la cadena que se imprime realmente. Es esencial para símbolos y matemáticas, que no se ordenan por su glifo. \index{alpha@$\alpha$} imprime α en el índice pero lo coloca bajo “alpha”. En japonés proporciona la lectura de los kanji (\index{さくいん@索引}).
Rangos de páginas (|( … |)). Cuando un tema ocupa varias páginas, marca el inicio con |( y el final con |) para obtener un rango como 12–15. Abre con \index{recursion|(} y ciérralo después con \index{recursion|)}.
Encapsulación de números de página (|). Coloca una barra vertical seguida del nombre de un comando de un argumento, y solo ese número de página se formateará con él. \index{cat|textbf} pone en negrita la página donde se define el término; \index{group|textit} la pone en cursiva. También sirven nombres de comandos propios.
Referencias cruzadas (|see / |seealso). También después de una barra, puedes emitir un puntero a otra entrada en lugar de un número de página. \index{dog|see{pets}} produce “dog, *see* pets”; |seealso{…} da “*see also*”.
Imprimir literalmente los caracteres especiales ("). Para poner !, @, | o " en una entrada como caracteres ordinarios, antepón una comilla doble a cada uno. Por ejemplo, \index{C"!} crea la entrada “C!”.
| Símbolo | Función | Ejemplo |
|---|---|---|
! | Subentrada (anidación) | \index{animals!cats} |
@ | Clave de ordenación (controla el orden) | \index{alpha@$\alpha$} |
|( |) | Abrir/cerrar un rango de páginas | \index{recursion|(} … \index{recursion|)} |
|cmd | Formatear el número de página (negrita, etc.) | \index{cat|textbf} |
|see | Referencia cruzada “see” | \index{dog|see{pets}} |
" | Imprimir literalmente el siguiente carácter especial | \index{C"!} |
El proceso de compilación (ejecutar makeindex)
Un índice no queda terminado con una sola compilación. Como bibtex, es un proceso de tres etapas con un programa separado en medio. Primero, al ejecutar LaTeX, las llamadas \index se recopilan en un archivo bruto, file.idx. Después, el programa makeindex lo ordena y formatea como file.ind, un índice componible. Por último, al ejecutar LaTeX una vez más, \printindex lee file.ind y el índice aparece en el documento. El registro del proceso queda en file.ilg.
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begin{document}
METAFONT\index{METAFONT} は字形を、TeX\index{TeX} は組版を担う。
ここでは乱数\index{乱数|textbf} の生成を扱い、
群\index{group@群} と環\index{ring@環} にも触れる。
アルゴリズム\index{algorithm|(} の説明はここから始まり…
% (数ページ後)
…アルゴリズム\index{algorithm|)} の説明はここで終わる。
\printindex
\end{document}Desde la línea de comandos se ejecuta así. -s selecciona un archivo de estilo, -o nombra la salida y -t nombra el registro; si los omites, solo cambia la extensión.
pdflatex mydoc # writes mydoc.idx
makeindex mydoc # mydoc.idx -> mydoc.ind (log in mydoc.ilg)
pdflatex mydoc # \printindex reads mydoc.indToda la secuencia la gestiona automáticamente latexmk: llama a makeindex cuando cambia el .idx y vuelve a ejecutar LaTeX las veces necesarias, así que no hace falta invocar los tres pasos a mano.
Índices japoneses (mendex / upmendex)
Como makeindex presupone el orden alfabético occidental, los índices japoneses usan mendex (con pLaTeX) o upmendex (con upLaTeX / LuaLaTeX, compatible con Unicode). Ambos son compatibles con makeindex: simplemente se llaman donde habrías llamado a makeindex.
uplatex mydoc # writes mydoc.idx
upmendex -s style.ist mydoc # sorts kana correctly -> mydoc.ind
uplatex mydoc # \printindex reads mydoc.indLa gran ventaja es la ordenación kana. Con makeindex, ordenar entradas en el orden silábico japonés obligaba a dar a cada una una lectura hiragana/katakana como reading@display y normalizar a mano las marcas sonoras. upmendex ordena los kana correcta y automáticamente usando ICU (International Components for Unicode), lo que elimina gran parte de ese trabajo. Al suministrar un archivo de diccionario con -d, puedes registrar en bloque las lecturas de palabras en kanji, de modo que a menudo puedes omitir por completo las lecturas con @.
Regla práctica: mendex para pLaTeX, upmendex para upLaTeX / LuaLaTeX. Dar lecturas mediante @ funciona en ambos (\index{さくいん@索引}).
Cambiar el estilo del índice (.ist)
El aspecto del índice se controla con un archivo de estilo (.ist), pasado con -s como en makeindex -s style.ist file. No es más que una lista de pares <parameter> <value>: las cadenas van entre comillas dobles y % inicia un comentario (los estilos de mendex / upmendex son compatibles hacia arriba con makeindex).
headings_flag— al poner un valor distinto de cero, inserta un encabezado de grupo (la letra inicial, por ejemploA,B… o grupos kana) antes de cada grupo nuevo.lethead_prefix/lethead_suffix— cadenas colocadas antes y después de ese encabezado.delim_0/delim_1/delim_2— el delimitador entre una entrada (en cada nivel) y su número de página (por ejemplo", "o una guía de puntos).item_0/item_1— cadenas insertadas entre entradas y entre niveles (saltos de línea, sangría).preamble/postamble— código emitido antes y después de todo el índice.
Para nada más que encabezados de grupo, basta un .ist pequeño como este.
% style.ist
headings_flag 1
heading_prefix "{\\bfseries "
heading_suffix "}\\nopagebreak\n"
delim_0 "\\dotfill "La forma moderna: imakeidx
imakeidx amplía makeidx y aporta dos grandes ventajas. Primero, ejecuta makeindex automáticamente durante la compilación: inicia LaTeX con -shell-escape (permiso para ejecutar programas externos) y el índice se construye de forma parecida a la tabla de contenidos, sin pasada manual. Segundo, admite varios índices en un documento, por ejemplo un índice de nombres y otro de temas.
Se configura pasando opciones a \makeindex. name= distingue un índice, title= fija su encabezado, intoc lo incluye en la tabla de contenidos, program= elige el programa de ordenación (makeindex / xindy / texindy, o mendex / upmendex para japonés) y options= pasa argumentos como -s style.ist. Escribe varias llamadas a \makeindex para crear varios índices; luego dirige las entradas con \index[name]{…} e imprime con \printindex[name].
\documentclass{article}
\usepackage{imakeidx}
% two indexes; built automatically with -shell-escape
\makeindex[name=subject, title=事項索引, intoc, program=upmendex]
\makeindex[name=people, title=人名索引, intoc, program=upmendex,
options={-s style.ist}]
\begin{document}
群\index[subject]{group@群} は重要だ。
クヌース\index[people]{Knuth@クヌース} が TeX を作った。
\printindex[subject]
\printindex[people]
\end{document}# auto-build: makeindex/upmendex is invoked for you
lualatex -shell-escape mydoc
lualatex -shell-escape mydoc # second pass resolves page numbersSolo xindy requiere shell-escape *completo*, pero la construcción automática en sí necesita -shell-escape. Si lo prefieres, también con imakeidx puedes seguir llamando a makeindex / mendex externamente. Donde no se pueda activar -shell-escape (algunos servicios web, CI estricta), la construcción automática no estará disponible; usa una pasada manual o deja que latexmk se encargue.