examtypst: Galería de ejemplos

La extensión Quarto: “examtypst-typst” permite crear ejercicios de distintos tipos, con o sin solución, con o sin borde, con o sin espacio en blanco para el desarrollo de la respuesta, con o sin salto de línea entre la etiqueta del ejercicio y el enunciado del ejercicio, etc.

El código de esta extensión Quarto se puede encontrar en: https://github.com/calote/examtypst

Parámetros de la Cabeceras YAML de un documento Quarto que usa la extensión “examtypst-typst”


---
format:
  examtypst-typst:
    escudo: "logo.png"  # o logo: "logo.png"
    departamento: "Departamento de Estadística e Investigación Operativa"
    asignatura: "Demografía - Teoría y Problemas"
    titulacion: "Grado en Estadística y Doble Grado en Matemáticas y Estadística"
    tipo-examen: "Convocatoria Oficial"
    fecha-examen: "21-10-2024"
    mostrar-soluciones: false
    mostrar-datos-estudiante: true
    campos-adicionales: ["", "Grupo"]
    theme-preset: "modern"
    mostrar-ejercicio-cuadro: false
    ejercicio-salto-linea: false
    keep-typ: true
    lang: "es"
    # mostrar-ejercicio-cuadro: true
    # ejercicio-salto-linea: false
    # keep-typ: true
    # mostrar-cabecera: true
    # margin: {left: 1cm, right: 1cm, top: 1cm, bottom: 1cm}
    # margin:
    #   top: 1cm
    #   bottom: 1cm
    #   left: 1cm
    #   right: 1cm
    # margin: {x: 2cm, y: 1.4cm}  # uso de x e y puede dar problemas
    # papersize: "a4"  # "a3"
    # #fontsize: "11"
    # #ejercicio-nombre: "Problema"
    # #ejercicio-nombre: "Tarea"
    # #ejercicio-nombre: "Ejemplo"
    ##ejercicio-nombre: "Exer"
    # #output-file: "examen03-enunciados.pdf"
    include-in-header:
      - text: |
          //#set page(fill: rgb("FFFFE9"))
    include-before-body:
      - text: |
          //#show heading: set text(rgb("0066cc"))  
          //#set heading(numbering: "(1.A)")
          //#show page: numbering: none
          #show link: set text(fill: blue)
          #show cite: set text(fill: blue)
          //#set par.line(numbering: "1")
          // #set par(justify: true, leading: 0.5em, 
          //      spacing: 0.8em,
          //      first-line-indent: 
          //       (amount: 1.8em, all: true))
---

Crear ejercicios con “.ejercicio

Ejercicios con solución “.solucion

Para mostrar las soluciones que se han definido en los ejercicios que hemos añadido se necesita utilizar el parámetro en la cabecera YAML del documento Quarto:

  examtypst-typst:
    mostrar-soluciones: true

Para que no se muestren las soluciones se debe utilizar en la cabecera YAML:

  examtypst-typst:
    mostrar-soluciones: false

Ejemplo 1: Ejercicio con espacio en blanco y con solución


1:::{.ejercicio arguments="puntos: 2.5"}
Calcula el siguiente límite:

$$\lim_{x \to 0} \frac{\sin(x)}{x}$$

2:::{.espacio-desarrollo arguments="lineas: 5, puntos: true"}
:::

3:::{.solucion}
Aplicando la regla de L'Hôpital o conociendo el límite notable:

$$\lim_{x \to 0} \frac{\sin(x)}{x} = 1$$
:::

:::
1
Se puede añadir la puntuación del ejercicio usando el argumento: puntos: 2.5
2
Se puede añadir espacio en blanco con ayuda del entorno (indicado entre 3 dobles puntos) .espacio-desarrollo. ✅ Se puede indicar la cantidad de espacio en blanco que se necesita, dándole un valor al argumento lineas: 5 (en este caso el de 5 líneas de texto). ✅ Si se usa el argumento: puntos: true las líneas son resaltadas con líneas punteadas. Si usamos puntos: false no se verían las líneas
3
Se puede añadir la solución del ejercicio utilizando el entorno: .solucion

Ejemplo 2: Ejercicio con varios apartados y soluciones para cada apartado


:::{.ejercicio arguments="puntos: 3"}
Deriva las siguientes funciones:

:::{.apartado}
$f(x) = x^3 + 2x^2 - 5x + 1$

:::{.solucion}
$f'(x) = 3x^2 + 4x - 5$
:::
:::

:::{.apartado  arguments='tipo: "letra"'}
$g(x) = e^{2x}$

:::{.solucion}
$g'(x) = 2e^{2x}$
:::
:::

:::

Ejemplo 3: Ejercicios con varios apartados numerados de forma diferente

:::{.ejercicio arguments="puntos: 3"}
Deriva las siguientes funciones:

1:::{.apartado arguments='tipo: ""'}
$f(x) = x^3 + 2x^2 - 5x + 1$

:::{.solucion}
$f'(x) = 3x^2 + 4x - 5$
:::
:::

2:::{.apartado  arguments='tipo: "LETRA"'}
$g(x) = e^{2x}$

:::{.solucion}
$g'(x) = 2e^{2x}$
:::
:::

:::
1
Con el argumento tipo: "", no numera el apartado sino que empieza con un punto seguido de un paréntesis.
2
Con el argumento tipo: "LETRA", se numera el apartado usando letras mayúsculas seguidas de un paréntesis. También se puede emplear: ✅ tipo: "numero" para indicar números seguidos de un paréntesis, o ✅ tipo: "letra" (uso por defecto) para indicar letras minúsculas.

Ejemplo 4: Ejercicio con borde y sin salto de línea entre etiqueta de ejercicio y enunciado

El ejercicio que se va a mostrar tiene el siguiente código:

:::{.ejercicio arguments="puntos: 2.5"}
Calcula el siguiente límite:

$$\lim_{x \to 0} \frac{e^x - 1}{x}$$

:::{.espacio-desarrollo arguments="lineas: 3, puntos: false"}
:::

:::{.solucion}
Aplicando la regla de L'Hôpital:

$$\lim_{x \to 0} \frac{e^x - 1}{x} = \lim_{x \to 0} \frac{e^x}{1} = 1$$
:::

:::

La clave para que aparezca el ejercicio rodeado de un borde es usar mostrar-ejercicio-cuadro: true (por defecto es false) en la cabecera YAML del documento Quarto:

  examtypst-typst:
    mostrar-ejercicio-cuadro: true

Además se puede especificar en la cabecera YAML un tema para colorear el fondo basado en el tema seleccionado (en este caso se usó: “theme-preset: "modern"”).

Ejemplo 5: Ejercicio con borde y con salto de línea entre etiqueta de ejercicio y enunciado

El ejercicio tendría el mismo código. La clave para que aparezca un salto de línea entre la etiqueta del ejercicio y el enunciado sería utilizar ejercicio-salto-linea: true (por defecto es true) en la cabecera YAML del documento Quarto:

  examtypst-typst:
    mostrar-ejercicio-cuadro: true
    ejercicio-salto-linea: true

El color de fondo en este ejemplo fue: “theme-preset: "classic"”.

Ejemplo 6: Ejercicio sin borde y con salto de línea entre etiqueta de ejercicio y enunciado

El ejercicio tendría el mismo código. La clave para que aparezca un salto de línea entre la etiqueta del ejercicio y el enunciado sería utilizar ejercicio-salto-linea: true (por defecto es true) en la cabecera YAML del documento Quarto, y además para quitar el borde se debe usar mostrar-ejercicio-cuadro: false (por defecto es false, es decir si no usamos este parámetro en la cabecera YAML no mostrará borde):

  examtypst-typst:
    mostrar-ejercicio-cuadro: false
    ejercicio-salto-linea: true

Nota: Se puede apreciar que la etiqueta del “Ejercicio” aparece ligeramente desplazada a la izquierda respecto al enunciado del ejercicio.

Ejemplo 7: Ejercicio sin borde y sin salto de línea entre etiqueta de ejercicio y enunciado

El ejercicio tendría el mismo código. La clave para que NO aparezca un salto de línea entre la etiqueta del ejercicio y el enunciado sería utilizar ejercicio-salto-linea: false (por defecto es true) en la cabecera YAML del documento Quarto, y además para quitar el borde se debe usar mostrar-ejercicio-cuadro: false (por defecto es false, es decir si no usamos este parámetro en la cabecera YAML no mostrará borde):

  examtypst-typst:
    mostrar-ejercicio-cuadro: false
    ejercicio-salto-linea: false

Ejercicios con usos avanzados

Ejemplo 8: con varios apartados pero con cajas justificadas a la derecha

Los dos ejercicios consiguen lo mismo aproximadamente, pero el primero no usa el entorno “.apartado” y el segundo sí.


::: {.ejercicio} 
**(5 pts)** Indica el tipo de cociente (**Razón**, **Proporción**, **Tasa** o **Probabilidad**) al que corresponde cada uno de los siguientes indicadores

a. Número de niños fallecidos de ... `#MBox(width: 10em, stroke: blue, hspace: 1fr, baseline: 60%)`{=typst}

b. Personas de 15-30 años ... `#h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}

c. Personas de ... `#h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}

d. De la generación nacida en 1930 ... (provoco un salto de línea .......... ....... ....... ........ .......  .........) `#linebreak() #h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}

e. Muertes registradas en un año ... `#h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}


::: {.solucion}

(a) Tasa, (b) Proporción, (c) Razón, (d) Probabilidad, (e) Tasa.

:::


:::



::: {.ejercicio arguments="puntos: 5"}
Indica el tipo de cociente (**Razón**, **Proporción**, **Tasa** o **Probabilidad**) al que corresponde cada uno de los siguientes indicadores

::: {.apartado}
Número de niños fallecidos de ... `#MBox(width: 10em, stroke: blue, hspace: 1fr, baseline: 60%)`{=typst}
:::

::: {.apartado}
Personas de 15-30 años ... `#h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}
:::

::: {.apartado}
Personas de ... `#h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}
:::

::: {.apartado}
De la generación nacida en 1930 ... (provoco un salto de línea .......... ....... ....... ........ .......  .........) `#linebreak() #h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}
:::

::: {.apartado}
Muertes registradas en un año ... `#h(1fr) #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: black))`{=typst}
:::

::: {.solucion}

(a) Tasa, (b) Proporción, (c) Razón, (d) Probabilidad, (e) Tasa.

:::


:::

Ejemplo 9: con una tabla markdown y cajas para rellenar respuestas con tablas Typst


:::: {.ejercicio arguments="puntos: 15"}
Utilice el procedimiento de construcción de una ...

::: {.align arguments="center"}
| Edad | Población Media | Defunciones |
|:------|-----------------:|-------------:|
| 0    | 4000            | 80          |
| 1    | 3500            | 35          |
| 5    | 5000            | 25          |
| 10   | 6000            | 30          |
:::

Obtenga los siguientes valores de ... **interprete el valor ${}_4L_{1} =$**:

```{=typst}
#tablex(
  columns: (3em, 1fr, 3em, 1fr),  // 2 columns
  rows: auto,  // at least 1 row of auto size
  //fill: red,
  align: left + horizon,
  stroke: 0pt + black,
  //stroke: green,
  [
    $\ _5q_5 =$
  ],  [
    #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: 0.5pt+black))
  ],
  [
    $l_10 =$
  ], [
    #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: 0.5pt+black))
  ],
  [
    $\ _4L_1 =$
  ],  [
    #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: 0.5pt+black))
  ],
  [
    $T_0 =$
  ], [
    #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: 0.5pt+black))
  ],
  [
    $e_5 =$
  ],  [
    #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: 0.5pt+black))
  ],
  [
    $\ _5d_10 =$
  ], [
    #box(baseline: 60%, rect(width: 10em, height: 1.5em, stroke: 0.5pt+black))
  ]

)
```

::::

Ejemplo 10: con tabla markdown y cajas para rellenar con “box()” de Typst


:::: {.ejercicio arguments="puntos: 15"}
La población andaluza de **extranjeros** a principios ...


::: {.align arguments="center"}

**Edad** | **Hombres** | **Mujeres** | **Total**|
:---- | -------: | -------: | -----: |
0-19 años | 56948 | 52929 | 109877|
20-64 años | 218556 | 211079 | 429635|
65-84 años | 32339 | 30738 | 63077|
85-99 años | 1667 | 1975 | 3642|
**Total** | **309510** | **296721** | **606231**|

**ANDALUCÍA, Extranjeros, 2017**

:::


Porcentajes (con 3 decimales): 

Hombres: `#h(1fr) #box(baseline: 60%, rect(width: 35em, height: 3em, stroke: 0.5pt+black))`{=typst}

Mujeres: `#h(1fr) #box(baseline: 60%, rect(width: 35em, height: 3em, stroke: 0.5pt+black))`{=typst}

Alturas usando base referencia de 5 años (con 2 decimales): 

Hombres: `#h(1fr) #box(baseline: 60%, rect(width: 35em, height: 3em, stroke: 0.5pt+black))`{=typst}

Mujeres: `#h(1fr) #box(baseline: 60%, rect(width: 35em, height: 3em, stroke: 0.5pt+black))`{=typst}


::::

Ejemplo 11: con un gráfico inicial y apartados que usan listas sin numerar

Se ha usado la función #linebreak() para forzar un salto de línea entre la etiqueta del ejercicio y la imagen.

::: {.ejercicio}

```{=typst}
#linebreak()
```

::: {.align arguments="center"}
![](graficos/piramide_2020Menores1000hab.png){width="70%"}
:::

::: {.apartado arguments="puntos: 8"}
**Interprete** la pirámide de población ...

  - Comentar forma-silueta pirámide y qué tipo de población sería.
  - Comentar porcentajes de mayores y menores.
  - Comentar diferencias entre sexos (para cada edad).
  - Comentar algún entrante y saliente, relacionándolo con la generación correspondiente.

:::


::: {.apartado arguments="puntos: 2"}
Calcule el índice de envejecimiento ...
:::


c. (8 puntos) **Interprete** la pirámide de población ...

    - Comentar forma-silueta pirámide y qué tipo de población sería.
    - Comentar porcentajes de mayores y menores.
    - Comentar diferencias entre sexos (para cada edad).
    - Comentar algún entrante y saliente, relacionándolo con la generación correspondiente.
  
:::

Nota: Para conseguir el indentado correcto en la lista sin numerar quizás en este caso sería mejor no usar el entorno “.apartado”.

Ejemplo 12: con apartados sin entorno “.apartado” y cajas Typst para introducir la respuesta que ocupan el ancho del texto

::: {.ejercicio}
Sabiendo que la población de una región ... (**redondear las tasas a 6 decimales y los años a 0 (cero) decimales**).

a. Obtener la tasa de crecimiento media acumulada (o geométrica) anual en el período 1-1-2018 a 1-1-2020.

    `#box(baseline: 60%, rect(width: 14cm, height: 2em, stroke: 0.5pt+black))#h(1fr)`{=typst}


b. Estimar ...

    `#box(baseline: 60%, rect(width: 14cm, height: 2em, stroke: 0.5pt+black))#h(1fr)`{=typst}


:::

Ejercicios “.verdadero-falso” con apartados de verdadero y falso

Ejemplo 1: se indica la solución y el tipo de numeración


:::{.ejercicio arguments="puntos: 2"}
Indica si las siguientes afirmaciones son verdaderas o falsas:

1:::{.verdadero-falso arguments='correcta: true, numeracion: true, tipo-numeracion: "numero"'}
La derivada de una constante es cero.
:::

:::{.verdadero-falso arguments='correcta: false, numeracion: true, tipo-numeracion: "numero"'}
$\int x dx = x^2 + C$
:::

:::
1
Para usar apartados “verdadero-falso” en un ejercicio se usa el entorno “.verdadero-falso”. A través de argumentos: ✅ se puede indicar si el enunciado-frase es verdadero (estamos incluyendo la solución): correcta: true o es falso: correcta: false, ✅ se puede añadir numeración a cada enunciado-frase con numeracion: true (por defecto), ✅ y que tipo de numeración: tipo-numeracion: "numero" (por defecto) usa números, si usamos: tipo-numeracion: "letra" usa letras.

Ejemplo 2: se indica la solución y sin numeración

:::{.ejercicio arguments='puntos: 3'}
Determina si los siguientes vectores son linealmente independientes:

$$\vec{v}_1 = (1, 2, 3), \quad \vec{v}_2 = (2, 4, 6), \quad \vec{v}_3 = (1, 0, 1)$$

1:::{.verdadero-falso arguments='correcta: false, numeracion: false'}
Los vectores son linealmente independientes.
:::

:::{.solucion}
Son linealmente dependientes porque $\vec{v}_2 = 2\vec{v}_1$.
:::
:::
1
En este caso no se ha incluido numeración en el entorno “verdadero-falso” usando el argumento: numeracion: false

Ejemplo 3: los apartados “verdadero-falso” sin solución y sin numeración pero con un guión

:::{.ejercicio arguments='puntos: 2'}
Indica si las siguientes afirmaciones son verdaderas o falsas:

:::{.verdadero-falso arguments='correcta: true, numeracion: false'}
- Una función continua en un intervalo cerrado alcanza su máximo y mínimo.
:::

:::{.verdadero-falso arguments='correcta: false, numeracion: false'}
- Si $f'(a) = 0$, entonces $x = a$ es necesariamente un máximo local.
:::

:::{.verdadero-falso arguments='correcta: true, numeracion: false'}
- La integral definida $\int_a^b f(x) dx$ representa el área bajo la curva cuando $f(x) \geq 0$.
:::

:::

Nota: En la cabecera YAML del documento Quarto se ha utilizado: ejercicio-salto-linea: false para que no haya un salto de línea entre la etiqueta del ejercicio y el enunciado del ejercicio y además sin borde: mostrar-ejercicio-cuadro: false (por defecto es false, es decir si no usamos este parámetro en la cabecera YAML no mostrará borde).

Ejercicios “.pregunta-multiple” con varias preguntas (pregunta múltiple) pudiendo ser una o más de una verdaderas

Ejemplo 1: introducir las opciones en una sola línea


:::{.ejercicio}
1:::{.pregunta-multiple arguments='correcta: (1, 3), opciones: ("Python", "HTML", "R", "CSS"), aleatorio: false'}

¿Cuáles son lenguajes de programación?
:::

:::
1
Para indicar las múltiples preguntas se usa el entorno: .pregunta-multiple. Con argumentos se puede indicar: ✅ cuáles son las preguntas correctas: correcta: (1,3) (en este caso la pregunta 1 y 3), además ✅ las opciones disponibles: opciones: ("Python", "HTML", "R", "CSS") y también ✅ si se ordenan de forma aleatoria aleatorio: true, semilla: 123 (ordenación aleatoria y por reproductibilidad con semilla 123) o tal como se presentan: aleatorio: false.

Cuando activamos las soluciones se mostraría del siguiente modo:

Tip

También se pueden usar los argumentos siguientes con el entorno .pregunta-multiple:

  • columnas: 1 o un valor mayor: columnas: 2 para presentar las preguntas múltiples en dos columnas.

  • numeracion: false no numeraría las distintas preguntas, numeracion: true (valor por defecto) las numeraría.

    • tipo-numeracion: "numero" en este caso la numeración sería con números, tipo-numeracion: "letra" sería con letras minúsculas y tipo-numeracion: "LETRA" sería con letras mayúsculas (por defecto)
Nota

Para mostrar el ejercicio rodeado por un borde se debe utilizar mostrar-ejercicio-cuadro: true (por defecto es false) y además llevaría color de fondo basado en el tema seleccionado (por defecto: “theme-preset: "classic"”) se necesita utilizar el parámetro en la cabecera YAML del documento Quarto:

  examtypst-typst:
    mostrar-ejercicio-cuadro: true
    theme-preset: "green"

Los temas disponibles son: classic (gris), modern (azul), green (verde), purple (violeta) y dark (fondo negro letra color blanco).

Ejemplo 2: Introducir las opciones en varias líneas y uso de matemáticas

:::{.ejercicio}
:::{.pregunta-multiple arguments='correcta: 3, opciones: (
"La energía se conserva",
"La aceleración es proporcional a la masa",
1$F = m a$,
"La velocidad es constante"
)'}
La segunda ley de Newton establece que:

:::
:::
1
Pregunta con expresión matemática escrita con el lenguaje Typst (no con LaTeX). Hay que observar además que no se pone la expresión matemática entre dobles comillas.

Cuando activamos las soluciones se mostraría del siguiente modo:

Importante

No se puede escribir una ecuación LaTeX en ninguna de las preguntas múltiples, se debe emplear el lenguaje matemático de Typst. Ver: Matemáticas con Typst

  • Además, como se ha dicho anteriormente, no se debe escribir entre dobles comillas.

Para evitar esta restricción se podría añadir algún tipo de referencia y fuera de las opciones, en el propio entorno “.pregunta multiple escribir la expresión LaTeX que se necesite.

Ejemplo 3: Ejercicio de preguntas múltiples con expresiones matemáticas


:::{.ejercicio}
:::{.pregunta-multiple arguments='correcta: 0, opciones: ($E_c = 1/2 m v^2$, $E_c = m g h$, "Apartado C)", $E_c = m c^2$)'}
La energía cinética se define como:

Apartado C): $E_c = \frac{1}{2}kx^2$
:::
:::

:::{.ejercicio}
:::{.respuesta-corta arguments='ancho: 8em'}
¿Cuál es la capital de Francia?
:::

:::

Ejemplo 4: Preguntas múltiples en 2 columnas

:::{.ejercicio}

:::{.pregunta-multiple arguments='correcta: 3, columnas: 2, opciones: (
"Máxima",
"Mínima",
"Variable",
"Cero"
)'}
Un objeto se mueve con velocidad constante. Su aceleración es:

:::

:::

Ejemplo 5: Preguntas múltiples con numeración con letras mayúsculas en 2 columnas y matemáticas Typst

:::{.ejercicio arguments='puntos: 2.5'}
:::{.pregunta-multiple arguments='correcta: 3, columnas: 2, opciones: (
  $f(x) = x^2$, 
  $f(x) = x^3$, 
  $f(x) = |x|$, 
  $f(x) = sin(x)$
  )'}
¿Cuál de las siguientes funciones NO es derivable en $x=0$?

Sintaxis de matemáticas en Typst vs LaTeX:
```md
LaTeX   | Typst
\frac{x}{y} | x/y o (x)/(y)
\sin(x) | sin(x)
\cos(x) | cos(x)
\log(x) | log(x)
\ln(x)  | ln(x)
\sqrt{x} |  sqrt(x)
x^{2}   | x^2
x_{i}   | x_i
\alpha  | alpha
\beta   | beta
\lim_{x \to 0} | lim_(x -> 0)
```

:::

:::{.solucion}
La respuesta correcta es $f(x) = |x|$, ya que presenta un punto angular en $x=0$.
:::
:::

Ejercicios “.pregunta-multiple-md” con varias preguntas (pregunta múltiple) pudiendo ser una o más de una verdaderas usando sintaxis markdown para las opciones

Ejemplo 1: introducir las opciones en varias líneas usando sintaxis markdown


:::::{.ejercicio arguments="puntos: 15"}

::: {.pregunta-multiple-md correctas="2" numeracion="false"}

¿Cuál es la integral de $\sin(x)$?

a. $\cos(x) + C$
b. $-\cos(x) + C$
c. $-\sin(x) + C$
d. $\tan(x) + C$

:::

:::::


:::::{.ejercicio arguments="puntos: 10"}


::: {.pregunta-multiple-md correctas="1,3" numeracion="false"}


a. 2
b. 4
c. 3
d. 6

:::

:::::





:::::{.ejercicio arguments="puntos: 10"}

::: {.pregunta-multiple-md correctas="1,3,4"}

¿Cuáles de las siguientes afirmaciones son correctas?

a. La alternativa $a_2$ es la mejor con el método del Punto Ideal (para beneficios) para los valores de $\Delta \in \{30, 31, \ldots, 60\}$.
b. La alternativa $a_2$ es la mejor con el método de Laplace (para costos) para los valores de $\Delta \in \{8, 9, 10, 11, 12\}$.
c. La alternativa $a_3$ es la mejor con el método del Punto Ideal (para beneficios) para los valores de $\Delta \in \{5, 6, 7, 8, 9\}$.
d. La alternativa $a_1$ es la mejor con el método de Laplace (para costos) para los valores de $\Delta \in \{45, 46, \ldots, 54, 55\}$.
e. La alternativa $a_4$ es la mejor con el método del Punto Ideal (para beneficios) para los valores de $\Delta \in \{27, 28, \ldots, 32, 33\}$.

:::


:::{.solucion}

Las soluciones correctas son: a, c y d.
:::


:::::

Se mostraría como en la siguiente captura:

Si activamos las soluciones (mostrar-soluciones: true) se mostraría como en la siguiente captura:

Ejercicios “.respuesta-corta

Ejemplo 1:

:::{.ejercicio}

:::{.respuesta-corta arguments='ancho: 8em'}
¿Cuál es la capital de Francia?
:::

:::

Ejemplo 2:

:::{.ejercicio}

:::{.respuesta-corta arguments='ancho: 24em, lineas: 3, numeracion: true'}
Explica brevemente la ley de gravitación universal:
:::

:::

Ejercicio “.texto-con-huecos

Ejemplo 1:

:::{.ejercicio}

:::{.texto-con-huecos}
La segunda ley de Newton establece que $F =$ `#hueco(ancho: 2em)`{=typst} $\times$ `#hueco(ancho: 2em)`{=typst}
:::

La energía cinética se calcula como $E_c =$ `#hueco(ancho: 4em)`{=typst}, donde m es `#hueco(ancho: 3em)`{=typst} y v es `#hueco(ancho: 3em)`{=typst}.

:::

Importante

Se tiene que emplear código Typst para incluir los huecos a rellenar. Por ejemplo:

`#hueco(ancho: 2em)`{=typst}

Ejercicio: “.asociar-elementos

Ejemplo 1:

::::{.ejercicio}

:::{.asociar-elementos arguments='columna-izq: ("Newton", "Pascal", "Joule", "Watt"), columna-der: ("Energía", "Presión", "Fuerza", "Potencia"), conexiones: ((1, 3), (2, 2), (3, 1), (4, 4))'}
:::

Piensa detenidamente cuáles son las respuestas correctas.

::::

Cuando activamos las soluciones se mostraría del siguiente modo:

Ejercicio: “.emparejar-mezclado

Ejemplo 1:

::::{.ejercicio}

:::{.emparejar-mezclado arguments='columna-izq: ($F = m a$, $E = m c^2$, $P V = n R T$), columna-der: ("Ley de gases ideales", "Segunda ley de Newton", "Equivalencia masa-energía"), respuestas: ("b", "c", "a")'}
:::

::::

Cuando activamos las soluciones se mostraría del siguiente modo:

Ejercicio: “.completar-definiciones

Ejemplo 1:

::::{.ejercicio}

:::{.completar-definiciones arguments='definiciones: ("Ley que establece que F = ma","Ecuación que relaciona masa y energía", "Ley que describe el comportamiento de gases ideales"), respuestas: ("Segunda ley de Newton", "E = mc²", "Ley de Boyle-Mariotte")'}
:::

::::

Cuando activamos las soluciones se mostraría del siguiente modo:

Título, Cabecera o Portada del examen. Cabeceras y pie de página

Portada

Ejemplo 3: no mostrar la portada o cabecera

En la cabecera YAML del documento Quarto se ha utilizado:

  examtypst-typst:
    mostrar-cabecera: false

Por defecto, si no usamos mostar-cabecera ni show-cabecera, sí se muestra la portada.

Ejemplo 4: Construir una hoja de problemas o relación de problemas

En la cabecera YAML del documento Quarto se ha utilizado:

  examtypst-typst:
    departamento: "Departamento de Matemáticas"
    asignatura: "Cálculo I"
    titulacion: "Grado en Matemáticas"
    tipo-examen: "Relación de Problemas 1"
    fecha-examen: "Curso 2025/26"
    escudo: "logo.png"

Cabeceras y pie de páginas cuando hay más de una página

Pie de la primera página y cabecera de la segunda página:

  • Puede verse que en la cabecera aparece por defecto justificado a la derecha:

    • Nombre de la asignatura
    • Tipo de examen
    • Fecha del examen

Pie de la última página:

- Puede verse en el pie de página de la segunda página (y siguientes):

  • Nombre de la asignatura (justificado a la izquierda)
  • Página actual respecto al total de páginas (justificado a la derecha)

Portada con datos del estudiante

Ejemplo 1: con logo y datos del estudiante

La clave está en la cabecera YAML del documento Quarto, en la que hay que activar los datos del estudiante con mostrar-datos-estudiante: true o show-student-data: true (por defecto es false):

format:
  examtypst-typst:
    department: "Departamento de Álgebra"
    subject: "Álgebra Lineal"
    degree: "Grado en Matemáticas"
    exam-type: "Parcial 2"
    exam-date: "10 de Diciembre de 2025"
    show-solutions: true
    mostrar-datos-estudiante: true
    theme-preset: "classic"

Ejemplo 2: con logo y datos del estudiante con apellidos línea adicional

format:
  examtypst-typst:
    escudo: "logo.png"
    departamento: "Dpto. de Matemáticas Aplicadas"
    titulacion: "Grado en Ingeniería Informática"
    asignatura: "Cálculo I"
    tipo-examen: "Examen Final"
    fecha-examen: "15 de Enero de 2026"
    mostrar-datos-estudiante: true
    campos-adicionales: ["-"]
    

Ejemplo 3: con logo y datos del estudiante con apellidos línea adicional y Grupo

format:
  examtypst-typst:
    escudo: "logo.png"
    departamento: "Dpto. de Matemáticas Aplicadas"
    titulacion: "Grado en Ingeniería Informática"
    asignatura: "Cálculo I"
    tipo-examen: "Examen Final"
    fecha-examen: "15 de Enero de 2026"
    mostrar-datos-estudiante: true
    campos-adicionales: ["-", "Grupo"]

Ejemplo 4: con logo y datos del estudiante con apellidos línea adicional, más Grupo y Email

format:
  examtypst-typst:
    escudo: "logo.png"
    departamento: "Dpto. de Matemáticas Aplicadas"
    titulacion: "Grado en Ingeniería Informática"
    asignatura: "Cálculo I"
    tipo-examen: "Examen Final"
    fecha-examen: "15 de Enero de 2026"
    mostrar-datos-estudiante: true
    campos-adicionales: ["-","Grupo","Email",]

Otros

format:
  examtypst-typst:
    mostrar-soluciones: true
    theme-preset: "modern"
    show-ejercicio-cuadro: true
    ejercicio-salto-linea: false
    lang: "es"

Tablas de calificaciones

Ejemplo 1: no usa código typst (usa quarto)


:::{.tabla-calificaciones arguments='ejercicios: (
    (nombre: "Pregunta 1", puntos: 1.0),
    (nombre: "Pregunta 2", puntos: 1.5),
    (nombre: "Pregunta 3", puntos: 2.0),
    (nombre: "Desarrollo", puntos: 5.5)
)'}

:::

Ejemplo 2: usa código typst

O una versión más simple sin contenido adicional:


```{=typst}
#tabla-calificaciones(
  ejercicios: (
    (nombre: "Pregunta 1", puntos: 1.0),
    (nombre: "Pregunta 2", puntos: 1.5),
    (nombre: "Pregunta 3", puntos: 2.0),
    (nombre: "Desarrollo", puntos: 5.5)
  )
)[]
```

Ejemplo 3: usa código typst con más opciones

La siguiente tabla permite al evaluador registrar las puntuaciones obtenidas, ocupando el ancho del texto:


```{=typst}
#tabla-calificaciones(min-width: 1fr, 
  ejercicios: (
    (nombre: "Ejercicio 1", puntos: 2.5),
    (nombre: "Ejercicio 2", puntos: 3.0),
    (nombre: "Ejercicio 3", puntos: 2.0),
    (nombre: "Ejercicio 4", puntos: 2.5)
  )
)[]
```

También se podría haber obtenido con solamente “quarto” así:

:::{.tabla-calificaciones arguments='min-width: 1fr, ejercicios: (
    (nombre: "Pregunta 1", puntos: 1.0),
    (nombre: "Pregunta 2", puntos: 1.5),
    (nombre: "Pregunta 3", puntos: 2.0),
    (nombre: "Desarrollo", puntos: 5.5)
)'}


:::

Trucos

Truco 1: convertir código LaTeX a un fichero png

Si se tiene un código LaTeX que se quiere incluir en un ejercicio, pero no se puede escribir en Typst, una solución es convertir ese código LaTeX a una imagen png y luego incluir esa imagen en el ejercicio.

Para ello se tendrá que ejecutar el código en la consola de R que se muestra en los ejemplos a continuación (hay que tener instalado tinytex y pdftools).

Nota

Hay que tener en cuenta que la sintaxis de las matemáticas en Typst es diferente a la de LaTeX. Ver: Matemáticas con Typst

Sintaxis de matemáticas en Typst vs LaTeX:

LaTeX   | Typst
\frac{x}{y} | x/y o (x)/(y)
\sin(x) | sin(x)
\cos(x) | cos(x)
\log(x) | log(x)
\ln(x)  | ln(x)
\sqrt{x} |  sqrt(x)
x^{2}   | x^2
x_{i}   | x_i
\alpha  | alpha
\beta   | beta
\lim_{x \to 0} | lim_(x -> 0)

Ejemplo 1: convertir una tabla LaTeX a png

#| echo: false
# Requiere tinytex y pdftools
latex_code <- "
\\documentclass[varwidth]{standalone}
\\usepackage{booktabs}
\\begin{document}
\\begin{tabular}{lrr}
\\toprule
Edad & Población Media & Defunciones \\\\ \\midrule
0 & 4000 & 80 \\\\
1 & 3500 & 35 \\\\
5 & 5000 & 25 \\\\
10 & 6000 & 30 \\\\ \\bottomrule
\\end{tabular}
\\end{document}
"
writeLines(latex_code, "tabla.tex")
tinytex::latexmk("tabla.tex")               # genera tabla.pdf
pdftools::pdf_convert("tabla.pdf", format = "png", dpi = 300,
                      filenames = "tabla.png")

# ![](tabla.png){width=50% fig-align="center"}

Ejemplo 2: incluir una ecuación LaTeX que no se traduce correctamente a Typst

Esta ecuación LaTeX al crear la salida Typst no se traduce correctamente:

$$
\begin{cases}
x + 2y + z = 6 \\
2x + y - z = 1 \\
x - y + 2z = 5
\end{cases}
$$

\[ \begin{cases} x + 2y + z = 6 \\ 2x + y - z = 1 \\ x - y + 2z = 5 \end{cases} \]

Se vería del siguiente modo en Typst:

#| echo: false
# Requiere tinytex y pdftools
latex_code <- "
\\documentclass[varwidth]{standalone}
\\usepackage{amsmath}
\\begin{document}
$$
\\begin{cases}
x + 2y + z = 6 \\\\
2x + y - z = 1 \\\\
x - y + 2z = 5
\\end{cases}
$$
\\end{document}
"
writeLines(latex_code, "ecuacion01.tex")
tinytex::latexmk("ecuacion01.tex")               # genera tabla.pdf
pdftools::pdf_convert("ecuacion01.pdf", format = "png", dpi = 300,
                      filenames = "ecuacion01.png")

# ![](ecuacion01.png){width=25% fig-align="center"}

Truco 2: incluir un salto de página

Para incluir un salto de página en el documento Quarto se debe usar el siguiente código:

{{< pagebreak >}}

Truco 3: incluir instrucciones para el examen

El uso de “.unnumbered” permite que no se numere el título de la sección (en este caso de nivel 2: ##).

## Instrucciones {.unnumbered}

- Duración del examen: 2 horas
- Material permitido: Calculadora no programable
- Cada ejercicio indica su puntuación

Truco 4: uso de Typst para añadir una tabla para que los alumnos rellenen sus datos

```{=typst}
#tablex(
  columns: (auto, 1fr),  // 3 columns
  rows: auto,  // at least 1 row of auto size
  //fill: red,
  align: center + horizon,
  //stroke: green,
  [APELLIDOS-NOMBRE:],  [
    #rect(
    width: 100%,
    height: 3em,
    stroke: 0pt + black,
    inset: 5pt
  )[]
  ]
)
```

Truco 6: introducir una tabla markdown pero reduciendo el tamaño de la letra con Typst


```{=typst}
#set text(size: 8pt)
```

Grupos Edad | Nacimientos Total | Nacimientos Varones | Nacimientos Mujeres | Pob.Mujeres 1/1/2020 | Pob.Mujeres 1/1/2021 | ${}_5L_x$
:---- | -------: | -------: | -------: | -------: | -------: | -------: |
15-19 | 11253 | 4819 | 6434 | 1364025 | 1312493 | 496381 |
20-24 | 39178 | 16777 | 22401 | 1638518 | 1621856 | 495 711 |
25-29 | 109718 | 46983 | 62735 | 1612817 | 1657296 | 494979 |
30-34 | 148066 | 63404 | 84662 | 1621644 | 1641213 | 493925 |
35-39 | 62155 | 26616 | 35539 | 1539067 | 1587093 | 492512 |
40-44 | 8834 | 3783 | 5051 | 1393034 | 1437633 | 490320 |
45-49 | 831 | 356 | 475 | 1248553 | 1256063 | 487153 |
15-49 | 380035 | 162738 | 217297 | 10417658 | 10513647 | |  

```{=typst}
#set text(size: 11pt)
```

Truco 7: introducir data.frame R con ayuda del paquete “tinytable” y la función tt()

```{r}
#| echo: false
library(tinytable)
x = mtcars
x[1,1] = "$alpha x_{1}^2$"
tt(x, theme = "void")
```

Truco 8: Algunos ejemplos de tablas con Typst y knitr::kable


`````{=typst}

#ejercicio[

#align(center)[
#table(
  columns: 3,
  align: (left,right,right,),
  table.header([#strong[Edad];], [#strong[Población Media];], [#strong[Defunciones];],),
  table.hline(),
  [0], [4000], [80],
  [1], [3500], [35],
  [5], [5000], [25],
  [10], [6000], [30],
)
]
#table(
  columns: 3,
  align: (left,right,right,),
  table.header([#strong[Edad];], [#strong[Población Media];], [#strong[Defunciones];],),
  table.hline(),
  [0], [4000], [80],
  [1], [3500], [35],
  [5], [5000], [25],
  [10], [6000], [30],
)
#align(center)[
#table(
  columns: 3,
  align: (left,right,right,),
  table.header(strong[Edad], strong[Población Media], strong[Defunciones],),
  table.hline(),
  [0], [4000], [80],
  [1], [3500], [35],
  [5], [5000], [25],
  [10], [6000], [30],
)
]

$ 3 x + 2 y & = 5\
x - y & = 2 $

#align(center)[
#box(image("tabla.png", width: 50.0%))]

#align(center)[
```r
knitr::kable(
  data.frame(
    Edad = c(0,1,5,10),
    `Población Media` = c(4000,3500,5000,6000),
    Defunciones = c(80,35,25,30)
  ),
  format = "pipe",
  align = c("l","r","r")
)
```

#table(
  columns: 3,
  align: (left,right,right,),
  table.header([Edad], [Población.Media], [Defunciones],),
  table.hline(),
  [0], [4000], [80],
  [1], [3500], [35],
  [5], [5000], [25],
  [10], [6000], [30],
)
]
]


`````



::: {.align arguments="center"}

::: {.cell}
::: {.cell-output-display}


|Edad | Población.Media| Defunciones|
|:----|---------------:|-----------:|
|0    |            4000|          80|
|1    |            3500|          35|
|5    |            5000|          25|
|10   |            6000|          30|


:::
:::

:::

Truco 9: incluir ejercicios que están en otros ficheros externos

La forma de incluir un ejercicio que está en otro fichero Quarto es la siguiente:


:::::{.ejercicio arguments="puntos: 20"}

```{r}
#| child: "ejerciciot01e01jlp.qmd"
#| echo: false
```


:::{.espacio-desarrollo arguments="lineas: 25, puntos: false"}
:::


:::::

Truco 10: presentar material en dos columnas


Para el método PROMETHEE se usa el criterio Tipo III (lineal) con los siguientes umbrales de preferencia:

:::: {layout-ncol=2}
::: {.column}
- Python: p=3 años
- BBDD: p=2 puntos
- Tiempo: p=20 días
:::

::: {.column}
- Salario: p=5 miles de euros
- Prueba: p=1 punto
:::
::::


Para ELECTRE se utilizan los siguientes umbrales:

Se vería del siguiente modo:

Truco 11: utilizar matemáticas Typst (no LaTeX) en los enunciados de los ejercicios

Aquí tienes las letras griegas y símbolos matemáticos comunes en Typst:

  • Letras griegas minúsculas:
Símbolo Typst LaTeX
α alpha \alpha
β beta \beta
γ gamma \gamma
δ delta \delta
ε epsilon \epsilon
ζ zeta \zeta
η eta \eta
θ theta \theta
λ lambda \lambda
μ mu \mu
π pi \pi
ρ rho \rho
σ sigma \sigma
τ tau \tau
φ phi \phi
ω omega \omega
  • Letras griegas mayúsculas:
Símbolo Typst LaTeX
Δ Delta \Delta
Γ Gamma \Gamma
Θ Theta \Theta
Λ Lambda \Lambda
Π Pi \Pi
Σ Sigma \Sigma
Φ Phi \Phi
Ψ Psi \Psi
Ω Omega \Omega
  • Operadores vectoriales:
Símbolo Typst LaTeX Descripción
nabla \nabla Nabla (gradiente)
diff \partial Derivada parcial
laplace \triangle Laplaciano
  • Símbolos adicionales útiles:
Símbolo Typst Descripción
infinity o oo Infinito
± plus.minus Más-menos
lt.eq Menor o igual
gt.eq Mayor o igual
eq.not Distinto
arrow Flecha derecha
arrow.double Implica
in Pertenece
subset Subconjunto
union Unión
sect Intersección
sqrt(x) Raíz cuadrada
integral Integral

Ahora puedes usar cualquier letra griega o símbolo matemático en tus preguntas de opción múltiple con la sintaxis correcta de Typst.

Tabla de conversión LaTeX → Typst:

LaTeX Typst Descripción
\int integral Integral
\sum sum Sumatoria
\prod product Productoria
\lim lim Límite
\frac{a}{b} a/b o frac(a,b) Fracción
\sqrt{x} sqrt(x) Raíz cuadrada
\ln(x) ln(x) Logaritmo natural
\sin(x) sin(x) Seno
\cos(x) cos(x) Coseno
\alpha alpha Letra griega α
\infty infinity o oo Infinito
dx dif x Diferencial

 
```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [¿Cuál es la derivada de $f(x) = x^2$?]
  )[
    #opc[$f'(x) = x$]
    #opc(es-correcta: true)[$f'(x) = 2x$]
    #opc[$f'(x) = x^2$]
    #opc[$f'(x) = 2x^2$]
  ]
]
```


**Ejemplo con límites:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [El límite $lim_(x arrow 0) sin(x)/x$ es igual a:]
  )[
    #opc[$0$]
    #opc(es-correcta: true)[$1$]
    #opc[$infinity$]
    #opc[No existe]
  ]
]
```


**Ejemplo con sumatorias:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [¿Cuánto es $sum_(i=1)^5 i$?]
  )[
    #opc[$10$]
    #opc(es-correcta: true)[$15$]
    #opc[$20$]
    #opc[$25$]
  ]
]
```


**Ejemplo con integrales definidas:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [¿Cuánto es $integral_0^1 x dif x$?]
  )[
    #opc[$0$]
    #opc[$1$]
    #opc(es-correcta: true)[$1/2$]
    #opc[$2$]
  ]
]
```


**Ejemplo con ecuaciones:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [La solución de la ecuación $x^2 - 5x + 6 = 0$ es:]
  )[
    #opc[$x = 1$ y $x = 6$]
    #opc(es-correcta: true)[$x = 2$ y $x = 3$]
    #opc[$x = -2$ y $x = -3$]
    #opc[No tiene solución real]
  ]
]
```


**Letras griegas**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [¿Qué representa $Delta x$ en física?]
  )[
    #opc[La velocidad]
    #opc(es-correcta: true)[Un cambio o variación en x]
    #opc[La aceleración]
    #opc[La fuerza]
  ]
]
```


**Ejemplo con nabla (gradiente):**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [El operador $nabla$ se conoce como:]
  )[
    #opc[Laplaciano]
    #opc[Divergencia]
    #opc(es-correcta: true)[Nabla o gradiente]
    #opc[Rotacional]
  ]
]
```

**Ejemplo con derivadas parciales:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [La ecuación $(diff f)/(diff x) = 2x$ representa:]
  )[
    #opc[Una integral]
    #opc(es-correcta: true)[Una derivada parcial]
    #opc[Un límite]
    #opc[Una sumatoria]
  ]
]
```



**Ejemplo con múltiples letras griegas:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [En la fórmula $E = m c^2$, si usamos unidades naturales donde $c = 1$, ¿qué representa $gamma$ en $E = gamma m$?]
  )[
    #opc[La masa en reposo]
    #opc(es-correcta: true)[El factor de Lorentz]
    #opc[La velocidad]
    #opc[La energía cinética]
  ]
]
```



**Ejemplo con ecuaciones físicas:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [La ecuación de onda $nabla^2 phi - (1/c^2) (diff^2 phi)/(diff t^2) = 0$ es:]
  )[
    #opc[La ecuación de Schrödinger]
    #opc(es-correcta: true)[La ecuación de onda de D'Alembert]
    #opc[La ecuación de Laplace]
    #opc[La ecuación de Poisson]
  ]
]
```


**Ejemplo con sumatorias y letras griegas:**

```{=typst}
#ejercicio[
  #pregunta-multiple-md(
    numeracion: true,
    [El valor de $sum_(i=1)^n i = (n(n+1))/2$ es válido para:]
  )[
    #opc[Solo números pares]
    #opc[Solo números impares]
    #opc(es-correcta: true)[Cualquier número natural n]
    #opc[Solo números primos]
  ]
]
```

Truco 12: incluir cajas de Check (seleccionadas y sin seleccionar)

Con el uso de #CajaNoCheck() y #CajaCheck() se pueden incluir cajas de verificación sin seleccionar y seleccionadas, respectivamente (están definidas en la extensión “examtypst-typst”). El siguiente código se vería de forma parecida a como se muestran cuando usamo: “pregunta-multiple-md”.


a. `#h(-1em) #CajaNoCheck()`{=typst} La alternativa $a_2$ es la mejor con el método del Punto Ideal (para beneficios) para los valores de $\Delta \in \{30, 31, \ldots, 60\}$.

b. `#h(-1em) #CajaCheck()`{=typst} La alternativa $a_2$ es la mejor con el método del Punto Ideal (para beneficios) para los valores de $\Delta \in \{30, 31, \ldots, 60\}$.