ecyht2's picture
feat: Added typst docs
2d83f30 verified
|
raw
history blame
21.2 kB
metadata
title: 0.12.0
description: Changes in Typst 0.12.0

Version 0.12.0 (October 18, 2024)

Highlights

  • Added support for multi-column floating placement and figures
  • Added support for automatic line numbering (often used in academic papers)
  • Typst's layout engine is now multithreaded. Typical speedups are 2-3x for larger documents. The multithreading operates on page break boundaries, so explicit page breaks are necessary for it to kick in.
  • Paragraph justification was optimized with a new two-pass algorithm. Speedups are larger for shorter paragraphs and go up to 6x.
  • Highly reduced PDF file sizes due to better font subsetting (thanks to @LaurenzV)
  • Emoji are now exported properly in PDF
  • Added initial support for PDF/A. For now, only the PDF/A-2b profile is supported, but more is planned for the future.
  • Added various options for configuring the CLI's environment (fonts, package paths, etc.)
  • Text show rules now match across multiple text elements
  • Block-level equations can now optionally break over multiple pages
  • Fixed a bug where some fonts would not print correctly on professional printers
  • Fixed a long-standing bug which could cause headings to be orphaned at the bottom of the page

Layout

  • Added support for multi-column floating placement and figures via [place.scope] and [figure.scope]. Two-column documents should now prefer {set page(columns: 2)} over {show: column.with(2)} (see the page setup guide).
  • Added support for automatic line numbering (often used in academic papers)
  • Added [par.spacing] property for configuring paragraph spacing. This should now be used instead of {show par: set block(spacing: ..)} (Breaking change)
  • Block-level elements like lists, grids, and stacks now show themselves as blocks and are thus affected by all block properties (e.g. stroke) rather than just spacing (Breaking change)
  • Added [block.sticky] property which prevents a page break after a block
  • Added [place.flush] function which forces all floating figures to be placed before any further content
  • Added [skew] function
  • Added {auto} option for [page.header] and [page.footer] which results in an automatic header/footer based on the numbering (which was previously inaccessible after a change)
  • Added gap and justify parameters to [repeat] function
  • Added width and height parameters to the [measure] function to define the space in which the content should be measured. Especially useful in combination with [layout].
  • The height of a block, image, rect, square, ellipse, or circle can now be specified in fractional units
  • The [scale] function now supports absolute lengths for x, y, factor. This way an element of unknown size can be scaled to a fixed size.
  • The values of block.above and block.below can now be retrieved in context expressions.
  • Increased accuracy of conversions between absolute units (pt, mm, cm, in)
  • Fixed a bug which could cause headings to be orphaned at the bottom of the page
  • Fixed footnotes within breakable blocks appearing on the page where the breakable block ends instead of at the page where the footnote marker is
  • Fixed numbering of nested footnotes and footnotes in floats
  • Fixed empty pages appearing when a [context] expression wraps whole pages
  • Fixed {set block(spacing: x)} behaving differently from {set block(above: x, below: x)}
  • Fixed behavior of [rotate] and [scale] with {reflow: true}
  • Fixed interaction of {align(horizon)} and {v(1fr)}
  • Fixed various bugs where floating placement would yield overlapping results
  • Fixed a bug where widow/orphan prevention would unnecessarily move text into the next column
  • Fixed weak spacing not being trimmed at the start and end of lines in a paragraph (only at the start and end of paragraphs)
  • Fixed interaction of weak page break and [pagebreak.to]
  • Fixed compilation output of a single weak page break
  • Fixed crash when padding by {100%}

Text

  • Tuned hyphenation: It is less eager by default and hyphenations close to the edges of words are now discouraged more strongly (May lead to larger layout reflows)
  • New default font: Libertinus Serif. This is the maintained successor to the old default font Linux Libertine. (May lead to smaller reflows)
  • Setting the font to an unavailable family will now result in a warning
  • Implemented a new smart quote algorithm, fixing various bugs where smart quotes weren't all that smart
  • Added [text.costs] parameter for tweaking various parameters that affect the choices of the layout engine during text layout
  • Added typm highlighting mode for math in raw blocks
  • Added basic i18n for Galician, Catalan, Latin, Icelandic, Hebrew
  • Implemented hyphenation duplication for Czech, Croatian, Lower Sorbian, Polish, Portuguese, Slovak, and Spanish.
  • The [smallcaps] function is now an element function and can thereby be used in show(-set) rules.
  • The [raw.theme] parameter can now be set to {none} to disable highlighting even in the presence of a language tag, and to {auto} to reset to the default
  • Multiple stylistic sets can now be enabled at once
  • Fixed the Chinese translation for "Equation"
  • Fixed that hyphenation could occur outside of words
  • Fixed incorrect layout of bidirectional text in edge cases
  • Fixed layout of paragraphs with explicit trailing whitespace
  • Fixed bugs related to empty paragraphs created via #""
  • Fixed accidental trailing spaces for line breaks immediately preceding an inline equation
  • Fixed [text.historical-ligatures] not working correctly
  • Fixed accidental repetition of Thai characters around line breaks in some circumstances
  • Fixed smart quotes for Swiss French
  • New font metadata exceptions for Archivo, Kaiti SC, and Kaiti TC
  • Updated bundled New Computer Modern fonts to version 6.0

Math

  • Block-level equations can now break over multiple pages if enabled via {show math.equation: set block(breakable: true)}.
  • Matrix and vector sizing is now more consistent across different cell contents
  • Added stretch function for manually or automatically stretching characters like arrows or parentheses horizontally or vertically
  • Improved layout of attachments on parenthesized as well as under- or overlined expressions
  • Improved layout of nested attachments resulting from code like [#let a0 = $a_0$; $a0^1$]
  • Improved layout of primes close to superscripts
  • Improved layout of fractions
  • Typst now makes use of math-specific height-dependent kerning information in some fonts for better attachment layout
  • The floor and ceil functions in math are now callable symbols, such that [$ floor(x) = lr(floor.l x floor.r) $]
  • The mat.delim, vec.delim, and cases.delim parameters now allow any character that is considered a delimiter or "fence" (e.g. |) by Unicode. The {delim: "||"} notation is not supported anymore and should be replaced by {delim: bar.double} (Minor breaking change)
  • Added vec.align and mat.align parameters
  • Added underparen, overparen, undershell, and overshell
  • Added ~ shorthand for tilde.op in math mode (Minor breaking change)
  • Fixed baseline alignment of equation numbers
  • Fixed positioning of corner brackets (⌜, ⌝, ⌞, ⌟)
  • Fixed baseline of large roots
  • Fixed multiple minor layout bugs with attachments
  • Fixed that alignment points could affect line height in math
  • Fixed that spaces could show up between text and invisible elements like [metadata] in math
  • Fixed a crash with recursive show rules in math
  • Fixed lr.size not affecting characters enclosed in mid in some cases
  • Fixed resolving of em units in sub- and superscripts
  • Fixed bounding box of inline equations when a text edge is set to {"bounds"}

Introspection

  • Implemented a new system by which Typst tracks where elements end up on the pages. This may lead to subtly different behavior in introspections. (Breaking change)
  • Fixed various bugs with wrong counter behavior in complex layout situations, through a new, more principled implementation
  • Counter updates can now be before the first, in between, and after the last page when isolated by weak page breaks. This allows, for instance, updating a counter before the first page header and background.
  • Fixed logical ordering of introspections within footnotes and figures
  • Fixed incorrect here().position() when [place] was used in a context expression
  • Fixed resolved positions of elements (in particular, headings) whose show rule emits an invisible element (like a state update) before a page break
  • Fixed behavior of stepping a counter at a deeper level than its current state has
  • Fixed citation formatting not working in table headers and a few other places
  • Displaying the footnote counter will now respect the footnote numbering style

Model

  • Document set rules do not need to be at the very start of the document anymore. The only restriction is that they must not occur inside of layout containers.
  • The spacing property of lists, enumerations, and term lists is now also respected for tight lists
  • Tight lists now only attach (with tighter spacing) to preceding paragraphs, not arbitrary blocks
  • The [quote] element is now locatable (can be used in queries)
  • The bibliography heading now uses depth instead of level so that its level can still be configured via a show-set rule
  • Added support for more [numbering] formats: Devanagari, Eastern Arabic, Bengali, and circled numbers
  • Added hanging-indent parameter to heading function to tweak the appearance of multi-line headings and improved default appearance of multi-line headings
  • Improved handling of bidirectional text in outline entry
  • Fixed document set rules being ignored in an otherwise empty document
  • Fixed document set rules not being usable in context expressions
  • Fixed bad interaction between {set document} and {set page}
  • Fixed {show figure: set align(..)}. Since the default figure alignment is now a show-set rule, it is not revoked by {show figure: it => it.body} anymore. (Minor breaking change)
  • Fixed numbering of footnote references
  • Fixed spacing after bibliography heading

Bibliography

  • The Hayagriva YAML publisher field can now accept a dictionary with a location key. The top-level location key is now primarily intended for event and item locations.
  • Multiple page ranges with prefixes and suffixes are now allowed
  • Added director and catch-all editor types to BibLaTeX parsing
  • Added support for disambiguation to alphanumeric citation style
  • The year 0 will now render as 1BC
  • Fixes for sorting of bibliography entries
  • Fixed pluralization of page range labels
  • Fixed sorting of citations by their number
  • Fixed how citation number ranges collapse
  • Fixed when the short form of a title is used
  • Fixed parsing of unbalanced dollars in BibLaTeX url field
  • Updated built-in citation styles

Visualization

  • Added fill-rule parameter to path and polygon functions
  • Fixed color mixing and gradients for Luma colors
  • Fixed conversion from Luma to CMYK colors
  • Fixed offset gradient strokes in PNG export
  • Fixed unintended cropping of some SVGs
  • SVGs with foreign objects now produce a warning as they will likely not render correctly in Typst

Syntax

  • Added support for nested imports like {import "file.typ": module.item}
  • Added support for parenthesized imports like {import "file.typ": (a, b, c)}. With those, the import list can break over multiple lines.
  • Fixed edge case in parsing of reference syntax
  • Fixed edge case in parsing of heading, list, enum, and term markers immediately followed by comments
  • Fixed rare crash in parsing of parenthesized expressions

Scripting

  • Added new fixed-point [decimal] number type for highly precise arithmetic on numbers in base 10, as needed for finance
  • Added std module for accessing standard library definitions even when a variable with the same name shadows/overwrites it
  • Added [array.to-dict], [array.reduce], [array.windows] methods
  • Added exact argument to [array.zip]
  • Added [arguments.at] method
  • Added [int.from-bytes], [int.to-bytes], [float.from-bytes], and [float.to-bytes]
  • Added proper support for negative values of the digits parameter of [calc.round] (the behaviour existed before but was subtly broken)
  • Conversions from [int] to [float] will now error instead of saturating if the float is too large (Minor breaking change)
  • Added float.nan and float.inf, removed calc.nan (Minor breaking change)
  • Certain symbols are now generally callable like functions and not only specifically in math. Examples are accents or floor and ceil.
  • Improved [repr] of relative values, sequences, infinities, NaN, {type(none)} and {type(auto)}
  • Fixed crash on whole packages (rather than just files) cyclically importing each other
  • Fixed return type of [calc.round] on integers when a non-zero value is provided for digits

Styling

  • Text show rules now match across multiple text elements
  • The string {"} in a text show rule now matches smart quotes
  • Fixed a long-standing styling bug where the header and footer would incorrectly inherit styles from a lone element on the page (e.g. a heading)
  • Fixed {set page} not working directly after a counter/state update
  • Page fields configured via an explicit {page(..)[..]} call can now be properly retrieved in context expressions

Export

  • Highly reduced PDF file sizes due to better font subsetting
  • Emoji are now exported properly in PDF
  • Added initial support for PDF/A. For now, only the standard PDF/A-2b is supported, but more is planned for the future. Enabled via --pdf-standard a-2b in the CLI and via the UI in File > Export as > PDF in the web app.
  • Setting [page.fill] to {none} will now lead to transparent pages instead of white ones in PNG and SVG. The new default of {auto} means transparent for PDF and white for PNG and SVG.
  • Improved text copy-paste from PDF in complex scenarios
  • Exported SVGs now contain the data-typst-label attribute on groups resulting from labelled boxes and blocks
  • Fixed a bug where some fonts would not print correctly on professional printers
  • Fixed a bug where transparency could leak from one PDF object to another
  • Fixed a bug with CMYK gradients in PDF
  • Fixed various bugs with export of Oklab gradients in PDF
  • Fixed crashes related to rendering of non-outline glyphs
  • Two small fixes for PDF standard conformance

Performance

  • Typst's layout engine is now multithreaded. Typical speedups are 2-3x for larger documents. The multithreading operates on page break boundaries, so explicit page breaks are necessary for it to kick in.
  • Paragraph justification was optimized with a new two-pass algorithm. Speedups are larger for shorter paragraphs and range from 1-6x.

Command Line Interface

  • Added --pages option to select specific page ranges to export
  • Added --package-path and --package-cache-path as well as TYPST_PACKAGE_PATH and TYPST_PACKAGE_CACHE_PATH environment variables for configuring where packages are loaded from and cached in, respectively
  • Added --ignore-system-fonts flag to disable system fonts fully for better reproducibility
  • Added --make-deps argument for outputting the dependencies of the current compilation as a Makefile
  • Added --pretty option to typst query, with the default now being to minify (only applies to JSON format)
  • Added --backup-path to typst update to configure where the previous version is backed up
  • Added useful links to help output
  • The CLI will now greet users who invoke just typst for the first time
  • The document can now be written to stdout by passing - as the output filename (for PDF or single-page image export)
  • Typst will now emit a proper error message instead of failing silently when the certificate specified by --cert or TYPST_CERT could not be loaded
  • The CLI now respects the SOURCE_DATE_EPOCH environment variable for better reproducibility
  • When exporting multiple images, you can now use {t} (total pages), {p} (current page), and {0p} (zero-padded current page, same as current {n}) in the output path
  • The input and output paths now allow non-UTF-8 values
  • Times are now formatted more consistently across the CLI
  • Fixed a bug related to the --open flag
  • Fixed path completions for typst not working in zsh

Tooling and Diagnostics

  • The "compiler" field for specifying the minimum Typst version required by a package now supports imprecise bounds like 0.11 instead of 0.11.0
  • Added warning when a label is ignored by Typst because no preceding labellable element exists
  • Added hint when trying to apply labels in code mode
  • Added hint when trying to call a standard library function that has been shadowed/overwritten by a local definition
  • Added hint when trying to set both the language and the region in the lang parameter
  • Added hints when trying to compile non-Typst files (e.g. after having typed typst c file.pdf by accident)
  • Added hint when a string is used where a label is expected
  • Added hint when a stray end of a block comment (*/) is encountered
  • Added hints when destructuring arrays with the wrong number of elements
  • Improved error message when trying to use a keyword as an identifier in a let binding
  • Improved error messages when accessing nonexistent fields
  • Improved error message when a package exists, but not the specified version
  • Improved hints for unknown variables
  • Improved hint when trying to convert a length with non-zero em component to an absolute unit
  • Fixed a crash that could be triggered by certain hover tooltips
  • Fixed an off-by-one error in to-source jumps when first-line-indent is enabled
  • Fixed suggestions for . after the end of an inline code expressions
  • Fixed autocompletions being duplicated in a specific case

Symbols

  • New: 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,
  • New variants: 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
  • Renamed: turtle to shell, notes to note, ballot.x to ballot.cross, succ.eq to succ.curly.eq, prec.eq to prec.curly.eq, servicemark to trademark.service, emoji.face.tired to emoji.face.distress (Breaking change)
  • Changed codepoint: prec.eq, prec.neq, succ.eq, succ.neq, triangle from ▷ to △, emoji.face.tired (Breaking change)
  • Removed: lt.curly in favor of prec, gt.curly in favor of succ (Breaking change)

Deprecations

  • [counter.display] without an established context
  • [counter.final] with a location
  • [state.final] with a location
  • state.display
  • [query] with a location as the second argument
  • [locate] with a callback function
  • [measure] with styles
  • style

Development

  • Added typst-kit crate which provides useful APIs for World implementors
  • Added go-to-definition API in typst-ide
  • Added package manifest parsing APIs to typst-syntax
  • As the compiler is now capable of multithreading, World implementations must satisfy Send and Sync
  • Changed signature of World::main to allow for the scenario where the main file could not be loaded
  • Removed Tracer in favor of Warned<T> and typst::trace function
  • The xz2 dependency used by the self-updater is now statically linked
  • The Dockerfile now has an ENTRYPOINT directive

Contributors