From 737895d769188f6fc154523e67a9102bc24c872e Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 18 Oct 2024 16:31:40 +0200 Subject: Version bump --- Cargo.lock | 36 ++-- Cargo.toml | 28 +-- docs/changelog/0.12.0.md | 402 +++++++++++++++++++++++++++++++++++++++++++ docs/changelog/unreleased.md | 399 ------------------------------------------ docs/changelog/welcome.md | 2 +- docs/src/lib.rs | 2 +- 6 files changed, 436 insertions(+), 433 deletions(-) create mode 100644 docs/changelog/0.12.0.md delete mode 100644 docs/changelog/unreleased.md diff --git a/Cargo.lock b/Cargo.lock index 8458e0d4..5685a9cd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2666,7 +2666,7 @@ checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" [[package]] name = "typst" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "arrayvec", "az", @@ -2734,13 +2734,13 @@ dependencies = [ [[package]] name = "typst-assets" -version = "0.12.0-rc2" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8112b7077e3f045a18a17e6aeafafe9b101bc8d6c8e4c9e5f538cf4cb5ce79b" +checksum = "4fe00da1b24da2c4a7da532fc33d0c3bd43a902ca4c408ee2c36eabe70f2f4ba" [[package]] name = "typst-cli" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "chrono", "clap", @@ -2784,12 +2784,12 @@ dependencies = [ [[package]] name = "typst-dev-assets" -version = "0.11.0" -source = "git+https://github.com/typst/typst-dev-assets?rev=e9f8127#e9f81271547c0d7003770b4fa1e59343e51f7ae8" +version = "0.12.0" +source = "git+https://github.com/typst/typst-dev-assets?tag=v0.12.0#b07d1560143d6883887358d30edb25cb12fcf5b9" [[package]] name = "typst-docs" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "clap", "comemo", @@ -2812,7 +2812,7 @@ dependencies = [ [[package]] name = "typst-fuzz" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "comemo", "libfuzzer-sys", @@ -2824,7 +2824,7 @@ dependencies = [ [[package]] name = "typst-ide" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "comemo", "ecow", @@ -2840,7 +2840,7 @@ dependencies = [ [[package]] name = "typst-kit" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "dirs", "ecow", @@ -2860,7 +2860,7 @@ dependencies = [ [[package]] name = "typst-macros" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "heck", "proc-macro2", @@ -2870,7 +2870,7 @@ dependencies = [ [[package]] name = "typst-pdf" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "arrayvec", "base64", @@ -2896,7 +2896,7 @@ dependencies = [ [[package]] name = "typst-render" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "bytemuck", "comemo", @@ -2914,7 +2914,7 @@ dependencies = [ [[package]] name = "typst-svg" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "base64", "comemo", @@ -2930,7 +2930,7 @@ dependencies = [ [[package]] name = "typst-syntax" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "ecow", "once_cell", @@ -2946,7 +2946,7 @@ dependencies = [ [[package]] name = "typst-tests" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "clap", "comemo", @@ -2970,7 +2970,7 @@ dependencies = [ [[package]] name = "typst-timing" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "parking_lot", "serde", @@ -2980,7 +2980,7 @@ dependencies = [ [[package]] name = "typst-utils" -version = "0.12.0-rc2" +version = "0.12.0" dependencies = [ "once_cell", "portable-atomic", diff --git a/Cargo.toml b/Cargo.toml index 0784dd01..94f84170 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ default-members = ["crates/typst-cli"] resolver = "2" [workspace.package] -version = "0.12.0-rc2" +version = "0.12.0" rust-version = "1.77" # also change in ci.yml authors = ["The Typst Project Developers"] edition = "2021" @@ -16,19 +16,19 @@ keywords = ["typst"] readme = "README.md" [workspace.dependencies] -typst = { path = "crates/typst", version = "0.12.0-rc2" } -typst-cli = { path = "crates/typst-cli", version = "0.12.0-rc2" } -typst-ide = { path = "crates/typst-ide", version = "0.12.0-rc2" } -typst-kit = { path = "crates/typst-kit", version = "0.12.0-rc2" } -typst-macros = { path = "crates/typst-macros", version = "0.12.0-rc2" } -typst-pdf = { path = "crates/typst-pdf", version = "0.12.0-rc2" } -typst-render = { path = "crates/typst-render", version = "0.12.0-rc2" } -typst-svg = { path = "crates/typst-svg", version = "0.12.0-rc2" } -typst-syntax = { path = "crates/typst-syntax", version = "0.12.0-rc2" } -typst-timing = { path = "crates/typst-timing", version = "0.12.0-rc2" } -typst-utils = { path = "crates/typst-utils", version = "0.12.0-rc2" } -typst-assets = "0.12.0-rc2" -typst-dev-assets = { git = "https://github.com/typst/typst-dev-assets", rev = "e9f8127" } +typst = { path = "crates/typst", version = "0.12.0" } +typst-cli = { path = "crates/typst-cli", version = "0.12.0" } +typst-ide = { path = "crates/typst-ide", version = "0.12.0" } +typst-kit = { path = "crates/typst-kit", version = "0.12.0" } +typst-macros = { path = "crates/typst-macros", version = "0.12.0" } +typst-pdf = { path = "crates/typst-pdf", version = "0.12.0" } +typst-render = { path = "crates/typst-render", version = "0.12.0" } +typst-svg = { path = "crates/typst-svg", version = "0.12.0" } +typst-syntax = { path = "crates/typst-syntax", version = "0.12.0" } +typst-timing = { path = "crates/typst-timing", version = "0.12.0" } +typst-utils = { path = "crates/typst-utils", version = "0.12.0" } +typst-assets = "0.12.0" +typst-dev-assets = { git = "https://github.com/typst/typst-dev-assets", tag = "v0.12.0" } arrayvec = "0.7.4" az = "1.2" base64 = "0.22" 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` and `typst::trace` function +- The `xz2` dependency used by the self-updater is now statically linked +- The Dockerfile now has an `ENTRYPOINT` directive + +## Contributors + diff --git a/docs/changelog/unreleased.md b/docs/changelog/unreleased.md deleted file mode 100644 index bea49f04..00000000 --- a/docs/changelog/unreleased.md +++ /dev/null @@ -1,399 +0,0 @@ ---- -title: Unreleased -description: Changes that are not yet released ---- - -# Unreleased changes - -## 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` and `typst::trace` function -- The `xz2` dependency used by the self-updater is now statically linked -- The Dockerfile now has an `ENTRYPOINT` directive diff --git a/docs/changelog/welcome.md b/docs/changelog/welcome.md index 302c3ede..12b6b896 100644 --- a/docs/changelog/welcome.md +++ b/docs/changelog/welcome.md @@ -10,7 +10,7 @@ forward. This section documents all changes to Typst since its initial public release. ## Versions -- [Unreleased]($changelog/unreleased) +- [Typst 0.12.0]($changelog/0.12.0) - [Typst 0.11.1]($changelog/0.11.1) - [Typst 0.11.0]($changelog/0.11.0) - [Typst 0.10.0]($changelog/0.10.0) diff --git a/docs/src/lib.rs b/docs/src/lib.rs index a30ed088..59fc1cbf 100644 --- a/docs/src/lib.rs +++ b/docs/src/lib.rs @@ -183,7 +183,7 @@ fn changelog_pages(resolver: &dyn Resolver) -> PageModel { let mut page = md_page(resolver, resolver.base(), load!("changelog/welcome.md")); let base = format!("{}changelog/", resolver.base()); page.children = vec![ - md_page(resolver, &base, load!("changelog/unreleased.md")), + md_page(resolver, &base, load!("changelog/0.12.0.md")), md_page(resolver, &base, load!("changelog/0.11.1.md")), md_page(resolver, &base, load!("changelog/0.11.0.md")), md_page(resolver, &base, load!("changelog/0.10.0.md")), -- cgit v1.2.3