3 puntos por GN⁺ 2024-07-21 | 2 comentarios | Compartir por WhatsApp
  • Typst es un sistema de composición tipográfica basado en marcado que busca ofrecer una potencia al nivel de LaTeX, pero siendo más fácil de aprender y usar; este repositorio incluye el compilador y la CLI necesarios para compilar documentos localmente
  • Ofrece marcado integrado para tareas de formato básicas, funciones flexibles, scripting integrado, composición de fórmulas, gestión bibliográfica y mensajes de error amigables
  • Apunta a tiempos de compilación rápidos mediante compilación incremental; typst watch observa los cambios en el código fuente y recompila más rápido que empezar desde cero cada vez
  • La CLI puede instalarse con binarios de lanzamiento, gestores de paquetes, cargo, Nix o Docker, y permite generar PDFs con typst compile file.typ; también admite rutas de fuentes personalizadas
  • Sus principios de diseño buscan lograr simplicidad mediante consistencia, potencia mediante composabilidad y rendimiento mediante incrementalidad, con la meta de alcanzar velocidades que permitan vista previa instantánea

Lo que ofrece Typst

  • Typst es un sistema de composición tipográfica basado en marcado diseñado para ser tan potente como LaTeX, pero más fácil de aprender y usar
  • Sus funciones principales incluyen:
    • Marcado integrado para tareas de formato frecuentes
    • Funciones flexibles para otros casos
    • Un sistema de scripting estrechamente integrado
    • Composición de fórmulas, gestión bibliográfica y más
    • Tiempos de compilación rápidos basados en compilación incremental
    • Mensajes de error amigables cuando algo sale mal
  • Este repositorio contiene el compilador de Typst y la CLI necesarios para compilar documentos de Typst localmente
  • Si quieres una mejor experiencia de escritura, puedes usar el editor colaborativo en línea gratuito

Sintaxis y modelo de escritura

  • Typst usa set rules como #set para configurar propiedades de elementos como el tamaño de página o la numeración de títulos
    • Si la altura de page se establece en auto, se ajusta al contenido
    • Si necesitas un control más completo, puedes redefinir por completo la apariencia de los elementos con show rules
  • Los títulos se escriben con la sintaxis = Heading
    • Un solo = crea un título de nivel superior, == crea un subtítulo
    • Puedes consultar la lista completa de marcado ligero en la documentación de syntax
  • Las fórmulas se encierran entre signos de dólar
    • Si agregas espacios extra alrededor del contenido de la fórmula, puede colocarse como un bloque independiente
    • Los identificadores de varias letras se interpretan como definiciones y funciones de Typst a menos que se encierren entre comillas
    • Elementos como floor y sqrt no necesitan barra invertida
    • phi.alt aplica el modificador alt a phi para elegir una variante específica del símbolo
  • El scripting se escribe dentro del documento poniendo una expresión después de un hash (#)
    • El ejemplo calcula el enésimo número de Fibonacci con dos variables y una función recursiva
    • La función table recibe las celdas por filas
    • Para pasar los elementos de un arreglo como argumentos individuales, se usa el operador de expansión ..

Instalación y uso de la CLI

  • La CLI de Typst puede instalarse por varias vías
    • El código fuente y los binarios precompilados de la versión más reciente están en la página de releases
    • Puedes colocar el binario en un directorio incluido en PATH y luego actualizar con typst update
    • Las versiones de gestores de paquetes pueden ir atrasadas respecto al último release
  • Ejemplos de instalación con gestores de paquetes:
  • Si tienes la toolchain de Rust, puedes instalarlo con cargo
  • También son compatibles Nix y Docker
    • Nix: nix-shell -p typst
    • Typst flake: nix run github:typst/typst-flake -- --version
    • Docker: docker run ghcr.io/typst/typst:latest --help
  • El comando de compilación básico es el siguiente
    • typst compile file.typ: crea file.pdf en el directorio de trabajo
    • typst compile path/to/source.typ path/to/output.pdf: crea un PDF en la ruta especificada
  • La vigilancia de cambios se ejecuta con typst watch file.typ
    • Como Typst usa compilación incremental, es más rápido que compilar desde cero cada vez
  • También ofrece comandos relacionados con fuentes
    • typst compile --font-path path/to/fonts file.typ: especifica un directorio adicional para buscar fuentes
    • typst fonts --font-path path/to/fonts: muestra la lista de fuentes encontradas en el sistema y en el directorio indicado
    • TYPST_FONT_PATHS=path/to/fonts typst fonts: forma de variable de entorno con sintaxis de Linux
  • Puedes ver otros subcomandos y opciones con typst help, y la ayuda de un comando específico con typst help watch

Entorno de edición y comunidad

  • Si necesitas una experiencia integrada tipo IDE, autocompletado y vista previa instantánea, puedes usar la app web gratuita de Typst
  • El servidor de lenguaje creado por la comunidad, Tinymist, está integrado en varias extensiones de editores
  • Los principales espacios de la comunidad son el Forum y el servidor de Discord
    • El Forum es ideal para hacer preguntas, ayudar a otros usuarios y compartir resultados hechos con Typst
    • Discord es más adecuado para preguntas rápidas, discusiones sobre contribuciones y chat
  • Typst Universe es el espacio donde la comunidad comparte plantillas y paquetes
  • Los paquetes que crees tú mismo pueden enviarse al repositorio de paquetes

Contribuciones y compilación

  • Si encuentras un bug, puedes abrir un issue, y si quieres implementar una función nueva o corregir un error, puedes seguir la guía de contribución
  • Para compilarlo tú mismo, instala la versión estable más reciente de Rust y luego ejecuta estos comandos
  • El binario optimizado se guarda en target/release/
  • Compartir paquetes con la comunidad también es una forma de contribuir

Pronunciación y escritura del nombre

  • La pronunciación en IPA de Typst es /taɪpst/
  • "Ty" se pronuncia como el Ty de Typesetting, y "pst" como el pst de Hipster
  • Al escribir Typst, se considera un nombre propio y se usa con T mayúscula

Principios de diseño

  • Typst está diseñado en torno a tres objetivos: Power, simplicity, performance
  • La meta es un sistema que iguale la potencia de LaTeX, sea fácil de aprender y usar, y lo bastante rápido como para ofrecer vista previa instantánea
  • Simplicidad mediante consistencia

    • Si en Typst sabes cómo hacer una cosa, deberías poder trasladar ese conocimiento a otras tareas
    • Si hay varias formas de hacer lo mismo, deberían existir en distintos niveles de abstracción
    • = Introduction y #heading[Introduction] son un ejemplo permitido, ya que la primera es azúcar sintáctica de la segunda aunque hagan lo mismo
  • Potencia mediante composabilidad

    • En lugar de poner una configuración para todo, opta por diseñar con un pequeño número de componentes que puedan combinarse de muchas maneras
    • TeX también es un sistema de bajo nivel componible, pero la gente usa LaTeX en su lugar
    • Consideran que en LaTeX, en muchos casos, se termina dependiendo de paquetes como \\usepackage{knob}
  • Rendimiento mediante incrementalidad

    • Todas las funciones del lenguaje Typst deben ser compatibles con la compilación incremental
    • comemo se encarga en segundo plano de gran parte del trabajo relacionado con la compilación incremental

Patrocinio y apoyo

  • Entre los principales apoyos al trabajo open source de Typst se enumeran los siguientes
  • La lista solo incluye contribuciones al trabajo open source que superaron o se espera que superen los €10K

2 comentarios

 
sebul 2025-02-28

¿"LeTeX" se lee como "latex"? Yo diría que se pronunciaría "leytek".

 
GN⁺ 2024-07-21
Opiniones de Hacker News
  • Typst resultó ser bastante excelente, y en nuestra organización estamos muy satisfechos con él.
    Como tenemos que generar más de 1.5 millones de PDF cada noche, probamos varias soluciones para conversión HTML→PDF, como Puppeteer, pdflatex y lualatex, y Typst fue varios órdenes de magnitud más rápido y también más liviano en uso de recursos.
    La experiencia de desarrollo para crear plantillas PDF con LaTeX no era buena, pero las plantillas de Typst resultaron bastante intuitivas.
    Escribí con más detalle en el blog sobre este stack de generación masiva de PDF: https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes

    • Nunca había oído de un caso en el que se generaran documentos PDF a esa velocidad.
      Estoy creando un producto de reportes PDF masivos basado en Puppeteer, y con trabajos nocturnos, caché y procesamiento paralelo, el rendimiento es bastante aceptable.
      https://www.cx-reports.com
    • Me da curiosidad si también probaron ReportLab.
      Hace mucho, cuando tuve que lidiar con un problema parecido, fue una buena solución.
      La escala no era de ese nivel, pero aun así funcionaba bien.
    • Me da curiosidad si la organización devolvió alguna contribución al proyecto, o si al menos lo apoyó económicamente.
    • Me da curiosidad cuál es el caso de uso para generar tantos PDF.
  • He escrito muchas tareas con Typst, y la escritura académica se vuelve más concisa, inmersiva y, me atrevo a decir, divertida.
    Gracias al carácter funcional de la sintaxis de Typst, no hay que sufrir los comportamientos caprichosos que se ven hoy en Microsoft Word y, a veces, también en Google Docs.
    Si usas un IDE local como VSCode, puedes tener casi todas las funciones que quieres.
    En comparación con LaTeX, la composición del documento completo es mucho más intuitiva, pero cuando escribo desarrollos largos de ecuaciones que se extienden por varias páginas, siento que LaTeX es más fácil de teclear.
    La sintaxis de LaTeX se parece más a Markdown que a un lenguaje de programación funcional, así que al componer fórmulas con muchas funciones, superíndices y subíndices, hay que pensar menos de antemano.

    • Como alguien que ha hecho escritura académica, me gustaría que las revistas dieran soporte a Typst, o que se establecieran plugins o puentes hacia LaTeX/Word.
      Por ahora no creo que escribiría un paper en Typst.
      Al salir de la institución, casi seguro habría que convertirlo, y arXiv también exige el código fuente en LaTeX.
      Hoy en día, las herramientas alrededor de LaTeX son bastante buenas, y hay muchos IDE que ayudan.
      Personalmente uso Org-Mode de Emacs, que compila a LaTeX.
    • Como referencia, Typst ya tiene soporte parcial para LaTeX mediante el paquete mitex.
      https://github.com/mitex-rs/mitex
    • Para alguien que casi no necesita fórmulas, me pregunto qué ventaja tiene frente a usar Markdown.
  • Hay varias discusiones anteriores y materiales relacionados: https://hn.algolia.com/?q=typst
    Hace 1 año, 146 comentarios: https://news.ycombinator.com/item?id=35250210
    Hace 8 meses, 34 comentarios: https://news.ycombinator.com/item?id=38354422
    Hace 2 años, 53 comentarios: https://news.ycombinator.com/item?id=34423590
    Hace 2 años, 30 comentarios: https://news.ycombinator.com/item?id=32209794

  • Sorprende que la salida HTML no haya sido una función central desde el principio y que actualmente esté en desarrollo.
    Que LaTeX tenga una relación incómoda con la web parece algo que un proyecto competidor que empieza de cero habría intentado resolver bien desde el inicio.
    [0] https://github.com/typst/typst/issues/721

    • Typst es una herramienta que busca competir con LaTeX.
      Ambos enfrentan el mismo problema: la web y el papel funcionan de forma completamente distinta, y hay conceptos que no se pueden traducir entre sí.
      Por eso hay que definir cómo hacer que el resultado tipográfico encaje de forma natural en otro entorno.
      Si Typst hubiera apuntado a HTML desde el principio, el desarrollo habría sido mucho más fácil, pero entonces no habría sido más que un generador de sitios demasiado complejo.
      Que haya apuntado primero a PDF me parece una señal de que realmente pretende competir con LaTeX.
    • La salida HTML de LaTeX hoy se volvió bastante decente, pero es el resultado de los esfuerzos heroicos de mucha gente sobre un sistema que originalmente no estaba pensado para soportarla.
      Si al iniciar un nuevo sistema de marcado no había un plan para crear documentos accesibles, me parece una muy mala decisión.
      No usaré Typst hasta que pueda crear documentos accesibles.
    • Este es uno de los grandes problemas.
      No me gustan los PDF.
    • Escuché que pandoc funciona bastante bien para este uso.
    • Supongo que sabes que TeX salió varios años antes que la web.
  • Estoy esperando que LaTeX desaparezca y Typst lo reemplace.
    La experiencia de uso es completamente distinta, y los resultados son muy impresionantes.
    Hasta ahora generaba archivos TeX con plantillas Jinja2, pero Typst puede recibir JSON desde la línea de comandos, es fácil de usar y lo bastante potente como para eliminar por completo el paso en Python.
    Ni hablar de que el tiempo de compilación está en el orden de milisegundos.

    • El scripting es muy bueno.
      Al principio, como estaba acostumbrado a la forma de trabajar con LaTeX, probé generar plantillas de Typst con plantillas de Go.
      Pero me gustó descubrir que Typst puede usar JSON directamente y con facilidad desde su propio motor de scripting.
  • En 1999, mientras trabajaba como pasante, me encargaron redactar un documento de estándar para el grupo de trabajo de estándares de telefonía VoIP de la TIA.
    El organismo de estandarización tenía una plantilla de Word que todos usaban, pero como estudiante de ingeniería llevaba un tiempo usando LaTeX y me gustaba, así que pensé: “de todos modos la salida final es PDF y el formato seguramente quedará mejor, ¿por qué no usar LaTeX?”.
    En la práctica, el resultado de LaTeX se veía mejor, y a mi jefe le gustó el entregable sin enterarse en absoluto de que no había usado Word.
    La reacción de los integrantes del grupo de trabajo también fue buena, con una vibra tipo “este chico sí que tiene talento”.
    Para una startup, dejar una buena impresión en las grandes empresas que participaban en el grupo de trabajo era muy importante para el futuro de la compañía, quizá incluso para su supervivencia.
    Pero un día mi jefe me dijo: “¿puedes mandarle ese documento de Word a un alto directivo de una gran empresa que quizá nos adquiera? Dice que quiere usarlo como nueva plantilla de documentos”, y sentí esa sensación de hundimiento como cuando, a los cuatro años, oriné en el clóset con un amigo a modo de experimento y mi mamá nos descubrió.
    Al final contraté a un amigo para que pasara todo el fin de semana rehaciéndolo con mucho esfuerzo en Word, y mi jefe recibió el documento.
    La empresa fue adquirida 18 meses después por 100 millones de dólares.
    En fin, LaTeX sigue viéndose 1000 veces mejor que Word.

  • Esto parece un competidor de servicios como Overleaf o CodiMD.
    Es otra sintaxis más, pero parece que pandoc la soporta.
    Últimamente, como programo en R, uso cada vez más Quarto, y en particular genera salidas bastante buenas, como HTML.
    Pero estas herramientas tampoco resuelven dos problemas importantes para usos académicos: ofrecer a los revisores una buena comparación de diferencias y permitir compartir fácilmente con colaboradores no técnicos y que puedan comentar.
    Por eso, al menos en la escritura científica de mi campo, parece difícil reemplazar Word durante varios años más.
    [1] https://github.com/overleaf/overleaf
    [2] https://github.com/hackmdio/codimd
    [3] https://pandoc.org/typst-property-output.html
    [4] https://quarto.org/

    • Uso mucho Quarto.
      Al usar GT, la salida PDF de Typst se sintió un poco más tosca que la salida PDF de LaTeX.
      Espero que lo arreglen.
  • Comparado con LaTeX, lo que más me frena en Typst es que no maneja bien las funciones tipográficas sofisticadas básicas.
    Por ejemplo, le falta en cómo trata, en modo matemático, los tipos de espaciado (mathop, mathbin, mathrel, etc.) o los tamaños de delimitadores (big, bigg, etc.).

  • Se ve realmente bueno y pienso probarlo.
    Aun así, sigo pensando esto:
    Probabilidad que estimo de que LaTeX siga siendo gratuito y mantenido dentro de 15 años: 99.9999%
    Probabilidad que estimo de que otra herramienta nueva siga siendo gratuita y mantenida dentro de 15 años: 5%

    • Es la maldición de los sistemas que salieron temprano y son lo suficientemente buenos.
      Lo mismo pasa con bash y algunas otras cosas.
      Aunque haya muchas alternativas mejores, los puntos de dolor no son lo bastante grandes como para que sean reemplazados.
  • Me gusta Typst.
    Es especialmente bueno cuando se trabaja con entradas generadas mediante programación, y el flag --input puede recibir JSON.
    Dentro del archivo, se puede importar JSON fácilmente con la función dedicada json.decode().
    Es muy fácil generar resultados estables, así que en mi proyecto también cambié de LaTeX a Typst.
    [0] https://typst.app/docs/reference/foundations/sys/
    [1] https://resgen.app