Skip to content

Version 0.11.0 (March 15, 2024)

Latest
Compare
Choose a tag to compare
@laurmaedje laurmaedje released this 15 Mar 18:05
· 98 commits to main since this release

View changelog with more links on typst.app

  • Tables (thanks to @PgBiel)

    • Tables are now much more flexible, read the new table guide to get started
    • Added table.cell element for per-cell configuration
    • Cells can now span multiple columns or rows
    • The stroke of individual cells can now be customized
    • The align and inset arguments of the table function now also take (x, y) => .. functions
    • Added table.hline and table.vline for convenient line customization
    • Added table.header element for table headers that repeat on every page
    • Added table.footer element for table footers that repeat on every page
    • All the new table functionality is also available for grids
    • Fixed gutter-related bugs
  • Templates

    • You can now use template packages to get started with new projects. Click Start from template on the web app's dashboard and choose your preferred template or run the typst init <template> command in the CLI. You can browse the available templates here.
    • Switching templates after the fact has become easier. You can just import a styling function from a different template package.
    • Package authors can now submit their own templates to the package repository. Share a template for a paper, your institution, or an original work to help the community get a head start on their projects.
    • Templates and packages are now organized by category and discipline. Filter packages by either taxonomy in the Start from template wizard. If you are a package author, take a look at the new documentation for categories and disciplines.
  • Context

    • Added context expressions: Read the chapter on context to get started
    • With context, you can access settable properties, e.g. context text.lang to access the language set via set text(lang: "..")
    • The following existing functions have been made contextual: query, locate, measure, counter.display, counter.at, counter.final, state.at, and state.final
    • Added contextual methods counter.get and state.get to retrieve the value of a counter or state in the current context
    • Added contextual function here to retrieve the location of the current context
    • The locate function now returns the location of a selector's unique match. Its old behavior has been replaced by context expressions and only remains temporarily available for compatibility.
    • The counter.at and state.at methods are now more flexible: They directly accept any kind of locatable selector with a unique match (e.g. a label) instead of just locations
    • When context is available, counter.display now directly returns the result of applying the numbering instead of yielding opaque content. It should not be used anymore without context. (Deprecation planned)
    • The state.display function should not be used anymore, use state.get instead (Deprecation planned)
    • The location argument of query, counter.final, and state.final should not be used anymore (Deprecation planned)
    • The styles argument of the measure function should not be used anymore (Deprecation planned)
    • The style function should not be used anymore, use context instead (Deprecation planned)
    • The correct context is now also provided in various other places where it is available, e.g. in show rules, layout callbacks, and numbering functions in the outline
  • Styling

    • Fixed priority of multiple show-set rules: They now apply in the same order as normal set rules would
    • Show-set rules on the same element (e.g. show heading.where(level: 1): set heading(numbering: "1.")) now work properly
    • Setting properties on an element within a transformational show rule (e.g. show heading: it => { set heading(..); it }) is not supported anymore (previously it also only worked sometimes); use show-set rules instead (Breaking change)
    • Text show rules that match their own output now work properly (e.g. show "cmd": `cmd`)
    • The elements passed to show rules and returned by queries now contain all fields of their respective element functions rather than just specific ones
    • All settable properties can now be used in where selectors
    • And and or selectors can now be used with show rules
    • Errors within show rules and context expressions are now ignored in all but the last introspection iteration, in line with the behavior of the old locate
    • Fixed a bug where document set rules were allowed after content
  • Layout

    • Added reflow argument to rotate and scale which lets them affect the layout
    • Fixed a bug where floating placement or floating figures could end up out of order
    • Fixed overlap of text and figure for full-page floating figures
    • Fixed various cases where the hide function didn't hide its contents properly
    • Fixed usage of h and v in stacks
    • Invisible content like a counter update will no longer force a visible block for just itself
    • Fixed a bug with horizontal spacing followed by invisible content (like a counter update) directly at the start of a paragraph
  • Text

    • Added stroke property for text
    • Added basic i18n for Serbian and Catalan
    • Added support for contemporary Japanese numbering method
    • Added patches for various wrong metadata in specific fonts
    • The text direction can now be overridden within a paragraph
    • Fixed Danish smart quotes
    • Fixed font fallback next to a line break
    • Fixed width adjustment of JIS-style Japanese punctuation
    • Fixed Finnish translation of "Listing"
    • Fixed Z-ordering of multiple text decorations (underlines, etc.)
    • Fixed a bug due to which text features could not be overridden in consecutive set rules
  • Model

    • Added depth and offset arguments to heading to increase or decrease the heading level for a bunch of content; the heading syntax now sets depth rather than level (Breaking change)
    • List markers) now cycle by default
    • The quote function now more robustly selects the correct quotes based on language and nesting
    • Fixed indent bugs related to the default show rule of terms
  • Math

    • Inline equations now automatically linebreak at appropriate places
    • Added number-align argument to equations
    • Added support for adjusting the size of accents relative to their base
    • Improved positioning of accents
    • Primes are now always attached as scripts by default
    • Exposed math.primes element which backs the $f'$ syntax in math
    • Math mode is not affected by strong and emph anymore
    • Fixed attach under fractions
    • Fixed that math.class did not affect smart limit placement
    • Fixed weak spacing in lr groups
    • Fixed layout of large operators for Cambria Math font
    • Fixed math styling of Hebrew symbol codepoints
  • Symbols

    • Added gradient as an alias for nabla
    • Added partial as an alias for diff, diff will be deprecated in the future
    • Added colon.double, gt.approx, gt.napprox, lt.approx, and lt.napprox
    • Added arrow.r.tilde and arrow.l.tilde
    • Added tilde.dot
    • Added forces and forces.not
    • Added space.nobreak.narrow
    • Added lrm (Left-to-Right Mark) and rlm (Right-to-Left Mark)
    • Fixed star.stroked symbol (which previously had the wrong codepoint)
  • Scripting

    • Arrays can now be compared lexicographically
    • Added contextual method to-absolute to lengths
    • Added calc.root
    • Added int.signum and float.signum methods
    • Added float.is-nan and float.is-infinite methods
    • Added int.bit-not, int.bit-and, int.bit-or, int.bit-xor, int.bit-lshift, and int.bit-rshift methods
    • Added array.chunks method
    • A module can now be converted to a dictionary with the dictionary constructor to access its contents dynamically
    • Added row-type argument to csv function to configure how rows will be represented
    • XML parsing now allows DTDs (document type definitions)
    • Improved formatting of negative numbers with str and repr
    • For loops can now iterate over bytes
    • Fixed a bug with pattern matching in for loops
    • Fixed a bug with labels not being part of .fields() dictionaries
    • Fixed a bug where unnamed argument sinks wouldn't capture excess arguments
    • Fixed typo in repr output of strokes
  • Syntax

    • Added support for nested destructuring patterns
    • Special spaces (like thin or non-breaking spaces) are now parsed literally instead of being collapsed into normal spaces (Breaking change)
    • Korean text can now use emphasis syntax without adding spaces (Breaking change)
    • The token context is now a keyword and cannot be used as an identifier anymore (Breaking change)
    • Nested line comments aren't allowed anymore in block comments (Breaking change)
    • Fixed a bug where x.) would be treated as a field access
    • Text elements can now span across curly braces in markup
    • Fixed silently wrong parsing when function name is parenthesized
    • Fixed various bugs with parsing of destructuring patterns, arrays, and dictionaries
  • Tooling & Diagnostics

    • Click-to-jump now works properly within raw text
    • Added suggestion for accessing a field if a method doesn't exist
    • Improved hint for calling a function stored in a dictionary
    • Improved errors for mutable accessor functions on arrays and dictionaries
    • Fixed error message when calling constructor of type that doesn't have one
    • Fixed confusing error message with nested dictionaries for strokes on different sides
    • Fixed autocompletion for multiple packages with the same name from different namespaces
  • Visualization

    • The image function doesn't upscale images beyond their natural size anymore
    • The image function now respects rotation stored in EXIF metadata
    • Added support for SVG filters
    • Added alpha component to luma colors
    • Added color.transparentize and color.opacify methods
    • Improved color.negate function
    • Added stroke and radius arguments to highlight function
    • Changed default highlight color to be transparent
    • CMYK to RGB conversion is now color-managed
    • Fixed crash with gradients in Oklch color space
    • Fixed color-mixing for hue-based spaces
    • Fixed bugs with color conversion
    • SVG sizes are not rounded anymore, preventing slightly wrong aspect ratios
    • Fixed a few other SVG-related bugs
    • color.components doesn't round anything anymore
  • Export

    • PDFs now contain named destinations for headings derived from their labels
    • The internal PDF structure was changed to make it easier for external tools to extract or modify individual pages, avoiding a bug with Typst PDFs in Apple Preview
    • PDFs produced by Typst should now be byte-by-byte reproducible when set document(date: none) is set
    • Added missing flag to PDF annotation
    • Fixed multiple bugs with gradients in PDF export
    • Fixed a bug with patterns in PDF export
    • Fixed a bug with embedding of grayscale images in PDF export
    • Fixed a bug with To-Unicode mapping of CFF fonts in PDF export
    • Fixed a bug with the generation of the PDF outline
    • Fixed a sorting bug in PDF export leading to non-reproducible output
    • Fixed a bug with transparent text in PNG export
    • Exported SVG files now include units in their top-level width and height
  • Command line interface

    • Added support for passing inputs via a CLI flag
    • When passing the filename -, Typst will now read input from stdin
    • Now uses the system-native TLS implementation for network fetching which should be generally more robust
    • Watch mode will now properly detect when a previously missing file is created
    • Added --color flag to configure whether to print colored output
    • Fixed user agent with which packages are downloaded
    • Updated bundled fonts to the newest versions
  • Development

    • Added --vendor-openssl to CLI to configure whether to link OpenSSL statically instead of dynamically (not applicable to Windows and Apple platforms)
    • Removed old tracing (and its verbosity) flag from the CLI
    • Added new --timings flag which supersedes the old flamegraph profiling in the CLI
    • Added minimal CLI to typst-docs crate for extracting the language and standard library documentation as JSON
    • The typst_pdf::export function's ident argument switched from Option to Smart. It should only be set to Smart::Custom if you can provide a stable identifier (like the web app can). The CLI sets Smart::Auto.

Thanks to everyone who contributed to this release: @Leedehai, @PgBiel, @frozolotl, @Dherse, @MDLC01, @Andrew15-5, @Enter-tainer, @Myriad-Dreamin, @peng1999, @EpicEricEE, @jcbhmr, @Heinenen, @tingerrr, @Jollywatt, @LaurenzV, @YDX-2147483647, @k-84mo10, @s-cerevisiae, @01mf02, @A-Walrus, @C0ffeeCode, @CosmicHorrorDev, @DavidMazarro, @Hofer-Julian, @Jocs, @Midbin, @Quaqqer, @artemist, @astrale-sharp, @cmoog, @drupol, @dyc3, @eltociear, @emilyyyylime, @emmett-rayes, @espinielli, @evfinkn, @f3rn0s, @freundTech, @geekvest, @h-arry-smith, @istudyatuni, @jaroeichler, @jbirnick, @kg583, @mattfbacon, @max397574, @mkpoli, @mkroening, @muzimuzhi, @natsukagami, @nvarner, @onerandomusername, @pineapplehunter, @silvergasp, @t-rapp, @tertsdiepraam, @uetcis, @violetfauna, @voidiz, @xTeamStanly, @xalbd, @xkevio, @zica87.