miércoles, 27 de abril de 2011

Cómo añadir un índice de palabras en LaTeX

Un buen libro de consulta tiene que tener un índice de palabras. Y LaTeX permite crearlo fácilmente con el paquete makeidx.

El paquete makeidx funciona de una manera un poco curiosa. Primero, antes de \begin{document} tendremos que poner \makeindex, para que cree el índice. Y con \printindex (dentro ya del cuerpo del documento), insertaremos el índice donde queramos.

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel} % español
\usepackage[latin1]{inputenc} % acentos sin codigo
\usepackage{makeidx}

\makeindex % para que cree el índice (pero aún no decimos dónde)

\begin{document}

\addcontentsline{toc}{chapter}{Índice alfabético} % para que lo añada al índice de contenidos
\printindex % para que ponga el índice aquí

\end{document}

Nota: Es importante añadir la línea \addcontentsline, para que el índice de palabras aparezca en el índice de contenidos.

Ahora, cuando queremos añadir una palabra al índice, basta con poner justo detrás de la palabra \index{nombre}:

Algunos de mis animales favoritos son el erizo\index{erizo} y el armadillo\index{armadillo}.


Para poner palabras como dependientes de otras, se utiliza el comando:
\index{palabrapadre!palabrahija}:

Las flores\index{flores} son muy bonitas. Como la rosa\index{flores!rosa}, la margarita\index{flores!margarita} o la violeta\index{flores!violeta}.

Por último, si queremos poner un "véase" o "véase también", hay que poner |see{palabra} o |seealso{palabra}.

Alegra tu cuarto con alguna planta\index{planta|see{flores}}.
Alegra tu cuarto con unas cuantas florecitas\index{florecitas}\index{florecitas|seealso{flores}}.





Cuando la palabra que vamos a usar en el índice, tiene símbolos no anglosajones, hay que tener cuidado. El paquete makeidx, por ejemplo, entiende que "a" y "á" son dos letras distintas, y las ordena alfabéticamente separadas y mal. Por ejemplo, si escribimos:

Ejemplo: lana\index{lana}, lápiz\index{lápiz}, lata\index{lata}.

Ordenaría incorrectamente como: lápiz, lana, lata.


Lo que habría que poner sería:

Ejemplo: lana\index{lana}, lápiz\index{lapiz @ lápiz}, lata\index{lata}.

Así, le estamos diciendo a LaTeX que ordene "lápiz" como si fuera "lapiz".


En el caso de que la palabra tuviera una "ñ", LaTeX debería ordenarla después de todas las n. Para conseguir eso, por ejemplo, podemos sustituir "ñ" por "nzz" en la palabra:

Ejemplo: mano\index{mano}, manuel\index{manuel}, maño\index{manzzo @ maño}.





Un último comentario para los usuarios de TeXnicCenter. Dependiendo de la versión, puede que el índice de palabras no aparezca. Si ese es nuestro caso, para solucionarlo, en "Build/Define Output Profiles...", en "Command line arguments to pass to MakeIndex" hay que poner "%tm" en vez de "%bm".

18 comentarios:

Missypoincare dijo...

está muy bien explicado y hago todo lo que pone pero no me aparece el éndice de palabras cuando lo compilo en pdf :(

Luis dijo...

Hola Missypoincare, ¿qué tal?

¿Por casualidad estás usando TeXnicCenter? Porque con este programa, dependiendo de la versión, a veces da problemas... Si eso, hay hacer lo siguiente:

En "Build/Define Output Profiles...", en "Command line arguments to pass to MakeIndex" hay que poner "%tm" en vez de "%bm"

Ya me dirás si ese era el problema. Hasta luego.

silverio dijo...

Luis tengo un problema con la creación del índice alfabético, sigo los pasos y al final del documento obtengo el índice alfabético, pero no me aparecen las palabras referenciadas con la instrucción \index{}

Luis dijo...

Hola Silverio, ¿qué tal?

Con tan poca información, no sabría qué decirte. ¿Qué editor de LaTeX usas? Yo uso TeXnicCenter en Windows XP (32 bits). Y compilo en LaTeX, no en pdfLaTeX. (LaTeX=>PS=>PDF) Y me funciona.

Si usas otro editor de LaTeX, tienes que buscar en algún menú que diga "Build" (o algo parecido), la opción "MakeIndex", y ejecutarlo.

Si no lo encuentras, puedes mirar a ver si te funciona con TeXnicCenter. También puedes mirar en el siguiente forum, que tiene una sección para preguntas sobre MakeIndex y sobre todos los editores de LaTeX:

http://www.latex-community.org/forum/

Hasta luego.

silverio dijo...

Gracias Luis, trabajo con el TeXnicCenter, trabajo también con la misma compilación, he utilizado la opción "Buil-Makeindex" sólo que al final del documento me aparece 'índice alfabético', pero he ensayado con unas cuantas palabras seguidas de la instrucción \index{} y, no aparecen referenciadas en dicho índice.
De todos formas revisaré el enlace que recomienda.

Gracias

Luis dijo...

Hola Silverio, pues no sé qué es lo que te puede estar pasando... :(

El siguiente código, sí que me funciona:

\documentclass[a4paper,openright,12pt]{report}
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc}
\usepackage{makeidx}

\makeindex

\begin{document}

\chapter{Animales}
Erizo\index{erizo}

\printindex

\end{document}

Hasta luego, y suerte.

silverio dijo...

Luis con su ejemplo funciona perfectamente, revisaré muy bien que puede estar interfiriendo con mi documento principal. Muchas gracias por responder, muy organizados y prácticos sus ejemplos.

Gracias

Luis dijo...

Muchas de nadas. :)
Hasta luego.

Fernando Hernández Iglesias dijo...

Hola Luis, yo tendo el winshell,conpila normal pero no aparece el indice.
que podria ser.
saludos

Luis dijo...

Hola Fernando,
creo que no puedo ayudarte. Pues no he utilizado nunca ese editor. En opciones tendría que haber algo que diga "makeindex"...

Cuando compilas (Tex->PS->PDF), el editor tiene que crear un archivo ".idx", que contiene la información del índice de palabras... Si no te lo crea, malo.

Hasta luego, y suerte. Ya me dirás si lo consigues. :-)

Domingo dijo...

el |see o |seealso funciona, pero no me aparece el número de página como a ti. Simplemente sale "florecitas, véase también flores"
¿Cómo haces para que salga el número de página?

Luis dijo...

Hola Domingo, ¿qué tal?

Tienes razón, lo tenía mal escrito. Para que sí que salga el número de página, puedes poner algo así:

\index{xxx}\index{xxx|seealso{yyy}}

Hasta luego, y muchas gracias. :-)

Domingo dijo...

Ya de paso, para completarlo más:
\index{palabra|(} Para indicar el comienzo de un rango de páginas
\index{palabra)|} Para indicar el final de un rango de páginas.
(palabra pag 25-40)

Luis dijo...

Mira, pues otra cosa que acabo de aprender. Gracias por compartirlo. :-)

Hasta luego y ¡Feliz Navidad!

Witiza dijo...

Muy buenas:

Me gustaría saber si podemos crear listas de abreviaturas o de acrónimos.
Muchas gracias.

Luis dijo...

Hola Witiza,
yo lo haría a mano con una tabla. Si existe un paquete que lo haga automáticamente, lo desconozco.

Gerardo Moreu dijo...

Buenas Luis. Me ha servido mucho, pero tengo un problema:
Estoy escribiendo mi TFG con LATEX en TEXSHOP de iosMac. Cada capítulo lo escribo en un documento a parte y lo integro con la orden \input{Capitulo1.tex}. Cuando compilo el documento maestro me crea el índice alfabético pero me lo pone vacío. Puede deberse al tema de integrar los capítulos con la orden input? Aunque no creo que sea por eso, ya que en el documento maestro también he probado a poner lo siguiente:

\chapter{Resultados \index{Resultados}}
\input{Capitulo4.tex}

y me sigue poniendo el Indice Alfabetico vacío.
Las órdenes que he escrito son:
\usepackage{makeidx} %en el preámbulo

\makeindex %justo la línea de encima de \begin{document}

.
.
.

\appendix
\chapter{Índice Alfabético}
\printindex

\end{document}

No he puesto lo de \addcontetsline porque quiero que me aparezca al final del TFG como un apéndice.

Un saludo y muchas gracias de antemano.

Luis dijo...

Hola Gerardo,
El índice de palabras se crea con un programilla que acompaña a LaTeX, que se llama "MakeIndex".

En TeXnicCenter, cuando creamos un nuevo proyecto, tenemos que indicar que vamos a usar "MakeIndex" también. Desde el punto de vista del usuario, es sólo poner un tick en un sitio, y TeXnicCenter llama automáticamente a ambas rutinas, "LaTeX" y "MakeIndex". Pero en realidad, se han utilizado dos programas.

Yo no utilizo Texshop, pero supongo que sea algo parecido. Que haya que compilar "MakeIndex" además del propio Tex. Creo que algo parecido pasa también con la bibliografía y "Bibtex".

No sé si esto te habrá podido ayudar algo... XD

Si al final encuentras la solución, dímela. :-)
Hasta luego,