Blog sobre educación

Etiqueta: LaTeX

EdiMarkWeb: escribir en Markdown y convertir a cualquier formato

La preparación de materiales suele exigir un mismo contenido en formatos distintos: el documento de Word que pide el departamento, el PDF que se entrega al alumnado y, en ocasiones, la página web del aula virtual. Cuando el texto incluye fórmulas, la conversión de un formato a otro deja de ser inmediata y obliga a repasar y rehacer el resultado en cada paso.

EdiMarkWeb es un editor de Markdown pensado para ese trabajo: se escribe una sola vez, o se pega directamente lo que ha respondido un chatbot, se ve el resultado mientras se escribe y se exporta a DOCX, ODT, EPUB, HTML, LaTeX o PDF según convenga. También recorre el camino inverso: abre documentos de esos mismos formatos, PDF incluido, y los convierte en texto editable. Funciona en el navegador, sin instalar nada, y también como aplicación de escritorio para Linux, Windows y macOS. En los dos casos el documento no sale del equipo: no hay cuentas, ni servidores, ni subida de archivos a ningún sitio.

Pódcast del artículo realizado por Gemini Notebook

Markdown y los dos editores

Markdown es texto corriente con unas pocas marcas: almohadillas para los encabezados, asteriscos para la negrita, guiones para las listas. Se aprende en unos minutos y tiene una ventaja de fondo: el archivo es texto plano, de modo que se abre en cualquier ordenador, también dentro de veinte años, sin depender de la versión del programa con que se escribió.

La pantalla se divide en dos paneles. A la izquierda, el editor Markdown, con el texto y sus marcas. A la derecha, el editor visual, con el documento ya compuesto. Los dos están sincronizados y los dos se pueden editar, de modo que se puede corregir sobre el texto acabado, como en un procesador, y ver cómo cambia el Markdown de la izquierda. La barra de herramientas cubre lo habitual (encabezados, listas, citas, enlaces, imágenes, tablas, bloques de código) y trabaja en cualquiera de los dos.

Bajo los paneles, una barra de estado reúne lo que se consulta a diario: el número de caracteres y palabras, el idioma del documento, un resumen de cómo va a salir (tamaño de letra, tipo e interlineado), la lupa y los tres botones que reparten la pantalla entre un panel, los dos o el otro.

Los documentos se organizan en pestañas, cada una con su archivo, y se guardan solas: si se cierra el navegador por accidente, al volver está todo. Y si queda algo sin guardar, avisa antes de cerrar la pestaña. Con el botón derecho sobre una pestaña se cierran las demás de una vez y se recupera la última cerrada, que es lo que se echa en falta después de abrir una carpeta entera.

El Markdown de la IA, directamente al documento

Esta es la función con la que nació el programa y sigue siendo la más utilizada. Al copiar la respuesta de un chatbot y pegarla en un procesador de textos, lo que aparece es un texto lleno de asteriscos y almohadillas. Las fórmulas llegan además como el código que son, \frac{-b \pm \sqrt{b^{2}-4ac}}{2a}, y no compuestas. El contenido es correcto, pero no se puede entregar en ese estado.

La causa es que las inteligencias artificiales responden en Markdown, con las fórmulas escritas en LaTeX. Es su formato nativo, aunque el chat lo presente ya compuesto. Al copiar, lo que viaja son las marcas, y el procesador de textos no sabe qué hacer con ellas.

EdiMarkWeb interpreta ese formato. Se copia la respuesta del chat, se pega en el panel izquierdo y en el derecho aparece el documento terminado: los encabezados como encabezados, las listas como listas, las tablas como tablas y las fórmulas compuestas. De ahí sale ya un DOCX, un ODT o un PDF listos para entregar.

El pegado admite algo más que texto plano. El botón Pegar de la barra de herramientas, o el habitual Ctrl+V, reconoce también el contenido enriquecido que se copia de una página web o de un documento de Word, y lo convierte a Markdown, así como las imágenes copiadas al portapapeles, que quedan incrustadas en el documento. Y para las respuestas que vienen en LaTeX completo, con su preámbulo y su \begin{document}, está Archivo → Pegar LaTeX (Ctrl+Mayús+V), que las convierte en un documento editable.

En la práctica, la conversación con la IA deja de quedarse en el chat y se convierte en material de trabajo (los ejercicios resueltos, el examen, los apuntes de un tema) guardado en un archivo propio, en el ordenador, y en el formato que haga falta.

La vista previa compone la página real

El cambio más visible de las últimas versiones está en el panel derecho, que ha pasado de mostrar una aproximación del documento a componer la página tal como se va a imprimir. La hoja mide lo que mide un A4 o una Carta y el texto se reparte en páginas, con su separación entre una y otra. El corte cae siempre entre dos bloques, nunca a media línea, como en un procesador de textos.

El aumento se aplica a la página completa, con sus márgenes, en lugar de reordenar el texto, de modo que el reparto se conserva. Un interruptor con forma de cadena vincula además el ancho del panel y el aumento en los dos sentidos: al apartar el separador la hoja crece, y al modificar la lupa es el separador el que se retira para dejarle sitio. La página se ve así siempre entera, sin barra de desplazamiento horizontal.

El reparto es exacto para el PDF y para la impresión, que se generan a partir de esta misma hoja.

Las fórmulas

Las fórmulas se escriben en LaTeX entre delimitadores, y se admiten los cuatro habituales: \(...\) y $...$ para las que van dentro de una línea, \[...\] y $$...$$ para las que van aparte. Los dos primeros son los recomendados, porque el dólar también aparece en el texto por sus propios motivos y ahí puede confundirse con el principio de una fórmula. La vista previa las compone al momento con KaTeX, mientras se escribe. Hay tres maneras de ponerlas: el menú de fórmulas del editor Markdown, que inserta los delimitadores sin tener que recordarlos; una ventana propia en el editor visual, que muestra el código y el resultado a la vez y avisa del error si lo hay; y EdiCuaTeX, el editor visual de ecuaciones, para quien no domine la sintaxis.

Los formatos de entrada y de salida

Editores de Markdown hay muchos. Lo que distingue a EdiMarkWeb son los formatos que admite al abrir un documento y los que produce al exportarlo.

Lo que entra. Además de los archivos Markdown, se pueden abrir documentos de Word (.docx), de LibreOffice (.odt), libros digitales (.epub), páginas web (.html), documentos LaTeX (.tex) y archivos PDF, que se convierten a Markdown al abrirlos. El PDF es la incorporación más reciente y tiene apartado propio más abajo. Las imágenes de los DOCX, ODT y EPUB se extraen del propio archivo, de modo que no se pierden, y de un EPUB vuelve además el idioma, que el libro guarda en su envoltorio y no en el texto. Los archivos se pueden arrastrar sobre la ventana, incluso carpetas enteras: cada documento compatible se abre en su pestaña y lo demás se ignora.

Lo que sale. Del mismo documento se obtiene un DOCX para quien trabaja con Word, que es también el formato con el que Google Docs importa y exporta, de modo que el mismo archivo sirve para los dos, un ODT para LibreOffice, un EPUB que se lee en cualquier lector de libros electrónicos, una página web autónoma (con los estilos y las fórmulas dentro del propio archivo, lista para subir a un servidor) o un .tex preparado para compilar. Y el PDF, que es la sexta salida del menú: abre el diálogo de impresión del sistema, donde se elige «Guardar como PDF» como destino. Lo que sale es exactamente lo que se ve en la hoja, con las fórmulas compuestas, los márgenes del documento y el texto seleccionable y buscable.

En la barra de arriba, junto al icono de guardar, hay además dos botones que repiten de un clic el último formato usado, y lo dicen en un rótulo pequeño: uno exporta a un archivo y el otro copia al portapapeles.

Lo que no llega a ser archivo. El botón de copiar hace lo mismo que Exportar con otro destino, el portapapeles, y ofrece cuatro formatos: Markdown, HTML, LaTeX y LaTeX completo. El útil para el trabajo diario es el HTML, porque pega el documento con su formato en Word, LibreOffice, Google Docs o el correo, con los encabezados, las negritas, las listas y las tablas ya compuestos, sin pasar por ningún archivo intermedio. Dos advertencias: las fórmulas se pegan como texto, así que para llevarlas como ecuaciones hay que exportar a DOCX u ODT, y las imágenes solo viajan si están incrustadas en el documento.

Importar un PDF

El PDF es el formato en el que circula casi todo el material que ya está hecho: los apuntes de otros años, las orientaciones de la Administración, un artículo, un libro de texto. Recuperar ese contenido para reutilizarlo obligaba hasta ahora a pasar por un servicio externo, que casi siempre convierte primero a DOCX y devuelve un documento lleno de cuadros de texto.

EdiMarkWeb lo convierte a Markdown en el propio equipo, sin enviar el archivo a ningún servidor. Se elige el PDF en Archivo → Importar, o se arrastra sobre la ventana, y aparece un cuadro que dice cuántas páginas tiene antes de empezar. Se puede eliminar los encabezados y los pies repetidos, conservar las imágenes y las fórmulas detectadas, y convertir solo unas páginas concretas escribiéndolas como 12-20, 35.

Los documentos escaneados, que no llevan texto sino la fotografía de cada página, se resuelven con reconocimiento óptico de caracteres. La opción solo aparece cuando el programa detecta páginas de ese tipo, y entonces dice cuántas son y en qué páginas están. Viene desactivada, porque descarga un motor de reconocimiento y la conversión pasa a ser bastante más lenta.

Las imágenes del PDF se guardan aparte, como archivos junto al documento, y no dentro del texto, de modo que un informe con cien fotografías no llena el almacenamiento del navegador. Las tablas se importan como tablas.

Conviene saber qué se puede esperar. El límite es de 50 MB por archivo, sin límite de páginas; a partir de un centenar el propio cuadro avisa de que puede tardar minutos, y una barra va diciendo por dónde va, página a página, para que no parezca detenido. Los PDF con contraseña hay que desbloquearlos antes.

Citas y bibliografía

Las citas y la bibliografía amplían el uso del programa más allá de la preparación de materiales de clase: sirven igualmente para una memoria, un artículo o un trabajo de fin de grado.

Se carga una biblioteca en BibTeX (.bib) o CSL JSON (.json), los dos formatos que exportan Zotero, Mendeley y Google Académico, y a partir de ahí las citas se insertan desde un cuadro que busca por autor, título, año o clave. Quien no tenga todavía una biblioteca puede cargar la de ejemplo, con siete referencias completas, o escribir las suyas a mano: el formulario admite artículos, libros, capítulos, informes, páginas web, tesis y comunicaciones, con los campos propios de cada tipo, y la clave de cita se genera sola con el apellido, el año y una palabra del título.

En el texto queda una marca corta, [@freeman2014active], y de ella salen la cita compuesta y la lista de referencias del final, ordenada por apellidos. El estilo inicial es APA 7; también hay Chicago autor-fecha, MLA 9 e IEEE, y se puede cargar un archivo CSL propio, que es como se ajustan las normas de una revista o de una universidad concreta.

Al guardar, la biblioteca y el estilo se copian junto al documento, en su carpeta, y quedan declarados dentro del archivo. Es lo que permite abrir el mismo trabajo en otro ordenador y que las citas se compongan igual.

Cada documento, con su formato

Los ajustes de salida están reunidos en Configuración → Opciones generales…, que es lo que antes se llamaba opciones de exportación. Son cinco pestañas: los datos y el índice (idioma, autor, numeración de apartados, profundidad), el texto y la página, la portada del EPUB, las citas y, para quien use LaTeX, la clase del documento, sus opciones y un preámbulo propio.

La pestaña de texto y página reúne lo que suele obligar a retocar el documento una vez exportado: la alineación, el tipo y el tamaño de letra, el interlineado, el tamaño de papel, la orientación, los márgenes de los cuatro lados, la sangría de primera línea y la partición de palabras con guion. Se aplica a la hoja que se está viendo y a todos los formatos de salida, de modo que el DOCX y el ODT salen ya con la caja y la tipografía que se quieren.

No es necesario que todos los documentos compartan esos ajustes. Cada uno puede llevar los suyos, junto con su idioma, su autor y su decisión sobre el índice, en el cuadro Opciones de este documento, que se abre desde la propia barra de estado. Se guardan dentro del archivo, en unas líneas de metadatos al principio, así que viajan con él: un manual quiere índice numerado y una nota de dos párrafos no, y cada uno lo lleva escrito.

Un detalle que suele dar problemas es el idioma. Cada documento puede llevar el suyo, guardado dentro del propio archivo, y todos los formatos de salida lo declaran. Eso es lo que evita que Word y LibreOffice subrayen en rojo un texto castellano por corregirlo en inglés, y lo que hace que LaTeX parta bien las palabras.

Las imágenes y la carpeta del documento

Una imagen se puede insertar de dos maneras: incrustada en el propio archivo, que se vuelve autónomo pero mucho más pesado, o con ruta relativa, que es lo recomendado y lo que hace cualquier editor de Markdown. En ese caso el documento y sus imágenes viajan juntos: al guardar mi-archivo.md se crea al lado una carpeta mi-archivo con las imágenes dentro y, si hay bibliografía, también con ella y con el estilo. Basta conservar los dos para llevarse el trabajo a otro ordenador.

Bajo el editor Markdown, una lista reúne todas las imágenes del documento, las incrustadas y las enlazadas. Desde ahí se ven, se reemplazan (por una del disco, del portapapeles o de una dirección web) y se quitan del texto, y las enlazadas se pueden incrustar. Existe también la operación inversa: las incrustadas se extraen del archivo y quedan como imágenes dentro de la carpeta.

En la aplicación de escritorio las imágenes con ruta relativa se encuentran solas. En el navegador no, porque ninguna página puede leer una carpeta sin permiso: aparece un aviso con un botón para señalarla y, hecho una vez, se ven todas.

En el navegador o instalado

La versión web no necesita instalación y basta para la mayoría de los casos. La aplicación de escritorio, para Linux, Windows y macOS, es la misma (los mismos menús, los mismos atajos, los mismos formatos) y añade lo que solo puede hacer un programa instalado: abrir los archivos .md con doble clic, guardar sobre el documento original sin pasar por la carpeta de descargas, usar el corrector ortográfico del sistema y funcionar sin conexión, porque lleva dentro las herramientas de conversión. También avisa cuando hay una versión nueva y la instala, y vuelve a leer del disco el documento abierto cuando se ha modificado fuera del programa.

En macOS conviene saber que la aplicación no está firmada con una cuenta de desarrollador de Apple, que es de pago, así que al abrirla por primera vez el sistema avisa de que «está dañada y debería moverse a la papelera». No lo está: es lo que macOS dice de cualquier aplicación sin firmar descargada de internet. Se resuelve una sola vez arrastrando EdiMarkWeb a la carpeta Aplicaciones y ejecutando en el Terminal xattr -dr com.apple.quarantine /Applications/EdiMarkWeb.app, que retira la marca de «descargado de internet» de esa aplicación y no cambia ningún ajuste del sistema.

En el navegador, con todo, guardar ha dejado de ser una descarga: Chrome y Edge abren el diálogo del sistema para elegir el nombre y la carpeta, y recuerdan el archivo, así que la siguiente vez Ctrl+S escribe encima como en la aplicación de escritorio. Firefox todavía no admite esa forma de guardar y sigue descargando el archivo.

EdiMarkWeb es software libre, con licencia AGPL v3, y su código está en GitHub, junto con los instaladores de la aplicación de escritorio y el manual de uso, disponible también dentro del programa con F1.

Límites conocidos

Conviene tener presentes algunas limitaciones antes de emplearlo en un trabajo extenso. El índice de un DOCX o un ODT es un campo que calcula el procesador de textos, así que el documento se abre con la lista de apartados pero sin números de página hasta que se actualiza (en Word, botón derecho sobre el índice y Actualizar campos). En el EPUB los márgenes son una sugerencia, porque manda el lector de libros. La partición de palabras necesita los diccionarios de guiones del sistema. Y el reparto en páginas que se ve en pantalla es exacto para el PDF y la impresión, pero solo orientativo para Word y para LaTeX, que componen las líneas a su manera.

La importación de PDF tiene las suyas, propias de un formato pensado para imprimirse y no para editarse: la detección de tablas, columnas y fórmulas no es infalible y puede dividir celdas o alterar el orden del texto, las fórmulas reconocidas se guardan como imágenes y no como ecuaciones editables, y el reconocimiento de un documento escaneado sufre con las fotografías, las marcas de agua y la resolución baja. Conviene revisar el resultado, que para eso el cuadro lo muestra antes de importarlo. En la aplicación de escritorio para Linux, además, los documentos de más de doscientas páginas se convierten con lentitud; la versión web no tiene ese problema en ningún sistema.

Para qué sirve en la práctica

El destinatario natural es el profesorado que prepara materiales con fórmulas y los tiene que entregar en formatos distintos: los apuntes en PDF, el examen en Word para el departamento (o en Google Docs, que abre ese mismo archivo), la misma unidad convertida en página web para el aula virtual y, si se quiere, en libro digital para leerlo en una tableta. Todo eso sale de un único archivo de texto que se puede corregir el curso que viene sin volver a maquetar nada. Con la bibliografía se añade un trabajo que hasta ahora se hacía en otra parte: la memoria, el artículo o el trabajo de fin de grado, con sus citas y su lista de referencias en la norma que se exija.

Sirve también para lo contrario: recuperar el material que ya existe. Un documento de Word de hace años, o un PDF del que no se conserva el original, se abre aquí, se convierte en texto limpio y vuelve a salir por el formato que se necesite. Y, sobre todo, para conservar lo que ha respondido la inteligencia artificial, en un archivo propio y en un formato que se pueda entregar.

Vídeo del artículo realizado por Gemini Notebook

Nota: Este artículo tiene nivel 5 en el Marco para la integración de la IA generativa.

Exámenes con la clase ‘exam’ en \(\LaTeX\)

LaTeX tiene la clase exam, probablemente poco conocida, que dispone de una enorme cantidad de utilidades para elaborar exámenes escritos. Una de las cosas interesantes que tiene es la posibilidad de hacer los exámenes con las soluciones, que pueden ser imprimidas o no.

Además de esto, podemos controlar la puntuación de cada pregunta y subpregunta, dónde se imprime y cómo, elaborar una tabla final de calificaciones, poner preguntas con puntos extra, disponer de diferentes tipos de espacios para las respuestas (líneas contínuas, de puntos, cuadrícula para gráficas, etc), poner encabezados y pies diferentes en la primera página del resto o elaborar diferentes tipos de preguntas con sus posibles respuestas (tipo test), entre otras muchas cosas. Para ver la descripción completa, con numerosos ejemplos, consultar el documento Using the exam document class.

Estructura

El preámbulo del documento deberá empezar con: \documentclass{exam}. Si deseamos llevar el control de los puntos añadiremos: \documentclass[addpoints]{exam}, también podremos añadir el tamaño de la letra y del papel como suele ser habitual: \documentclass[12pt,a4paper,addpoints]{exam}

Las preguntas utilizan el entorno questions (en plural) y cada pregunta se identifica con \question (en singular). Un par de preguntas quedarían así:

\begin{questions}
  \question Esta es la primera pregunta
  \question Esta es la segunda pregunta
\end{questions}

Añadiendo el resto del código que falta al documento:

\documentclass[12pt,a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\begin{document}

\begin{questions}
  \question Esta es la primera pregunta
  \question Esta es la segunda pregunta
\end{questions}

\end{document}

Una vez compilado el resultado de este código no es demasiado espectacular:

Resultado del código anterior

Subpreguntas

Es posible dividir una pregunta en subapartados, concretamente \question puede ser dividido en varios \part que a su vez pueden ser subdivididos en varios \subpart que a su vez pueden ser subdivididos en varios \subsubpart. El funcionamiento es idéntico al de \question (atención al uso del plural y singular de cada entorno):

\documentclass[12pt,a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\begin{document}

\begin{questions}
  \question Esta es la primera pregunta
  \begin{parts}
      \part Una subpregunta
      \part Otra subpregunta
  \end{parts}
  \question Esta es la segunda pregunta
  \begin{parts}
      \part Una subpregunta
      \begin{subparts}
          \subpart Una subsubpregunta
          \subpart Otra subsubpregunta
      \end{subparts}
  \end{parts}
\end{questions}

\end{document}
Resultado de añadir dos niveles extra en las preguntas: \part y \subpart

El estilo de la numeración puede ser cambiado a gusto de cada uno, este es el que se obtienen por defecto. El siguiente código, colocado en el preámbulo, nos transforma la numeración anterior en 1.1, 1.2, 1.2.1, etc:

\renewcommand{\thepartno}{\arabic{partno}}
\renewcommand{\partlabel}{\thequestion.\thepartno}

\renewcommand{\thesubpart}{\arabic{subpart}}
\renewcommand{\subpartlabel}{\thequestion.\thepartno.\thesubpart}

\renewcommand{\thesubsubpart}{\arabic{subsubpart}}
\renewcommand{\subsubpartlabel}{\thequestion.\thepartno.\thesubpart.\thesubsubpart}
Si hay más de un subnivel de preguntas quizás esta forma sea más clara.

Puntuación

Vamos a añadir alguna puntuación a las preguntas. Esto se consigue encerrando entre corchetes la numeración detrás de \question, \part, \subpart o \subsubpart. Esta numeración ha de ser entera o bien medios puntos que se representan mediante \half, no es por tanto posible poner 0.25 puntos, 0.1 o números decimales similares. Para evitar que aparezcan los puntos en inglés hay que traducirlos a través de \pointpoints{punto}{puntos}

\documentclass[12pt,a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\pointpoints{punto}{puntos}

\begin{document}

\begin{questions}
  \question Esta es la primera pregunta
  \begin{parts}
      \part[2] Una subpregunta
      \part[1] Otra subpregunta
  \end{parts}
  \question[3] Esta es la segunda pregunta

\end{questions}

\end{document}
Si no se especifica nada los puntos aparecen al principio entre paréntesis, pero este comportamiento puede ser cambiado.

Hay muchas opciones referentes a los puntos destacamos las siguientes:

  • Corchetes en lugar de paréntesis: \bracketedpoints
  • En el margen izquierdo: \pointsinmargin
  • En el margen derecho: \pointsinrightmargin

En los dos últimos casos aparecerá nada más el número entre paréntesis (o corchetes si lo hemos cambiado) para que aparezca también el texto punto o puntos hay que añadir: \marginpointname{ \points}. Por ejemplo, aquí tenemos la puntuación en el margen izquierdo entre corchetes:

\documentclass[12pt,a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\pointpoints{punto}{puntos}

\marginpointname{ \points} %Texto tras el número
\pointsinmargin %Puntos en el margen izquierdo
\bracketedpoints %Puntos entre corchetes

\begin{document}

\begin{questions}
  \question Esta es la primera pregunta
  \begin{parts}
      \part[2] Una subpregunta
      \part[1] Otra subpregunta
  \end{parts}
  \question[3] Esta es la segunda pregunta

\end{questions}

\end{document}
Puntuación en el margen

Hay más opciones, como colocar la puntuación al final de las subpreguntas, poner un título a cada pregunta y poner la calificación a este título, etc., véase el apartado 4 de Using the exam document class.

Soluciones

Uno de los aspectos más interesantes de esta clase es la de que podemos poner las soluciones que aparecerán o no según deseemos en cada momento.

Las soluciones utilizan el entorno solution y van justo después de cada pregunta. Para imprimir la solución se utiliza \printanswers. Además aparece el texto Solution (en inglés) para traducirlo usamos \renewcommand{\solutiontitle}{\textbf{Solución: }} y lógicamente podemos cambiarlo por otra expresión o dejar las llaves vacías para que no aparezca nada en absoluto. Veamos un ejemplo, donde además añadimos una pregunta de selección múltiple y otra con espacios en blanco.

\documentclass[12pt,a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\pointpoints{punto}{puntos}

\renewcommand{\solutiontitle}{\textbf{Solución: }}

%\printanswers

\begin{document}

\begin{questions}
  \question Referente a las <<novelas cortas>> de Alarcón, responde las siguientes preguntas.
  \begin{parts}
      \part[1] ¿En qué siglo se escribió La Buenaventura?
      \begin{checkboxes}
          \choice XVII
          \choice XVIII
          \CorrectChoice XIX
      \end{checkboxes}
      \part[9] Escribe el primer párrafo de La Buenaventura
      \begin{solution}[4cm]
          No sé qué día de Agosto del año 1816 llegó a las puertas de
          la Capitanía general de Granada cierto haraposo y grotesco
          gitano, de sesenta años de edad, de oficio esquilador y de
          apellido o sobrenombre Heredia, caballero en flaquísimo y
          destartalado burro mohíno, cuyos arneses se reducían a una
          soga atada al pescuezo; y, echado que hubo pie a tierra, dijo
          con la mayor frescura <<que quería ver al Capitán general.>>
      \end{solution}
  \end{parts}
  \question[2] Pedro Antonio de \fillin[Alarcón] nació en \fillin[1833] y murió en \fillin[1891].

\end{questions}

\end{document}

%\printanswers está desactivado al tener el símbolo del porcentaje delante, por lo tanto, las preguntas se imprimen sin solución. El espacio dejado en la pregunta 1b es de 4cm y lo hemos indicado al iniciar el entorno \begin{solution}[4cm] de esa pregunta. Si se omiten los corchetes no se dejará ningún espacio.

El resultado del código anterior es:

Si ahora eliminamos el % de \printanswers se imprimirá con las respuestas:

Si deseamos eliminar el recuadro de la solución, añadiremos al preámbulo: \unframedsolutions.

La solución empieza donde empieza la pregunta por lo que se puede desaprovechar mucho espacio por el lado izquierdo. Es posible escribir desde el principio izquierdo, para ello hay que utilizar: \fullwidth{\begin{solution}...\end{solution}}

Diferentes entornos ‘solution’

Existen diferentes entornos solution que producen diferencias precisamente cuando la solución no se imprime, ya que se generan diferentes patrones de líneas y espacios para que los alumnos respondan. Recordemos que estos espacios verticales se colocan entre corchetes detrás de \begin{solution}[xcm]. Recordemos también que podemos maximizar el espacio horizontal disponible para escribir con \fullwidth{}.

solution

Este es el que hemos usado en los ejemplos anteriores, genera un espacio en blanco cuando \printanswers está desactivado.

\documentclass[12pt,a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}

\pointpoints{punto}{puntos}

\renewcommand{\solutiontitle}{\textbf{Solución: }}

%\printanswers

\begin{document}

\begin{questions}
  \question[1] Pregunta
    \begin{solution}[4cm]
        Solución...
    \end{solution}
    \question[1] Otra pregunta
\end{questions}

\end{document}
Se ha creado un espacio en blanco de 4cm.

solutionorbox

Cuando no imprime la solución, imprime una caja vacía.

\begin{questions}
  \question[1] Pregunta
    \begin{solutionorbox}[4cm]
        Solución...
    \end{solutionorbox}
    \question[1] Otra pregunta
\end{questions}
Caja de 4cm de altura.

solutionorlines

Cuando no imprime la solución, imprime líneas.

\begin{questions}
  \question[1] Pregunta
    \begin{solutionorlines}[4cm]
        Solución...
    \end{solutionorlines}
    \question[1] Otra pregunta
\end{questions}
Líneas, la distancia entre líneas se puede controlar.

solutionordottedlines

Es como la anterior pero con líneas de puntos.

\begin{questions}
  \question[1] Pregunta
    \begin{solutionordottedlines}[4cm]
        Solución...
    \end{solutionordottedlines}
    \question[1] Otra pregunta
\end{questions}

solutionorgrid

Crea una cuadrícula.

\begin{questions}
  \question[1] Pregunta
    \begin{solutionorgrid}[4cm]
        Solución...
    \end{solutionorgrid}
    \question[1] Otra pregunta
\end{questions}

solutionbox

Es como solution pero se reserva el mismo espacio vertical tanto si se imprime la solución como si no. Eso significa que el examen tendrá la misma longitud con soluciones y sin soluciones. El espacio reservado no va entre corchetes sino entre llaves.

\begin{questions}
  \question[1] Pregunta
    \begin{solutionbox}{4cm}
        Solución...
    \end{solutionbox}
    \question[1] Otra pregunta
\end{questions}

Cómo poner todas las soluciones al final

En ocasiones querremos tener todas las soluciones juntas al final del examen. Para esto bastará con copiar las preguntas al final del documento, las encerramos entre \begin{solution}...\end{solution} y sustituimos las preguntas por sus soluciones borrando los enunciados. Si hemos puesto las puntuaciones de cada pregunta, habrá que eliminarlas. Aquí tenemos un ejemplo:

\documentclass[a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usepackage{multicol}

\everymath{\displaystyle} % Todas las fórmulas en modo extendido

\printanswers % Comentar esta línea para ocultar las soluciones

\renewcommand{\solutiontitle}{\textbf{Soluciones:}}

\begin{document}

\begin{questions}
  \question Resuelve las siguientes ecuaciones de primer grado:

      \begin{parts}
          \begin{multicols}{2}
              \part $2(x-3)=1-3(x+4)$.
              \part $5x-4(1-2x)-7(x+1)=1$. 
              \part $3(y-2)-2(y-3)=1-2y$.
              \part $3(2x-5)+4(1-x)=3+3(x-5)$.
          \end{multicols}
      \end{parts}

      \question Resuelve las siguientes ecuaciones de segundo grado

      \begin{parts}
          \begin{multicols}{2}
              \part $x^2=144$.
              \part $(x+2)(x-3)=0$.
              \part $2x^2=32$.
              \part $x^2+2=123$.
          \end{multicols}
      \end{parts}
\end{questions}

% Soluciones -------------------------
\begin{solution}
    \begin{questions}
        \question
        \begin{parts}
            \begin{multicols}{2}
                \part $x=-1$ 
                \part $x=2$ 
                \part  $x=\frac{1}{3}$ 
                \part  $x=1$           
            \end{multicols}
        \end{parts}

        \question
        
        \begin{parts}
            \begin{multicols}{2}
                \part $x=\pm 12$ 
                \part $x=-2,\ x=+3 $ 
                \part $x=\pm4 $ 
                \part $x=\pm11$  
            \end{multicols}
        \end{parts}
    \end{questions}
\end{solution}

\end{document} 
Soluciones al final del examen

Cómo poner la solución en cualquier lado

Utilizando el entorno solution, la solución va siempre separada de la pregunta, en su propio espacio. Sin embargo podemos usar \ifprintanswers para escribirla en cualquier parte que queramos. El funcionamiento es el siguiente:

\ifprintanswers  lo que saldrá si se imprime solución \else lo que saldrá si no se imprime solución \fi

La segunda parte, \else, se puede omitir. Veamos un ejemplo donde se escriben las soluciones a continuación del enunciado. Se utiliza multicols para poner las preguntas en dos columnas.

\documentclass[a4paper,addpoints]{exam}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[spanish]{babel}
\usepackage{multicol}

\everymath{\displaystyle} % Todas las fórmulas en modo extenido

%\printanswers % Descomentar esta línea para ver las soluciones

\begin{document}

\begin{questions}
  \question Resuelve las siguientes ecuaciones con paréntesis
  
      \begin{parts}
          \begin{multicols}{2}
              \part $2(x-3)=1-3(x+4)$. \ifprintanswers $x=-1$ \fi
              \part $5x-4(1-2x)-7(x+1)=1$. \ifprintanswers $x=2$ \fi
              \part $3(y-2)-2(y-3)=1-2y$. \ifprintanswers $x=\frac 1 3 $ \fi
              \part $3(2x-5)+4(1-x)=3+3(x-5)$. \ifprintanswers $x=1 $ \fi
              \part $4(5x-11)-6(8+x)+x=x-1$. \ifprintanswers $x=\frac{13}2$ \fi
              \part $8(5t-3)-1=0$. \ifprintanswers $x=\frac 5 8 $ \fi
          \end{multicols}
      \end{parts}

\end{questions}

\end{document}

El resultado sin soluciones es:

Resultado del código anterior, sin soluciones

Si descomentamos \printanswers, eliminando el % que tiene delante, obtendremos las soluciones:

Las soluciones aparecen tras cada pregunta, intercaladas entre ellas.

(gracias a Rafa S del grupo @MaTex de Telegram por las ideas de poner las respuestas al final del examen y de mezclarlas con las preguntas)

Para terminar

No hemos hablado de las tablas de calificaciones, puntos extra (bonus), tipos de preguntas o encabezados y pies, entre otras cosas. Si crees que esta clase puede serte útil no dejes de consultar Using the exam document class donde encontrarás una descripción de todas las posibilidades que tiene.

Quizás te interese también…

Este artículo forma parte de la serie: La clase exam de \(\LaTeX\)

© 2026 Bilateria

Tema por Anders NorenArriba ↑