Typst 0.15.0 (15/06/2026)
Esta sección documenta todos los cambios del lenguaje y del compilador de Typst entre Typst 0.14.2 y 0.15.0. Si estás migrando un documento existente a Typst 0.15, fijate en la Guía de migración. Ahí se repasan los cambios que quizás tengas que hacer en tus documentos para asegurar la compatibilidad con Typst 0.15.
Novedades destacadas
- Typst ahora admite fuentes variables
- La exportación a HTML ahora admite ecuaciones de forma nativa mediante MathML
- Con el nuevo formato de exportación experimental bundle, un único proyecto de Typst puede generar varios archivos (p. ej., un sitio web de varias páginas)
- Un mismo documento ahora puede contener varias bibliografías
- Typst ahora puede apuntar a varios estándares de PDF a la vez
- El nuevo selector
withinsimplifica muchos casos de uso de introspección - El nuevo elemento
dividerrepresenta un corte temático al que las plantillas pueden darle estilo - Los colores planos (spot) permiten usar pigmentos personalizados en la impresión offset
- Con el nuevo tipo
pathpara rutas de archivo, se pueden pasar rutas relativas al proyecto a los paquetes - El nuevo subcomando
typst evalde la CLI, más general, reemplaza atypst query - Los problemas de convergencia del diseño ahora producen diagnósticos detallados
- Se corrigieron dos problemas históricos del diseño de listas relacionados con la alineación de marcadores y el centrado
- Se mejoró el manejo de párrafos en la exportación a HTML, lo que evita que aparezcan párrafos inesperados
- Esta documentación ahora tiene una versión para imprimir
Lenguaje
Sintaxis
- Las rutas de archivo (p. ej., en importaciones o en llamadas a la función
image) ya no pueden contener barras invertidas; en su lugar, hay que usar barras normales(Cambio incompatible)
- Se agregaron sugerencias para caracteres inválidos en modo código
- Se agregó una sugerencia cuando se intenta usar un operador unario directamente en una expresión embebida con numeral (p. ej.,
#-30deg) - Se corrigieron posibles fallos por desbordamiento de pila al imponer una profundidad máxima de análisis sintáctico
- Se corrigió el análisis incremental de cadenas de texto sin cerrar
Estilos
- Las reglas show de texto ahora tienen seguimientos (tracebacks) que incluyen el texto coincidente
- Se corrigió un fallo con reglas show de texto que coinciden con símbolos de varios caracteres
Scripting
- Se extendió a las reglas set y show la sugerencia que aparece cuando se tapan definiciones integradas
- Se agregó una sugerencia cuando se intenta expandir uno o varios diccionarios dentro de un array
- Se mejoraron los diagnósticos de las llamadas a métodos inválidas
- Se mejoró la sugerencia para variables desconocidas en matemática que están disponibles en
std - Se corrigió un mensaje de error engañoso al intentar asignar a un valor de retorno temporal
Biblioteca
Fundamentos
Se agregó el tipo
pathpara rutas de archivo, que ahora se acepta en todos los lugares donde antes las rutas solo se representaban como cadenas de texto- Una ruta construida en un archivo se puede usar en otro, pero se resolverá respecto de su archivo original
- Del mismo modo, las rutas se pueden pasar entre límites de paquetes
- El tipo de ruta inicial es mínimo, pero están planeadas funciones adicionales, como la comprobación de existencia de archivos o el recorrido de directorios
Colecciones
- Se agregaron las funciones
mapyfilteren diccionarios y argumentos - Ahora se puede acceder a los argumentos con nombre de los valores
argumentscon la sintaxis de acceso a campos - Las funciones
slicede cadenas de texto y arrays ahora producen un error si se les pasanendycounta la vez(Cambio incompatible menor)
- Se agregó el parámetro
inclusivea la funciónrange
- Se agregaron las funciones
Cálculo
- Se agregaron las funciones
asinh,acosh,atanhyerfal módulocalc - Se agregaron las constantes
int.mineint.maxpara el entero mínimo y máximo representable, respectivamente - Se corrigió el comportamiento de
quocon enteros negativos - Se corrigieron posibles desbordamientos en
norm,abs,gcdylcm - Los cálculos de punto flotante ahora son deterministas de forma consistente en todas las plataformas
- Se agregaron las funciones
Fechas y horas
- El parámetro
offsetdedatetime.todayahora acepta duraciones como alternativa a los enteros, lo que permite desfases con precisión inferior a la hora - La suma y la resta de fechas y horas y duraciones ahora conservan la precisión en lugar de redondear a días completos en algunos casos
- El constructor de
datetimeahora emite errores más precisos cuando faltan componentes
- El parámetro
Conversiones
- Se agregó el parámetro
baseal constructor deintpara configurar en qué base se interpreta una cadena de texto - Se corrigió que el parámetro
basedel constructor destrse aceptara para valores no enteros si su valor era10(Cambio incompatible menor)
- Se agregó una sugerencia al intentar construir una cadena de texto con base 1
- Se agregó el parámetro
- La función
panicahora muestra las cadenas de texto tal cual en lugar de mostrar surepr, lo que la hace más adecuada para mensajes amigables dirigidos al usuario - Se cambió
reprde los estilos y de las ubicaciones para que sean más distintivos
Modelo
- Se agregó el elemento
divider, que representa un corte temático al que las plantillas pueden darle estilo Elementos relacionados con bundle
Gestión de bibliografías
- Un mismo documento ahora puede contener varias bibliografías
- Se agregó el parámetro
targetal elementobibliographypara configurar qué cita recoge cada bibliografía - Se agregó el parámetro
groupal elementobibliographypara configurar cómo se comparten o reinician los números entre bibliografías - Se agregó compatibilidad con valores numéricos para la clave
monthen archivos.bib - Se agregó compatibilidad con las opciones de nombres de BibLaTeX en archivos
.bib - Se agregó compatibilidad con la propagación a las bibliografías de los campos
volumeno numéricos de archivos.bib - Se mejoró el ordenamiento en las bibliografías para tener en cuenta las convenciones del idioma
- Se mejoró la interoperabilidad con los estilos CSL; para ver la lista completa de cambios, consultá el registro de cambios de Hayagriva 0.10.0
- Se agregó compatibilidad para establecer directores en videos sin elemento padre en archivos YAML de Hayagriva
- Se mejoró el manejo de las entradas
Anthosen archivos YAML de Hayagriva al tratarlas comochapteren CSL
- Un mismo documento ahora puede contener varias bibliografías
Notas al pie
- El enlace de una
footnoteahora está dentro del superíndice en lugar de rodearlo, lo que mejora el etiquetado del PDF y la salida HTML - El grosor del separador de notas al pie predeterminado ahora se especifica en unidades relativas a la fuente en lugar de absolutas
- El enlace de una
Numeración
- La propiedad
par.first-line-indentahora se combina, es decir, los diccionarios parciales de distintas reglas set o llamadas aparse unifican Se agregó la propiedad
list.marker-alignpara definir cómo alinear los marcadores de lista- Si se omite, se usa por defecto la nueva alineación de línea base (en vertical), combinada con la alineación
end(en horizontal)
- Si se omite, se usa por defecto la nueva alineación de línea base (en vertical), combinada con la alineación
Texto
Se agregó compatibilidad con fuentes variables
- Los ejes de variación conocidos
ital,slnt,wght,wdthyopszse establecen automáticamente segúnweight,stretch,styleysizedel texto - Se pueden configurar variaciones personalizadas mediante el nuevo parámetro
variationsde la funcióntext - Al usar una fuente variable con Typst, hay que omitir los sufijos “Variable”, “Var” y “VF”, porque Typst los recorta para unificar las fuentes estáticas y variables en una sola familia
(Cambio incompatible menor)
- Los ejes de variación conocidos
Características de fuente
- El parámetro
text.alternatesahora acepta un entero además de un booleano para elegir alternativas estilísticas distintas de0y1 - El análisis de los nombres de etiqueta en
text.featuresahora es más estricto(Cambio incompatible menor)
- El parámetro
- Se corrigió que
context text.fontno reflejara el campocovers - Se corrigió el espaciado desparejo entre CJK y latín en párrafos justificados
- Se corrigió un error por el cual la función
loremno producía la cantidad exacta de palabras pedida - Se mejoraron las traducciones al sueco
, portugués
, checo
, letón
, eslovaco
, polaco
, vietnamita
, finés
y galés
- Se agregó una excepción de fuente para evitar que SimSun-ExtB se fusionara incorrectamente con SimSun
Se actualizaron las fuentes New Computer Modern a la versión 8.1.0
- Esta actualización cambia el aspecto predeterminado de las formas caligráficas en la fuente matemática; se puede restaurar el estilo anterior con
show math.equation: set text(stylistic-set: 6)
- Esta actualización cambia el aspecto predeterminado de las formas caligráficas en la fuente matemática; se puede restaurar el estilo anterior con
Se actualizaron los componentes de Unicode
- En particular, esto corrigió un problema con los saltos de línea de las comillas angulares
Matemática
Diseño
- Se mejoró el diseño de los elementos superiores/inferiores como
underbrace - Se mejoró levemente el espaciado alrededor de los elementos
math.op - Las situaciones en las que se aplican estilos comprimidos (con espaciado más ajustado) ahora son totalmente coherentes con TeX y MathML Core
- El parámetro
sizede la funciónlrahora se aplica de forma consistente a los delimitadores intermedios, del mismo modo que a los delimitadores externos - El parámetro
sizede la funciónlrahora se resuelve de forma relativa a la altura del contenido interior solamente; ya no tiene en cuenta los delimitadores(Cambio incompatible menor)
- El estiramiento de glifos ahora es siempre relativo al glifo base y no a una versión ya escalada (p. ej., por el tamaño de display)
(Cambio incompatible menor)
- Se corrigió que la alineación izquierda/derecha no se aplicara bien por el espaciado junto a los puntos de alineación
- El elemento
binomahora usa otras constantes de OpenType para el diseño, aunque esto no produce cambios visibles con la mayoría de las fuentes - El largo y el grosor de trazo predeterminados de las líneas de
math.cancelahora se especifican en unidades relativas a la fuente en lugar de absolutas - Se corrigió una posible desalineación en la función
cases
- Se mejoró el diseño de los elementos superiores/inferiores como
Manejo de texto
- Se mejoró el manejo de símbolos de varios caracteres en matemática
- Se corrigió que algunos glifos no se estiraran bien en tamaños de subíndice
- Las líneas de fracciones, raíces y superiores/inferiores ahora respetan
text.stroke - Los acentos en matemática ahora siempre se dibujan delante de su base si se superponen
- Se mejoró el manejo de símbolos de varios caracteres en matemática
- La función
classahora aplica la clase solo a su cuerpo directo y no de forma recursiva(Cambio incompatible menor)
- Más símbolos de delimitadores (p. ej.,
chevron.l) ahora se pueden llamar para producir un elementolr(Cambio incompatible menor)
- Se corrigieron varios errores de renderizado de expresiones matemáticas que parecen llamadas a funciones pero en realidad no lo son (p. ej.,
$pi(1, 2)$, ya quepino es una función) - Se corrigió un error con el orden de las primas y los adjuntos anidados
Símbolos
- Se agregaron muchos símbolos y variantes nuevos. Mirá el registro de cambios de
codex0.3.0 para ver la lista completa.
Diseño
Ahora la información de línea base se conserva en muchas más partes del motor de diseño
(Cambio incompatible)
- En particular, el texto contenido en un
boxcon margen interno ahora queda alineado con el texto que rodea albox - Esto también corrige un error por el cual envolver una ecuación en línea en un
boxdesplazaba su línea base - Del mismo modo, usar un
blockdentro de una ecuación mantiene intacta la línea base - Por último, pero no menos importante, el marcador/número y el contenido de un elemento de
listoenumahora quedan correctamente alineados en la línea base con la primera línea del elemento, incluso si este es verticalmente más grande que una línea normal
- En particular, el texto contenido en un
- Centrar algo dentro de una lista ahora centra según todo el ancho disponible y no según el ancho máximo del resto del contenido de la lista
Diseño de página
- Se agregó el parámetro
bleedal elementopagepara configurar márgenes de sangrado - Se corrigió el tamaño del papel
"us-executive" - Se agregó una advertencia para las reglas
show page, ya que no están admitidas
- Se agregó el parámetro
Diseño de párrafos
- Se corrigió un error por el cual el texto justificado podía sobresalir accidentalmente hacia el margen cuando terminaba con ciertos tipos de caracteres (p. ej., un espacio de ancho cero)
- Se corrigió un error por el cual la sangría de primera línea se aplicaba al comienzo de una columna aunque estuviera establecido
all: false
- Se corrigió un error por el cual el texto justificado podía sobresalir accidentalmente hacia el margen cuando terminaba con ciertos tipos de caracteres (p. ej., un espacio de ancho cero)
- Se agregó compatibilidad con espaciado que es a la vez débil y fraccional
Visualización
- Se agregó compatibilidad con colores planos (spot) (también llamados colores de separación)
Mosaicos
- Se agregó el parámetro
offsetpara desplazar la posición inicial de un mosaico - Se corrigió la ubicación relativa al padre para
stackypolygon
- Se agregó el parámetro
Degradés
- Se agregó
color.map.coolwarmpara usar con degradés - Se corrigió la interpolación de las paradas de los degradés en el espacio de color Oklab
- Se corrigió el manejo del ángulo de los degradés en formas de tamaño negativo
- Se corrigieron los trazos con degradé en líneas y curvas
- Se corrigió la ubicación relativa al padre para
stackypolygon
- Se agregó
- Se corrigieron varios errores con los trazos de rectángulos combinados con radios
- Se corrigió un posible bloqueo (deadlock) con la fuente de reserva en SVG
Varias mejoras en el manejo de imágenes SVG (ver los registros de cambios de resvg 0.46 y 0.47); en particular:
- Se agregó compatibilidad con SVG sin el atributo
xmlnsde nivel superior - Se agregó compatibilidad con fuentes variables en SVG mediante la propiedad CSS
font-variation-settings
- Se agregó compatibilidad con SVG sin el atributo
Varias mejoras en el manejo de imágenes PDF (ver los commits entre
d0b540fy3483462en hayro); en particular:- Se agregó compatibilidad con imágenes JPEG2000 (
JPXDecode) y JBIG2 (JBIG2Decode) - Se mejoró la robustez del análisis de archivos que no cumplen con el estándar
- Se agregó compatibilidad con modos de mezcla
- Se agregó compatibilidad con imágenes JPEG2000 (
Introspección
- Los problemas de convergencia del diseño ahora producen diagnósticos detallados que ayudan a identificar la causa
- Se agregó el selector
within, que coincide con los elementos contenidos dentro de cualquier elemento que coincida con un selector ancestro - Se agregó el parámetro
ata la funcióncounter.display - Se mejoró cómo
counter.displayelige automáticamente la numeración que usa
Carga de datos
- Se agregó compatibilidad con espacios de nombres en la función
xml - Se agregó una sugerencia al intentar leer desde una ruta que parece una URL
- Los diagnósticos de errores al cargar archivos binarios ahora incluyen las rutas de los archivos
- La función
jsonahora emite un error amigable cuando el JSON cargado empieza con una marca BOM de UTF‑8
Exportación
Bundle
Se agregó el nuevo formato de exportación bundle, experimental
- Con la exportación bundle, podés generar varios archivos de salida a partir de un único proyecto de Typst
- Los bundles pueden contener cualquier combinación de páginas HTML, PDF, PNG, SVG y recursos (assets) arbitrarios
HTML
Las ecuaciones matemáticas ahora se exportan automáticamente a MathML (gracias a @mkorje)
- MathML define cómo renderizar una ecuación, pero además preserva su semántica
- Si antes usabas reglas show con
html.framepara renderizar ecuaciones como SVG, probá la salida MathML. Cambiar a esta mejora la accesibilidad de tu documento (aunque el renderizado será algo menos consistente entre navegadores).
El propósito de los elementos
boxyblockahora está alineado con la exportación paginada(Cambio incompatible)
Se ajustaron las reglas de cómo se agrupan los párrafos en HTML para corregir casos en que aparecían párrafos de forma inesperada
(Cambio incompatible)
- Se retocó la lista de elementos HTML que se pueden agrupar en párrafos (ahora incluye todo el contenido de fraseo (phrasing content), con excepción de los elementos que por defecto tienen
display: none) - Este comportamiento por defecto se puede controlar envolviendo un elemento en un
boxoblock, según corresponda - Los elementos HTML que no pueden formar parte de párrafos (como un
<div>) ya no fuerzan de inmediato que el contenido de Typst en línea contiguo se envuelva en un párrafo; en cambio, se consideran neutros para el agrupamiento de párrafos - La creación de párrafos solo la fuerzan los elementos de bloque de Typst (a diferencia de los elementos HTML). Los elementos de bloque integrados, como títulos o imágenes, envuelven los elementos HTML que crean en elementos
blockpara forzar que el contenido en línea contiguo pase a párrafos. Los autores de paquetes deberían hacer lo mismo para que la creación de párrafos sea consistente entre la exportación HTML y la paginada.
- Se retocó la lista de elementos HTML que se pueden agrupar en párrafos (ahora incluye todo el contenido de fraseo (phrasing content), con excepción de los elementos que por defecto tienen
- La función
targetahora se puede usar sin el indicador de característicahtml(el resto de la exportación a HTML sigue detrás de ese indicador) Estructura del DOM y reglas show integradas
- El elemento raíz
<html>ahora recibe un atributolangque respeta lo configurado entext.lang - El elemento
imagede Typst ahora siempre emite los atributoswidthyheighten el elemento HTML<img>generado - El código en etiquetas
<pre>ahora prefiere saltos de línea literales en lugar de elementos<br>para codificar los saltos de línea - Se corrigió el HTML generado para las atribuciones de citas
- Se corrigió que las reglas show de celdas de tabla no funcionaran en la exportación a HTML
- El elemento raíz
Serialización
Elementos HTML
- El parámetro
attrsdehtml.elemahora se combina, es decir, los atributos parciales de distintas reglas set o llamadas ahtml.elemse unifican html.scriptyhtml.styleahora solo aceptan una cadena de texto y no contenido arbitrario(Cambio incompatible)
- El parámetro
Manejo de espacios en blanco
- Typst ahora puede apuntar a varios estándares de PDF (compatibles entre sí) a la vez, p. ej., PDF/UA-1 y PDF/A-2a
- Los PDF ahora están algo más optimizados en espacio, a costa de ser más difíciles de inspeccionar con un editor de texto; usá el indicador
--prettyde la CLI o la casilla de la app web para formatearlos de forma legible - Los títulos con etiqueta ahora generan destinos con nombre aunque no se los referencie
Gráficos
- Se agregó compatibilidad con más funciones de composición de las fuentes COLRv1
- Se corrigió el renderizado de degradés en los espacios de color LinearRGB, CMYK y Luma
- Se corrigió el muestreo excesivo de los degradés lineales
- Se agregó compatibilidad con más funciones de composición de las fuentes COLRv1
Etiquetado
- Se agregó compatibilidad con tipos de artefacto más específicos en
pdf.artifact; ahora se usan internamente cuando corresponde - Se corrigieron errores de “estructura de documento inválida” con marcadores de lista complejos
- Se corrigió el orden incorrecto del etiquetado de PDF para contenido en línea fuera de párrafos
- Se corrigió el cálculo de cuadros delimitadores de formas con trazo en PDF etiquetados
- Se agregó compatibilidad con tipos de artefacto más específicos en
Cumplimiento de estándares
- Se corrigieron archivos PDF potencialmente no conformes: ahora se emite un error cuando se pide PDF/UA-1 pero cumplir con PDF/UA-1 requeriría funciones más nuevas que las disponibles en la versión de PDF actual
- Se corrigieron archivos PDF 1.4 potencialmente no conformes: ahora se emiten errores cuando se superan los límites de implementación
- Se corrigieron archivos PDF potencialmente no conformes: ahora se emite un error cuando se pide PDF/UA-1 pero cumplir con PDF/UA-1 requeriría funciones más nuevas que las disponibles en la versión de PDF actual
SVG
- Los SVG ahora se minifican por defecto; usá el indicador
--prettyde la CLI o la casilla de la app web para formatearlos de forma legible - Se redujo algo el tamaño de los SVG generados
- Los elementos SVG ya no tienen las clases
typst-frame,typst-doc,typst-group,typst-shapenitypst-text(Cambio incompatible menor)
Gráficos
- Se corrigió un error por el cual los mosaicos podían reutilizarse incorrectamente en varios lugares
- Se corrigió el renderizado de degradés en los espacios de color LinearRGB, CMYK y Luma
- Se corrigió el manejo de los ángulos de los degradés cónicos
- Se corrigió el muestreo excesivo de los degradés lineales
- Se corrigió un error por el cual los mosaicos podían reutilizarse incorrectamente en varios lugares
- Se corrigieron la posición y el tamaño de los glifos de mapa de bits en color
- Se corrigieron fuentes de no determinismo en la exportación a SVG
PNG
- Se corrigió el manejo de los ángulos de los degradés cónicos
- Se corrigieron la posición y el tamaño de los glifos de mapa de bits en color
- Se corrigió que el texto escalado negativamente con la misma escala en
xeyse volviera invisible en la exportación a PNG
Interfaz de línea de comandos
- Se agregó el nuevo subcomando
typst evalpara evaluar una expresión de código de Typst desde la CLI; este comando reemplaza atypst query - Los seguimientos (tracebacks) de los diagnósticos ahora son más compactos y legibles
- Se agregó el indicador
--prettypara producir una salida legible por personas; por defecto la salida se minifica (se aplica a HTML, SVG y PDF, pero no a PNG) Fuentes
- La salida de
typst fonts --variantsahora es más legible e informativa; en particular, también muestra las rutas de los archivos de fuente y, para las fuentes variables, los ejes de variación - La CLI ahora descubre las fuentes de forma diferida, lo que ahorra tiempo en operaciones que no las necesitan (como la exportación a HTML sin marcos)
- Las fuentes de Adobe Creative Cloud ahora se descubren como fuentes del sistema
- La salida de
Salida de dependencias
Correcciones en el manejo de rutas en Windows
- Leer desde una ruta que contiene una letra de unidad ahora produce un error explícito en lugar de ignorar silenciosamente la letra de unidad
- Intentar leer desde una ruta que contiene un nombre de archivo reservado (como
COM1) ahora produce un error explícito
- Las rutas de entrada que no son Unicode ya no están admitidas
(Cambio incompatible)
- El argumento experimental
--timingsahora requiere un nombre de archivo explícito en lugar de usar por defectorecord-{n}.json(Cambio incompatible)
- Se agregaron colores a la salida de
--help/-hy detypst info - Se corrigió una inconsistencia en el manejo de variables de entorno entre
typst infoytypst compile - Se corrigió un error en la inyección de un script de recarga en vivo al usar
typst watchcon exportación a HTML - Se corrigió un error por el cual se tenía en cuenta la información de zona horaria local aunque se fijara una fecha mediante
--creation-timestampoSOURCE_DATE_EPOCH, lo que producía resultados no reproducibles
Herramientas
Resaltado de sintaxis
Autocompletado y tooltips
- El autocompletado y los tooltips ahora reconocen los parámetros de las funciones definidas por el usuario
- Las descripciones de autocompletado y los tooltips de las familias de fuentes ahora son más detallados y, para las fuentes variables, incluyen los ejes de variación
- Los autocompletados de funciones en modo matemático ahora prefieren siempre los paréntesis redondos a los corchetes (que no se admiten en matemática)
- Se corrigió que el autocompletado y los tooltips no funcionaran con listas de argumentos en modo matemático
- El autocompletado y los tooltips ahora reconocen los parámetros de las funciones definidas por el usuario
Obsolescencias
- Ciertas formas poco claras o ambiguas de escribir la etiqueta de lenguaje de un bloque raw; ahora emiten una advertencia ante un próximo cambio en cómo se analizan
- El uso de numerales arábigos como alternativa para los sistemas de
numberingque no admiten el número cero (p. ej., para"⓵") - Se renombraron varios símbolos; ver la sección de obsolescencias del registro de cambios específico para la lista completa
Algunos estilos de cita que se renombraron o fueron reemplazados
council-of-science-editorsahora se llamacse-citation-sequence-brackets-8th-editioncouncil-of-science-editors-author-dateahora se llamacse-name-yearmodern-language-association-8/mla-8fue reemplazado pormodern-language-association/mlavancouverahora se llamanlm-citation-sequencevancouver-superscriptahora se llamanlm-citation-sequence-superscript
- Formas de array no documentadas de los elementos de
enumyterms
Eliminaciones
- El elemento
path; usácurveen su lugar(Cambio incompatible)
- El tipo
pattern; usátilingen su lugar(Cambio incompatible)
- El elemento
pdf.embed; usápdf.attachen su lugar(Cambio incompatible)
- Las funciones con alcance
cbor.decode,csv.decode,json.decode,toml.decode,xml.decode,yaml.decodeeimage.decode; pasá directamentebytesa las funciones de nivel superior en su lugar(Cambio incompatible)
- Varios símbolos obsoletos desde antes, ver la sección de eliminaciones del registro de cambios específico para la lista completa (Cambio incompatible)
Desarrollo
- Se rehízo por completo el crate
typst-kitpara facilitar la creación de una implementación deWorldde Typst - Las sugerencias de los diagnósticos ahora pueden tener spans (aunque normalmente estarán desconectados, lo que significa que simplemente no hay span)
- Se aumentó la versión mínima admitida de Rust a 1.92
- Se movió el flake de Nix de typst/typst a typst/typst-flake, donde ahora lo mantiene la comunidad en la medida de lo posible
Guía de migración
Esta sección te explica los cambios que quizás tengas que hacer en tus documentos existentes para asegurar la compatibilidad con Typst 0.15.
Typst 0.15 elimina definiciones de la biblioteca estándar de Typst que ya estaban obsoletas en versiones anteriores. Si todavía dependés de ellas, consultá también las guías de migración de Typst 0.14 y de Typst 0.13.
Líneas base
Typst ahora conserva la información de línea base en más partes del motor de diseño (sobre todo para cajas, bloques, elementos de lista y ecuaciones). Esto puede producir cambios de diseño silenciosos. En general son mejoras, pero si antes corregiste resultados poco prolijos con ajustes explícitos, quizás tengas que revisarlos.
En particular, Typst ahora establece la línea base de un box en la línea base de su primera línea de contenido y la usa para alinear el box con el texto que lo rodea. Esto produce mejores resultados sin hacer nada.
// Typst 0.15+
Lorem #box(inset: 0.3em, stroke: 1pt)[ipsum] dolor.
// Typst 0.14 and below
Lorem #box(inset: 0.3em, stroke: 1pt)[ipsum] dolor.

Rutas de archivo
Si usás Typst en Windows, es posible que hayas usado barras invertidas en tus rutas de archivo. Esta sintaxis ya no está admitida. Usar barras normales de forma consistente asegura que tu documento compile en todas las plataformas admitidas.
// Typst 0.15+ ✅
#include "chapters/introduction.typ"
// Typst 0.14 and below ❌
#include "chapters\\introduction.typ"Además, la CLI de Typst ya no admite rutas de entrada que no sean Unicode. Hoy esas rutas son extremadamente raras.
Estiramiento de glifos matemáticos
En la composición matemática, los glifos con frecuencia deben estirarse hasta el tamaño de alguna parte de una ecuación. Esto se aplica principalmente a los paréntesis, pero también a acentos, flechas y más. En Typst, esto ocurre de forma implícita mediante delimitadores emparejados o de forma explícita mediante las funciones lr y stretch.
Typst 0.15 hace algunos ajustes en cómo se resuelven las proporciones que se pasan a estas funciones. Antes, un tamaño de 200% pasado a lr.size o stretch.size se interpretaba respecto de un tamaño de glifo que podía estar ya afectado por el tamaño de display. Ahora las proporciones siempre se resuelven respecto del tamaño del glifo base. En la práctica, esto significa que, para conservar el mismo aspecto, quizás tengas que aumentar los tamaños objetivo que configuraste para glifos que ya son más grandes por defecto en estilo display (p. ej., las integrales).
Delimitadores matemáticos como funciones
En el modo matemático de Typst, varios símbolos definidos en Símbolos generales se pueden llamar como una función, ya sea para aplicarlos como acento o para delimitar contenido. Typst 0.15 extiende este manejo a delimitadores adicionales como chevron.l. Esto puede cambiar el resultado de llamadas existentes, que antes recurrían a mostrar los paréntesis (algo que rara vez producía un resultado deseable en el caso de los delimitadores).
// Typst 0.15+ ✅
$ chevron.l(x) $
// Typst 0.14 and below ⚠️
$ chevron.l(x) $

Clases matemáticas
La función class define cómo debe diseñarse una parte de una ecuación (principalmente el espaciado a su alrededor). En Typst 0.14 y anteriores, la función class se aplicaba de forma recursiva: si se aplicaba a un fragmento de contenido más grande, todos sus elementos recibían la clase. En Typst 0.15, la clase solo se aplica al contenido envuelto directamente. Es sobre todo una corrección de errores, pero puede producir cambios sutiles de diseño.
Formas caligráficas en la fuente matemática predeterminada
Con la actualización a New Computer Modern Math 8.1.0, se cambiaron las formas caligráficas predeterminadas. Las formas anteriores todavía se pueden obtener seleccionando el conjunto estilístico 6.
// Typst 0.15, default style.
$ R != cal(R) $
// Typst 0.15, with stylistic set 6.
// Reproduces the default style from Typst 0.14 and below.
#show math.equation: set text(stylistic-set: 6)
$ R != cal(R) $

Párrafos, cajas y bloques en HTML
Typst agrupa automáticamente el contenido en línea en párrafos. En Typst 0.14 y anteriores, se usaban exactamente las mismas reglas para agrupar elementos HTML en línea (p. ej., un <span>) en párrafos de Typst, que a su vez producen elementos <p>. Esto tenía el efecto desafortunado de que incluso el uso de la API HTML tipada de bajo nivel podía hacer que aparecieran elementos <p> automáticamente. Considerá el siguiente ejemplo:
#html.div({
html.span[Hello]
html.div[World]
})Donde Typst 0.14 insertaría un elemento <p> adicional inesperado, Typst 0.15 produce el resultado esperado:
<!-- Typst 0.14 and below ⚠️ -->
<div>
<p><span>Hello</span></p>
<div>World</div>
</div>
<!-- Typst 0.15+ ✅ -->
<div>
<span>Hello</span>
<div>World</div>
</div>Este cambio en la salida se logra con algunas reglas nuevas sobre cómo se agrupan los párrafos en la exportación a HTML. Antes, Typst siempre clasificaba los elementos como de línea o de bloque. Luego forzaba a los elementos en línea a formar un párrafo siempre que hubiera al menos un elemento de bloque en el mismo flujo de contenido. En Typst 0.15, los elementos se pueden considerar en cambio de línea, de bloque o neutros:
- El texto, los elementos
boxde Typst y el contenido de fraseo de HTML (los elementos que se permiten como hijos de elementos<p>) se consideran de línea1 - Todos los demás elementos HTML se consideran neutros
- Los elementos
blockde Typst se consideran de bloque
Los elementos neutros no fuerzan que el contenido en línea contiguo pase a párrafos. Pueden coexistir con contenido en línea en un flujo mixto. Así se asegura que el uso de la API HTML tipada no produzca párrafos superfluos.
Por su parte, los elementos de Typst que son de bloque por defecto (p. ej., heading) ahora usan explícitamente un block en su regla show predeterminada para asegurar que sigan forzando a los elementos en línea contiguos a formar párrafos. Esto garantiza la consistencia del agrupamiento de párrafos entre la exportación paginada y la HTML. Los autores de paquetes también deberían usar explícitamente bloques al crear componentes HTML que Typst deba considerar de bloque.
Para que este cambio sea posible, se ajustó el comportamiento de cajas y bloques en la exportación a HTML: en lugar de envolver siempre su contenido en un <span> o un <div>, ahora hacen solo lo necesario para que los navegadores consideren su contenido de línea o de bloque. Si contienen varios hijos, igualmente crean un elemento contenedor, pero si hay un único hijo, en cambio configuran la propiedad CSS display. Y si ese único hijo ya tiene por defecto la propiedad display adecuada, se omite por completo. Así, el efecto de box o block se limita a influir en el agrupamiento de párrafos de Typst.
Elementos script y style de HTML
Las funciones tipadas de HTML para los elementos HTML script y style antes aceptaban cualquier contenido como cuerpo y solo fallaban durante la serialización a HTML si el contenido producía elementos no textuales. En Typst 0.15, en cambio, aceptan solo cadenas de texto desde el principio. Tené en cuenta que también podés usarlas con la sintaxis de raw accediendo al campo .text.
// Typst 0.15+ ✅
#html.style("a { color: red }")
#html.style(
```css
a { color: red }
```.text
)
// Typst 0.14 ❌
#html.style[
a { color: red }
]Clases en la exportación a SVG
Typst 0.14 y anteriores generaban los atributos class typst-frame, typst-doc, typst-group, typst-shape y typst-text en los elementos SVG de la exportación a SVG. Ya no se emiten. Si usás la clase typst-frame para darle estilo a elementos html.frame en la exportación a HTML, vas a tener que adaptar tu hoja de estilos.
Nombres de familias de fuentes variables
Typst busca unificar las distintas fuentes de una misma familia bajo un único nombre de familia. Con ese fin, recorta automáticamente de los nombres de familia los sufijos de estilo comunes, como “Bold” o “Condensed”. En lugar de elegirlos mediante el nombre, hay que acceder a ellos a través de los mecanismos integrados de Typst (como los parámetros weight y stretch).
En Typst 0.15, además se recortan los sufijos “Variable”, “Var” y “VF” para unificar las fuentes estáticas y variables en una sola familia. Si antes usabas una fuente con alguno de estos sufijos en el nombre de su familia, ahora tendrías que omitir el sufijo al especificar la font.
Próximos cambios en las etiquetas de lenguaje de raw
En la próxima versión de Typst, vamos a cambiar cómo se analizan las etiquetas de lenguaje de raw. Si este cambio próximo afecta a tu documento, el compilador ya hoy te va a advertir y a sugerirte cómo ajustarlo para que no te afecte.
Alternativa de numeración para el número cero
No todos los sistemas de numbering pueden expresar el número cero. En Typst 0.14 y anteriores, esos sistemas recurrían silenciosamente a numerales arábigos para 0. Este comportamiento está obsoleto en Typst 0.15. Usar el cero con esos sistemas pasará a ser un error grave en el futuro.
Validación más estricta en algunas funciones
La función array.slice, el constructor str y el parámetro text.features ahora validan sus entradas de forma más estricta. Si antes pasabas entradas inválidas o sin sentido, ahora vas a recibir un error.
Estilos de cita renombrados
Typst 0.15 renombra algunos estilos de cita para mantenerse alineado con los cambios de CSL en upstream. Si dependés de alguno de ellos, el compilador te va a advertir y a sugerirte el nuevo nombre.
Símbolos renombrados
Typst 0.15 también renombra algunos símbolos de Símbolos generales. Si usás alguno de ellos, el compilador te va a advertir y a sugerirte el nuevo nombre.
Colaboradores
¡Gracias a todos los que contribuyeron a esta versión!
- 1Hay algunas excepciones: algunos elementos como
<script>se consideran contenido de fraseo según las especificaciones de HTML, pero no tienen sentido en párrafos porque por defecto tienendisplay: none.