summaryrefslogtreecommitdiff
path: root/docs/changelog/0.12.0.md
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2024-10-18 16:31:40 +0200
committerLaurenz <laurmaedje@gmail.com>2024-10-18 16:36:55 +0200
commit737895d769188f6fc154523e67a9102bc24c872e (patch)
tree842daef4f6ee3e94ec23fc0183cf0ae17a6ad7ae /docs/changelog/0.12.0.md
parent0ba1128e5a6d8bcae09fde921ad429b1b0589737 (diff)
Version bumpv0.12.00.12
Diffstat (limited to 'docs/changelog/0.12.0.md')
-rw-r--r--docs/changelog/0.12.0.md402
1 files changed, 402 insertions, 0 deletions
diff --git a/docs/changelog/0.12.0.md b/docs/changelog/0.12.0.md
new file mode 100644
index 00000000..835e2b1c
--- /dev/null
+++ b/docs/changelog/0.12.0.md
@@ -0,0 +1,402 @@
+---
+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]($place.scope) and
+ [figures]($figure.scope)
+- Added support for automatic [line numbering]($par.line) (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](https://github.com/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]($guides/page-setup-guide/#columns)).
+- Added support for automatic [line numbering]($par.line) (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]($fraction)
+- 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]($h.weak) 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]($pad) 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]($raw.lang)
+- 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]($text.stylistic-set) 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]($smartquote) 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`]($math.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`]($math.mat.delim), [`vec.delim`]($math.vec.delim), and
+ [`cases.delim`]($math.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`]($math.vec.align) and [`mat.align`]($math.mat.align)
+ parameters
+- Added [`underparen`]($math.underparen), [`overparen`]($math.overparen),
+ [`undershell`]($math.undershell), and [`overshell`]($math.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`]($math.lr.size) not affecting characters enclosed in
+ [`mid`]($math.mid) in some cases
+- Fixed resolving of em units in sub- and superscripts
+- Fixed bounding box of inline equations when a [text edge]($text.top-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()`]($here) 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]($list.spacing),
+ [enumerations]($enum.spacing), and [term lists]($terms.spacing) 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`]($heading.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`]($path.fill-rule) and
+ [`polygon`]($polygon.fill-rule) functions
+- Fixed color mixing and gradients for [Luma colors]($color.luma)
+- 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`]($math.floor) and
+ [`ceil`]($math.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]($box) and [blocks]($block)
+- 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
+<contributors from="v0.11.0" to="v0.12.0" />