Typst 0.12.0 (18/10/2024)
Novedades destacadas
- Se agregó compatibilidad con ubicación flotante y figuras de varias columnas
- Se agregó compatibilidad con la numeración automática de líneas (muy usada en trabajos académicos)
- El motor de diseño de Typst ahora es multihilo. Las aceleraciones típicas son de 2 a 3 veces en documentos grandes. El multihilo opera en los límites de los saltos de página, así que hacen falta saltos de página explícitos para que entre en juego.
- Se optimizó la justificación de párrafos con un nuevo algoritmo de dos pasadas. Las aceleraciones son mayores en párrafos más cortos y llegan hasta 6 veces.
- Se redujeron mucho los tamaños de los archivos PDF gracias a un mejor subconjunto de fuentes (gracias a @LaurenzV)
- Los emojis ahora se exportan correctamente en PDF
- Se agregó compatibilidad inicial con PDF/A. Por ahora solo se admite el perfil PDF/A-2b, pero hay más planeado para el futuro.
- Se agregaron varias opciones para configurar el entorno de la CLI (fuentes, rutas de paquetes, etc.)
- Las reglas show de texto ahora coinciden a través de varios elementos de texto
- Las ecuaciones de bloque ahora pueden, opcionalmente, dividirse entre varias páginas
- Se corrigió un error por el cual algunas fuentes no se imprimían correctamente en imprentas profesionales
- Se corrigió un error histórico que podía dejar títulos huérfanos al pie de la página
Diseño
- Se agregó compatibilidad con ubicación flotante y figuras de varias columnas mediante
place.scopeyfigure.scope. Para los documentos de dos columnas ahora conviene preferirset page(columns: 2)en lugar deshow: column.with(2)(ver la Guía de configuración de página). - Se agregó compatibilidad con la numeración automática de líneas (muy usada en trabajos académicos)
- Se agregó la propiedad
par.spacingpara configurar el espaciado entre párrafos. Ahora hay que usarla en lugar deshow par: set block(spacing: ..)(Cambio incompatible) - Los elementos de bloque como listas, grillas y pilas ahora se muestran a sí mismos como bloques y por lo tanto les afectan todas las propiedades de bloque (p. ej.,
stroke) y no solospacing(Cambio incompatible) - Se agregó la propiedad
block.sticky, que impide un salto de página después de un bloque - Se agregó la función
place.flush, que fuerza a que todas las figuras flotantes se ubiquen antes de cualquier contenido posterior - Se agregó la función
skew - Se agregó la opción
autoparapage.headerypage.footer, que produce un encabezado o pie automático basado en la numeración (que antes era inaccesible tras un cambio) - Se agregaron los parámetros
gapyjustifya la funciónrepeat - Se agregaron los parámetros
widthyheighta la funciónmeasurepara definir el espacio en el que se debe medir el contenido. Resulta especialmente útil combinado conlayout. - La altura de un
block,image,rect,square,ellipseocircleahora se puede especificar en unidades fraccionarias - La función
scaleahora admite longitudes absolutas parax,yyfactor. Así, un elemento de tamaño desconocido se puede escalar a un tamaño fijo. - Los valores de
block.aboveyblock.belowahora se pueden obtener en expresiones de contexto. - Se aumentó la precisión de las conversiones entre unidades absolutas (pt, mm, cm, in)
- Se corrigió un error que podía dejar títulos huérfanos al pie de la página
- Se corrigió que las notas al pie dentro de bloques divisibles aparecieran en la página donde termina el bloque y no en la página donde está la marca de la nota
- Se corrigió la numeración de las notas al pie anidadas y de las notas al pie en elementos flotantes
- Se corrigió que aparecieran páginas vacías cuando una expresión de contexto envuelve páginas enteras
- Se corrigió que
set block(spacing: x)se comportara distinto deset block(above: x, below: x) - Se corrigió el comportamiento de
rotateyscaleconreflow: true - Se corrigió la interacción entre
align(horizon)yv(1fr) - Se corrigieron varios errores por los cuales la ubicación flotante producía resultados superpuestos
- Se corrigió un error por el cual la prevención de viudas y huérfanas movía texto innecesariamente a la columna siguiente
- Se corrigió que el espaciado débil no se recortara al principio y al final de las líneas de un párrafo (solo al principio y al final de los párrafos)
- Se corrigió la interacción entre el salto de página débil y
pagebreak.to - Se corrigió la salida de compilación de un único salto de página débil
- Se corrigió un fallo con relleno de
100%
Texto
- Se ajustó la separación silábica: ahora es menos ansiosa por defecto y las separaciones cercanas a los bordes de las palabras se desaconsejan con más fuerza (Puede producir reflujos de diseño mayores)
- Nueva fuente predeterminada: Libertinus Serif. Es la sucesora mantenida de la antigua fuente predeterminada Linux Libertine. (Puede producir reflujos menores)
- Establecer la fuente en una familia no disponible ahora produce una advertencia
- Se implementó un nuevo algoritmo de comillas tipográficas, que corrige varios errores en los que las comillas no eran tan inteligentes
- Se agregó el parámetro
text.costspara ajustar varios parámetros que afectan las decisiones del motor de diseño durante el diseño del texto - Se agregó el modo de resaltado
typmpara matemática en bloques raw - Se agregó internacionalización básica para gallego, catalán, latín, islandés y hebreo
- Se implementó la duplicación del guion en la separación silábica para checo, croata, bajo sorabo, polaco, portugués, eslovaco y español.
- La función
smallcapsahora es una función de elemento y por lo tanto se puede usar en reglas show(-set). - El parámetro
raw.themeahora se puede establecer ennonepara desactivar el resaltado incluso en presencia de una etiqueta de lenguaje, y enautopara restablecer el valor predeterminado - Ahora se pueden habilitar varios conjuntos estilísticos a la vez
- Se corrigió la traducción al chino de “Equation”
- Se corrigió que la separación silábica pudiera ocurrir fuera de las palabras
- Se corrigió el diseño incorrecto de texto bidireccional en casos límite
- Se corrigió el diseño de párrafos con espacio en blanco final explícito
- Se corrigieron errores relacionados con párrafos vacíos creados con
#"" - Se corrigieron espacios finales accidentales en saltos de línea inmediatamente anteriores a una ecuación en línea
- Se corrigió que
text.historical-ligaturesno funcionara correctamente - Se corrigió la repetición accidental de caracteres tailandeses alrededor de los saltos de línea en algunas circunstancias
- Se corrigieron las comillas tipográficas para el francés suizo
- Nuevas excepciones de metadatos de fuentes para Archivo, Kaiti SC y Kaiti TC
- Se actualizaron las fuentes New Computer Modern incluidas a la versión 6.0
Matemática
- Las ecuaciones de bloque ahora pueden dividirse entre varias páginas si se habilita con
show math.equation: set block(breakable: true). - El dimensionamiento de matrices y vectores ahora es más consistente con distintos contenidos de celdas
- Se agregó la función
stretchpara estirar manual o automáticamente caracteres como flechas o paréntesis, en horizontal o en vertical - Se mejoró el diseño de los adjuntos en expresiones entre paréntesis y en expresiones con subrayado o sobrerrayado
- Se mejoró el diseño de los adjuntos anidados que resultan de código como
#let a0 = $a_0$; $a0^1$ - Se mejoró el diseño de las primas cercanas a superíndices
- Se mejoró el diseño de las fracciones
- Typst ahora aprovecha la información de kerning matemática dependiente de la altura que traen algunas fuentes, para un mejor diseño de los adjuntos
- Las funciones
flooryceilen matemática ahora son símbolos invocables, de modo que$ floor(x) = lr(floor.l x floor.r) $ - Los parámetros
mat.delim,vec.delimycases.delimahora permiten cualquier carácter que Unicode considere un delimitador o “cerco” (p. ej., |). La notacióndelim: "||"ya no se admite y hay que reemplazarla pordelim: bar.double(Cambio incompatible menor) - Se agregaron los parámetros
vec.alignymat.align - Se agregaron
underparen,overparen,undershellyovershell - Se agregó el atajo
~paratilde.open modo matemático (Cambio incompatible menor) - Se corrigió la alineación de línea base de los números de ecuación
- Se corrigió el posicionamiento de los corchetes de esquina (⌜, ⌝, ⌞, ⌟)
- Se corrigió la línea base de las raíces grandes
- Se corrigieron varios errores menores de diseño con adjuntos
- Se corrigió que los puntos de alineación pudieran afectar la altura de línea en matemática
- Se corrigió que pudieran aparecer espacios entre el texto y elementos invisibles como
metadataen matemática - Se corrigió un fallo con reglas show recursivas en matemática
- Se corrigió que
lr.sizeno afectara en algunos casos a los caracteres encerrados enmid - Se corrigió la resolución de unidades em en subíndices y superíndices
- Se corrigió el cuadro delimitador de las ecuaciones en línea cuando un borde de texto está establecido en
"bounds"
Introspección
- Se implementó un nuevo sistema con el que Typst registra dónde termina cada elemento en las páginas. Esto puede producir comportamientos sutilmente distintos en las introspecciones. (Cambio incompatible)
- Se corrigieron varios errores de comportamiento incorrecto de los contadores en situaciones de diseño complejas, mediante una implementación nueva y más fundamentada
- Ahora las actualizaciones de contadores pueden estar antes de la primera página, entre páginas y después de la última cuando están aisladas por saltos de página débiles. Esto permite, por ejemplo, actualizar un contador antes del encabezado y del fondo de la primera página.
- Se corrigió el orden lógico de las introspecciones dentro de notas al pie y figuras
- Se corrigió
here().position()incorrecto cuando se usabaplaceen una expresión de contexto - Se corrigieron las posiciones resueltas de elementos (en particular, títulos) cuya regla show emite un elemento invisible (como una actualización de estado) antes de un salto de página
- Se corrigió el comportamiento de avanzar un contador en un nivel más profundo que el de su estado actual
- Se corrigió que el formato de citas no funcionara en encabezados de tabla y en algunos otros lugares
- Mostrar el contador de notas al pie ahora respetará el estilo de numeración de las notas al pie
Modelo
- Las reglas set de documento ya no tienen que estar al principio mismo del documento. La única restricción es que no deben aparecer dentro de contenedores de diseño.
- La propiedad
spacingde las listas, las enumeraciones y las listas de términos ahora también se respeta en las listas compactas - Las listas compactas ahora solo se adhieren (con espaciado más ajustado) a los párrafos anteriores, no a bloques arbitrarios
- El elemento
quoteahora es localizable (se puede usar en consultas) - El título de la bibliografía ahora usa
depthen lugar delevel, de modo que su nivel se pueda seguir configurando mediante una regla show-set - Se agregó compatibilidad con más formatos de numeración: devanagari, árabe oriental, bengalí y números en círculo
- Se agregó el parámetro
hanging-indenta la función heading para ajustar el aspecto de los títulos de varias líneas, y se mejoró su aspecto predeterminado - Se mejoró el manejo de texto bidireccional en las entradas del índice
- Se corrigió que las reglas set de documento se ignoraran en un documento por lo demás vacío
- Se corrigió que las reglas set de documento no se pudieran usar en expresiones de contexto
- Se corrigió una mala interacción entre
set documentyset page - Se corrigió
show figure: set align(..). Como la alineación predeterminada de las figuras ahora es una regla show-set, ya no se revoca conshow figure: it => it.body. (Cambio incompatible menor) - Se corrigió la numeración de las referencias a notas al pie
- Se corrigió el espaciado después del título de la bibliografía
Bibliografía
- El campo
publisherdel YAML de Hayagriva ahora puede aceptar un diccionario con una clavelocation. La clavelocationde nivel superior ahora está pensada principalmente para ubicaciones de eventos y de elementos. - Ahora se permiten varios rangos de páginas con prefijos y sufijos
- Se agregaron
directory tipos de editor genéricos al análisis de BibLaTeX - Se agregó compatibilidad con la desambiguación al estilo de cita alfanumérico
- El año 0 ahora se renderizará como 1 a. C.
- Correcciones en el ordenamiento de las entradas de bibliografía
- Se corrigió la pluralización de las etiquetas de rangos de páginas
- Se corrigió el ordenamiento de las citas por su número
- Se corrigió cómo se colapsan los rangos de números de citas
- Se corrigió cuándo se usa la forma corta de un título
- Se corrigió el análisis de signos de dólar desbalanceados en el campo
urlde BibLaTeX - Se actualizaron los estilos de cita integrados
Visualización
- Se agregó el parámetro
fill-rulea las funcionespathypolygon - Se corrigieron la mezcla de colores y los degradés para colores Luma
- Se corrigió la conversión de colores Luma a CMYK
- Se corrigieron los trazos de degradé desplazados en la exportación a PNG
- Se corrigió el recorte no deseado de algunos SVG
- Los SVG con objetos foráneos ahora producen una advertencia, ya que probablemente no se renderizarán bien en Typst
Sintaxis
- Se agregó compatibilidad con importaciones anidadas como
import "file.typ": module.item - Se agregó compatibilidad con importaciones entre paréntesis como
import "file.typ": (a, b, c). Con ellas, la lista de importación puede dividirse en varias líneas. - Se corrigió un caso límite en el análisis de la sintaxis de referencias
- Se corrigió un caso límite en el análisis de marcadores de título, lista, enumeración y términos seguidos inmediatamente por comentarios
- Se corrigió un fallo poco frecuente en el análisis de expresiones entre paréntesis
Scripting
- Se agregó el nuevo tipo numérico de punto fijo
decimal, para aritmética de alta precisión con números en base 10, como se necesita en finanzas - Se agregó el módulo
stdpara acceder a las definiciones de la biblioteca estándar incluso cuando una variable con el mismo nombre las tapa o sobrescribe - Se agregaron los métodos
array.to-dict,array.reduceyarray.windows - Se agregó el argumento
exactaarray.zip - Se agregó el método
arguments.at - Se agregaron
int.from-bytes,int.to-bytes,float.from-bytesyfloat.to-bytes - Se agregó compatibilidad adecuada con valores negativos del parámetro
digitsdecalc.round(el comportamiento existía antes, pero estaba sutilmente roto) - Las conversiones de
intafloatahora producirán un error en lugar de saturar si el flotante es demasiado grande (Cambio incompatible menor) - Se agregaron
float.nanyfloat.inf, y se eliminócalc.nan(Cambio incompatible menor) - Ciertos símbolos ahora se pueden llamar como funciones en general y no solo en matemática. Algunos ejemplos son los acentos o
flooryceil. - Se mejoró
reprde valores relativos, secuencias, infinitos, NaN,type(none)ytype(auto) - Se corrigió un fallo cuando paquetes enteros (y no solo archivos) se importaban cíclicamente entre sí
- Se corrigió el tipo de retorno de
calc.roundsobre enteros cuando se pasa un valor distinto de cero paradigits
Estilos
- Las reglas show de texto ahora coinciden a través de varios elementos de texto
- La cadena
"en una regla show de texto ahora coincide con las comillas tipográficas - Se corrigió un error histórico de estilos por el cual el encabezado y el pie de página heredaban incorrectamente estilos de un elemento aislado en la página (p. ej., un título)
- Se corrigió que
set pageno funcionara directamente después de una actualización de contador o estado - Los campos de página configurados mediante una llamada explícita
page(..)[..]ahora se pueden obtener correctamente en expresiones de contexto
Exportación
- Se redujeron mucho los tamaños de los archivos PDF gracias a un mejor subconjunto de fuentes
- Los emojis ahora se exportan correctamente en PDF
- Se agregó compatibilidad inicial con PDF/A. Por ahora solo se admite el estándar PDF/A-2b, pero hay más planeado para el futuro. Se habilita con
--pdf-standard a-2ben la CLI y desde la interfaz en File > Export as > PDF en la app web. - Establecer
page.fillennoneahora produce páginas transparentes en lugar de blancas en PNG y SVG. El nuevo valor predeterminadoautosignifica transparente para PDF y blanco para PNG y SVG. - Se mejoró el copiado y pegado de texto desde PDF en escenarios complejos
- Los SVG exportados ahora contienen el atributo
data-typst-labelen los grupos que resultan de cajas y bloques con etiqueta - Se corrigió un error por el cual algunas fuentes no se imprimían correctamente en imprentas profesionales
- Se corrigió un error por el cual la transparencia podía filtrarse de un objeto PDF a otro
- Se corrigió un error con degradés CMYK en PDF
- Se corrigieron varios errores en la exportación de degradés Oklab a PDF
- Se corrigieron fallos relacionados con el renderizado de glifos que no son de contorno
- Dos correcciones menores de conformidad con el estándar PDF
Rendimiento
- El motor de diseño de Typst ahora es multihilo. Las aceleraciones típicas son de 2 a 3 veces en documentos grandes. El multihilo opera en los límites de los saltos de página, así que hacen falta saltos de página explícitos para que entre en juego.
- Se optimizó la justificación de párrafos con un nuevo algoritmo de dos pasadas. Las aceleraciones son mayores en párrafos más cortos y van de 1 a 6 veces.
Interfaz de línea de comandos
- Se agregó la opción
--pagespara seleccionar rangos de páginas específicos para exportar - Se agregaron
--package-pathy--package-cache-path, así como las variables de entornoTYPST_PACKAGE_PATHyTYPST_PACKAGE_CACHE_PATH, para configurar desde dónde se cargan los paquetes y dónde se guardan en caché, respectivamente - Se agregó el indicador
--ignore-system-fontspara desactivar por completo las fuentes del sistema y lograr mayor reproducibilidad - Se agregó el argumento
--make-depspara generar las dependencias de la compilación actual como un Makefile - Se agregó la opción
--prettyatypst query, y ahora por defecto se minifica (solo se aplica al formato JSON) - Se agregó
--backup-pathatypst updatepara configurar dónde se hace la copia de respaldo de la versión anterior - Se agregaron enlaces útiles a la salida de ayuda
- La CLI ahora saluda a quienes invocan solo
typstpor primera vez - Ahora se puede escribir el documento en la salida estándar pasando
-como nombre del archivo de salida (para PDF o exportación de imagen de una sola página) - Typst ahora emite un mensaje de error adecuado, en lugar de fallar en silencio, cuando no se pudo cargar el certificado especificado con
--certoTYPST_CERT - La CLI ahora respeta la variable de entorno
SOURCE_DATE_EPOCHpara una mejor reproducibilidad - Al exportar varias imágenes, ahora podés usar
t(total de páginas),p(página actual) y0p(página actual con ceros a la izquierda, igual que el actualn) en la ruta de salida - Las rutas de entrada y de salida ahora admiten valores que no son UTF-8
- Las horas ahora se formatean de forma más coherente en toda la CLI
- Se corrigió un error relacionado con el indicador
--open - Se corrigió que los autocompletados de rutas de
typstno funcionaran en zsh
Herramientas y diagnósticos
- El campo “compiler” para especificar la versión mínima de Typst que requiere un paquete ahora admite límites imprecisos como 0.11 en lugar de 0.11.0
- Se agregó una advertencia cuando Typst ignora una etiqueta porque no hay ningún elemento etiquetable anterior
- Se agregó una sugerencia al intentar aplicar etiquetas en modo código
- Se agregó una sugerencia al intentar llamar a una función de la biblioteca estándar que fue tapada o sobrescrita por una definición local
- Se agregó una sugerencia al intentar establecer tanto el idioma como la región en el parámetro
lang - Se agregaron sugerencias al intentar compilar archivos que no son de Typst (p. ej., después de haber escrito
typst c file.pdfpor accidente) - Se agregó una sugerencia cuando se usa una cadena de texto donde se espera una etiqueta
- Se agregó una sugerencia cuando se encuentra un cierre de comentario de bloque (
*/) suelto - Se agregaron sugerencias al desestructurar arrays con una cantidad incorrecta de elementos
- Se mejoró el mensaje de error al intentar usar una palabra clave como identificador en un enlace let
- Se mejoraron los mensajes de error al acceder a campos inexistentes
- Se mejoró el mensaje de error cuando existe un paquete, pero no la versión especificada
- Se mejoraron las sugerencias para variables desconocidas
- Se mejoró la sugerencia al intentar convertir una longitud con un componente em distinto de cero a una unidad absoluta
- Se corrigió un fallo que podían provocar ciertos tooltips al pasar el mouse
- Se corrigió un error de uno en los saltos al código fuente cuando la sangría de primera línea está habilitada
- Se corrigieron las sugerencias para
.después del final de una expresión de código en línea - Se corrigió que los autocompletados se duplicaran en un caso específico
Símbolos
- Nuevos:
parallelogram,original,image,crossmark,rest,natural,flat,sharp,tiny,miny,copyleft,trademark,emoji.beet,emoji.fingerprint,emoji.harp,emoji.shovel,emoji.splatter,emoji.tree.leafless, - Variantes nuevas:
club.stroked,diamond.stroked,heart.stroked,spade.stroked,gt.neq,lt.neq,checkmark.heavy,paren.double,brace.double,shell.double,arrow.turn,plus.double,plus.triple,infinity.bar,infinity.incomplete,infinity.tie,multimap.double,ballot.check,ballot.check.heavy,emptyset.bar,emptyset.circle,emptyset.arrow.l,emptyset.arrow.r,parallel.struck,parallel.eq,parallel.equiv,parallel.slanted,parallel.tilde,angle.l.curly,angle.l.dot,angle.r.curly,angle.r.dot,angle.oblique,angle.s,em.two,em.three - Renombrados:
turtleashell,notesanote,ballot.xaballot.cross,succ.eqasucc.curly.eq,prec.eqaprec.curly.eq,servicemarkatrademark.service,emoji.face.tiredaemoji.face.distress(Cambio incompatible) - Punto de código modificado:
prec.eq,prec.neq,succ.eq,succ.neq,trianglede ▷ a △,emoji.face.tired(Cambio incompatible) - Eliminados:
lt.curlyen favor deprec,gt.curlyen favor desucc(Cambio incompatible)
Obsolescencias
counter.displaysin un contexto establecidocounter.finalcon una ubicaciónstate.finalcon una ubicaciónstate.displayquerycon una ubicación como segundo argumentolocatecon una función de retorno de llamada (callback)measurecon estilosstyle
Desarrollo
- Se agregó el crate
typst-kit, que ofrece APIs útiles para quienes implementanWorld - Se agregó una API de ir a la definición en
typst-ide - Se agregaron APIs de análisis de manifiestos de paquetes a
typst-syntax - Como ahora el compilador es capaz de usar varios hilos, las implementaciones de
Worlddeben cumplirSendySync - Se cambió la firma de
World::mainpara permitir el caso en que no se pudo cargar el archivo principal - Se eliminó
Traceren favor deWarned<T>y de la funcióntypst::trace - La dependencia
xz2que usa el autoactualizador ahora se enlaza estáticamente - El Dockerfile ahora tiene una directiva
ENTRYPOINT
Colaboradores
¡Gracias a todos los que contribuyeron a esta versión!