sábado, 30 de mayo de 2009

HAL y la burocracia (III - los datos)

Una de las primerísimas cosas que hacemos cuando escribimos un guión para HAL es el análisis de los datos que queremos procesar y de los datos resultantes. En guiones sumamente simples, como los escritos hasta ahora, este análisis se suele realizar de una manera inconsciente. Cuando el guión es algo menos simple resulta casi siempre necesario y, en general, más que recomendable, plantearse conscientemente con qué clase de cosas nos vamos a ensuciar las manos. En guiones complejos, un análisis precipitado conduce, en el mejor de los casos, a un diseño ineficaz y, en el peor, a un resultado infumable.

El guión que nos ocupa es simple y no hace falta demorarse demasiado en esta fase inicial. Por otra parte, hay que buscar un equilibrio entre lo que deseamos hacer y el tiempo que deseamos dedicar a hacerlo. Para un asunto engorroso e impremeditado, como el que seguramente supondría para cualquiera la escritura del actual guión, puede ser suficiente una solución relativamente rápida y sucia. De hecho, el guión propuesto es realmente rápido y sucio. Se puede (¿se debe?) mejorar en muchos sentidos. Pero el tiempo apremia y las ganas son pocas. No obstante, e incluso desde estas premisas, no conviene infringir de entrada absolutamente todas las normas de buen comportamiento. Al menos, veamos por el rabillo del ojo qué cosas están presentes y cuáles aparecerán en nuestra caótica mesa.

Empecemos por lo que queremos obtener. Se recordará de la anterior entrada que lo que se nos pide es un informe por alumno (por cada alumno suspenso). Un fichero pdf por alumno es lo más aconsejable en este caso para obtener una copia impresa, y si además lo generamos vía pdflatex, mejor que mejor.

¿Con qué contamos para poder generar esta serie de ficheros?

Contamos, naturalmente, con la programación de la asignatura. Por suerte, esta programación ---un escrito tan largo como aburrido, plagado de repeticiones internas---, ha sido preparado con LaTeX y está dividido en ficheros independientes que luego se componen en un fichero único. Esta técnica de escribir documentos largos, que tantos quebraderos de cabeza supone para los usuarios de procesadores de textos, es pan comido en el mundo de TeX con una instrucción LaTeX como \input{fichero} o \include{fichero}, que permite incluir el contenido de un fichero dentro de otro. Por tanto, disponemos, para empezar, de ficheros .tex adecuadamente nombrados. Así, por ejemplo, los ficheros que definen los contenidos mínimos por curso, poseen la denominación genérica: curso-nivel-mínimos.tex, donde curso está por 1, 2, 3, etc, y nivel está por ge o gm, abreviaturas de la denominación oficial, en el momento en que se redactó la programación, del grado o nivel de los cursos correspondientes ("grado elemental" y "grado medio", respectivamente).
La sintaxis interna de cada uno de estos ficheros es la que cabe esperar de un fichero LaTeX para listas, en concreto, un texto etiquetado con las siguientes etiquetas, como mínimo:

\begin{itemize}
\item Texto del primer item
...
\end{itemize}

Lo segundo con lo que contamos es con un fichero de texto plano que contiene las notas de los alumnos, el fichero notas. Dicho fichero está compuesto por líneas, cada de una de las cuales es un registro por alumno de la forma:

alumno:curso:nota

y donde, a su vez, el nombre del alumno, primer campo del fichero, responde a la convención sintáctica

Nombre-Apellido1-Apellido2

En concreto, nuestro fichero notas es el siguiente:

Don-Quijote-de-la-Mancha:6-gm:10
Sancho-Panza:1-ge:3
Sansón-Carrasco:3-gm:4
Dulcinea-del-Toboso:1-gm:5

Casi sobra insistir en la decisiva importancia que tiene seguir convenciones sintácticas uniformes en ficheros de texto procesables por HAL, como el descrito.

¿Son estos ficheros suficientes para producir la deseada salida en pdf? Evidentemente, no. Puesto que necesitamos un fichero distinto para cada alumno, debemos crear una plantilla común para todos ellos que se llene con los datos específicos de cada alumno en particular. Puesto que, además, deseamos recurrir a pdflatex para obtener el pdf de cada alumno, este plantilla tiene que ser, ella misma, un fichero .tex. Podremos, entonces, utilizar la instrucción \input para añadir los ficheros de contenidos u objetivos deseados dentro de esa plantilla y utilizar fragmentos de textos apropiados para designar los campos variables en ella. Una plantilla con estas características, que se amolda al documento de salida requerido tendría la forma siguiente:

\begin{document}
\begin{datosAlumno}
Alumno: ALUMNO
Curso: CURSO
\end{datosAlumno}

\begin{Objetivos}
OBJETIVOS
\end{Objetivos}

\begin{Contenidos}
CONTENIDOS
\end{Contenidos}

\begin{Propuestas}
RECUPERACIÓN
\end{Propuestas}
\end{document}

Se habrá observado que hemos omitido, para abreviar, el preámbulo del documento LaTeX, donde, además, se tendrían que incluir las definiciones apropiadas de los entornos datosAlumno, Objetivos, Contenidos y Propuestas, definiciones que se establecen mediante la instrucción \newenvironment, que hace las veces de \newcommand, pero en la definición de entornos personalizados, y que no vamos a comentar ahora por tratarse de cuestiones específicas de LaTeX que nos desviarían de nuestro objetivo actual.

En resumen, los datos de entrada imprescindibles de nuestro guión, lo que HAL utilizará para obtener los pdfs, son los siguientes ficheros:

  • Ficheros .tex de los objetivos y mínimos por cursos, ubicados en el directorio que contiene la programación (/home/luis/conservatorio/programacion-loe):

    1-ge-objetivos.tex
    2-ge-objetivos.tex
    ...
    1-gm-objetivos.tex
    2-gm-objetivos.tex
    ...
    1-ge-minimos.tex
    2-ge-minimos.tex
    ...

  • El fichero informe_plantilla.tex que contiene la plantilla para generar los informes por alumno y que reside en el mismo directorio que contiene el guion.

  • El fichero de texto notas que contiene registros por alumno con el formato alumno:curso:nota, ubicado también en el directorio donde reside el guión.


Tras el análisis de los datos de entrada, podemos proceder a indicárselos a HAL:

# Directorio que contiene la programación del curso
PROGRAMACION=/home/luis/conservatorio/programacion-loe

# Fichero que contiene la plantilla LaTeX del informe
PLANTILLA=informe_plantilla.tex

# Fichero que contiene las notas de los alumnos
NOTAS=notas

# Sufijo de los ficheros de objetivos por cursos
OBJETIVOS=objetivos.tex

# Sufijo de los ficheros de contenidos por cursos
CONTENIDOS=minimos.tex

A éstas variables podemos añadir la que corresponde a la nota mínima que debe obtener el alumno para aprobar el curso, un valor que, sin lugar a dudas, tendremos que utilizar en algún momento:

# La nota mínima para aprobar el curso
NOTA_MINIMA=5

Hemos puesto los cimientos. Se observará que estas líneas reproducen tal cual las líneas iniciales del guión completo presentado el día pasado, con la excepción de la variable NOLATEX, cuyo sentido se explicará a su debido tiempo.

Resumen:

  • El análisis de los datos de entrada de un guión es un requisito previo imprescindible en la elaboración de guiones o programas.

  • Los nombres de ficheros de entrada y de los directorios donde residen son candidatos ideales a aparecer como valores de las variables iniciales de un guión.

No hay comentarios:

Publicar un comentario