8000 Release Version 0.13.0 (February 19, 2025) Β· typst/typst Β· GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Version 0.13.0 (February 19, 2025)

Compare
Choose a tag to compare
@laurmaedje laurmaedje released this 19 Feb 16:25
· 204 commits to main since this release

Read the announcement blog post

View changelog with links into the documentation on typst.app/docs

Highlights

  • There is now a distinction between proper paragraphs and just inline-level content. This is important for future work on accessibility and means that first line indent can now be enabled for all paragraphs instead of just consecutive ones.
  • The outline has a better out-of-the-box look and is more customizable
  • The new curve function (that supersedes the path function) provides a simpler and more flexible interface for creating BΓ©zier curves
  • The image function now supports raw pixel raster formats for generating images from within Typst
  • Functions that accept file paths now also accept raw bytes, for full flexibility
  • WebAssembly plugins are more flexible and automatically run multi-threaded
  • Fixed a long-standing bug where single-letter strings in math ($"a"$) would be displayed in italics
  • You can now specify which charset should be covered by which font family
  • The pdf.embed function lets you embed arbitrary files in the exported PDF
  • HTML export is currently under active development. The feature is still very incomplete, but already available for experimentation behind a feature flag.

Model

  • There is now a distinction between proper paragraphs and just inline-level content (Breaking change)
    • All text at the root of a document is wrapped in paragraphs. Meanwhile, text in a container (like a block) is only wrapped in a paragraph if the container holds any block-level content. If all of the content is inline-level, no paragraph is created.
    • In the laid-out document, it's not immediately visible whether text became part of a paragraph. However, it is still important for accessibility, HTML export, and for properties like first-line-indent.
    • Show rules on par now only affect proper paragraphs
    • The first-line-indent and hanging-indent properties also only affect proper paragraphs
    • Creating a par[..] with body content that is not fully inline-level will result in a warning
    • The default show rules of various built-in elements like lists, quotes, etc. were adjusted to ensure they produce/don't produce paragraphs as appropriate
    • Removed support for booleans and content in outline.indent
  • The outline function was fully reworked to improve its out-of-the-box behavior (Breaking change)
    • Outline entries are now blocks and are thus affected by block spacing
    • The auto indentation mode now aligns numberings and titles outline-wide for a grid-like look
    • Automatic indentation now also indents entries without a numbering
    • Titles wrapping over multiple lines now have hanging indent
    • The page number won't appear alone on its own line anymore
    • The link now spans the full entry instead of just the title and page number
    • The default spacing between outline leader dots was increased
    • The fill parameter was moved from outline to outline.entry and can thus be configured through show-set rules
    • Removed body and page fields from outline entry
    • Added indented, prefix, inner, body, and page methods on outline entries to simplify writing of show rules
  • Added configuration to par.first-line-indent for indenting all paragraphs instead of just consecutive ones
  • Added form parameter to ref function. Setting the form to "page" will produce a page reference instead of a textual one.
  • Added document.description field, which results in corresponding PDF and HTML metadata
  • Added enum.reversed parameter
  • Added support for Greek numbering
  • When the link function wraps around a container like a block, it will now generate only one link for the whole block instead of individual links for all the visible leaf elements. This significantly reduces PDF file sizes when combining link and repeat.
  • The link function will now only strip one prefix (like mailto: or tel:) instead of multiple
  • The link function now suppresses hyphenation via a built-in show-set rule rather than through its default show rule
  • Displaying the page counter without a specified numbering will now take the page numbering into account

Visualization

  • Added new curve function that supersedes the path function and provides a simpler and more flexible interface. The path function is now deprecated.
  • The image function now supports raw pixel raster formats. This can be used to generate images from within Typst without the need for encoding in an image exchange format.
  • Added image.scaling parameter for configuring how an image is scaled by PNG export and PDF viewers (smooth or pixelated)
  • Added image.icc parameter for providing or overriding the ICC profile of an image
  • Renamed pattern to tiling. The name pattern remains as a deprecated alias.
  • Added gradient.center, gradient.radius, gradient.focal-center, and gradient.focal-radius methods
  • Fixed interaction of clipping and outset on box and block
  • Fixed panic with path of infinite length
  • Fixed non-solid (e.g. tiling) text fills in clipped blocks
  • Fixed a crash for images with a DPI value of zero
  • Fixed floating-point error in gradient.repeat
  • Auto-detection of image formats from a raw buffer now has support for SVGs

Scripting

  • Functions that accept file paths now also accept raw bytes
    • image, cbor, csv, json, toml, xml, and yaml now support a path string or bytes and their .decode variants are deprecated
    • plugin, bibliography, bibliography.style, cite.style, raw.theme, and raw.syntaxes now accept bytes in addition to path strings. These did not have .decode variants, so this adds new flexibility.
    • The path argument/field of image and bibliography was renamed to source and sources, respectively (Minor breaking change)
  • Improved WebAssembly plugins
    • The plugin type is replaced by a plugin function that returns a module containing normal Typst functions. This module can be used with import syntax. (Breaking change)
    • Plugins now automatically run in multiple threads without any changes by plugin authors
    • A new plugin.transition API is introduced which allows plugins to run impure initialization in a way that doesn't break Typst's purity guarantees
  • The variable name bound by a bare import (no renaming, no import list) is now determined statically and dynamic imports without as renaming (e.g. import "ot" + "her.typ") are a hard error (Breaking change)
  • Values of the arguments type can now be added with + and joined in curly-braced code blocks
  • Functions in an element function's scope can now be called with method syntax, bringing elements and types closer (in anticipation of a future full unification of the two). Currently, this is only useful for outline.entry as no other element function defines methods.
  • Added calc.norm function
  • Added support for 32-bit floats in float.from-bytes and float.to-bytes
  • The decimal constructor now also accepts decimal values
  • Improved repr of symbols, arguments, and types
  • Duplicate symbol variants and modifiers are now a hard error (Breaking change)

Math

  • Fixed a bug where single letter strings in math ($"a"$) would be displayed in italics
  • Math function calls can now have hyphenated named arguments and support argument spreading
  • Better looking accents thanks to support for the flac (Flattened Accent Forms) and dtls (Dotless Forms) OpenType features
  • Added lcm text operator
  • The bold function now works with ϝ and Ϝ
  • The italic function now works with Δ§
  • Fixed a bug where the extent of a math equation was wrongly affected by internal metadata
  • Fixed interaction of lr and context expressions
  • Fixed weak spacing being unconditionally ignored in lr
  • Fixed sub/superscripts sometimes being in the wrong position with lr
  • Fixed multi-line annotations (e.g. overbrace) changing the math baseline
  • Fixed merging of attachments when the base is a nested equation
  • Fixed resolving of contextual (em-based) text sizes within math
  • Fixed spacing around up tacks (βŠ₯)

Bibliography

  • Prose and author-only citations now use editor names if the author names are unavailable
  • Some non-standard but widely used BibLaTeX editortypes like producer, writer, scriptwriter, and none (defined by widespread style biblatex-chicago to mean performers within music and video entries) are now recognized
  • CSL styles can now render affixes around the bibliography
  • For BibTeX entries with eprinttype = {pubmed}, the PubMed ID will now be correctly processed
  • Whitespace handling for strings delimiting initialized names has been improved
  • Uppercase spelling after apostrophes used as quotation marks is now possible
  • Fixed bugs around the handling of CSL delimiting characters
  • Fixed a problem with parsing multibyte characters in page ranges that could prevent Hayagriva from parsing some BibTeX page ranges
  • Updated CSL APA style
  • Updated CSL locales for Finnish, Swiss German, Austrian German, German, and Arabic

Text

  • Added support for specifying which charset should be covered by which font family
  • Added all parameter to smallcaps function that also enables small capitals on uppercase letters
  • Added basic i18n for Basque and Bulgarian
  • Justification does not affect raw blocks anymore
  • CJK-Latin-spacing does not affect raw text anymore
  • Fixed wrong language codes being used for Greek and Ukrainian
  • Fixed default quotes for Croatian and Bulgarian
  • Fixed crash in RTL text handling
  • Added support for raw syntax highlighting for a few new languages: CFML, NSIS, and WGSL
  • New font metadata exception for New Computer Modern Sans Math
  • Updated bundled New Computer Modern fonts to version 7.0.1

Layout

  • Fixed various bugs with footnotes
    • Fixed footnotes getting lost when multiple footnotes were nested within another footnote
    • Fixed endless loops with empty and overlarge footnotes
    • Fixed crash with overlarge footnotes within a floating placement
  • Fixed sizing of quadratic shapes (square and circle)
  • Fixed block.sticky not working properly at the top of a container
  • Fixed crash due to consecutive weak spacing
  • Fixed crash when a block or text have negative sizes
  • Fixed unnecessary hyphenations occurring in rare scenarios due to a bad interaction between padding and paragraph optimization
  • Fixed lone citations in align not becoming their own paragraph

Syntax

  • Top-level closing square brackets that do not have a matching opening square bracket are now a hard error (Minor breaking change)
  • Adding a space between the identifier and the parentheses in a set rule is not allowed anymore (Minor breaking change)
  • Numbers with a unit cannot have a base prefix anymore, e.g. 0b100000pt is not allowed anymore. Previously, it was syntactically allowed but always resolved to a value of zero. (Minor breaking change)
  • Using is as an identifier will now warn as it might become a keyword in the future
  • Fixed minor whitespace handling bugs
    • in math mode argument lists
    • at the end of headings
    • between a term list's term and description
  • Fixed parsing of empty single line raw blocks with 3+ backticks and a language tag
  • Fixed minor bug with parentheses parsing in math
  • Markup that can only appear at the start of the line (headings, lists) can now also appear at the start of a list item
  • A shebang #! at the very start of a file is now ignored

PDF export

  • Added pdf.embed function for embedding arbitrary files in the exported PDF
  • Added support for PDF/A-3b export
  • The PDF timestamp will now contain the timezone by default

HTML export

Note: HTML export is currently under active development. The feature is still very incomplete, but already available for experimentation behind a feature flag.

  • Added HTML output support for some (but not all) of the built-in elements
  • Added html.elem function for outputting an arbitrary HTML element
  • Added html.frame function for integrating content that requires layout into HTML (by embedding an SVG)
  • Added target function which returns either "paged" or "html" depending on the export target

Tooling and Diagnostics

  • Autocompletion improvements
    • Added autocompletion for file paths
    • Smarter autocompletion of variables: Completing rect(fill: |) will now only show variables which contain a valid fill (either directly or nested, e.g. a dictionary containing a valid fill)
    • Different functions will now autocomplete with different brackets (round vs square) depending on which kind is more useful
    • Positional parameters which are already provided aren't autocompleted again anymore
    • Fixed variable autocompletion not considering parameters
    • Added autocompletion snippets for common figure usages
    • Fixed autocompletion after half-completed import item
    • Fixed autocompletion for cite function
  • Added warning when an unconditional return in a code block discards joined content
  • Fixed error message when accessing non-existent label
  • Fixed handling of nested imports in IDE functionality

Command Line Interface

  • Added --features argument and TYPST_FEATURES environment variable for opting into experimental features. The only feature so far is html.
  • Added a live reloading HTTP server to typst watch when targeting HTML
  • Fixed self-update not being aware about certain target architectures
  • Fixed crash when piping typst fonts output to another command
  • Fixed handling of relative paths in --make-deps output
  • Fixed handling of multipage SVG and PNG export in --make-deps output
  • Colons in filenames are now correctly escaped in --make-deps output

Symbols

  • New
    • inter, inter.and, inter.big, inter.dot, inter.double, inter.sq, inter.sq.big, inter.sq.double, integral.inter
    • asymp, asymp.not
    • mapsto, mapsto.long
    • divides.not.rev, divides.struck
    • interleave, interleave.big, interleave.struck
    • eq.triple.not, eq.dots, eq.dots.down, eq.dots.up
    • smt, smt.eq, lat, lat.eq
    • colon.tri, colon.tri.op
    • dagger.triple, dagger.l, dagger.r, dagger.inv
    • hourglass.stroked, hourglass.filled
    • die.six, die.five, die.four, die.three, die.two, die.one
    • errorbar.square.stroked, errorbar.square.filled, errorbar.diamond.stroked, errorbar.diamond.filled, errorbar.circle.stroked, errorbar.circle.filled
    • numero
  • Renamed (Breaking change)
    • ohm.inv to Omega.inv
  • Changed codepoint (Breaking change)
    • angle.l.double from γ€Š to βŸͺ
    • angle.r.double from 》 to ⟫
    • angstrom from U+212B (β„«) to U+00C5 (Γ…)
  • Deprecated
    • sect and all its variants in favor of inter
    • integral.sect in favor of integral.inter
  • Removed (Breaking change)
    • degree.c in favor of Β°C ($upright(Β°C)$ or $upright(degree C)$ in math)
    • degree.f in favor of Β°F ($upright(Β°F)$ or $upright(degree F)$ in math)
    • kelvin in favor of just K ($upright(K)$ in math)
    • ohm in favor of Omega

Deprecations

  • The path function in favor of the curve function
  • The name pattern for tiling patterns in favor of the new name tiling
  • image.decode, cbor.decode, csv.decode, json.decode, toml.decode, xml.decode, yaml.decode in favor of the top-level functions directly accepting both paths and bytes
  • The sect and its variants in favor of inter, and integral.sect in favor of integral.inter
  • The compatibility behavior of type/str comparisons (e.g. int == "integer") which was temporarily introduced in Typst 0.8 now emits warnings. It will be removed in Typst 0.14.

Removals

  • Removed style function and styles argument of measure, use a context expression instead (Breaking change)
  • Removed state.display function, use state.get instead (Breaking change)
  • Removed location argument of state.at, counter.at, and query (Breaking change)
  • Removed compatibility behavior where counter.display worked without context (Breaking change)
  • Removed compatibility behavior of locate (Breaking change)

Development

  • The typst::compile function is now generic and can return either a PagedDocument or an HtmlDocument
  • typst-timing now supports WebAssembly targets via web-sys when the wasm feature is enabled
  • Increased minimum supported Rust version to 1.80
  • Fixed linux/arm64 Docker image

Contributors

Thanks to everyone who contributed to this release: @wrzian, @mkorje, @MDLC01, @PgBiel, @bluebear94, @01mf02, @EpicEricEE, @Andrew15-5, @wznmickey, @Coekjan, @jbirnick, @Dherse, @joshuagawley, @Myriad-Dreamin, @NiklasEi, @TwoF1nger, @frozolotl, @swaits, @3w36zj6, @Carbophile, @Drodt, @Emm54321, @Eric-Song-Nop, @Garmelon, @HydroH, @LaurenzV, @LuxxxLucy, @Orange149, @OverflowCat, @SekoiaTree, @SelfMadeSystem, @SkiFire13, @T0mstone, @Tetragramm, @Toafu, @arbrauns, @asibahi, @bbb651, @cskeeters, @dginev, @elegaanz, @escwxyz, @freundTech, @fynsta, @hongjr03, @iagobaapellaniz, @jakobjpeters, @jsoref, @lucaslugao, @mtoohey31, @nineff, @peng1999, @quachpas, @wzf03, @xkevio.

0