Saltar al contenido principal

Capítulo 3.13 · Parte II · El oficio

Configuración: ejercicios

Los estilos de ejercicio (exerciseStyles) y los ajustes de ejercicios del libro (exercises): el número, la letra del enunciado, las letras y las casillas de las opciones, los huecos, las respuestas de verdadero o falso, relacionar, el banco de palabras, los espacios para escribir, las cuadrículas, la división, las marcas de dificultad, los iconos, el color de las respuestas, dónde se imprimen las soluciones, la edición del profesor y las ediciones en pantalla

Actualizado 2026-10-2413 minEn el capítulo 3 Configuraciónenescadefritptzhjaar

En pocas palabras

Esta página reúne todos los ajustes del aspecto de los ejercicios. Un estilo de ejercicio decide cómo se imprime el número, qué letras llevan las opciones, cómo es un hueco para rellenar, qué pautado tienen las líneas para escribir y cómo se dibujan las cuadrículas y las operaciones. Los ajustes del libro deciden dónde se imprimen las soluciones y si el libro es la edición del alumno o la del profesor. También deciden cómo responden los lectores a los ejercicios en pantalla. La página Ejercicios explica cómo se escriben los ejercicios.

#Estilos de ejercicio

La propiedad exerciseStyles declara los estilos con nombre que un ejercicio elige con :::exercise{style="…"}. Un estilo es la forma de una familia de ejercicios; las preguntas y las respuestas siguen en el Markdown (consulta Ejercicios). Por defecto se incluye un estilo, exercise, así que el contenedor funciona sin configuración; declarar exerciseStyles lo sustituye, y el primer estilo declarado es el que toma un ejercicio sin style. Todos los campos son opcionales, y los valores por defecto siguen el idioma del documento allí donde las escuelas no coinciden: las letras de las opciones, las letras de verdadero o falso, la disposición de la división y las palabras que se imprimen.

const config: PostextConfig = {
  exerciseStyles: [
    {
      id: 'activity',
      box: 'activity-frame',
      number: { shape: 'disc', background: { hex: '#2a5ea8', model: 'hex' } },
      instruction: { fontFamily: 'Source Sans 3' },
      options: { marker: 'circle' },
      blank: { look: 'dots', width: 'answer' },
      area: { kind: 'grid', lines: 4 },
      level: { glyph: '★', empty: '☆' },
      icons: { pair: { glyph: '👥' } },
    },
    { id: 'quiz', extends: 'activity', options: { layout: 'row', columns: 4 } },
  ],
};
PropiedadTipoPor defectoDescripción
idstring—Id que elige :::exercise{style="…"}. Un id desconocido usa el primer estilo y genera un aviso (exerciseUnknownStyle).
namestringidNombre legible (solo para las interfaces de edición).
extendsstring—El id del estilo en el que se basa este. Cada grupo (number, options, blank…) se combina campo a campo, y icons por id.
boxstring—Un id de calloutStyles para el marco del ejercicio: fondo, borde, franja, márgenes interiores, colocación y corte entre páginas. Sin fijar, el ejercicio se compone en el texto corrido, sin marco, y se mantiene entero en una página.
numberobject—Cómo se imprime el número. Consulta Número.
instructionobject—La letra del enunciado. Consulta Enunciado.
optionsobject—Las opciones de una pregunta de opción múltiple. Consulta Opciones.
blankobject—Cómo se imprime un [[…]]. Consulta Huecos.
trueFalseobject—Las respuestas de una afirmación de verdadero o falso. Consulta Verdadero o falso.
matchobject—Dos columnas que unir. Consulta Relacionar.
bankobject—El banco de palabras. Consulta Banco de palabras.
areaobject—Los espacios para escribir. Consulta Espacio para escribir.
gridobject—Las casillas de las sopas de letras, los crucigramas y las operaciones. Consulta Cuadrículas.
arithmeticobject—Las operaciones en columnas. Consulta Operaciones.
levelobject—Las marcas de dificultad. Consulta Dificultad.
iconsRecord<string, ExerciseIcon>{}Los iconos de actividad por id, que nombra el atributo icon de un contenedor. Consulta Iconos.
answersobject—Cómo se imprimen las respuestas en la edición del profesor, en un elemento modelo y en las soluciones. Consulta Respuestas.
solutionsExerciseSolutionsConfig—Las exercises.solutions del libro para los ejercicios de este estilo: solo cambian los campos que se fijan aquí.
digitalobject—Los colores de las ediciones en pantalla. Consulta Colores en pantalla.
marginTopDimension1emEspacio encima de un ejercicio sin box.
marginBottomDimension1emEspacio debajo de un ejercicio sin box.
itemSpacingDimension0.25emEspacio entre dos elementos: opciones, preguntas, afirmaciones o parejas.

#Número

number fija el número del ejercicio. Un número suelto va en negrita, en el color principal y seguido de punto; uno con forma es una cifra blanca dentro de un círculo, un cuadrado o un cuadrado redondeado del color principal, sin nada detrás.

PropiedadTipoPor defectoDescripción
showbooleantrueImprime el número. La cuenta avanza de todos modos.
labelboolean | stringfalseUna palabra delante del número: true toma la del idioma del documento (Ejercicio, Exercise, Exercice, Übung, 练习, 練習, تمرين…); una cadena es la propia palabra ('Actividad').
shape'none' | 'disc' | 'square' | 'rounded''none'La forma en la que va el número.
colorColorValueblanco sobre una forma; si no, el color principalEl color del número.
backgroundColorValueel color principalEl relleno de la forma.
fontFamilystringla del texto que lo rodeaLa familia del número.
fontSizeDimension1emEl cuerpo del número; un em es el del enunciado.
fontWeightnumber700Con 600 o más se compone en negrita.
suffixstring'.'; nada sobre una formaLo que se imprime detrás de un número suelto y de su palabra: '.', ')', '、'.
templatestring'{n}'Lo que dice el número: {n} es la cuenta del ejercicio, y {h1} y {h2} los números del capítulo y de la sección ('{h1}.{n}' imprime 3.4).
resetOn'never' | 'h1' … 'h6''h1'El nivel de encabezado que reinicia la cuenta; con 'never' se cuenta a lo largo de todo el libro.
counterstring'exercise'El contador que avanza el estilo. Los estilos que nombran el mismo contador lo comparten; un estilo con un contador propio ('review') numera sus ejercicios aparte.
formatResourceCounterFormat'decimal'El sistema de numeración de {n}, como en un contador de recursos: 'roman-upper', 'alpha-lower', 'simp-chinese-informal' (一, 二), 'circled-decimal' (①, ②), 'arabic-indic'…

#Enunciado

instruction fija los párrafos con los que empieza el ejercicio. Los campos sin fijar toman los del texto base.

PropiedadTipoPor defectoDescripción
boldbooleantrueCompone el enunciado en negrita.
italicbooleanfalseLo compone en cursiva.
colorColorValueel del textoSu color, incluidas las negritas.
fontFamilystringla del textoSu familia: en los libros escolares es habitual un enunciado en letra de palo seco sobre un texto con serifa.
fontSizeDimensionel del textoSu cuerpo.

#Opciones

options fija las opciones de una pregunta de opción múltiple (- [ ] …).

PropiedadTipoPor defectoDescripción
labelsResourceCounterFormat | 'none'según el idiomaCómo se cuentan las opciones: 'alpha-lower' (a, b, c), 'alpha-upper' en chino (A, B, C), 'katakana' en japonés (ア, イ, ウ), 'abjad' en árabe (أ, ب, ج). También 'decimal', 'katakana-iroha', 'circled-decimal'… Con 'none' no se imprime ninguna letra.
prefixstring''Lo que va delante de la letra: '(' para (a).
suffixstring')'; '.' en chino, nada en japonésLo que va detrás de la letra.
marker'none' | 'box' | 'circle''none'Una casilla o un círculo delante de cada opción, para marcarla. Con 'none' el lector rodea la letra.
layout'stack' | 'row''stack''stack': una opción por línea, con las líneas que no caben sangradas bajo su texto. 'row': las opciones una al lado de otra. El atributo columns=n de un contenedor también las pone en filas.
columnsnumbertodasOpciones por fila en la disposición 'row' (hasta 6).
shufflebooleanfalseImprime las opciones desordenadas, en el mismo orden en todas las salidas y en la clave.
indentDimension1emLa sangría de las opciones respecto al borde del texto, en una pregunta sin enunciado propio.
bracketbooleanfalseUn paréntesis ( ) al final de cada pregunta para escribir la letra, como lo imprimen los exámenes chinos y japoneses. La edición del profesor escribe la letra dentro.

#Huecos

blank fija cómo se imprime un [[…]] en el texto del alumno: un espacio del tamaño de la respuesta, con una línea, puntos o una caja, sin pintar la respuesta.

PropiedadTipoPor defectoDescripción
look'line' | 'dots' | 'box' | 'none''line'Una línea para escribir, una línea de puntos, una caja o un espacio vacío.
width'answer' | 'longest' | Dimension'longest''longest': todos los huecos del ejercicio miden lo que su respuesta más larga, para que ninguno delate la suya. 'answer': cada uno mide lo que su propia respuesta. Una longitud: ese ancho para todos. El {width=N} de un hueco tiene prioridad.
extraDimension1.5emEspacio que se suma al ancho de la respuesta, en em enteros.
minWidthDimension3emEl hueco más estrecho.
colorColorValuenegroEl color de la línea, de los puntos o de la caja. Si se fija, colorea también las casillas y los círculos para marcar y los marcos de las palabras del banco, que si no van en el color principal.
weightDimension0.6ptEl grosor de la línea.

#Verdadero o falso

trueFalse fija las respuestas que van al final de una afirmación.

PropiedadTipoPor defectoDescripción
labels[string, string]según el idiomaLas dos respuestas: ['V', 'F'] en español, catalán, francés, italiano y portugués; T F en inglés; R F en alemán; √ × en chino; ○ × en japonés; صح خطأ en árabe.
look'boxes' | 'bracket''boxes''boxes': cada letra con una casilla para marcar, al final de la línea. 'bracket': un solo hueco en el que escribir la respuesta.

#Relacionar

match fija un ejercicio de parejas.

PropiedadTipoPor defectoDescripción
look'dots' | 'letters''dots''dots': dos columnas con un punto junto a cada elemento, para unirlos con una línea. 'letters': la columna derecha con letras y un hueco junto a cada elemento de la izquierda para escribir la letra.
gapDimension4emEspacio entre las dos columnas.
dotSizeDimension0.35emEl diámetro de los puntos.
colorColorValueel color principalLos puntos y el marco del banco de palabras.

#Banco de palabras

bank fija el recuadro de palabras de un ejercicio de huecos con bank o ::bank[…], y de todo ejercicio de clasificar. El recuadro va donde está escrita la línea ::bank; sin ella, bajo el enunciado.

PropiedadTipoPor defectoDescripción
boxstringun marco del color de relacionarUn id de calloutStyles para el recuadro del banco.
order'shuffle' | 'alpha' | 'written''shuffle'Las palabras desordenadas (con semilla), en orden alfabético según el idioma del documento o tal como están escritas.
separatorstringun espacio de cuadratínLo que va entre dos palabras. Cada palabra se compone en un chip con un marco fino.

#Espacio para escribir

area fija el espacio que queda bajo una pregunta abierta, bajo una frase desordenada y en las columnas de un ejercicio de clasificar.

PropiedadTipoPor defectoDescripción
kind'lines' | 'dots' | 'grid' | 'seyes' | 'tianzige' | 'box' | 'none''lines'Renglones, una hilera de puntos, cuadrícula, la pauta francesa Seyès, cuadros 田字格, un marco vacío o un espacio en blanco. El atributo area de un contenedor tiene prioridad.
linesnumber3Cuántas líneas de alto. El atributo lines de un contenedor tiene prioridad.
spacingDimension1,35 veces el interlineado del texto (1,2 en las cuadrículas)La distancia entre dos líneas.
colorColorValueun gris claroEl color del pautado.
weightDimension0.5ptEl grosor del pautado.

#Cuadrículas

grid fija las casillas de las sopas de letras, los crucigramas y las operaciones en columnas.

PropiedadTipoPor defectoDescripción
cellDimension1.6emEl lado de una casilla.
fontFamilystringla del textoLa familia de las letras y las cifras.
fontSizeDimension0,58 del lado de la casillaEl tamaño de letras y cifras; un em es el del texto.
colorColorValueel del textoEl color de las letras y las cifras.
ruleColorValueun gris medioLos filetes de las casillas.
ruleWidthDimension0.6ptSu grosor.
blockedColorValue—El relleno de las casillas del crucigrama que no ocupa ninguna palabra. Sin él, la cuadrícula solo imprime las casillas de sus palabras.
uppercasebooleantrueCompone en mayúsculas las letras de las sopas de letras y los crucigramas, con las reglas de mayúsculas del idioma del documento.

#Operaciones

arithmetic fija las operaciones en columnas.

PropiedadTipoPor defectoDescripción
division'bracket' | 'potence' | 'inline'según el idiomaLa división. 'potence': el divisor a la derecha del dividendo, dentro de una L, y el cociente debajo del divisor (español, catalán, francés, italiano y portugués). 'bracket': el divisor a la izquierda del dividendo, un corchete sobre este y el cociente encima (inglés, chino, japonés, árabe y cualquier idioma sin disposición propia). 'inline': 864 : 4 = con el cociente en la misma línea y los pasos debajo (alemán).
columnsnumber4Operaciones por fila; menos si la columna es demasiado estrecha.

#Dificultad

level fija las marcas que el atributo level de un contenedor imprime detrás del número, en un cuerpo menor.

PropiedadTipoPor defectoDescripción
glyphstring'●'Un nivel alcanzado: '★', '■'.
emptystring'○'Un nivel no alcanzado; con '' no se imprime nada.
maxnumber3El nivel más alto: level=2 con max: 3 imprime ●●○.
colorColorValueel color principalEl color de las marcas.

#Iconos

icons asocia un id a un icono de actividad (oral, escrita, en pareja, de escucha, con calculadora), que se imprime detrás del número cuando un contenedor lo nombra: icon="pair".

PropiedadTipoPor defectoDescripción
glyphstring—Un carácter que imprimir: '✎', '🎧', un glifo de una fuente de iconos.
fontFamilystring—La familia de una fuente de iconos.
colorColorValue—El color del icono.
resourceIdstring—Un recurso de mapa de bits o SVG para el icono.
altstring—Lo que representa el icono, para los lectores de pantalla y el PDF etiquetado.
sizenumber0.75La altura del icono en em del enunciado: por defecto, la de una mayúscula.

Un icono se imprime como un símbolo en línea tras el número: la imagen de resourceId si nombra una, y si no el glyph en fontFamily y en color (el del texto si no se indica). Se apoya en la línea de base del enunciado, mide size em de alto y su alt se lee en su lugar.

#Respuestas

answers fija el aspecto de las respuestas allí donde aparecen: la edición del profesor, el elemento modelo de un ejercicio con example, los círculos y las casillas rellenas, las líneas trazadas entre parejas, y las letras y cifras de las cuadrículas.

PropiedadTipoPor defectoDescripción
colorColorValue#d6246e, un rojo magentaEl color de las respuestas, como las sobreimprime un libro del profesor.
fontFamilystringla del textoUna letra para las respuestas: es habitual una letra manuscrita.
italicbooleanfalseCompone en cursiva las respuestas escritas en los huecos.

#Colores en pantalla

digital fija cómo muestran el visor HTML y los libros EPUB una respuesta corregida.

PropiedadTipoPor defectoDescripción
correctColorColorValueun verde (#1e8e3e)Una respuesta correcta.
wrongColorColorValueun rojo (#c5221f)Una respuesta incorrecta.

#Ajustes del libro

La propiedad exercises reúne los ajustes de todo el libro: la edición, dónde se imprimen las soluciones, la semilla de todos los desórdenes y las ediciones en pantalla. Un libro que no fija ni exercises ni exerciseStyles se compone igual que antes y conserva el mismo hash.

const config: PostextConfig = {
  exercises: {
    edition: 'student',
    solutions: { placement: 'chapterEnd', layout: 'key' },
    seed: 3,
    digital: { check: 'instant' },
  },
};
PropiedadTipoPor defectoDescripción
edition'student' | 'teacher''student''teacher' imprime cada respuesta en su sitio, en el color de answers: un libro del profesor a partir del texto del alumno.
solutionsExerciseSolutionsConfig—Dónde y cómo se imprimen las soluciones. Consulta Soluciones.
seednumber1El origen de todos los desórdenes: opciones, columnas derechas, elementos que ordenar, palabras de las frases desordenadas, bancos y letras de relleno de las sopas de letras. Cambiándolo se obtiene otra versión de un examen; el papel, la pantalla y la clave siguen coincidiendo.
digitalobject—El visor HTML y los libros EPUB. Consulta Ediciones en pantalla.

#Soluciones

exercises.solutions, y por encima, para los ejercicios de un estilo, el solutions de ese estilo.

PropiedadTipoPor defectoDescripción
placement'none' | 'after' | 'inverted' | 'chapterEnd' | 'directive''none''none': ninguna solución en papel. 'after': detrás de cada ejercicio, en un cuerpo menor. 'inverted': detrás de cada ejercicio, cabeza abajo. 'chapterEnd': al final del capítulo, bajo heading. 'directive': donde haya una línea :::solutions.
boxstringun recuadro sin marco en un cuerpo menorUn id de calloutStyles para el recuadro de una solución y para la lista de soluciones de un capítulo.
headingstringla palabra del idioma del documentoEl título de las soluciones al final de un capítulo: Soluciones, Solutions, Solucions, Corrigés, Lösungen, Soluzioni, Gabarito, 参考答案, 解答, الحلول. Una línea :::solutions{title="…"} fija el suyo.
layout'key' | 'full''full''key': solo las respuestas (1 b · 2 agua). 'full': la clave y después el :::solution del ejercicio.

#Ediciones en pantalla

exercises.digital fija cómo se comportan los ejercicios en el visor HTML y en los libros EPUB.

PropiedadTipoPor defectoDescripción
interactivebooleantrueEjercicios que el lector puede responder. Con false se muestran como en papel.
persistbooleantrueGuarda las respuestas del lector en el navegador, por libro.
check'button' | 'instant''button''button': las respuestas se corrigen cuando el lector lo pide. 'instant': cada respuesta se corrige en cuanto se da.

La pantalla puede tener sus propios ajustes de ejercicios: htmlViewer.overrides admite también exercises y exerciseStyles, que se combinan con los del libro antes de que el visor HTML maquete. Así el papel puede llevar las soluciones al final del capítulo mientras la pantalla las oculta, o la pantalla puede prescindir de los espacios para escribir, que al lector no le sirven.

const config: PostextConfig = {
  htmlViewer: {
    overrides: {
      exercises: { solutions: { placement: 'none' } },
      exerciseStyles: [{ id: 'exercise', area: { kind: 'none' }, blank: { minWidth: { value: 6, unit: 'em' } } }],
    },
  },
};