Exámenes y tesis

Los profesores que acaban componiendo exámenes en LaTeX suelen llegar ahí por una razón: si el enunciado y la clave de respuestas viven en dos archivos, tarde o temprano dejarán de coincidir. Se corrige una pregunta y se olvida la solución; se cambia la puntuación y se olvida el total. La clase exam resuelve eso estructuralmente. La solución se escribe justo al lado de la pregunta, y la presencia o ausencia de un solo \printanswers produce, desde una misma fuente, dos PDF distintos: el examen en blanco y la clave. Medido sobre un documento real: dos páginas con respuestas, tres sin ellas. El mismo archivo, documentos distintos. Esta página cubre la clase exam y el otro género de estructura rígida, la tesis: en qué se diferencian report, book y memoir, en qué clases \frontmatter ni siquiera existe, y el consejo más útil de todos: no pelee contra la plantilla de su universidad.

El esqueleto de la clase exam: \question, parts y los puntos

La estructura de la clase exam es un anidamiento de tres niveles: \question dentro de un entorno questions, \part dentro de un entorno parts por debajo, y \subpart dentro de subparts más abajo. Los puntos van entre corchetes —\question[10]— y la opción de clase addpoints hace que se sumen solos. Los recuentos están disponibles en el cuerpo como \numquestions, \numpoints y \numpages, de modo que la frase «4 preguntas, 30 puntos, 3 páginas» nunca hay que actualizarla a mano. La opción múltiple viene en cuatro entornos: choices en vertical, oneparchoices en una sola línea, y checkboxes / oneparcheckboxes con casilla para marcar. La opción correcta no se escribe con \choice sino con \CorrectChoice, que es lo que hace funcionar la clave de respuestas descrita más abajo.

Dónde se imprimen los puntos se ajusta con detalle. Por defecto siguen al número de la pregunta, pero \pointsinmargin y \pointsinrightmargin los llevan al margen, y \pointsdroppedatright convierte el margen derecho en una columna donde anotar los puntos descontados. Sustituir la palabra «points» por otra es una redefinición de una línea de \pointname. Las cabeceras y pies, una vez elegido \pagestyle{headandfoot}, se escriben en tres partes —\header{izq}{centro}{der} y \footer{izq}{centro}{der}— y \firstpageheader / \runningheader permiten que la primera página se distinga de las demás. Imprimir «Página 2 de 3» es aquí equipamiento de serie, y solo con eso se detecta el ejercicio al que le falta una hoja.

latex
\documentclass[addpoints,12pt]{exam}
\pagestyle{headandfoot}
\header{Calculus I --- Midterm}{}{Page \thepage\ of \numpages}
\begin{document}
\begin{center}\gradetable[v][questions]\end{center}

\begin{questions}
  \question[10] Differentiate $f(x)=x^3$.

  \question[5] Pick the correct answer.
  \begin{oneparchoices}
    \choice wrong \CorrectChoice right \choice wrong
  \end{oneparchoices}

  \question Answer both parts.
  \begin{parts}
    \part[3] State the definition.
    \part[7] Prove the claim.
  \end{parts}
\end{questions}
\end{document}

Qué cambia \printanswers: una fuente, examen y clave

\printanswers es el interruptor que decide si aparecen las soluciones, pero lo interesante es qué ocupa su lugar cuando están ocultas. Un entorno solution simplemente imprime o no imprime. Escriba en su lugar solutionorlines[2.5in] y obtendrá la solución cuando las respuestas están activadas, y 2,5 pulgadas de renglones cuando no lo están. Con la misma idea existen solutionorbox (un marco), solutionordottedlines (línea de puntos) y solutionorgrid (papel cuadriculado). Un documento de seis preguntas, cada una envuelta en solutionorlines[2.5in], compilado de ambas maneras, da dos páginas con \printanswers y tres con \noprintanswers. El texto de las soluciones aparece seis veces en el primero y ni una sola en el segundo. La página de más es exactamente el espacio de escritura que sustituyó a las soluciones ocultas.

latex
% One source, two documents.
%   \printanswers   -> the key   (measured: 2 pages, 6 solutions printed)
%   \noprintanswers -> the paper (measured: 3 pages, 0 solutions printed)
\documentclass[addpoints,12pt]{exam}
\printanswers          % comment this line out to get the blank paper
\begin{document}
\begin{questions}
  \question[10] State the definition and prove the claim.
  \begin{solutionorlines}[2.5in]
    $f'(x)=3x^2$ by the power rule.
  \end{solutionorlines}
\end{questions}
\end{document}

En la práctica conviene saber que hay dos maneras de accionar el interruptor: escribir \printanswers en la fuente o pasar la opción de clase [answers]. La salida es idéntica —comprobado en el mismo documento, ambas dan dos páginas con seis soluciones—. La vía de la opción deja el cuerpo intacto, así que una regla de latexmk o un Makefile puede emitir los dos PDF mediante \PassOptionsToClass sin editar nada. Existe además cancelspace, que no imprime ni las soluciones ni el espacio reservado para ellas: ignora por completo el argumento entre corchetes de los entornos solutionor… y entrega solo las preguntas, justo lo que hace falta para repartir un examen de años anteriores como hoja de estudio. Nótese que cancelspace no tiene efecto alguno mientras se imprimen las respuestas.

Comando / entornocon printanswerscon noprintanswers
solutionimprime la soluciónno imprime nada
solutionorlinesimprime la soluciónrenglones de la altura indicada
solutionorboximprime la soluciónun marco vacío de la altura indicada
solutionorgridimprime la soluciónpapel cuadriculado de la altura indicada
\fillwithlinesimprime renglones sin importar el interruptorlo mismo
cancelspacesin efectoignora el argumento entre corchetes y no deja espacio

Imprimir una tabla de calificación: \gradetable y \pointsonpage

Una sola línea, \gradetable[v][questions], coloca en la portada una tabla de calificación con números de pregunta, puntos y casillas vacías para la nota. El primer argumento es la orientación (v vertical, h horizontal) y el segundo el eje: questions da una fila por pregunta, pages una por página. La tabla indexada por página se gana su sitio cuando varias personas corrigen a la vez, porque se corresponde exactamente con «tú te encargas de la página 3». También está disponible la aritmética: \pointsofquestion{3} devuelve los puntos de la pregunta 3 y \pointsonpage{2} el total de la página 2. Junto con la opción addpoints, esto significa que cambiar una puntuación actualiza la tabla y los totales a la vez. No sumar a mano es todo el valor de esta función. Las preguntas de bonificación tienen \bonuspoints y sus propias tablas.

Lo en serio que está construida la clase exam se ve en el grosor de su manual. El examdoc.pdf de TeX Live 2024 tiene 135 páginas: una guía de usuario de 135 páginas para una clase cuyo único propósito es componer exámenes. La escribe Philip Hirschhorn, del Departamento de Matemáticas del Wellesley College, topólogo conocido por Model Categories and Their Localizations. La línea de copyright del manual enumera los años de revisión 1994, 1997, 2000, 2004, 2008, 2011, 2015, 2017, 2021, 2023: es una clase que un solo matemático lleva casi treinta años manteniendo para su propia docencia. La versión incluida en TeX Live 2024 es la v2.704, fechada el 9 de julio de 2023.

Plantillas de tesis: no pelee con la que le da su universidad

La conclusión primero: si su universidad distribuye una clase o una plantilla, úsela y modifíquela lo menos posible. La razón no es tipográfica sino procedimental. Márgenes, interlineado, redacción de la portada, estilo de numeración de figuras y tablas están, en la mayoría de instituciones, recogidos por escrito en los requisitos de entrega, y una tesis que se aparte de ellos se devuelve sin atender al contenido, normalmente el mismo día del plazo. Solo TeX Live 2024 contiene 64 directorios cuyo nombre incluye thesis o diss y que traen un .cls: mitthesis, ucbthesis, uiucthesis, thuthesis, njuthesis, ut-thesis, york-thesis, etcétera. Las plantillas locales que nunca llegan a CTAN son muchísimas más, y la mayoría circulan como «el .cls que heredé del curso anterior».

¿Qué es entonces una plantilla así por dentro? Casi siempre una clase que coloca una portada y una geometría de página prescritas encima de book o report. Por eso \chapter y \tableofcontents se comportan con normalidad dentro de ella y, a la inversa, por eso una plantilla que parece rota suele tener el problema en sus cimientos. Si no hay nada impuesto y elige usted, una tesis con capítulos pide report o book; para un control más fino de la presentación, memoir (v3.8.2 en TeX Live 2024, fechada el 26 de enero de 2024, que se describe a sí misma como «configurable book, report, article document class») o scrbook / scrreprt de KOMA-Script. La sección siguiente examina en qué se diferencian a partir de lo que realmente hay definido en cada una.

La diferencia entre report y book: caras, y dónde empieza un capítulo

La diferencia está escrita en las opciones por defecto. book.cls dice \ExecuteOptions{letterpaper,10pt,twoside,onecolumn,final,openright}; report.cls tiene la misma línea con oneside y openany. Es decir, book está preparada para impresión a doble cara y cada capítulo empieza en página impar (derecha), lo que a veces implica insertar una página en blanco. report es de una sola cara y el capítulo empieza sin más en la página siguiente. Para una tesis que se encuadernará, el comportamiento de book es el correcto; para una entrega en PDF que nadie imprimirá a doble cara, report es más directo. article no tiene \chapter en absoluto: necesitar o no \chapter es la primera bifurcación al elegir clase.

ClaseCaras por defectoInicio de capítulofrontmatter
articleonesideno existe \chapterno definido
reportonesideopenany (la página siguiente)no definido
booktwosideopenright (página impar)definido
memoircomo book (configurable)openright (configurable)definido
scrbooktwosideopenrightdefinido
scrreprtonesideopenanyno definido

Por qué \frontmatter da ! Undefined control sequence y qué hacen realmente los tres

\frontmatter, \mainmatter y \backmatter solo existen en las clases derivadas de book. Escriba \frontmatter bajo \documentclass{report} y obtendrá ! Undefined control sequence. con la línea señalada como l.3 \frontmatter. Buscar en los archivos de clase lo confirma: la cadena frontmatter aparece en book.cls, memoir.cls y scrbook.cls, y no aparece en article.cls, report.cls ni scrreprt.cls. La mayoría de los avisos de «\frontmatter no funciona en la plantilla de mi universidad» se reducen a esto: la plantilla está construida sobre report. Si no necesita el comportamiento ligado a la numeración de capítulos, escribir a mano \pagenumbering{roman} y \pagenumbering{arabic} da el mismo resultado, porque eso es casi todo lo que contienen las tres órdenes.

¿Qué contienen exactamente? En book.cls: \frontmatter ejecuta un \cleardoublepage, pone \@mainmatterfalse y \pagenumbering{roman}. \mainmatter ejecuta un \cleardoublepage, pone \@mainmattertrue y \pagenumbering{arabic}. Y \backmatter cierra la página y pone \@mainmatterfalse; no toca la numeración de páginas en absoluto. Este punto se transmite mal a menudo; toda explicación que afirme que el material final cambia la numeración está equivocada. Lo que un \@mainmatter falso cambia de verdad es el comportamiento de \@chapter: el contador de capítulo no avanza, no se imprime número en el título y la entrada del índice se añade sin \numberline. Así, en preliminares y material final los capítulos salen sin número pero siguen apareciendo en el índice: agradecimientos y bibliografía no llevan número y aun así se alcanzan desde el índice. Toda esa convención de la escritura académica descansa en ese único interruptor.

latex
% Measured page labels from this exact file (book, 12pt):
%   front matter -> i, ii, iii, iv   (roman, chapters unnumbered but in the ToC)
%   main matter  -> 1, 2, 3, 4       (arabic, "Chapter 1", "Chapter 2")
%   back matter  -> 5                (still arabic; chapter unnumbered)
\documentclass[12pt]{book}   % or your university's class
\begin{document}
\frontmatter
\chapter{Acknowledgements}
Thanks.
\tableofcontents

\mainmatter
\include{chapters/intro}
\include{chapters/method}

\backmatter
\chapter{Bibliography}
Refs.
\end{document}

En la práctica: dividir los capítulos y no romperlo la víspera

Lo primero que hay que hacer con una tesis larga es dividirla en un archivo por capítulo e incorporarlos con \include. \include empieza página nueva antes y después de cada archivo, lo que encaja con los límites de capítulo, y \includeonly{chapters/method} permite luego componer un solo capítulo sin los demás manteniendo correctas la paginación y las referencias cruzadas. En una tesis de 300 páginas donde solo hay que retocar el capítulo 7, tenerlo o no cambia la espera en un orden de magnitud. Dividir un proyecto y manejar documentos grandes tienen aquí su propia página; siga los enlaces de related. Otro hábito que se agradece cerca del plazo: cree una rama antes de tocar la maqueta. Las ganas de recortar un milímetro al margen llegan, casi sin excepción, la última noche.

  • El resumen va en un entorno abstract, pero muchas plantillas obligatorias piden \chapter*{Abstract} en las clases derivadas de book: consulte primero la guía de estilo distribuida.
  • Para un capítulo sin numerar que aun así deba aparecer en el índice, haga seguir a \chapter*{...} un \addcontentsline{toc}{chapter}{...}. Dentro de \frontmatter, un \chapter normal ya lo hace.
  • Los archivos incorporados con \include no deben contener \documentclass ni \begin{document}; ponerlo da ! LaTeX Error: Can be used only in preamble.
  • Haga siempre una compilación limpia antes de entregar. Un .aux viejo conserva sin más una referencia cruzada que ya borró, y la compilación sale bien igualmente.
  • Si aun así modificó la clase de la universidad, deje un comentario diciendo qué cambió. Tanto usted dentro de tres meses como el estudiante siguiente acabarán leyéndolo.

Un último rasgo común a ambos géneros. El examen y la tesis son documentos cuyo contenido y presentación dependen de personas distintas: quien redacta y quien corrige, en un caso; el autor y la institución evaluadora, en el otro. LaTeX es fuerte aquí no porque la composición sea bella, sino porque esa separación puede expresarse directamente en la estructura de la fuente. Un \printanswers separa el examen de la clave; un \frontmatter separa los capítulos numerados de los que no lo están. Si una bifurcación puede plegarse en un solo interruptor es algo que se nota la víspera del plazo.