Lo que he aprendido: trucar paquetes de Latex

Os contaba hace tiempo cómo hacer una lista de símbolos en Latex sin enloquecer. Hoy os traigo la versión mejorada de esa lista porque como estoy ida de la cabeza he modificado el paquete para que cumpla con mis manías. Antes de nada he de decir que yo no tengo ni idea de programar cosas en Latex y es la primera vez que toco un paquete pero os quiero demostrar que estas cosas no son tan difíciles como parecen 😀

En nuestro caso vamos a modificar el paquete listofsymbols para que separe los símbolos de las letras griegas y los acrónimos. Para ello cogeremos el archivo sty, lo leeremos a ver si comprendemos lo que hace y lo trucaremos a nuestro gusto.

Echando un vistazo al código podemos ver que los símbolos se definen y se escriben en un archivo auxiliar sym:

\newcommand{\opensymdef}{\newwrite\@sym \immediate\openout\@sym=\jobname.sym}

\newcommand{\closesymdef}{\immediate\closeout\@sym}

Podemos ver abrir el archivo sym (texto plano, amigos) y ver qué tiene por dentro, que será algo así:

\printsymline{\mathbf{C}}{\mathbf{C}}{cm}{Damping matrix}{1}

Parece que sirve para escribir el símbolo en la lista de símbolos. Luego vemos que el símbolo se crea con la función \newsym que pide 3 argumentos:

\newcommand{\newsym}[3][]{\@createsym{#1}{#2}{#3}\addsymline{#3}{#3}{#2}{#1}{\@sym}}

Esos argumentos son según el manual:

\newsym[description]{macroname}{output}

Seguimos leyendo, se definen los títulos de las secciones:

\newcommand{\symheadingname}{Symbols}
\newcommand{\symheading}{\section*{\symheadingname}}

y las funciones que crean las listas, quitando las opciones de formato:

\newcommand{\listofsymbols} {
\symheading\par
\makeatletter
\IfFileExists{\jobname.syc}{\@input@{\jobname.syc}}{}
\IfFileExists{\jobname.sym}{\@input@{\jobname.sym}}{}
\makeatother

Es decir, que se cogen los archivos sym y syc y se hacen cosas con ellos. Más abajo tenemos cómo se crea el syc:

\renewcommand{\printsymline}[5]{\immediate\write\@syc{\string\newcommand%
{\expandafter\string\csname #3include\endcsname}%
{\csname #3isused\endcsname}}}
\newwrite\@syc \immediate\openout\@syc=\jobname.syc
\IfFileExists{\jobname.sym}{\@input@{\jobname.sym}}{}
\immediate\closeout\@syc

En el que habrá algo del tipo:

\newcommand{\cminclude}{yes}

es decir, se decide si se inclurirá o no en la lista de símbolos según lo hayamos usado en el documento o no.

Viendo esto es fácil saber lo que tenemos que hacer nosotros:

  1. Hacer una función que cree las letras griegas, para mí será newgreek y cogerá los mismos argumentos que newsym

  2. Crear dos archivos temporales, les he llamado greek y grc. Para el greek copiaremos la línea debajo de \opensymdef cambiando sym por greek. Para el grc crearemos otra función \printsymline abajo del todo.

  3. Crear el título de la sección con su variable correspondiente (\greekheadingname) y darle el estilo (\greekheading). Igual que está hecho para el símbolo.

  4. Crear la función que creará la lista de símbolos griegos, le he llamdo \listofgreek. Es igual que \listofsymbols pero cambiando las extensiones de los archivos de los que se lee.

  5. Añadir esta última función \listofgreek a la definición de \listofboth.

Para los acrónimos tenemos que hacer exactamente lo mismo. Con estas modificaciones la lista quedaría parecida a esta:

glossary

Como veis no es difícil. Os enlazo al Gitlab donde tengo mi solución (funciona pero se puede mejorar) porque es bastante largo: lossections

Nada más por hoy señoras y señores, espero que me hurguéis en los paquetes y hagáis del mundo un lugar mejor 😀

Más

Escribir paquetes en Latex

Anuncios

2 pensamientos en “Lo que he aprendido: trucar paquetes de Latex

  1. Pingback: Compilación: escribir la tesis | Onda Hostil

  2. Pingback: El porqué del curso de LaTeX | Onda Hostil

¡Opina sin miedo! (Puedes usar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s