diff options
| author | Laurenz <laurmaedje@gmail.com> | 2024-10-18 16:11:49 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2024-10-18 16:21:28 +0200 |
| commit | 0ba1128e5a6d8bcae09fde921ad429b1b0589737 (patch) | |
| tree | f7c86a522521609b08a09fe88427ea5c879ce513 | |
| parent | 242a16e77a867dabc538a767fcd46a38b8b23a2e (diff) | |
Split changelog (#5237)
| -rw-r--r-- | docs/changelog.md | 2013 | ||||
| -rw-r--r-- | docs/changelog/0.1.0.md | 73 | ||||
| -rw-r--r-- | docs/changelog/0.10.0.md | 130 | ||||
| -rw-r--r-- | docs/changelog/0.11.0.md | 270 | ||||
| -rw-r--r-- | docs/changelog/0.11.1.md | 62 | ||||
| -rw-r--r-- | docs/changelog/0.2.0.md | 47 | ||||
| -rw-r--r-- | docs/changelog/0.3.0.md | 77 | ||||
| -rw-r--r-- | docs/changelog/0.4.0.md | 106 | ||||
| -rw-r--r-- | docs/changelog/0.5.0.md | 68 | ||||
| -rw-r--r-- | docs/changelog/0.6.0.md | 66 | ||||
| -rw-r--r-- | docs/changelog/0.7.0.md | 142 | ||||
| -rw-r--r-- | docs/changelog/0.8.0.md | 124 | ||||
| -rw-r--r-- | docs/changelog/0.9.0.md | 189 | ||||
| -rw-r--r-- | docs/changelog/earlier.md | 309 | ||||
| -rw-r--r-- | docs/changelog/unreleased.md | 399 | ||||
| -rw-r--r-- | docs/changelog/welcome.md | 26 | ||||
| -rw-r--r-- | docs/src/html.rs | 41 | ||||
| -rw-r--r-- | docs/src/lib.rs | 49 |
18 files changed, 2140 insertions, 2051 deletions
diff --git a/docs/changelog.md b/docs/changelog.md deleted file mode 100644 index 92c98cfe..00000000 --- a/docs/changelog.md +++ /dev/null @@ -1,2013 +0,0 @@ ---- -description: | - Learn what has changed in the latest Typst releases and move your documents - forward. ---- - -# Changelog - -## Version 0.12.0, Release Candidate 2 (October 15, 2024) { #v0.12.0-rc2 } -### 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 - -### All changes { #_ } -- 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 & 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 from="v0.11.0" to="v0.12.0-rc2" /> - -## Version 0.11.1 (May 17, 2024) { #v0.11.1 } -- Security - - Fixed a vulnerability where image files at known paths could be embedded - into the PDF even if they were outside of the project directory - -- Bibliography - - Fixed et-al handling in subsequent citations - - Fixed suppression of title for citations and bibliography references with no - author - - Fixed handling of initials in citation styles without a delimiter - - Fixed bug with citations in footnotes - -- Text and Layout - - Fixed interaction of [`first-line-indent`]($par.first-line-indent) and - [`outline`] - - Fixed compression of CJK punctuation marks at line start and end - - Fixed handling of [rectangles]($rect) with negative dimensions - - Fixed layout of [`path`] in explicitly sized container - - Fixed broken [`raw`] text in right-to-left paragraphs - - Fixed tab rendering in `raw` text with language `typ` or `typc` - - Fixed highlighting of multi-line `raw` text enclosed by single backticks - - Fixed indentation of overflowing lines in `raw` blocks - - Fixed extra space when `raw` text ends with a backtick - -- Math - - Fixed broken [equations]($math.equation) in right-to-left paragraphs - - Fixed missing [blackboard bold]($math.bb) letters - - Fixed error on empty arguments in 2D math argument list - - Fixed stretching via [`mid`]($math.mid) for various characters - - Fixed that alignment points in equations were affected by `{set align(..)}` - -- Export - - Fixed [smart quotes]($smartquote) in PDF outline - - Fixed [patterns]($pattern) with spacing in PDF - - Fixed wrong PDF page labels when [page numbering]($page.numbering) was - disabled after being previously enabled - -- Scripting - - Fixed overflow for large numbers in external data files (by converting to - floats instead) - - Fixed [`{str.trim(regex, at: end)}`]($str.trim) when the whole string is - matched - -- Miscellaneous - - Fixed deformed strokes for specific shapes and thicknesses - - Fixed newline handling in code mode: There can now be comments within - chained method calls and between an `if` branch and the `else` keyword - - Fixed inefficiency with incremental reparsing - - Fixed autocompletions for relative file imports - - Fixed crash in autocompletion handler - - Fixed a bug where the path and entrypoint printed by `typst init` were not - properly escaped - - Fixed various documentation errors - -<contributors from="v0.11.0" to="v0.11.1" /> - -## Version 0.11.0 (March 15, 2024) { #v0.11.0 } -- Tables (thanks to [@PgBiel](https://github.com/PgBiel)) - - Tables are now _much_ more flexible, read the new - [table guide]($guides/table-guide) to get started - - Added [`table.cell`] element for per-cell configuration - - Cells can now span multiple [columns]($table.cell.colspan) or - [rows]($table.cell.rowspan) - - The [stroke]($table.cell.stroke) of individual cells can now be customized - - The [`align`]($table.align) and [`inset`]($table.inset) arguments of the - table function now also take `{(x, y) => ..}` functions - - Added [`table.hline`] and [`table.vline`] for convenient line customization - - Added [`table.header`] element for table headers that repeat on every page - - Added [`table.footer`] element for table footers that repeat on every page - - All the new table functionality is also available for [grids]($grid) - - Fixed gutter-related bugs - -- Templates - - You can now use template packages to get started with new projects. Click - _Start from template_ on the web app's dashboard and choose your preferred - template or run the `typst init <template>` command in the CLI. You can - [browse the available templates here]($universe/search/?kind=templates). - - Switching templates after the fact has become easier. You can just import a - styling function from a different template package. - - Package authors can now submit their own templates to the - [package repository](https://github.com/typst/packages). Share a template - for a paper, your institution, or an original work to help the community get - a head start on their projects. - - Templates and packages are now organized by category and discipline. Filter - packages by either taxonomy in the _Start from template_ wizard. If you are - a package author, take a look at the new documentation for - [categories](https://github.com/typst/packages/blob/main/CATEGORIES.md) and - [disciplines](https://github.com/typst/packages/blob/main/DISCIPLINES.md). - -- Context - - Added _context expressions:_ Read the chapter on [context] to get started - - With context, you can access settable properties, e.g. `{context text.lang}` - to access the language set via `{set text(lang: "..")}` - - The following existing functions have been made contextual: [`query`], - [`locate`], [`measure`], [`counter.display`], [`counter.at`], - [`counter.final`], [`state.at`], and [`state.final`] - - Added contextual methods [`counter.get`] and [`state.get`] to retrieve the - value of a counter or state in the current context - - Added contextual function [`here`] to retrieve the [location] of the current - context - - The [`locate`] function now returns the location of a selector's unique - match. Its old behavior has been replaced by context expressions and only - remains temporarily available for compatibility. - - The [`counter.at`] and [`state.at`] methods are now more flexible: They - directly accept any kind of [locatable]($location/#locatable) selector with - a unique match (e.g. a label) instead of just locations - - When context is available, [`counter.display`] now directly returns the - result of applying the numbering instead of yielding opaque content. It - should not be used anymore without context. (Deprecation planned) - - The [`state.display`] function should not be used anymore, use [`state.get`] - instead (Deprecation planned) - - The `location` argument of [`query`], [`counter.final`], and - [`state.final`] should not be used anymore (Deprecation planned) - - The [`styles`]($measure.styles) argument of the `measure` function should - not be used anymore (Deprecation planned) - - The [`style`] function should not be used anymore, use context instead - (Deprecation planned) - - The correct context is now also provided in various other places where it is - available, e.g. in show rules, layout callbacks, and numbering functions - in the outline - -- Styling - - Fixed priority of multiple [show-set rules]($styling/#show-rules): They now - apply in the same order as normal set rules would - - Show-set rules on the same element - (e.g. `{show heading.where(level: 1): set heading(numbering: "1.")}`) now - work properly - - Setting properties on an element within a transformational show rule (e.g. - `{show heading: it => { set heading(..); it }}`) is **not** supported - anymore (previously it also only worked sometimes); use show-set rules - instead (**Breaking change**) - - Text show rules that match their own output now work properly - (e.g. `` {show "cmd": `cmd`} ``) - - The elements passed to show rules and returned by queries now contain all - fields of their respective element functions rather than just specific ones - - All settable properties can now be used in [where]($function.where) - selectors - - [And]($selector.and) and [or]($selector.or) selectors can now be used with - show rules - - Errors within show rules and context expressions are now ignored in all but - the last introspection iteration, in line with the behavior of the old - [`locate`] - - Fixed a bug where document set rules were allowed after content - -- Layout - - Added `reflow` argument to [`rotate`]($rotate) and [`scale`]($scale) which - lets them affect the layout - - Fixed a bug where [floating placement]($place.float) or - [floating figures]($figure.placement) could end up out of order - - Fixed overlap of text and figure for full-page floating figures - - Fixed various cases where the [`hide`] function didn't hide its contents - properly - - Fixed usage of [`h`] and [`v`] in [stacks]($stack) - - Invisible content like a counter update will no longer force a visible - block for just itself - - Fixed a bug with horizontal spacing followed by invisible content (like a - counter update) directly at the start of a paragraph - -- Text - - Added [`stroke`]($text.stroke) property for text - - Added basic i18n for Serbian and Catalan - - Added support for contemporary Japanese [numbering] method - - Added patches for various wrong metadata in specific fonts - - The [text direction]($text.dir) can now be overridden within a paragraph - - Fixed Danish [smart quotes]($smartquote) - - Fixed font fallback next to a line break - - Fixed width adjustment of JIS-style Japanese punctuation - - Fixed Finnish translation of "Listing" - - Fixed Z-ordering of multiple text decorations (underlines, etc.) - - Fixed a bug due to which text [features]($text.features) could not be - overridden in consecutive set rules - -- Model - - Added [`depth`]($heading.depth) and [`offset`]($heading.offset) arguments to - heading to increase or decrease the heading level for a bunch of content; - the heading syntax now sets `depth` rather than `level` - (**Breaking change**) - - List [markers]($list.marker) now cycle by default - - The [`quote`] function now more robustly selects the correct quotes based on - language and nesting - - Fixed indent bugs related to the default show rule of [terms] - -- Math - - Inline equations now automatically linebreak at appropriate places - - Added [`number-align`]($math.equation.number-align) argument to equations - - Added support for adjusting the [`size`]($math.accent.size) of accents - relative to their base - - Improved positioning of accents - - [Primes]($math.primes) are now always attached as [scripts]($math.scripts) - by default - - Exposed [`math.primes`] element which backs the `[$f'$]` syntax in math - - Math mode is not affected by [`strong`] and [`emph`] anymore - - Fixed [`attach`]($math.attach) under [fractions]($math.frac) - - Fixed that [`math.class`] did not affect smart limit placement - - Fixed weak spacing in [`lr`]($math.lr) groups - - Fixed layout of large operators for Cambria Math font - - Fixed math styling of Hebrew symbol codepoints - -- Symbols - - Added `gradient` as an alias for `nabla` - - Added `partial` as an alias for `diff`, `diff` will be deprecated in the - future - - Added `colon.double`, `gt.approx`, `gt.napprox`, `lt.approx`, and - `lt.napprox` - - Added `arrow.r.tilde` and `arrow.l.tilde` - - Added `tilde.dot` - - Added `forces` and `forces.not` - - Added `space.nobreak.narrow` - - Added `lrm` (Left-to-Right Mark) and `rlm` (Right-to-Left Mark) - - Fixed `star.stroked` symbol (which previously had the wrong codepoint) - -- Scripting - - Arrays can now be compared lexicographically - - Added contextual method [`to-absolute`]($length.to-absolute) to lengths - - Added [`calc.root`]($calc.root) - - Added [`int.signum`] and [`float.signum`] methods - - Added [`float.is-nan`] and [`float.is-infinite`] methods - - Added [`int.bit-not`], [`int.bit-and`], [`int.bit-or`], [`int.bit-xor`], - [`int.bit-lshift`], and [`int.bit-rshift`] methods - - Added [`array.chunks`] method - - A module can now be converted to a dictionary with the - [dictionary constructor]($dictionary/#constructor) to access its contents - dynamically - - Added [`row-type`]($csv.row-type) argument to `csv` function to configure - how rows will be represented - - [XML parsing]($xml) now allows DTDs (document type definitions) - - Improved formatting of negative numbers with [`str`]($str) and - [`repr`]($repr) - - For loops can now iterate over [bytes] - - Fixed a bug with pattern matching in for loops - - Fixed a bug with labels not being part of [`{.fields()}`]($content.fields) - dictionaries - - Fixed a bug where unnamed argument sinks wouldn't capture excess arguments - - Fixed typo in `repr` output of strokes - -- Syntax - - Added support for nested [destructuring patterns]($scripting/#bindings) - - Special spaces (like thin or non-breaking spaces) are now parsed literally - instead of being collapsed into normal spaces (**Breaking change**) - - Korean text can now use emphasis syntax without adding spaces - (**Breaking change**) - - The token [`context`] is now a keyword and cannot be used as an identifier - anymore (**Breaking change**) - - Nested line comments aren't allowed anymore in block comments - (**Breaking change**) - - Fixed a bug where `x.)` would be treated as a field access - - Text elements can now span across curly braces in markup - - Fixed silently wrong parsing when function name is parenthesized - - Fixed various bugs with parsing of destructuring patterns, arrays, and - dictionaries - -- Tooling & Diagnostics - - Click-to-jump now works properly within [`raw`] text - - Added suggestion for accessing a field if a method doesn't exist - - Improved hint for calling a function stored in a dictionary - - Improved errors for mutable accessor functions on arrays and dictionaries - - Fixed error message when calling constructor of type that doesn't have one - - Fixed confusing error message with nested dictionaries for strokes on - different sides - - Fixed autocompletion for multiple packages with the same name from different - namespaces - -- Visualization - - The [`image`] function doesn't upscale images beyond their natural size - anymore - - The [`image`] function now respects rotation stored in EXIF metadata - - Added support for SVG filters - - Added alpha component to [`luma`]($color.luma) colors - - Added [`color.transparentize`] and [`color.opacify`] methods - - Improved [`color.negate`] function - - Added [`stroke`]($highlight.stroke) and [`radius`]($highlight.radius) - arguments to `highlight` function - - Changed default [`highlight`] color to be transparent - - CMYK to RGB conversion is now color-managed - - Fixed crash with gradients in Oklch color space - - Fixed color-mixing for hue-based spaces - - Fixed bugs with color conversion - - SVG sizes are not rounded anymore, preventing slightly wrong aspect ratios - - Fixed a few other SVG-related bugs - - [`color.components`] doesn't round anything anymore - -- Export - - PDFs now contain named destinations for headings derived from their labels - - The internal PDF structure was changed to make it easier for external tools - to extract or modify individual pages, avoiding a bug with Typst PDFs in - Apple Preview - - PDFs produced by Typst should now be byte-by-byte reproducible when - `{set document(date: none)}` is set - - Added missing flag to PDF annotation - - Fixed multiple bugs with gradients in PDF export - - Fixed a bug with patterns in PDF export - - Fixed a bug with embedding of grayscale images in PDF export - - Fixed a bug with To-Unicode mapping of CFF fonts in PDF export - - Fixed a bug with the generation of the PDF outline - - Fixed a sorting bug in PDF export leading to non-reproducible output - - Fixed a bug with transparent text in PNG export - - Exported SVG files now include units in their top-level `width` and `height` - -- Command line interface - - Added support for passing [inputs]($category/foundations/sys) via a CLI flag - - When passing the filename `-`, Typst will now read input from stdin - - Now uses the system-native TLS implementation for network fetching which - should be generally more robust - - Watch mode will now properly detect when a previously missing file is - created - - Added `--color` flag to configure whether to print colored output - - Fixed user agent with which packages are downloaded - - Updated bundled fonts to the newest versions - -- Development - - Added `--vendor-openssl` to CLI to configure whether to link OpenSSL - statically instead of dynamically (not applicable to Windows and Apple - platforms) - - Removed old tracing (and its verbosity) flag from the CLI - - Added new `--timings` flag which supersedes the old flamegraph profiling in - the CLI - - Added minimal CLI to `typst-docs` crate for extracting the language and - standard library documentation as JSON - - The `typst_pdf::export` function's `ident` argument switched from `Option` - to `Smart`. It should only be set to `Smart::Custom` if you can provide - a stable identifier (like the web app can). The CLI sets `Smart::Auto`. - -<contributors from="v0.10.0" to="v0.11.0" /> - -## Version 0.10.0 (December 4, 2023) { #v0.10.0 } -- Bibliography management - - Added support for citation collapsing (e.g. `[[1]-[3]]` instead of - `[[1], [2], [3]]`) if requested by a CSL style - - Fixed bug where an additional space would appear after a group of citations - - Fixed link show rules for links in the bibliography - - Fixed show-set rules on citations - - Fixed bibliography-related crashes that happened on some systems - - Corrected name of the GB/T 7714 family of styles from 7114 to 7714 - - Fixed missing title in some bibliography styles - - Fixed printing of volumes in some styles - - Fixed delimiter order for contributors in some styles (e.g. APA) - - Fixed behavior of alphanumeric style - - Fixed multiple bugs with GB/T 7714 style - - Fixed escaping in Hayagriva values - - Fixed crashes with empty dates in Hayagriva files - - Fixed bug with spacing around math blocks - - Fixed title case formatting after verbatim text and apostrophes - - Page ranges in `.bib` files can now be arbitrary strings - - Multi-line values in `.bib` files are now parsed correctly - - Entry keys in `.bib` files now allow more characters - - Fixed error message for empty dates in `.bib` files - - Added support for years of lengths other than 4 without leading zeros in - `.bib` files - - More LaTeX commands (e.g. for quotes) are now respected in `.bib` files - -- Visualization - - Added support for [patterns]($pattern) as fills and strokes - - The `alpha` parameter of the [`components`]($color.components) function on - colors is now a named parameter (**Breaking change**) - - Added support for the [Oklch]($color.oklch) color space - - Improved conversions between colors in different color spaces - - Removed restrictions on [Oklab]($color.oklab) chroma component - - Fixed [clipping]($block.clip) on blocks and boxes without a stroke - - Fixed bug with [gradients]($gradient) on math - - Fixed bug with gradient rotation on text - - Fixed bug with gradient colors in PDF - - Fixed relative base of Oklab chroma ratios - - Fixed Oklab color negation - -- Text and Layout - - CJK text can now be emphasized with the `*` and `_` syntax even when there - are no spaces - - Added basic i18n for Greek and Estonian - - Improved default [figure caption separator]($figure.caption.separator) for - Chinese, French, and Russian - - Changed default [figure supplement]($figure.supplement) for Russian to - short form - - Fixed [CJK-Latin-spacing]($text.cjk-latin-spacing) before line breaks and in - [`locate`] calls - - Fixed line breaking at the end of links - -- Math - - Added [`mid`]($math.mid) function for scaling a delimiter up to the height - of the surrounding [`lr`]($math.lr) group - - The [`op`]($math.op) function can now take any content, not just strings - - Improved documentation for [math alignment]($category/math/#alignment) - - Fixed swallowing of trailing comma when a symbol is used in a function-like - way (e.g. `pi(a,b,)`) - -- Scripting - - Any non-identifier dictionary key is now interpreted as an expression: For - instance, `{((key): value)}` will create a dictionary with a dynamic key - - The [`stroke`] type now has a constructor that converts a value to a stroke - or creates one from its parts - - Added constructor for [`arguments`] type - - Added [`calc.div-euclid`]($calc.div-euclid) and - [`calc.rem-euclid`]($calc.rem-euclid) functions - - Fixed equality of [`arguments`] - - Fixed [`repr`]of [`cmyk`]($color.cmyk) colors - - Fixed crashes with provided elements like figure captions, outline entries, - and footnote entries - -- Tooling and Diagnostics - - Show rules that match on their own output now produce an appropriate error - message instead of a crash (this is a first step, in the future they will - just work) - - Too highly or infinitely nested layouts now produce error messages instead - of crashes - - Added hints for invalid identifiers - - Added hint when trying to use a manually constructed footnote or outline - entry - - Added missing details to autocompletions for types - - Improved error message when passing a named argument where a positional one - is expected - - Jump from click now works on raw blocks - -- Export - - PDF compilation output is now again fully byte-by-byte reproducible if the - document's [`date`]($document.date) is set manually - - Fixed color export in SVG - - Fixed PDF metadata encoding of multiple [authors]($document.author) - -- Command line interface - - Fixed a major bug where `typst watch` would confuse files and fail to pick - up updates - - Fetching of the release metadata in `typst update` now respects proxies - - Fixed bug with `--open` flag on Windows when the path contains a space - - The `TYPST_FONT_PATHS` environment variable can now contain multiple paths - (separated by `;` on Windows and `:` elsewhere) - - Updated embedded New Computer Modern fonts to version 4.7 - - The watching process doesn't stop anymore when the main file contains - invalid UTF-8 - -- Miscellaneous Improvements - - Parallelized image encoding in PDF export - - Improved the internal representation of content for improved performance - - Optimized introspection (query, counter, etc.) performance - - The [document title]($document.title) can now be arbitrary content instead - of just a string - - The [`number-align`]($enum.number-align) parameter on numbered lists now - also accepts vertical alignments - - Fixed selectors on [quote] elements - - Fixed parsing of `[#return]` expression in markup - - Fixed bug where inline equations were displayed in equation outlines - - Fixed potential CRLF issue in [`raw`] blocks - - Fixed a bug where Chinese numbering couldn't exceed the number 255 - -- Development - - Merged `typst` and `typst-library` and extracted `typst-pdf`, `typst-svg`, - and `typst-render` into separate crates - - The Nix flake now includes the git revision when running `typst --version` - -<contributors from="v0.9.0" to="v0.10.0" /> - -## Version 0.9.0 (October 31, 2023) { #v0.9.0 } -- Bibliography management - - New bibliography engine based on [CSL](https://citationstyles.org/) - (Citation Style Language). Ships with about 100 commonly used citation - styles and can load custom `.csl` files. - - Added new [`form`]($cite.form) argument to the `cite` function to produce - different forms of citations (e.g. for producing a citation suitable for - inclusion in prose) - - The [`cite`] function now takes only a single label/key instead of allowing - multiple. Adjacent citations are merged and formatted according to the - citation style's rules automatically. This works both with the reference - syntax and explicit calls to the `cite` function. (**Breaking change**) - - The `cite` function now takes a [label] instead of a string - (**Breaking change**) - - Added [`full`]($bibliography.full) argument to bibliography function to - print the full bibliography even if not all works were cited - - Bibliography entries can now contain Typst equations (wrapped in `[$..$]` - just like in markup), this works both for `.yml` and `.bib` bibliographies - - The hayagriva YAML format was improved. See its - [changelog](https://github.com/typst/hayagriva/blob/main/CHANGELOG.md) for - more details. (**Breaking change**) - - A few bugs with `.bib` file parsing were fixed - - Removed `brackets` argument of `cite` function in favor of `form` - -- Visualization - - Gradients and colors (thanks to [@Dherse](https://github.com/Dherse)) - - Added support for [gradients]($gradient) on shapes and text - - Supports linear, radial, and conic gradients - - Added support for defining colors in more color spaces, including - [Oklab]($color.oklab), [Linear RGB(A)]($color.linear-rgb), - [HSL]($color.hsl), and [HSV]($color.hsv) - - Added [`saturate`]($color.saturate), [`desaturate`]($color.desaturate), - and [`rotate`]($color.rotate) functions on colors - - Added [`color.map`]($color/#predefined-color-maps) module with predefined - color maps that can be used with gradients - - Rename `kind` function on colors to [`space`]($color.space) - - Removed `to-rgba`, `to-cmyk`, and `to-luma` functions in favor of a new - [`components`]($color.components) function - - Improved rendering of [rectangles]($rect) with corner radius and varying - stroke widths - - Added support for properly clipping [boxes]($box.clip) and - [blocks]($block.clip) with a border radius - - Added `background` parameter to [`overline`], [`underline`], and [`strike`] - functions - - Fixed inaccurate color embedding in PDFs - - Fixed ICC profile handling for images embedded in PDFs - -- Text and Layout - - Added support for automatically adding proper - [spacing]($text.cjk-latin-spacing) between CJK and Latin text (enabled by - default) - - Added support for automatic adjustment of more CJK punctuation - - Added [`quote`] element for inserting inline and block quotes with optional - attributions - - Added [`raw.line`]($raw.line) element for customizing the display of - individual lines of raw text, e.g. to add line numbers while keeping proper - syntax highlighting - - Added support for per-side [inset]($table.inset) customization to table - function - - Added Hungarian and Romanian translations - - Added support for Czech hyphenation - - Added support for setting custom [smart quotes]($smartquote) - - The default [figure separator]($figure.caption.separator) now reacts to the - currently set language and region - - Improved line breaking of links / URLs (especially helpful for - bibliographies with many URLs) - - Improved handling of consecutive hyphens in justification algorithm - - Fixed interaction of justification and hanging indent - - Fixed a bug with line breaking of short lines without spaces when - justification is enabled - - Fixed font fallback for hyphen generated by hyphenation - - Fixed handling of word joiner and other no-break characters during - hyphenation - - Fixed crash when hyphenating after an empty line - - Fixed line breaking of composite emoji like 🏳️🌈 - - Fixed missing text in some SVGs - - Fixed font fallback in SVGs - - Fixed behavior of [`to`]($pagebreak.to) argument on `pagebreak` function - - Fixed `{set align(..)}` for equations - - Fixed spacing around [placed]($place) elements - - Fixed coalescing of [`above`]($block.above) and [`below`]($block.below) - spacing if given in em units and the font sizes differ - - Fixed handling of `extent` parameter of [`underline`], [`overline`], and - [`strike`] functions - - Fixed crash for [floating placed elements]($place.float) with no specified - vertical alignment - - Partially fixed a bug with citations in footnotes - -- Math - - Added `gap` argument for [`vec`]($math.vec.gap), [`mat`]($math.mat.gap), and - [`cases`]($math.cases.gap) function - - Added `size` argument for [`abs`]($math.abs), [`norm`]($math.norm), - [`floor`]($math.floor), [`ceil`]($math.ceil), and [`round`]($math.round) - functions - - Added [`reverse`]($math.cases.reverse) parameter to cases function - - Added support for multinomial coefficients to [`binom`]($math.binom) - function - - Removed `rotation` argument on [`cancel`]($math.cancel) function in favor of - a new and more flexible `angle` argument (**Breaking change**) - - Added `wide` constant, which inserts twice the spacing of `quad` - - Added `csch` and `sech` [operators]($math.op) - - `↼`, `⇀`, `↔`, and `⟷` can now be used as [accents]($math.accent) - - Added `integral.dash`, `integral.dash.double`, and `integral.slash` - [symbols]($category/symbols/sym) - - Added support for specifying negative indices for - [augmentation]($math.mat.augment) lines to position the line from the back - - Fixed default color of matrix [augmentation]($math.mat.augment) lines - - Fixed attachment of primes to inline expressions - - Math content now respects the text [baseline]($text.baseline) setting - -- Performance - - Fixed a bug related to show rules in templates which would effectively - disable incremental compilation in affected documents - - Micro-optimized code in several hot paths, which brings substantial - performance gains, in particular in incremental compilations - - Improved incremental parsing, which affects the whole incremental - compilation pipeline - - Added support for incremental parsing in the CLI - - Added support for incremental SVG encoding during PDF export, which greatly - improves export performance for documents with many SVG - -- Tooling and Diagnostics - - Improved autocompletion for variables that are in-scope - - Added autocompletion for package imports - - Added autocompletion for [labels]($label) - - Added tooltip that shows which variables a function captures (when hovering - over the equals sign or arrow of the function) - - Diagnostics are now deduplicated - - Improved diagnostics when trying to apply unary `+` or `-` to types that - only support binary `+` and `-` - - Error messages now state which label or citation key isn't present in the - document or its bibliography - - Fixed a bug where function argument parsing errors were shadowed by - function execution errors (e.g. when trying to call - [`array.sorted`]($array.sorted) and passing the key function as a positional - argument instead of a named one). - -- Export - - Added support for configuring the document's creation - [`date`]($document.date). If the `date` is set to `{auto}` (the default), - the PDF's creation date will be set to the current date and time. - - Added support for configuring document [`keywords`]($document.keywords) - - Generated PDFs now contain PDF document IDs - - The PDF creator tool metadata now includes the Typst version - -- Web app - - Added version picker to pin a project to an older compiler version - (with support for Typst 0.6.0+) - - Fixed desyncs between editor and compiler and improved overall stability - - The app now continues to highlight the document when typing while the - document is being compiled - -- Command line interface - - Added support for discovering fonts through fontconfig - - Now clears the screen instead of resetting the terminal - - Now automatically picks correct file extension for selected output format - - Now only regenerates images for changed pages when using `typst watch` with - PNG or SVG export - -- Miscellaneous Improvements - - Added [`version`] type and `sys.version` constant specifying the current - compiler version. Can be used to gracefully support multiple versions. - - The U+2212 MINUS SIGN is now used when displaying a numeric value, in the - [`repr`] of any numeric value and to replace a normal hyphen in text mode - when before a digit. This improves, in particular, how negative integer - values are displayed in math mode. - - Added support for specifying a default value instead of failing for - `remove` function in [array]($array.remove) and - [dictionary]($dictionary.remove) - - Simplified page setup guide examples - - Switched the documentation from using the word "hashtag" to the word "hash" - where appropriate - - Added support for [`array.zip`]($array.zip) without any further arguments - - Fixed crash when a plugin tried to read out of bounds memory - - Fixed crashes when handling infinite [lengths]($length) - - Fixed introspection (mostly bibliography) bugs due to weak page break close - to the end of the document - -- Development - - Extracted `typst::ide` into separate `typst_ide` crate - - Removed a few remaining `'static` bounds on `&dyn World` - - Removed unnecessary dependency, which reduces the binary size - - Fixed compilation of `typst` by itself (without `typst-library`) - - Fixed warnings with Nix flake when using `lib.getExe` - -<contributors from="v0.8.0" to="v0.9.0" /> - -## Version 0.8.0 (September 13, 2023) { #v0.8.0 } -- Scripting - - Plugins (thanks to [@astrale-sharp](https://github.com/astrale-sharp) and - [@arnaudgolfouse](https://github.com/arnaudgolfouse)) - - Typst can now load [plugins]($plugin) that are compiled to WebAssembly - - Anything that can be compiled to WebAssembly can thus be loaded as a - plugin - - These plugins are fully encapsulated (no access to file system or network) - - Plugins can be shipped as part of [packages]($scripting/#packages) - - Plugins work just the same in the web app - - Types are now first-class values (**Breaking change**) - - A [type] is now itself a value - - Some types can be called like functions (those that have a constructor), - e.g. [`int`] and [`str`] - - Type checks are now of the form `{type(10) == int}` instead of the old - `{type(10) == "integer"}`. [Compatibility]($type/#compatibility) with the - old way will remain for a while to give package authors time to upgrade, - but it will be removed at some point. - - Methods are now syntax sugar for calling a function scoped to a type, - meaning that `{"hello".len()}` is equivalent to `{str.len("hello")}` - - Added support for [`import`]($scripting/#modules) renaming with `as` - - Added a [`duration`] type - - Added support for [CBOR]($cbor) encoding and decoding - - Added encoding and decoding functions from and to bytes for data formats: - [`json.decode`]($json.decode), [`json.encode`]($json.encode), and similar - functions for other formats - - Added [`array.intersperse`]($array.intersperse) function - - Added [`str.rev`]($str.rev) function - - Added `calc.tau` constant - - Made [bytes] joinable and addable - - Made [`array.zip`]($array.zip) function variadic - - Fixed bug with [`eval`] when the `mode` was set to `{"math"}` - - Fixed bug with [`ends-with`]($str.ends-with) function on strings - - Fixed bug with destructuring in combination with break, continue, and return - - Fixed argument types of [hyperbolic functions]($calc.cosh), they don't allow - angles anymore (**Breaking change**) - - Renamed some color methods: `rgba` becomes `to-rgba`, `cmyk` becomes - `to-cmyk`, and `luma` becomes `to-luma` (**Breaking change**) - -- Export - - Added SVG export - (thanks to [@Enter-tainer](https://github.com/Enter-tainer)) - - Fixed bugs with PDF font embedding - - Added support for page labels that reflect the - [page numbering]($page.numbering) style in the PDF - -- Text and Layout - - Added [`highlight`] function for highlighting text with a - background color - - Added [`polygon.regular`]($polygon.regular) function for drawing a regular - polygon - - Added support for tabs in [`raw`] elements alongside - [`tab-width`]($raw.tab-size) parameter - - The layout engine now tries to prevent "runts" (final lines consisting of - just a single word) - - Added Finnish translations - - Added hyphenation support for Polish - - Improved handling of consecutive smart quotes of different kinds - - Fixed vertical alignments for [`number-align`]($page.number-align) argument - on page function (**Breaking change**) - - Fixed weak pagebreaks after counter updates - - Fixed missing text in SVG when the text font is set to "New Computer Modern" - - Fixed translations for Chinese - - Fixed crash for empty text in show rule - - Fixed leading spaces when there's a linebreak after a number and a comma - - Fixed placement of floating elements in columns and other containers - - Fixed sizing of block containing just a single box - -- Math - - Added support for [augmented matrices]($math.mat.augment) - - Removed support for automatic matching of fences like `|` and `||` as - there were too many false positives. You can use functions like - [`abs`]($math.abs) or [`norm`]($math.norm) or an explicit [`lr`]($math.lr) - call instead. (**Breaking change**) - - Fixed spacing after number with decimal point in math - - Fixed bug with primes in subscript - - Fixed weak spacing - - Fixed crash when text within math contains a newline - -- Tooling and Diagnostics - - Added hints when trying to call a function stored in a dictionary without - extra parentheses - - Fixed hint when referencing an equation without numbering - - Added more details to some diagnostics (e.g. when SVG decoding fails) - -- Command line interface - - Added `typst update` command for self-updating the CLI - (thanks to [@jimvdl](https://github.com/jimvdl)) - - Added download progress indicator for packages and updates - - Added `--format` argument to explicitly specify the output format - - The CLI now respects proxy configuration through environment variables and - has a new `--cert` option for setting a custom CA certificate - - Fixed crash when field wasn't present and `--one` is passed to `typst query` - -- Miscellaneous Improvements - - Added [page setup guide]($guides/page-setup-guide) - - Added [`figure.caption`]($figure.caption) function that can be used for - simpler figure customization (**Breaking change** because `it.caption` now - renders the full caption with supplement in figure show rules and manual - outlines) - - Moved `caption-pos` argument to `figure.caption` function and renamed it to - `position` (**Breaking change**) - - Added [`separator`]($figure.caption.separator) argument to `figure.caption` - function - - Added support for combination of and/or and before/after - [selectors]($selector) - - Packages can now specify a - [minimum compiler version](https://github.com/typst/packages#package-format) - they require to work - - Fixed parser bug where method calls could be moved onto their own line for - `[#let]` expressions in markup (**Breaking change**) - - Fixed bugs in sentence and title case conversion for bibliographies - - Fixed supplements for alphanumeric and author-title bibliography styles - - Fixed off-by-one error in APA bibliography style - -- Development - - Made `Span` and `FileId` more type-safe so that all error conditions must be - handled by `World` implementors - -<contributors from="v0.7.0" to="v0.8.0" /> - -## Version 0.7.0 (August 7, 2023) { #v0.7.0 } -- Text and Layout - - Added support for floating figures through the - [`placement`]($figure.placement) argument on the figure function - - Added support for arbitrary floating content through the - [`float`]($place.float) argument on the place function - - Added support for loading `.sublime-syntax` files as highlighting - [syntaxes]($raw.syntaxes) for raw blocks - - Added support for loading `.tmTheme` files as highlighting - [themes]($raw.theme) for raw blocks - - Added _bounds_ option to [`top-edge`]($text.top-edge) and - [`bottom-edge`]($text.bottom-edge) arguments of text function for tight - bounding boxes - - Removed nonsensical top- and bottom-edge options, e.g. _ascender_ for the - bottom edge (**Breaking change**) - - Added [`script`]($text.script) argument to text function - - Added [`alternative`]($smartquote.alternative) argument to smart quote - function - - Added basic i18n for Japanese - - Added hyphenation support for `nb` and `nn` language codes in addition to - `no` - - Fixed positioning of [placed elements]($place) in containers - - Fixed overflowing containers due to optimized line breaks - -- Export - - Greatly improved export of SVG images to PDF. Many thanks to - [@LaurenzV](https://github.com/LaurenzV) for their work on this. - - Added support for the alpha channel of RGBA colors in PDF export - - Fixed a bug with PPI (pixels per inch) for PNG export - -- Math - - Improved layout of primes (e.g. in `[$a'_1$]`) - - Improved display of multi-primes (e.g. in `[$a''$]`) - - Improved layout of [roots]($math.root) - - Changed relations to show attachments as [limits]($math.limits) by default - (e.g. in `[$a ->^x b$]`) - - Large operators and delimiters are now always vertically centered - - [Boxes]($box) in equations now sit on the baseline instead of being - vertically centered by default. Notably, this does not affect - [blocks]($block) because they are not inline elements. - - Added support for [weak spacing]($h.weak) - - Added support for OpenType character variants - - Added support for customizing the [math class]($math.class) of content - - Fixed spacing around `.`, `\/`, and `...` - - Fixed spacing between closing delimiters and large operators - - Fixed a bug with math font weight selection - - Symbols and Operators (**Breaking changes**) - - Added `id`, `im`, and `tr` text [operators]($math.op) - - Renamed `ident` to `equiv` with alias `eq.triple` and removed - `ident.strict` in favor of `eq.quad` - - Renamed `ast.sq` to `ast.square` and `integral.sq` to `integral.square` - - Renamed `.eqq` modifier to `.equiv` (and `.neqq` to `.nequiv`) for - `tilde`, `gt`, `lt`, `prec`, and `succ` - - Added `emptyset` as alias for `nothing` - - Added `lt.curly` and `gt.curly` as aliases for `prec` and `succ` - - Added `aleph`, `beth`, and `gimmel` as alias for `alef`, `bet`, and - `gimel` - -- Scripting - - Fields - - Added `abs` and `em` field to [lengths]($length) - - Added `ratio` and `length` field to [relative lengths]($relative) - - Added `x` and `y` field to [2d alignments]($align.alignment) - - Added `paint`, `thickness`, `cap`, `join`, `dash`, and `miter-limit` field - to [strokes]($stroke) - - Accessor and utility methods - - Added [`dedup`]($array.dedup) method to arrays - - Added `pt`, `mm`, `cm`, and `inches` method to [lengths]($length) - - Added `deg` and `rad` method to [angles]($angle) - - Added `kind`, `hex`, `rgba`, `cmyk`, and `luma` method to [colors]($color) - - Added `axis`, `start`, `end`, and `inv` method to [directions]($stack.dir) - - Added `axis` and `inv` method to [alignments]($align.alignment) - - Added `inv` method to [2d alignments]($align.alignment) - - Added `start` argument to [`enumerate`]($array.enumerate) method on arrays - - Added [`color.mix`]($color.mix) function - - Added `mode` and `scope` arguments to [`eval`] function - - Added [`bytes`] type for holding large byte buffers - - Added [`encoding`]($read.encoding) argument to read function to read a - file as bytes instead of a string - - Added [`image.decode`]($image.decode) function for decoding an image - directly from a string or bytes - - Added [`bytes`] function for converting a string or an array of integers - to bytes - - Added [`array`] function for converting bytes to an array of integers - - Added support for converting bytes to a string with the [`str`] function - -- Tooling and Diagnostics - - Added support for compiler warnings - - Added warning when compilation does not converge within five attempts due to - intense use of introspection features - - Added warnings for empty emphasis (`__` and `**`) - - Improved error message for invalid field assignments - - Improved error message after single `#` - - Improved error message when a keyword is used where an identifier is - expected - - Fixed parameter autocompletion for functions that are in modules - - Import autocompletion now only shows the latest package version until a - colon is typed - - Fixed autocompletion for dictionary key containing a space - - Fixed autocompletion for `for` loops - -- Command line interface - - Added `typst query` subcommand to execute a - [query]($reference/introspection/query/#command-line-queries) on the command - line - - The `--root` and `--font-paths` arguments cannot appear in front of the - command anymore (**Breaking change**) - - Local and cached packages are now stored in directories of the form - `[{namespace}/{name}/{version}]` instead of `[{namespace}/{name}-{version}]` - (**Breaking change**) - - Now prioritizes explicitly given fonts (via `--font-paths`) over system and - embedded fonts when both exist - - Fixed `typst watch` not working with some text editors - - Fixed displayed compilation time (now includes export) - -- Miscellaneous Improvements - - Added [`bookmarked`]($heading.bookmarked) argument to heading to control - whether a heading becomes part of the PDF outline - - Added [`caption-pos`]($figure.caption.position) argument to control the - position of a figure's caption - - Added [`metadata`] function for exposing an arbitrary value to the - introspection system - - Fixed that a [`state`] was identified by the pair `(key, init)` instead of - just its `key` - - Improved indent logic of [enumerations]($enum). Instead of requiring at - least as much indent as the end of the marker, they now require only one - more space indent than the start of the marker. As a result, even long - markers like `12.` work with just 2 spaces of indent. - - Fixed bug with indent logic of [`raw`] blocks - - Fixed a parsing bug with dictionaries - -- Development - - Extracted parser and syntax tree into `typst-syntax` crate - - The `World::today` implementation of Typst dependents may need fixing if - they have the same [bug](https://github.com/typst/typst/issues/1842) that - the CLI world had - -<contributors from="v0.6.0" to="v0.7.0" /> - -## Version 0.6.0 (June 30, 2023) { #v0.6.0 } -- Package Management - - Typst now has built-in [package management]($scripting/#packages) - - You can import [published]($universe) community packages or create and use - [system-local](https://github.com/typst/packages#local-packages) ones - - Published packages are also supported in the web app - -- Math - - Added support for optical size variants of glyphs in math mode - - Added argument to enable [`limits`]($math.limits) conditionally depending on - whether the equation is set in [`display`]($math.display) or - [`inline`]($math.inline) style - - Added `gt.eq.slant` and `lt.eq.slant` symbols - - Increased precedence of factorials in math mode (`[$1/n!$]` works correctly - now) - - Improved [underlines]($math.underline) and [overlines]($math.overline) in - math mode - - Fixed usage of [`limits`]($math.limits) function in show rules - - Fixed bugs with line breaks in equations - -- Text and Layout - - Added support for alternating page [margins]($page.margin) with the `inside` - and `outside` keys - - Added support for specifying the page [`binding`]($page.binding) - - Added [`to`]($pagebreak.to) argument to pagebreak function to skip to the - next even or odd page - - Added basic i18n for a few more languages (TR, SQ, TL) - - Fixed bug with missing table row at page break - - Fixed bug with [underlines]($underline) - - Fixed bug superfluous table lines - - Fixed smart quotes after line breaks - - Fixed a crash related to text layout - -- Command line interface - - **Breaking change:** Added requirement for `--root`/`TYPST_ROOT` directory - to contain the input file because it designates the _project_ root. Existing - setups that use `TYPST_ROOT` to emulate package management should switch to - [local packages](https://github.com/typst/packages#local-packages) - - **Breaking change:** Now denies file access outside of the project root - - Added support for local packages and on-demand package download - - Now watches all relevant files, within the root and all packages - - Now displays compilation time - -- Miscellaneous Improvements - - Added [`outline.entry`]($outline.entry) to customize outline entries with - show rules - - Added some hints for error messages - - Added some missing syntaxes for [`raw`] highlighting - - Improved rendering of rotated images in PNG export and web app - - Made [footnotes]($footnote) reusable and referenceable - - Fixed bug with citations and bibliographies in [`locate`] - - Fixed inconsistent tense in documentation - -- Development - - Added [contribution guide](https://github.com/typst/typst/blob/main/CONTRIBUTING.md) - - Reworked `World` interface to accommodate for package management and make - it a bit simpler to implement _(Breaking change for implementors)_ - -<contributors from="v0.5.0" to="v0.6.0" /> - -## Version 0.5.0 (June 9, 2023) { #v0.5.0 } -- Text and Layout - - Added [`raw`] syntax highlighting for many more languages - - Added support for Korean [numbering] - - Added basic i18n for a few more languages (NL, SV, DA) - - Improved line breaking for East Asian languages - - Expanded functionality of outline [`indent`]($outline.indent) property - - Fixed footnotes in columns - - Fixed page breaking bugs with [footnotes]($footnote) - - Fixed bug with handling of footnotes in lists, tables, and figures - - Fixed a bug with CJK punctuation adjustment - - Fixed a crash with rounded rectangles - - Fixed alignment of [`line`] elements - -- Math - - **Breaking change:** The syntax rules for mathematical - [attachments]($math.attach) were improved: `[$f^abs(3)$]` now parses as - `[$f^(abs(3))$]` instead of `[$(f^abs)(3)$]`. To disambiguate, add a space: - `[$f^zeta (3)$]`. - - Added [forced size]($category/math/sizes) commands for math (e.g., - [`display`]($math.display)) - - Added [`supplement`]($math.equation.supplement) parameter to - [`equation`]($math.equation), used by [references]($ref) - - New [symbols]($category/symbols/sym): `bullet`, `xor`, `slash.big`, - `sigma.alt`, `tack.r.not`, `tack.r.short`, `tack.r.double.not` - - Fixed a bug with symbols in matrices - - Fixed a crash in the [`attach`]($math.attach) function - -- Scripting - - Added new [`datetime`] type and [`datetime.today`]($datetime.today) to - retrieve the current date - - Added [`str.from-unicode`]($str.from-unicode) and - [`str.to-unicode`]($str.to-unicode) functions - - Added [`fields`]($content.fields) method on content - - Added `base` parameter to [`str`] function - - Added [`calc.exp`]($calc.exp) and [`calc.ln`]($calc.ln) - - Improved accuracy of [`calc.pow`]($calc.pow) and [`calc.log`]($calc.log) for - specific bases - - Fixed [removal]($dictionary.remove) order for dictionary - - Fixed `.at(default: ..)` for [strings]($str.at) and [content]($content.at) - - Fixed field access on styled elements - - Removed deprecated `calc.mod` function - -- Command line interface - - Added PNG export via `typst compile source.typ output-{n}.png`. The output - path must contain `[{n}]` if the document has multiple pages. - - Added `--diagnostic-format=short` for Unix-style short diagnostics - - Doesn't emit color codes anymore if stderr isn't a TTY - - Now sets the correct exit when invoked with a nonexistent file - - Now ignores UTF-8 BOM in Typst files - -- Miscellaneous Improvements - - Improved errors for mismatched delimiters - - Improved error message for failed length comparisons - - Fixed a bug with images not showing up in Apple Preview - - Fixed multiple bugs with the PDF outline - - Fixed citations and other searchable elements in [`hide`] - - Fixed bugs with [reference supplements]($ref.supplement) - - Fixed Nix flake - -<contributors from="v0.4.0" to="v0.5.0" /> - -## Version 0.4.0 (May 20, 2023) { #v0.4.0 } -- Footnotes - - Implemented support for footnotes - - The [`footnote`] function inserts a footnote - - The [`footnote.entry`]($footnote.entry) function can be used to customize - the footnote listing - - The `{"chicago-notes"}` [citation style]($cite.style) is now available - -- Documentation - - Added a [Guide for LaTeX users]($guides/guide-for-latex-users) - - Now shows default values for optional arguments - - Added richer outlines in "On this Page" - - Added initial support for search keywords: "Table of Contents" will now find - the [outline] function. Suggestions for more keywords are welcome! - - Fixed issue with search result ranking - - Fixed many more small issues - -- Math - - **Breaking change**: Alignment points (`&`) in equations now alternate - between left and right alignment - - Added support for writing roots with Unicode: For example, `[$root(x+y)$]` - can now also be written as `[$√(x+y)$]` - - Fixed uneven vertical [`attachment`]($math.attach) alignment - - Fixed spacing on decorated elements (e.g., spacing around a - [canceled]($math.cancel) operator) - - Fixed styling for stretchable symbols - - Added `tack.r.double`, `tack.l.double`, `dotless.i` and `dotless.j` - [symbols]($category/symbols/sym) - - Fixed show rules on symbols (e.g. `{show sym.tack: set text(blue)}`) - - Fixed missing rename from `ast.op` to `ast` that should have been in the - previous release - -- Scripting - - Added function scopes: A function can now hold related definitions in its - own scope, similar to a module. The new [`assert.eq`]($assert.eq) function, - for instance, is part of the [`assert`] function's scope. Note that function - scopes are currently only available for built-in functions. - - Added [`assert.eq`]($assert.eq) and [`assert.ne`]($assert.ne) functions for - simpler equality and inequality assertions with more helpful error messages - - Exposed [list]($list.item), [enum]($enum.item), and [term list]($terms.item) - items in their respective functions' scope - - The `at` methods on [strings]($str.at), [arrays]($array.at), - [dictionaries]($dictionary.at), and [content]($content.at) now support - specifying a default value - - Added support for passing a function to [`replace`]($str.replace) that is - called with each match. - - Fixed [replacement]($str.replace) strings: They are now inserted completely - verbatim instead of supporting the previous (unintended) magic dollar syntax - for capture groups - - Fixed bug with trailing placeholders in destructuring patterns - - Fixed bug with underscore in parameter destructuring - - Fixed crash with nested patterns and when hovering over an invalid pattern - - Better error messages when casting to an [integer]($int) or [float]($float) - fails - -- Text and Layout - - Implemented sophisticated CJK punctuation adjustment - - Disabled [overhang]($text.overhang) for CJK punctuation - - Added basic translations for Traditional Chinese - - Fixed [alignment]($raw.align) of text inside raw blocks (centering a raw - block, e.g. through a figure, will now keep the text itself left-aligned) - - Added support for passing a array instead of a function to configure table - cell [alignment]($table.align) and [fill]($table.fill) per column - - Fixed automatic figure [`kind`]($figure.kind) detection - - Made alignment of [enum numbers]($enum.number-align) configurable, - defaulting to `end` - - Figures can now be made breakable with a show-set rule for blocks in figure - - Initial fix for smart quotes in RTL languages - -- Export - - Fixed ligatures in PDF export: They are now copyable and searchable - - Exported PDFs now embed ICC profiles for images that have them - - Fixed export of strokes with zero thickness - -- Web app - - Projects can now contain folders - - Added upload by drag-and-drop into the file panel - - Files from the file panel can now be dragged into the editor to insert them - into a Typst file - - You can now copy-paste images and other files from your computer directly - into the editor - - Added a button to resend confirmation email - - Added an option to invert preview colors in dark mode - - Added tips to the loading screen and the Help menu. Feel free to propose - more! - - Added syntax highlighting for YAML files - - Allowed middle mouse button click on many buttons to navigate into a new tab - - Allowed more project names - - Fixed overridden Vim mode keybindings - - Fixed many bugs regarding file upload and more - -- Miscellaneous Improvements - - Improved performance of counters, state, and queries - - Improved incremental parsing for more efficient recompilations - - Added support for `.yaml` extension in addition to `.yml` for bibliographies - - The CLI now emits escape codes only if the output is a TTY - - For users of the `typst` crate: The `Document` is now `Sync` again and the - `World` doesn't have to be `'static` anymore - -<contributors from="v0.3.0" to="v0.4.0" /> - -## Version 0.3.0 (April 26, 2023) { #v0.3.0 } -- **Breaking changes:** - - Renamed a few symbols: What was previous `dot.op` is now just `dot` and the - basic dot is `dot.basic`. The same applies to `ast` and `tilde`. - - Renamed `mod` to [`rem`]($calc.rem) to more accurately reflect the - behavior. It will remain available as `mod` until the next update as a - grace period. - - A lone underscore is not a valid identifier anymore, it can now only be used - in patterns - - Removed `before` and `after` arguments from [`query`]. This is now handled - through flexible [selectors]($selector) combinator methods - - Added support for [attachments]($math.attach) (sub-, superscripts) that - precede the base symbol. The `top` and `bottom` arguments have been renamed - to `t` and `b`. - -- New features - - Added support for more complex [strokes]($stroke) (configurable caps, joins, - and dash patterns) - - Added [`cancel`]($math.cancel) function for equations - - Added support for [destructuring]($scripting/#bindings) in argument lists - and assignments - - Added [`alt`]($image.alt) text argument to image function - - Added [`toml`] function for loading data from a TOML file - - Added [`zip`]($array.zip), [`sum`]($array.sum), and - [`product`]($array.product) methods for arrays - - Added `fact`, `perm`, `binom`, `gcd`, `lcm`, `atan2`, `quo`, `trunc`, and - `fract` [calculation]($category/foundations/calc) functions - -- Improvements - - Text in SVGs now displays properly - - Typst now generates a PDF heading outline - - [References]($ref) now provides the referenced element as a field in show - rules - - Refined linebreak algorithm for better Chinese justification - - Locations are now a valid kind of selector - - Added a few symbols for algebra - - Added Spanish smart quote support - - Added [`selector`] function to turn a selector-like value into a selector on - which combinator methods can be called - - Improved some error messages - - The outline and bibliography headings can now be styled with show-set rules - - Operations on numbers now produce an error instead of overflowing - -- Bug fixes - - Fixed wrong linebreak before punctuation that follows inline equations, - citations, and other elements - - Fixed a bug with [argument sinks]($arguments) - - Fixed strokes with thickness zero - - Fixed hiding and show rules in math - - Fixed alignment in matrices - - Fixed some alignment bugs in equations - - Fixed grid cell alignment - - Fixed alignment of list marker and enum markers in presence of global - alignment settings - - Fixed [path]($path) closing - - Fixed compiler crash with figure references - - A single trailing line breaks is now ignored in math, just like in text - -- Command line interface - - Font path and compilation root can now be set with the environment variables - `TYPST_FONT_PATHS` and `TYPST_ROOT` - - The output of `typst fonts` now includes the embedded fonts - -- Development - - Added instrumentation for debugging and optimization - - Added `--update` flag and `UPDATE_EXPECT` environment variable to update - reference images for tests - - You can now run a specific subtest with `--subtest` - - Tests now run on multiple threads - -<contributors from="v0.2.0" to="v0.3.0" /> - -## Version 0.2.0 (April 11, 2023) { #v0.2.0 } -- **Breaking changes:** - - Removed support for iterating over index and value in - [for loops]($scripting/#loops). This is now handled via unpacking and - enumerating. Same goes for the [`map`]($array.map) method. - - [Dictionaries]($dictionary) now iterate in insertion order instead of - alphabetical order. - -- New features - - Added [unpacking syntax]($scripting/#bindings) for let bindings, which - allows things like `{let (1, 2) = array}` - - Added [`enumerate`]($array.enumerate) method - - Added [`path`] function for drawing Bézier paths - - Added [`layout`] function to access the size of the surrounding page or - container - - Added `key` parameter to [`sorted`]($array.sorted) method - -- Command line interface - - Fixed `--open` flag blocking the program - - New Computer Modern font is now embedded into the binary - - Shell completions and man pages can now be generated by setting the - `GEN_ARTIFACTS` environment variable to a target directory and then building - Typst - -- Miscellaneous improvements - - Fixed page numbering in outline - - Added basic i18n for a few more languages - (AR, NB, CS, NN, PL, SL, ES, UA, VI) - - Added a few numbering patterns (Ihora, Chinese) - - Added `sinc` [operator]($math.op) - - Fixed bug where math could not be hidden with [`hide`] - - Fixed sizing issues with box, block, and shapes - - Fixed some translations - - Fixed inversion of "R" in [`cal`]($math.cal) and [`frak`]($math.frak) styles - - Fixed some styling issues in math - - Fixed supplements of references to headings - - Fixed syntax highlighting of identifiers in certain scenarios - - [Ratios]($ratio) can now be multiplied with more types and be converted to - [floats]($float) with the [`float`] function - -<contributors from="v0.1.0" to="v0.2.0" /> - -## Version 0.1.0 (April 04, 2023) { #v0.1.0 } -- **Breaking changes:** - - When using the CLI, you now have to use subcommands: - - `typst compile file.typ` or `typst c file.typ` to create a PDF - - `typst watch file.typ` or `typst w file.typ` to compile and watch - - `typst fonts` to list all fonts - - Manual counters now start at zero. Read the "How to step" section - [here]($counter) for more details - - The [bibliography styles]($bibliography.style) `{"author-date"}` and - `{"author-title"}` were renamed to `{"chicago-author-date"}` and - `{"chicago-author-title"}` - -- Figure improvements - - Figures now automatically detect their content and adapt their behavior. - Figures containing tables, for instance, are automatically prefixed with - "Table X" and have a separate counter - - The figure's supplement (e.g. "Figure" or "Table") can now be customized - - In addition, figures can now be completely customized because the show rule - gives access to the automatically resolved kind, supplement, and counter - -- Bibliography improvements - - The [`bibliography`] now also accepts multiple bibliography paths (as an - array) - - Parsing of BibLaTeX files is now more permissive (accepts non-numeric - edition, pages, volumes, dates, and Jabref-style comments; fixed - abbreviation parsing) - - Labels and references can now include `:` and `.` except at the end - - Fixed APA bibliography ordering - -- Drawing additions - - Added [`polygon`] function for drawing polygons - - Added support for clipping in [boxes]($box.clip) and [blocks]($block.clip) - -- Command line interface - - Now returns with non-zero status code if there is an error - - Now watches the root directory instead of the current one - - Now puts the PDF file next to input file by default - - Now accepts more kinds of input files (e.g. `/dev/stdin`) - - Added `--open` flag to directly open the PDF - -- Miscellaneous improvements - - Added [`yaml`] function to load data from YAML files - - Added basic i18n for a few more languages (IT, RU, ZH, FR, PT) - - Added numbering support for Hebrew - - Added support for [integers]($int) with base 2, 8, and 16 - - Added symbols for double bracket and laplace operator - - The [`link`] function now accepts [labels]($label) - - The link syntax now allows more characters - - Improved justification of Japanese and Chinese text - - Calculation functions behave more consistently w.r.t to non-real results - - Replaced deprecated angle brackets - - Reduced maximum function call depth from 256 to 64 - - Fixed [`first-line-indent`]($par.first-line-indent) being not applied when a - paragraph starts with styled text - - Fixed extraneous spacing in unary operators in equations - - Fixed block spacing, e.g. in `{block(above: 1cm, below: 1cm, ..)}` - - Fixed styling of text operators in math - - Fixed invalid parsing of language tag in raw block with a single backtick - - Fixed bugs with displaying counters and state - - Fixed crash related to page counter - - Fixed crash when [`symbol`] function was called without arguments - - Fixed crash in bibliography generation - - Fixed access to label of certain content elements - - Fixed line number in error message for CSV parsing - - Fixed invalid autocompletion after certain markup elements - -<contributors from="v23-03-28" to="v0.1.0" /> - -## March 28, 2023 { #_ } -- **Breaking changes:** - - Enumerations now require a space after their marker, that is, `[1.ok]` must - now be written as `[1. ok]` - - Changed default style for [term lists]($terms): Does not include a colon - anymore and has a bit more indent - -- Command line interface - - Added `--font-path` argument for CLI - - Embedded default fonts in CLI binary - - Fixed build of CLI if `git` is not installed - -- Miscellaneous improvements - - Added support for disabling [matrix]($math.mat) and [vector]($math.vec) - delimiters. Generally with `[#set math.mat(delim: none)]` or one-off with - `[$mat(delim: #none, 1, 2; 3, 4)$]`. - - Added [`separator`]($terms.separator) argument to term lists - - Added [`round`]($math.round) function for equations - - Numberings now allow zeros. To reset a counter, you can write - `[#counter(..).update(0)]` - - Added documentation for `{page()}` and `{position()}` methods on - [`location`] type - - Added symbols for double, triple, and quadruple dot accent - - Added smart quotes for Norwegian Bokmål - - Added Nix flake - - Fixed bibliography ordering in IEEE style - - Fixed parsing of decimals in math: `[$1.2/3.4$]` - - Fixed parsing of unbalanced delimiters in fractions: `[$1/(2 (x)$]` - - Fixed unexpected parsing of numbers as enumerations, e.g. in `[1.2]` - - Fixed combination of page fill and header - - Fixed compiler crash if [`repeat`] is used in page with automatic width - - Fixed [matrices]($math.mat) with explicit delimiter - - Fixed [`indent`]($terms.indent) property of term lists - - Numerous documentation fixes - - Links in bibliographies are now affected by link styling - - Fixed hovering over comments in web app - -<contributors from="v23-03-21" to="v23-03-28" /> - -## March 21, 2023 { #_ } -- Reference and bibliography management - - [Bibliographies]($bibliography) and [citations]($cite) (currently supported - styles are APA, Chicago Author Date, IEEE, and MLA) - - You can now [reference]($ref) sections, figures, formulas, and works from - the bibliography with `[@label]` - - You can make an element referenceable with a label: - - `[= Introduction <intro>]` - - `[$ A = pi r^2 $ <area>]` - -- Introspection system for interactions between different parts of the document - - [`counter`] function - - Access and modify counters for pages, headings, figures, and equations - - Define and use your own custom counters - - Time travel: Find out what the counter value was or will be at some other - point in the document (e.g. when you're building a list of figures, you - can determine the value of the figure counter at any given figure). - - Counters count in layout order and not in code order - - [`state`] function - - Manage arbitrary state across your document - - Time travel: Find out the value of your state at any position in the - document - - State is modified in layout order and not in code order - - [`query`] function - - Find all occurrences of an element or a label, either in the whole - document or before/after some location - - Link to elements, find out their position on the pages and access their - fields - - Example use cases: Custom list of figures or page header with current - chapter title - - [`locate`] function - - Determines the location of itself in the final layout - - Can be accessed to get the `page` and `x`, `y` coordinates - - Can be used with counters and state to find out their values at that - location - - Can be used with queries to find elements before or after its location - -- New [`measure`] function - - Measure the layouted size of elements - - To be used in combination with the new [`style`] function that lets you - generate different content based on the style context something is inserted - into (because that affects the measured size of content) - -- Exposed content representation - - Content is not opaque anymore - - Content can be compared for equality - - The tree of content elements can be traversed with code - - Can be observed in hover tooltips or with [`repr`] - - New [methods]($content) on content: `func`, `has`, `at`, and `location` - - All optional fields on elements are now settable - - More uniform field names (`heading.title` becomes `heading.body`, - `list.items` becomes `list.children`, and a few more changes) - -- Further improvements - - Added [`figure`] function - - Added [`numbering`]($math.equation.numbering) parameter on equation function - - Added [`numbering`]($page.numbering) and - [`number-align`]($page.number-align) parameters on page function - - The page function's [`header`]($page.header) and [`footer`]($page.footer) - parameters do not take functions anymore. If you want to customize them - based on the page number, use the new [`numbering`]($page.numbering) - parameter or [`counter`] function instead. - - Added [`footer-descent`]($page.footer-descent) and - [`header-ascent`]($page.header-ascent) parameters - - Better default alignment in header and footer - - Fixed Arabic vowel placement - - Fixed PDF font embedding issues - - Renamed `math.formula` to [`math.equation`]($math.equation) - - Font family must be a named argument now: `[#set text(font: "..")]` - - Added support for [hanging indent]($par.hanging-indent) - - Renamed paragraph `indent` to [`first-line-indent`]($par.first-line-indent) - - More accurate [logarithm]($calc.log) when base is `2` or `10` - - Improved some error messages - - Fixed layout of [`terms`] list - -- Web app improvements - - Added template gallery - - Added buttons to insert headings, equations, raw blocks, and references - - Jump to the source of something by clicking on it in the preview panel - (works for text, equations, images, and more) - - You can now upload your own fonts and use them in your project - - Hover debugging and autocompletion now takes multiple files into account and - works in show rules - - Hover tooltips now automatically collapse multiple consecutive equal values - - The preview now automatically scrolls to the right place when you type - - Links are now clickable in the preview area - - Toolbar, preview, and editor can now all be hidden - - Added autocompletion for raw block language tags - - Added autocompletion in SVG files - - New back button instead of four-dots button - - Lots of bug fixes - -## February 25, 2023 { #_ } -- Font changes - - New default font: Linux Libertine - - New default font for raw blocks: DejaVu Sans Mono - - New default font for math: Book weight of New Computer Modern Math - - Lots of new math fonts available - - Removed Latin Modern fonts in favor of New Computer Modern family - - Removed unnecessary smallcaps fonts which are already accessible through the - corresponding main font and the [`smallcaps`] function -- Improved default spacing for headings -- Added [`panic`] function -- Added [`clusters`]($str.clusters) and [`codepoints`]($str.codepoints) methods - for strings -- Support for multiple authors in [`set document`]($document.author) -- Fixed crash when string is accessed at a position that is not a char boundary -- Fixed semicolon parsing in `[#var ;]` -- Fixed incremental parsing when inserting backslash at end of `[#"abc"]` -- Fixed names of a few font families (including Noto Sans Symbols and New - Computer Modern families) -- Fixed autocompletion for font families -- Improved incremental compilation for user-defined functions - -## February 15, 2023 { #_ } -- [Box]($box) and [block] have gained `fill`, `stroke`, `radius`, and `inset` - properties -- Blocks may now be explicitly sized, fixed-height blocks can still break across - pages -- Blocks can now be configured to be [`breakable`]($block.breakable) or not -- [Numbering style]($enum.numbering) can now be configured for nested enums -- [Markers]($list.marker) can now be configured for nested lists -- The [`eval`] function now expects code instead of markup and returns an - arbitrary value. Markup can still be evaluated by surrounding the string with - brackets. -- PDFs generated by Typst now contain XMP metadata -- Link boxes are now disabled in PDF output -- Tables don't produce small empty cells before a pagebreak anymore -- Fixed raw block highlighting bug - -## February 12, 2023 { #_ } -- Shapes, images, and transformations (move/rotate/scale/repeat) are now - block-level. To integrate them into a paragraph, use a [`box`] as with other - elements. -- A colon is now required in an "everything" show rule: Write `{show: it => ..}` - instead of `{show it => ..}`. This prevents intermediate states that ruin your - whole document. -- Non-math content like a shape or table in a math formula is now centered - vertically -- Support for widow and orphan prevention within containers -- Support for [RTL]($text.dir) in lists, grids, and tables -- Support for explicit `{auto}` sizing for boxes and shapes -- Support for fractional (i.e. `{1fr}`) widths for boxes -- Fixed bug where columns jump to next page -- Fixed bug where list items have no leading -- Fixed relative sizing in lists, squares and grid auto columns -- Fixed relative displacement in [`place`] function -- Fixed that lines don't have a size -- Fixed bug where `{set document(..)}` complains about being after content -- Fixed parsing of `{not in}` operation -- Fixed hover tooltips in math -- Fixed bug where a heading show rule may not contain a pagebreak when an - outline is present -- Added [`baseline`]($box.baseline) property on [`box`] -- Added [`tg`]($math.op) and [`ctg`]($math.op) operators in math -- Added delimiter setting for [`cases`]($math.cases) function -- Parentheses are now included when accepting a function autocompletion - -## February 2, 2023 { #_ } -- Merged text and math symbols, renamed a few symbols (including `infty` to - `infinity` with the alias `oo`) -- Fixed missing italic mappings -- Math italics correction is now applied properly -- Parentheses now scale in `[$zeta(x/2)$]` -- Fixed placement of large root index -- Fixed spacing in `[$abs(-x)$]` -- Fixed inconsistency between text and identifiers in math -- Accents are now ignored when positioning superscripts -- Fixed vertical alignment in matrices -- Fixed `text` set rule in `raw` show rule -- Heading and list markers now parse consistently -- Allow arbitrary math directly in content - -## January 30, 2023 { #_ } -[Go to the announcement blog post.](https://typst.app/blog/2023/january-update) -- New expression syntax in markup/math - - Blocks cannot be directly embedded in markup anymore - - Like other expressions, they now require a leading hash - - More expressions available with hash, including literals (`[#"string"]`) - as well as field access and method call without space: `[#emoji.face]` -- New import syntax - - `[#import "module.typ"]` creates binding named `module` - - `[#import "module.typ": a, b]` or `[#import "module.typ": *]` to import - items - - `[#import emoji: face, turtle]` to import from already bound module -- New symbol handling - - Removed symbol notation - - Symbols are now in modules: `{sym}`, `{emoji}`, and `{math}` - - Math module also reexports all of `{sym}` - - Modified through field access, still order-independent - - Unknown modifiers are not allowed anymore - - Support for custom symbol definitions with `symbol` function - - Symbols now listed in documentation -- New `{math}` module - - Contains all math-related functions - - Variables and function calls directly in math (without hash) access this - module instead of the global scope, but can also access local variables - - Can be explicitly used in code, e.g. `[#set math.vec(delim: "[")]` -- Delimiter matching in math - - Any opening delimiters matches any closing one - - When matched, they automatically scale - - To prevent scaling, escape them - - To forcibly match two delimiters, use `lr` function - - Line breaks may occur between matched delimiters - - Delimiters may also be unbalanced - - You can also use the `lr` function to scale the brackets (or just one - bracket) to a specific size manually -- Multi-line math with alignment - - The `\` character inserts a line break - - The `&` character defines an alignment point - - Alignment points also work for underbraces, vectors, cases, and matrices - - Multiple alignment points are supported -- More capable math function calls - - Function calls directly in math can now take code expressions with hash - - They can now also take named arguments - - Within math function calls, semicolons turn preceding arguments to arrays to - support matrices: `[$mat(1, 2; 3, 4)$]` -- Arbitrary content in math - - Text, images, and other arbitrary content can now be embedded in math - - Math now also supports font fallback to support e.g. CJK and emoji -- More math features - - New text operators: `op` function, `lim`, `max`, etc. - - New matrix function: `mat` - - New n-ary roots with `root` function: `[$root(3, x)$]` - - New under- and overbraces, -brackets, and -lines - - New `abs` and `norm` functions - - New shorthands: `[|`, `|]`, and `||` - - New `attach` function, overridable attachments with `script` and `limit` - - Manual spacing in math, with `h`, `thin`, `med`, `thick` and `quad` - - Symbols and other content may now be used like a function, e.g. - `[$zeta(x)$]` - - Added Fira Math font, removed Noto Sans Math font - - Support for alternative math fonts through `[#show math.formula: set - text("Fira Math")]` -- More library improvements - - New `calc` module, `abs`, `min`, `max`, `even`, `odd` and `mod` moved there - - New `message` argument on `{assert}` function - - The `pairs` method on dictionaries now returns an array of length-2 arrays - instead of taking a closure - - The method call `{dict.at("key")}` now always fails if `"key"` doesn't exist - Previously, it was allowed in assignments. Alternatives are `{dict.key = x}` - and `{dict.insert("key", x)}`. -- Smarter editor functionality - - Autocompletion for local variables - - Autocompletion for methods available on a value - - Autocompletion for symbols and modules - - Autocompletion for imports - - Hover over an identifier to see its value(s) -- Further editor improvements - - New Font menu with previews - - Single projects may now be shared with share links - - New dashboard experience if projects are shared with you - - Keyboard Shortcuts are now listed in the menus and there are more of them - - New Offline indicator - - Tooltips for all buttons - - Improved account protection - - Moved Status indicator into the error list button -- Further fixes - - Multiple bug fixes for incremental parser - - Fixed closure parameter capturing - - Fixed tons of math bugs - - Bugfixes for performance, file management, editing reliability - - Added redirection to the page originally navigated to after signin diff --git a/docs/changelog/0.1.0.md b/docs/changelog/0.1.0.md new file mode 100644 index 00000000..396390e1 --- /dev/null +++ b/docs/changelog/0.1.0.md @@ -0,0 +1,73 @@ +--- +title: 0.1.0 +description: Changes in Typst 0.1.0 +--- + +# Version 0.1.0 (April 04, 2023) + +## Breaking changes +- When using the CLI, you now have to use subcommands: + - `typst compile file.typ` or `typst c file.typ` to create a PDF + - `typst watch file.typ` or `typst w file.typ` to compile and watch + - `typst fonts` to list all fonts +- Manual counters now start at zero. Read the "How to step" section + [here]($counter) for more details +- The [bibliography styles]($bibliography.style) `{"author-date"}` and + `{"author-title"}` were renamed to `{"chicago-author-date"}` and + `{"chicago-author-title"}` + +## Figure improvements +- Figures now automatically detect their content and adapt their behavior. + Figures containing tables, for instance, are automatically prefixed with + "Table X" and have a separate counter +- The figure's supplement (e.g. "Figure" or "Table") can now be customized +- In addition, figures can now be completely customized because the show rule + gives access to the automatically resolved kind, supplement, and counter + +## Bibliography improvements +- The [`bibliography`] now also accepts multiple bibliography paths (as an + array) +- Parsing of BibLaTeX files is now more permissive (accepts non-numeric edition, + pages, volumes, dates, and Jabref-style comments; fixed abbreviation parsing) +- Labels and references can now include `:` and `.` except at the end +- Fixed APA bibliography ordering + +## Drawing additions +- Added [`polygon`] function for drawing polygons +- Added support for clipping in [boxes]($box.clip) and [blocks]($block.clip) + +## Command line interface +- Now returns with non-zero status code if there is an error +- Now watches the root directory instead of the current one +- Now puts the PDF file next to input file by default +- Now accepts more kinds of input files (e.g. `/dev/stdin`) +- Added `--open` flag to directly open the PDF + +## Miscellaneous improvements +- Added [`yaml`] function to load data from YAML files +- Added basic i18n for a few more languages (IT, RU, ZH, FR, PT) +- Added numbering support for Hebrew +- Added support for [integers]($int) with base 2, 8, and 16 +- Added symbols for double bracket and laplace operator +- The [`link`] function now accepts [labels]($label) +- The link syntax now allows more characters +- Improved justification of Japanese and Chinese text +- Calculation functions behave more consistently w.r.t to non-real results +- Replaced deprecated angle brackets +- Reduced maximum function call depth from 256 to 64 +- Fixed [`first-line-indent`]($par.first-line-indent) being not applied when a + paragraph starts with styled text +- Fixed extraneous spacing in unary operators in equations +- Fixed block spacing, e.g. in `{block(above: 1cm, below: 1cm, ..)}` +- Fixed styling of text operators in math +- Fixed invalid parsing of language tag in raw block with a single backtick +- Fixed bugs with displaying counters and state +- Fixed crash related to page counter +- Fixed crash when [`symbol`] function was called without arguments +- Fixed crash in bibliography generation +- Fixed access to label of certain content elements +- Fixed line number in error message for CSV parsing +- Fixed invalid autocompletion after certain markup elements + +## Contributors +<contributors from="v23-03-28" to="v0.1.0" /> diff --git a/docs/changelog/0.10.0.md b/docs/changelog/0.10.0.md new file mode 100644 index 00000000..0b17bea5 --- /dev/null +++ b/docs/changelog/0.10.0.md @@ -0,0 +1,130 @@ +--- +title: 0.10.0 +description: Changes in Typst 0.10.0 +--- + +# Version 0.10.0 (December 4, 2023) + +## Bibliography management +- Added support for citation collapsing (e.g. `[[1]-[3]]` instead of + `[[1], [2], [3]]`) if requested by a CSL style +- Fixed bug where an additional space would appear after a group of citations +- Fixed link show rules for links in the bibliography +- Fixed show-set rules on citations +- Fixed bibliography-related crashes that happened on some systems +- Corrected name of the GB/T 7714 family of styles from 7114 to 7714 +- Fixed missing title in some bibliography styles +- Fixed printing of volumes in some styles +- Fixed delimiter order for contributors in some styles (e.g. APA) +- Fixed behavior of alphanumeric style +- Fixed multiple bugs with GB/T 7714 style +- Fixed escaping in Hayagriva values +- Fixed crashes with empty dates in Hayagriva files +- Fixed bug with spacing around math blocks +- Fixed title case formatting after verbatim text and apostrophes +- Page ranges in `.bib` files can now be arbitrary strings +- Multi-line values in `.bib` files are now parsed correctly +- Entry keys in `.bib` files now allow more characters +- Fixed error message for empty dates in `.bib` files +- Added support for years of lengths other than 4 without leading zeros in + `.bib` files +- More LaTeX commands (e.g. for quotes) are now respected in `.bib` files + +## Visualization +- Added support for [patterns]($pattern) as fills and strokes +- The `alpha` parameter of the [`components`]($color.components) function on + colors is now a named parameter **(Breaking change)** +- Added support for the [Oklch]($color.oklch) color space +- Improved conversions between colors in different color spaces +- Removed restrictions on [Oklab]($color.oklab) chroma component +- Fixed [clipping]($block.clip) on blocks and boxes without a stroke +- Fixed bug with [gradients]($gradient) on math +- Fixed bug with gradient rotation on text +- Fixed bug with gradient colors in PDF +- Fixed relative base of Oklab chroma ratios +- Fixed Oklab color negation + +## Text and Layout +- CJK text can now be emphasized with the `*` and `_` syntax even when there are + no spaces +- Added basic i18n for Greek and Estonian +- Improved default [figure caption separator]($figure.caption.separator) for + Chinese, French, and Russian +- Changed default [figure supplement]($figure.supplement) for Russian to short + form +- Fixed [CJK-Latin-spacing]($text.cjk-latin-spacing) before line breaks and in + [`locate`] calls +- Fixed line breaking at the end of links + +## Math +- Added [`mid`]($math.mid) function for scaling a delimiter up to the height of + the surrounding [`lr`]($math.lr) group +- The [`op`]($math.op) function can now take any content, not just strings +- Improved documentation for [math alignment]($category/math/#alignment) +- Fixed swallowing of trailing comma when a symbol is used in a function-like + way (e.g. `pi(a,b,)`) + +## Scripting +- Any non-identifier dictionary key is now interpreted as an expression: For + instance, `{((key): value)}` will create a dictionary with a dynamic key +- The [`stroke`] type now has a constructor that converts a value to a stroke or + creates one from its parts +- Added constructor for [`arguments`] type +- Added [`calc.div-euclid`]($calc.div-euclid) and + [`calc.rem-euclid`]($calc.rem-euclid) functions +- Fixed equality of [`arguments`] +- Fixed [`repr`]of [`cmyk`]($color.cmyk) colors +- Fixed crashes with provided elements like figure captions, outline entries, + and footnote entries + +## Tooling and Diagnostics +- Show rules that match on their own output now produce an appropriate error + message instead of a crash (this is a first step, in the future they will just + work) +- Too highly or infinitely nested layouts now produce error messages instead of + crashes +- Added hints for invalid identifiers +- Added hint when trying to use a manually constructed footnote or outline entry +- Added missing details to autocompletions for types +- Improved error message when passing a named argument where a positional one is + expected +- Jump from click now works on raw blocks + +## Export +- PDF compilation output is now again fully byte-by-byte reproducible if the + document's [`date`]($document.date) is set manually +- Fixed color export in SVG +- Fixed PDF metadata encoding of multiple [authors]($document.author) + +## Command line interface +- Fixed a major bug where `typst watch` would confuse files and fail to pick up + updates +- Fetching of the release metadata in `typst update` now respects proxies +- Fixed bug with `--open` flag on Windows when the path contains a space +- The `TYPST_FONT_PATHS` environment variable can now contain multiple paths + (separated by `;` on Windows and `:` elsewhere) +- Updated embedded New Computer Modern fonts to version 4.7 +- The watching process doesn't stop anymore when the main file contains invalid + UTF-8 + +## Miscellaneous Improvements +- Parallelized image encoding in PDF export +- Improved the internal representation of content for improved performance +- Optimized introspection (query, counter, etc.) performance +- The [document title]($document.title) can now be arbitrary content instead of + just a string +- The [`number-align`]($enum.number-align) parameter on numbered lists now also + accepts vertical alignments +- Fixed selectors on [quote] elements +- Fixed parsing of `[#return]` expression in markup +- Fixed bug where inline equations were displayed in equation outlines +- Fixed potential CRLF issue in [`raw`] blocks +- Fixed a bug where Chinese numbering couldn't exceed the number 255 + +## Development +- Merged `typst` and `typst-library` and extracted `typst-pdf`, `typst-svg`, and + `typst-render` into separate crates +- The Nix flake now includes the git revision when running `typst --version` + +## Contributors +<contributors from="v0.9.0" to="v0.10.0" /> diff --git a/docs/changelog/0.11.0.md b/docs/changelog/0.11.0.md new file mode 100644 index 00000000..2a018e45 --- /dev/null +++ b/docs/changelog/0.11.0.md @@ -0,0 +1,270 @@ +--- +title: 0.11.0 +description: Changes in Typst 0.11.0 +--- + +# Version 0.11.0 (March 15, 2024) + +## Tables +- Tables are now _much_ more flexible, read the new + [table guide]($guides/table-guide) to get started +- Added [`table.cell`] element for per-cell configuration +- Cells can now span multiple [columns]($table.cell.colspan) or + [rows]($table.cell.rowspan) +- The [stroke]($table.cell.stroke) of individual cells can now be customized +- The [`align`]($table.align) and [`inset`]($table.inset) arguments of the table + function now also take `{(x, y) => ..}` functions +- Added [`table.hline`] and [`table.vline`] for convenient line customization +- Added [`table.header`] element for table headers that repeat on every page +- Added [`table.footer`] element for table footers that repeat on every page +- All the new table functionality is also available for [grids]($grid) +- Fixed gutter-related bugs + +_Thanks to [@PgBiel](https://github.com/PgBiel) for his work on tables!_ + +## Templates +- You can now use template packages to get started with new projects. Click + _Start from template_ on the web app's dashboard and choose your preferred + template or run the `typst init <template>` command in the CLI. You can + [browse the available templates here]($universe/search/?kind=templates). +- Switching templates after the fact has become easier. You can just import a + styling function from a different template package. +- Package authors can now submit their own templates to the + [package repository](https://github.com/typst/packages). Share a template + for a paper, your institution, or an original work to help the community get + a head start on their projects. +- Templates and packages are now organized by category and discipline. Filter + packages by either taxonomy in the _Start from template_ wizard. If you are a + package author, take a look at the new documentation for + [categories](https://github.com/typst/packages/blob/main/CATEGORIES.md) and + [disciplines](https://github.com/typst/packages/blob/main/DISCIPLINES.md). + +## Context +- Added _context expressions:_ Read the chapter on [context] to get started +- With context, you can access settable properties, e.g. `{context text.lang}` + to access the language set via `{set text(lang: "..")}` +- The following existing functions have been made contextual: [`query`], + [`locate`], [`measure`], [`counter.display`], [`counter.at`], + [`counter.final`], [`state.at`], and [`state.final`] +- Added contextual methods [`counter.get`] and [`state.get`] to retrieve the + value of a counter or state in the current context +- Added contextual function [`here`] to retrieve the [location] of the current + context +- The [`locate`] function now returns the location of a selector's unique match. + Its old behavior has been replaced by context expressions and only remains + temporarily available for compatibility. +- The [`counter.at`] and [`state.at`] methods are now more flexible: They + directly accept any kind of [locatable]($location/#locatable) selector with a + unique match (e.g. a label) instead of just locations +- When context is available, [`counter.display`] now directly returns the result + of applying the numbering instead of yielding opaque content. It should not be + used anymore without context. (Deprecation planned) +- The [`state.display`] function should not be used anymore, use [`state.get`] + instead (Deprecation planned) +- The `location` argument of [`query`], [`counter.final`], and [`state.final`] + should not be used anymore (Deprecation planned) +- The [`styles`]($measure.styles) argument of the `measure` function should not + be used anymore (Deprecation planned) +- The [`style`] function should not be used anymore, use context instead + (Deprecation planned) +- The correct context is now also provided in various other places where it is + available, e.g. in show rules, layout callbacks, and numbering functions in + the outline + +## Styling +- Fixed priority of multiple [show-set rules]($styling/#show-rules): They now + apply in the same order as normal set rules would +- Show-set rules on the same element (e.g. `{show heading.where(level: 1): set + heading(numbering: "1.")}`) now work properly +- Setting properties on an element within a transformational show rule (e.g. + `{show heading: it => { set heading(..); it }}`) is **not** supported anymore + (previously it also only worked sometimes); use show-set rules instead + **(Breaking change)** +- Text show rules that match their own output now work properly (e.g. + `` {show "cmd": `cmd`} ``) +- The elements passed to show rules and returned by queries now contain all + fields of their respective element functions rather than just specific ones +- All settable properties can now be used in [where]($function.where) selectors +- [And]($selector.and) and [or]($selector.or) selectors can now be used with + show rules +- Errors within show rules and context expressions are now ignored in all but + the last introspection iteration, in line with the behavior of the old + [`locate`] +- Fixed a bug where document set rules were allowed after content + +## Layout +- Added `reflow` argument to [`rotate`]($rotate) and [`scale`]($scale) which + lets them affect the layout +- Fixed a bug where [floating placement]($place.float) or + [floating figures]($figure.placement) could end up out of order +- Fixed overlap of text and figure for full-page floating figures +- Fixed various cases where the [`hide`] function didn't hide its contents + properly +- Fixed usage of [`h`] and [`v`] in [stacks]($stack) +- Invisible content like a counter update will no longer force a visible block + for just itself +- Fixed a bug with horizontal spacing followed by invisible content (like a + counter update) directly at the start of a paragraph + +## Text +- Added [`stroke`]($text.stroke) property for text +- Added basic i18n for Serbian and Catalan +- Added support for contemporary Japanese [numbering] method +- Added patches for various wrong metadata in specific fonts +- The [text direction]($text.dir) can now be overridden within a paragraph +- Fixed Danish [smart quotes]($smartquote) +- Fixed font fallback next to a line break +- Fixed width adjustment of JIS-style Japanese punctuation +- Fixed Finnish translation of "Listing" +- Fixed Z-ordering of multiple text decorations (underlines, etc.) +- Fixed a bug due to which text [features]($text.features) could not be + overridden in consecutive set rules + +## Model +- Added [`depth`]($heading.depth) and [`offset`]($heading.offset) arguments to + heading to increase or decrease the heading level for a bunch of content; the + heading syntax now sets `depth` rather than `level` **(Breaking change)** +- List [markers]($list.marker) now cycle by default +- The [`quote`] function now more robustly selects the correct quotes based on + language and nesting +- Fixed indent bugs related to the default show rule of [terms] + +## Math +- Inline equations now automatically linebreak at appropriate places +- Added [`number-align`]($math.equation.number-align) argument to equations +- Added support for adjusting the [`size`]($math.accent.size) of accents + relative to their base +- Improved positioning of accents +- [Primes]($math.primes) are now always attached as [scripts]($math.scripts) by + default +- Exposed [`math.primes`] element which backs the `[$f'$]` syntax in math +- Math mode is not affected by [`strong`] and [`emph`] anymore +- Fixed [`attach`]($math.attach) under [fractions]($math.frac) +- Fixed that [`math.class`] did not affect smart limit placement +- Fixed weak spacing in [`lr`]($math.lr) groups +- Fixed layout of large operators for Cambria Math font +- Fixed math styling of Hebrew symbol codepoints + +## Symbols +- Added `gradient` as an alias for `nabla` +- Added `partial` as an alias for `diff`, `diff` will be deprecated in the + future +- Added `colon.double`, `gt.approx`, `gt.napprox`, `lt.approx`, and `lt.napprox` +- Added `arrow.r.tilde` and `arrow.l.tilde` +- Added `tilde.dot` +- Added `forces` and `forces.not` +- Added `space.nobreak.narrow` +- Added `lrm` (Left-to-Right Mark) and `rlm` (Right-to-Left Mark) +- Fixed `star.stroked` symbol (which previously had the wrong codepoint) + +## Scripting +- Arrays can now be compared lexicographically +- Added contextual method [`to-absolute`]($length.to-absolute) to lengths +- Added [`calc.root`]($calc.root) +- Added [`int.signum`] and [`float.signum`] methods +- Added [`float.is-nan`] and [`float.is-infinite`] methods +- Added [`int.bit-not`], [`int.bit-and`], [`int.bit-or`], [`int.bit-xor`], + [`int.bit-lshift`], and [`int.bit-rshift`] methods +- Added [`array.chunks`] method +- A module can now be converted to a dictionary with the + [dictionary constructor]($dictionary/#constructor) to access its contents + dynamically +- Added [`row-type`]($csv.row-type) argument to `csv` function to configure + how rows will be represented +- [XML parsing]($xml) now allows DTDs (document type definitions) +- Improved formatting of negative numbers with [`str`]($str) and [`repr`]($repr) +- For loops can now iterate over [bytes] +- Fixed a bug with pattern matching in for loops +- Fixed a bug with labels not being part of [`{.fields()}`]($content.fields) + dictionaries +- Fixed a bug where unnamed argument sinks wouldn't capture excess arguments +- Fixed typo in `repr` output of strokes + +## Syntax +- Added support for nested [destructuring patterns]($scripting/#bindings) +- Special spaces (like thin or non-breaking spaces) are now parsed literally + instead of being collapsed into normal spaces **(Breaking change)** +- Korean text can now use emphasis syntax without adding spaces + **(Breaking change)** +- The token [`context`] is now a keyword and cannot be used as an identifier + anymore **(Breaking change)** +- Nested line comments aren't allowed anymore in block comments + **(Breaking change)** +- Fixed a bug where `x.)` would be treated as a field access +- Text elements can now span across curly braces in markup +- Fixed silently wrong parsing when function name is parenthesized +- Fixed various bugs with parsing of destructuring patterns, arrays, and + dictionaries + +## Tooling & Diagnostics +- Click-to-jump now works properly within [`raw`] text +- Added suggestion for accessing a field if a method doesn't exist +- Improved hint for calling a function stored in a dictionary +- Improved errors for mutable accessor functions on arrays and dictionaries +- Fixed error message when calling constructor of type that doesn't have one +- Fixed confusing error message with nested dictionaries for strokes on + different sides +- Fixed autocompletion for multiple packages with the same name from different + namespaces + +## Visualization +- The [`image`] function doesn't upscale images beyond their natural size + anymore +- The [`image`] function now respects rotation stored in EXIF metadata +- Added support for SVG filters +- Added alpha component to [`luma`]($color.luma) colors +- Added [`color.transparentize`] and [`color.opacify`] methods +- Improved [`color.negate`] function +- Added [`stroke`]($highlight.stroke) and [`radius`]($highlight.radius) + arguments to `highlight` function +- Changed default [`highlight`] color to be transparent +- CMYK to RGB conversion is now color-managed +- Fixed crash with gradients in Oklch color space +- Fixed color-mixing for hue-based spaces +- Fixed bugs with color conversion +- SVG sizes are not rounded anymore, preventing slightly wrong aspect ratios +- Fixed a few other SVG-related bugs +- [`color.components`] doesn't round anything anymore + +## Export +- PDFs now contain named destinations for headings derived from their labels +- The internal PDF structure was changed to make it easier for external tools to + extract or modify individual pages, avoiding a bug with Typst PDFs in Apple + Preview +- PDFs produced by Typst should now be byte-by-byte reproducible when + `{set document(date: none)}` is set +- Added missing flag to PDF annotation +- Fixed multiple bugs with gradients in PDF export +- Fixed a bug with patterns in PDF export +- Fixed a bug with embedding of grayscale images in PDF export +- Fixed a bug with To-Unicode mapping of CFF fonts in PDF export +- Fixed a bug with the generation of the PDF outline +- Fixed a sorting bug in PDF export leading to non-reproducible output +- Fixed a bug with transparent text in PNG export +- Exported SVG files now include units in their top-level `width` and `height` + +## Command line interface +- Added support for passing [inputs]($category/foundations/sys) via a CLI flag +- When passing the filename `-`, Typst will now read input from stdin +- Now uses the system-native TLS implementation for network fetching which + should be generally more robust +- Watch mode will now properly detect when a previously missing file is created +- Added `--color` flag to configure whether to print colored output +- Fixed user agent with which packages are downloaded +- Updated bundled fonts to the newest versions + +## Development +- Added `--vendor-openssl` to CLI to configure whether to link OpenSSL + statically instead of dynamically (not applicable to Windows and Apple + platforms) +- Removed old tracing (and its verbosity) flag from the CLI +- Added new `--timings` flag which supersedes the old flamegraph profiling in + the CLI +- Added minimal CLI to `typst-docs` crate for extracting the language and + standard library documentation as JSON +- The `typst_pdf::export` function's `ident` argument switched from `Option` to + `Smart`. It should only be set to `Smart::Custom` if you can provide a stable + identifier (like the web app can). The CLI sets `Smart::Auto`. + +## Contributors +<contributors from="v0.10.0" to="v0.11.0" /> diff --git a/docs/changelog/0.11.1.md b/docs/changelog/0.11.1.md new file mode 100644 index 00000000..3269c558 --- /dev/null +++ b/docs/changelog/0.11.1.md @@ -0,0 +1,62 @@ +--- +title: 0.11.1 +description: Changes in Typst 0.11.1 +--- + +# Version 0.11.1 (May 17, 2024) + +## Security +- Fixed a vulnerability where image files at known paths could be embedded into + the PDF even if they were outside of the project directory + +## Bibliography +- Fixed et-al handling in subsequent citations +- Fixed suppression of title for citations and bibliography references with no + author +- Fixed handling of initials in citation styles without a delimiter +- Fixed bug with citations in footnotes + +## Text and Layout +- Fixed interaction of [`first-line-indent`]($par.first-line-indent) and + [`outline`] +- Fixed compression of CJK punctuation marks at line start and end +- Fixed handling of [rectangles]($rect) with negative dimensions +- Fixed layout of [`path`] in explicitly sized container +- Fixed broken [`raw`] text in right-to-left paragraphs +- Fixed tab rendering in `raw` text with language `typ` or `typc` +- Fixed highlighting of multi-line `raw` text enclosed by single backticks +- Fixed indentation of overflowing lines in `raw` blocks +- Fixed extra space when `raw` text ends with a backtick + +## Math +- Fixed broken [equations]($math.equation) in right-to-left paragraphs +- Fixed missing [blackboard bold]($math.bb) letters +- Fixed error on empty arguments in 2D math argument list +- Fixed stretching via [`mid`]($math.mid) for various characters +- Fixed that alignment points in equations were affected by `{set align(..)}` + +## Export +- Fixed [smart quotes]($smartquote) in PDF outline +- Fixed [patterns]($pattern) with spacing in PDF +- Fixed wrong PDF page labels when [page numbering]($page.numbering) was + disabled after being previously enabled + +## Scripting +- Fixed overflow for large numbers in external data files (by converting to + floats instead) +- Fixed [`{str.trim(regex, at: end)}`]($str.trim) when the whole string is + matched + +## Miscellaneous +- Fixed deformed strokes for specific shapes and thicknesses +- Fixed newline handling in code mode: There can now be comments within chained + method calls and between an `if` branch and the `else` keyword +- Fixed inefficiency with incremental reparsing +- Fixed autocompletions for relative file imports +- Fixed crash in autocompletion handler +- Fixed a bug where the path and entrypoint printed by `typst init` were not + properly escaped +- Fixed various documentation errors + +## Contributors +<contributors from="v0.11.0" to="v0.11.1" /> diff --git a/docs/changelog/0.2.0.md b/docs/changelog/0.2.0.md new file mode 100644 index 00000000..294e832b --- /dev/null +++ b/docs/changelog/0.2.0.md @@ -0,0 +1,47 @@ +--- +title: 0.2.0 +description: Changes in Typst 0.2.0 +--- + +# Version 0.2.0 (April 11, 2023) + +## Breaking changes +- Removed support for iterating over index and value in + [for loops]($scripting/#loops). This is now handled via unpacking and + enumerating. Same goes for the [`map`]($array.map) method. +- [Dictionaries]($dictionary) now iterate in insertion order instead of + alphabetical order. + +## New features +- Added [unpacking syntax]($scripting/#bindings) for let bindings, which allows + things like `{let (1, 2) = array}` +- Added [`enumerate`]($array.enumerate) method +- Added [`path`] function for drawing Bézier paths +- Added [`layout`] function to access the size of the surrounding page or + container +- Added `key` parameter to [`sorted`]($array.sorted) method + +## Command line interface +- Fixed `--open` flag blocking the program +- New Computer Modern font is now embedded into the binary +- Shell completions and man pages can now be generated by setting the + `GEN_ARTIFACTS` environment variable to a target directory and then building + Typst + +## Miscellaneous improvements +- Fixed page numbering in outline +- Added basic i18n for a few more languages (AR, NB, CS, NN, PL, SL, ES, UA, VI) +- Added a few numbering patterns (Ihora, Chinese) +- Added `sinc` [operator]($math.op) +- Fixed bug where math could not be hidden with [`hide`] +- Fixed sizing issues with box, block, and shapes +- Fixed some translations +- Fixed inversion of "R" in [`cal`]($math.cal) and [`frak`]($math.frak) styles +- Fixed some styling issues in math +- Fixed supplements of references to headings +- Fixed syntax highlighting of identifiers in certain scenarios +- [Ratios]($ratio) can now be multiplied with more types and be converted to + [floats]($float) with the [`float`] function + +## Contributors +<contributors from="v0.1.0" to="v0.2.0" /> diff --git a/docs/changelog/0.3.0.md b/docs/changelog/0.3.0.md new file mode 100644 index 00000000..dda47b69 --- /dev/null +++ b/docs/changelog/0.3.0.md @@ -0,0 +1,77 @@ +--- +title: 0.3.0 +description: Changes in Typst 0.3.0 +--- + +# Version 0.3.0 (April 26, 2023) + +## Breaking changes +- Renamed a few symbols: What was previous `dot.op` is now just `dot` and the + basic dot is `dot.basic`. The same applies to `ast` and `tilde`. +- Renamed `mod` to [`rem`]($calc.rem) to more accurately reflect the behavior. + It will remain available as `mod` until the next update as a grace period. +- A lone underscore is not a valid identifier anymore, it can now only be used + in patterns +- Removed `before` and `after` arguments from [`query`]. This is now handled + through flexible [selectors]($selector) combinator methods +- Added support for [attachments]($math.attach) (sub-, superscripts) that + precede the base symbol. The `top` and `bottom` arguments have been renamed to + `t` and `b`. + +## New features +- Added support for more complex [strokes]($stroke) (configurable caps, joins, + and dash patterns) +- Added [`cancel`]($math.cancel) function for equations +- Added support for [destructuring]($scripting/#bindings) in argument lists and + assignments +- Added [`alt`]($image.alt) text argument to image function +- Added [`toml`] function for loading data from a TOML file +- Added [`zip`]($array.zip), [`sum`]($array.sum), and + [`product`]($array.product) methods for arrays +- Added `fact`, `perm`, `binom`, `gcd`, `lcm`, `atan2`, `quo`, `trunc`, and + `fract` [calculation]($category/foundations/calc) functions + +## Improvements +- Text in SVGs now displays properly +- Typst now generates a PDF heading outline +- [References]($ref) now provides the referenced element as a field in show + rules +- Refined linebreak algorithm for better Chinese justification +- Locations are now a valid kind of selector +- Added a few symbols for algebra +- Added Spanish smart quote support +- Added [`selector`] function to turn a selector-like value into a selector on + which combinator methods can be called +- Improved some error messages +- The outline and bibliography headings can now be styled with show-set rules +- Operations on numbers now produce an error instead of overflowing + +## Bug fixes +- Fixed wrong linebreak before punctuation that follows inline equations, + citations, and other elements +- Fixed a bug with [argument sinks]($arguments) +- Fixed strokes with thickness zero +- Fixed hiding and show rules in math +- Fixed alignment in matrices +- Fixed some alignment bugs in equations +- Fixed grid cell alignment +- Fixed alignment of list marker and enum markers in presence of global + alignment settings +- Fixed [path]($path) closing +- Fixed compiler crash with figure references +- A single trailing line breaks is now ignored in math, just like in text + +## Command line interface +- Font path and compilation root can now be set with the environment variables + `TYPST_FONT_PATHS` and `TYPST_ROOT` +- The output of `typst fonts` now includes the embedded fonts + +## Development +- Added instrumentation for debugging and optimization +- Added `--update` flag and `UPDATE_EXPECT` environment variable to update + reference images for tests +- You can now run a specific subtest with `--subtest` +- Tests now run on multiple threads + +## Contributors +<contributors from="v0.2.0" to="v0.3.0" /> diff --git a/docs/changelog/0.4.0.md b/docs/changelog/0.4.0.md new file mode 100644 index 00000000..a5c30cdd --- /dev/null +++ b/docs/changelog/0.4.0.md @@ -0,0 +1,106 @@ +--- +title: 0.4.0 +description: Changes in Typst 0.4.0 +--- + +# Version 0.4.0 (May 20, 2023) + +## Footnotes +- Implemented support for footnotes +- The [`footnote`] function inserts a footnote +- The [`footnote.entry`]($footnote.entry) function can be used to customize the + footnote listing +- The `{"chicago-notes"}` [citation style]($cite.style) is now available + +## Documentation +- Added a [Guide for LaTeX users]($guides/guide-for-latex-users) +- Now shows default values for optional arguments +- Added richer outlines in "On this Page" +- Added initial support for search keywords: "Table of Contents" will now find + the [outline] function. Suggestions for more keywords are welcome! +- Fixed issue with search result ranking +- Fixed many more small issues + +## Math +- **Breaking change**: Alignment points (`&`) in equations now alternate between + left and right alignment +- Added support for writing roots with Unicode: For example, `[$root(x+y)$]` can + now also be written as `[$√(x+y)$]` +- Fixed uneven vertical [`attachment`]($math.attach) alignment +- Fixed spacing on decorated elements (e.g., spacing around a + [canceled]($math.cancel) operator) +- Fixed styling for stretchable symbols +- Added `tack.r.double`, `tack.l.double`, `dotless.i` and `dotless.j` + [symbols]($category/symbols/sym) +- Fixed show rules on symbols (e.g. `{show sym.tack: set text(blue)}`) +- Fixed missing rename from `ast.op` to `ast` that should have been in the + previous release + +## Scripting +- Added function scopes: A function can now hold related definitions in its own + scope, similar to a module. The new [`assert.eq`]($assert.eq) function, for + instance, is part of the [`assert`] function's scope. Note that function + scopes are currently only available for built-in functions. +- Added [`assert.eq`]($assert.eq) and [`assert.ne`]($assert.ne) functions for + simpler equality and inequality assertions with more helpful error messages +- Exposed [list]($list.item), [enum]($enum.item), and [term list]($terms.item) + items in their respective functions' scope +- The `at` methods on [strings]($str.at), [arrays]($array.at), + [dictionaries]($dictionary.at), and [content]($content.at) now support + specifying a default value +- Added support for passing a function to [`replace`]($str.replace) that is + called with each match. +- Fixed [replacement]($str.replace) strings: They are now inserted completely + verbatim instead of supporting the previous (unintended) magic dollar syntax + for capture groups +- Fixed bug with trailing placeholders in destructuring patterns +- Fixed bug with underscore in parameter destructuring +- Fixed crash with nested patterns and when hovering over an invalid pattern +- Better error messages when casting to an [integer]($int) or [float]($float) + fails + +## Text and Layout +- Implemented sophisticated CJK punctuation adjustment +- Disabled [overhang]($text.overhang) for CJK punctuation +- Added basic translations for Traditional Chinese +- Fixed [alignment]($raw.align) of text inside raw blocks (centering a raw + block, e.g. through a figure, will now keep the text itself left-aligned) +- Added support for passing a array instead of a function to configure table + cell [alignment]($table.align) and [fill]($table.fill) per column +- Fixed automatic figure [`kind`]($figure.kind) detection +- Made alignment of [enum numbers]($enum.number-align) configurable, defaulting + to `end` +- Figures can now be made breakable with a show-set rule for blocks in figure +- Initial fix for smart quotes in RTL languages + +## Export +- Fixed ligatures in PDF export: They are now copyable and searchable +- Exported PDFs now embed ICC profiles for images that have them +- Fixed export of strokes with zero thickness + +## Web app +- Projects can now contain folders +- Added upload by drag-and-drop into the file panel +- Files from the file panel can now be dragged into the editor to insert them + into a Typst file +- You can now copy-paste images and other files from your computer directly into + the editor +- Added a button to resend confirmation email +- Added an option to invert preview colors in dark mode +- Added tips to the loading screen and the Help menu. Feel free to propose more! +- Added syntax highlighting for YAML files +- Allowed middle mouse button click on many buttons to navigate into a new tab +- Allowed more project names +- Fixed overridden Vim mode keybindings +- Fixed many bugs regarding file upload and more + +## Miscellaneous Improvements +- Improved performance of counters, state, and queries +- Improved incremental parsing for more efficient recompilations +- Added support for `.yaml` extension in addition to `.yml` for bibliographies +- The CLI now emits escape codes only if the output is a TTY +- For users of the `typst` crate: The `Document` is now `Sync` again and the + `World` doesn't have to be `'static` anymore + +## Contributors +<contributors from="v0.3.0" to="v0.4.0" /> diff --git a/docs/changelog/0.5.0.md b/docs/changelog/0.5.0.md new file mode 100644 index 00000000..19a90ea5 --- /dev/null +++ b/docs/changelog/0.5.0.md @@ -0,0 +1,68 @@ +--- +title: 0.5.0 +description: Changes in Typst 0.5.0 +--- + +# Version 0.5.0 (June 9, 2023) + +## Text and Layout +- Added [`raw`] syntax highlighting for many more languages +- Added support for Korean [numbering] +- Added basic i18n for a few more languages (NL, SV, DA) +- Improved line breaking for East Asian languages +- Expanded functionality of outline [`indent`]($outline.indent) property +- Fixed footnotes in columns +- Fixed page breaking bugs with [footnotes]($footnote) +- Fixed bug with handling of footnotes in lists, tables, and figures +- Fixed a bug with CJK punctuation adjustment +- Fixed a crash with rounded rectangles +- Fixed alignment of [`line`] elements + +## Math +- **Breaking change:** The syntax rules for mathematical + [attachments]($math.attach) were improved: `[$f^abs(3)$]` now parses as + `[$f^(abs(3))$]` instead of `[$(f^abs)(3)$]`. To disambiguate, add a space: + `[$f^zeta (3)$]`. +- Added [forced size]($category/math/sizes) commands for math (e.g., + [`display`]($math.display)) +- Added [`supplement`]($math.equation.supplement) parameter to + [`equation`]($math.equation), used by [references]($ref) +- New [symbols]($category/symbols/sym): `bullet`, `xor`, `slash.big`, + `sigma.alt`, `tack.r.not`, `tack.r.short`, `tack.r.double.not` +- Fixed a bug with symbols in matrices +- Fixed a crash in the [`attach`]($math.attach) function + +## Scripting +- Added new [`datetime`] type and [`datetime.today`]($datetime.today) to + retrieve the current date +- Added [`str.from-unicode`]($str.from-unicode) and + [`str.to-unicode`]($str.to-unicode) functions +- Added [`fields`]($content.fields) method on content +- Added `base` parameter to [`str`] function +- Added [`calc.exp`]($calc.exp) and [`calc.ln`]($calc.ln) +- Improved accuracy of [`calc.pow`]($calc.pow) and [`calc.log`]($calc.log) for + specific bases +- Fixed [removal]($dictionary.remove) order for dictionary +- Fixed `.at(default: ..)` for [strings]($str.at) and [content]($content.at) +- Fixed field access on styled elements +- Removed deprecated `calc.mod` function + +## Command line interface +- Added PNG export via `typst compile source.typ output-{n}.png`. The output + path must contain `[{n}]` if the document has multiple pages. +- Added `--diagnostic-format=short` for Unix-style short diagnostics +- Doesn't emit color codes anymore if stderr isn't a TTY +- Now sets the correct exit when invoked with a nonexistent file +- Now ignores UTF-8 BOM in Typst files + +## Miscellaneous Improvements +- Improved errors for mismatched delimiters +- Improved error message for failed length comparisons +- Fixed a bug with images not showing up in Apple Preview +- Fixed multiple bugs with the PDF outline +- Fixed citations and other searchable elements in [`hide`] +- Fixed bugs with [reference supplements]($ref.supplement) +- Fixed Nix flake + +## Contributors +<contributors from="v0.4.0" to="v0.5.0" /> diff --git a/docs/changelog/0.6.0.md b/docs/changelog/0.6.0.md new file mode 100644 index 00000000..f81afefc --- /dev/null +++ b/docs/changelog/0.6.0.md @@ -0,0 +1,66 @@ +--- +title: 0.6.0 +description: Changes in Typst 0.6.0 +--- + +# Version 0.6.0 (June 30, 2023) + +## Package Management +- Typst now has built-in [package management]($scripting/#packages) +- You can import [published]($universe) community packages or create and use + [system-local](https://github.com/typst/packages#local-packages) ones +- Published packages are also supported in the web app + +## Math +- Added support for optical size variants of glyphs in math mode +- Added argument to enable [`limits`]($math.limits) conditionally depending on + whether the equation is set in [`display`]($math.display) or + [`inline`]($math.inline) style +- Added `gt.eq.slant` and `lt.eq.slant` symbols +- Increased precedence of factorials in math mode (`[$1/n!$]` works correctly + now) +- Improved [underlines]($math.underline) and [overlines]($math.overline) in math + mode +- Fixed usage of [`limits`]($math.limits) function in show rules +- Fixed bugs with line breaks in equations + +## Text and Layout +- Added support for alternating page [margins]($page.margin) with the `inside` + and `outside` keys +- Added support for specifying the page [`binding`]($page.binding) +- Added [`to`]($pagebreak.to) argument to pagebreak function to skip to the next + even or odd page +- Added basic i18n for a few more languages (TR, SQ, TL) +- Fixed bug with missing table row at page break +- Fixed bug with [underlines]($underline) +- Fixed bug superfluous table lines +- Fixed smart quotes after line breaks +- Fixed a crash related to text layout + +## Command line interface +- **Breaking change:** Added requirement for `--root`/`TYPST_ROOT` directory to + contain the input file because it designates the _project_ root. Existing + setups that use `TYPST_ROOT` to emulate package management should switch to + [local packages](https://github.com/typst/packages#local-packages) +- **Breaking change:** Now denies file access outside of the project root +- Added support for local packages and on-demand package download +- Now watches all relevant files, within the root and all packages +- Now displays compilation time + +## Miscellaneous Improvements +- Added [`outline.entry`]($outline.entry) to customize outline entries with show + rules +- Added some hints for error messages +- Added some missing syntaxes for [`raw`] highlighting +- Improved rendering of rotated images in PNG export and web app +- Made [footnotes]($footnote) reusable and referenceable +- Fixed bug with citations and bibliographies in [`locate`] +- Fixed inconsistent tense in documentation + +## Development +- Added [contribution guide](https://github.com/typst/typst/blob/main/CONTRIBUTING.md) +- Reworked `World` interface to accommodate for package management and make it a + bit simpler to implement _(Breaking change for implementors)_ + +## Contributors +<contributors from="v0.5.0" to="v0.6.0" /> diff --git a/docs/changelog/0.7.0.md b/docs/changelog/0.7.0.md new file mode 100644 index 00000000..9ea2ec21 --- /dev/null +++ b/docs/changelog/0.7.0.md @@ -0,0 +1,142 @@ +--- +title: 0.7.0 +description: Changes in Typst 0.7.0 +--- + +# Version 0.7.0 (August 7, 2023) + +## Text and Layout +- Added support for floating figures through the + [`placement`]($figure.placement) argument on the figure function +- Added support for arbitrary floating content through the + [`float`]($place.float) argument on the place function +- Added support for loading `.sublime-syntax` files as highlighting + [syntaxes]($raw.syntaxes) for raw blocks +- Added support for loading `.tmTheme` files as highlighting + [themes]($raw.theme) for raw blocks +- Added _bounds_ option to [`top-edge`]($text.top-edge) and + [`bottom-edge`]($text.bottom-edge) arguments of text function for tight + bounding boxes +- Removed nonsensical top- and bottom-edge options, e.g. _ascender_ for the + bottom edge **(Breaking change)** +- Added [`script`]($text.script) argument to text function +- Added [`alternative`]($smartquote.alternative) argument to smart quote + function +- Added basic i18n for Japanese +- Added hyphenation support for `nb` and `nn` language codes in addition to `no` +- Fixed positioning of [placed elements]($place) in containers +- Fixed overflowing containers due to optimized line breaks + +## Export +- Greatly improved export of SVG images to PDF. Many thanks to + [@LaurenzV](https://github.com/LaurenzV) for their work on this. +- Added support for the alpha channel of RGBA colors in PDF export +- Fixed a bug with PPI (pixels per inch) for PNG export + +## Math +- Improved layout of primes (e.g. in `[$a'_1$]`) +- Improved display of multi-primes (e.g. in `[$a''$]`) +- Improved layout of [roots]($math.root) +- Changed relations to show attachments as [limits]($math.limits) by default + (e.g. in `[$a ->^x b$]`) +- Large operators and delimiters are now always vertically centered +- [Boxes]($box) in equations now sit on the baseline instead of being vertically + centered by default. Notably, this does not affect [blocks]($block) because + they are not inline elements. +- Added support for [weak spacing]($h.weak) +- Added support for OpenType character variants +- Added support for customizing the [math class]($math.class) of content +- Fixed spacing around `.`, `\/`, and `...` +- Fixed spacing between closing delimiters and large operators +- Fixed a bug with math font weight selection +- Symbols and Operators **(Breaking changes)** + - Added `id`, `im`, and `tr` text [operators]($math.op) + - Renamed `ident` to `equiv` with alias `eq.triple` and removed `ident.strict` + in favor of `eq.quad` + - Renamed `ast.sq` to `ast.square` and `integral.sq` to `integral.square` + - Renamed `.eqq` modifier to `.equiv` (and `.neqq` to `.nequiv`) for `tilde`, + `gt`, `lt`, `prec`, and `succ` + - Added `emptyset` as alias for `nothing` + - Added `lt.curly` and `gt.curly` as aliases for `prec` and `succ` + - Added `aleph`, `beth`, and `gimmel` as alias for `alef`, `bet`, and `gimel` + +## Scripting +- Fields + - Added `abs` and `em` field to [lengths]($length) + - Added `ratio` and `length` field to [relative lengths]($relative) + - Added `x` and `y` field to [2d alignments]($align.alignment) + - Added `paint`, `thickness`, `cap`, `join`, `dash`, and `miter-limit` field + to [strokes]($stroke) +- Accessor and utility methods + - Added [`dedup`]($array.dedup) method to arrays + - Added `pt`, `mm`, `cm`, and `inches` method to [lengths]($length) + - Added `deg` and `rad` method to [angles]($angle) + - Added `kind`, `hex`, `rgba`, `cmyk`, and `luma` method to [colors]($color) + - Added `axis`, `start`, `end`, and `inv` method to [directions]($stack.dir) + - Added `axis` and `inv` method to [alignments]($align.alignment) + - Added `inv` method to [2d alignments]($align.alignment) + - Added `start` argument to [`enumerate`]($array.enumerate) method on arrays +- Added [`color.mix`]($color.mix) function +- Added `mode` and `scope` arguments to [`eval`] function +- Added [`bytes`] type for holding large byte buffers + - Added [`encoding`]($read.encoding) argument to read function to read a file + as bytes instead of a string + - Added [`image.decode`]($image.decode) function for decoding an image + directly from a string or bytes + - Added [`bytes`] function for converting a string or an array of integers to + bytes + - Added [`array`] function for converting bytes to an array of integers + - Added support for converting bytes to a string with the [`str`] function + +## Tooling and Diagnostics +- Added support for compiler warnings +- Added warning when compilation does not converge within five attempts due to + intense use of introspection features +- Added warnings for empty emphasis (`__` and `**`) +- Improved error message for invalid field assignments +- Improved error message after single `#` +- Improved error message when a keyword is used where an identifier is expected +- Fixed parameter autocompletion for functions that are in modules +- Import autocompletion now only shows the latest package version until a colon + is typed +- Fixed autocompletion for dictionary key containing a space +- Fixed autocompletion for `for` loops + +## Command line interface +- Added `typst query` subcommand to execute a + [query]($reference/introspection/query/#command-line-queries) on the command + line +- The `--root` and `--font-paths` arguments cannot appear in front of the + command anymore **(Breaking change)** +- Local and cached packages are now stored in directories of the form + `[{namespace}/{name}/{version}]` instead of `[{namespace}/{name}-{version}]` + **(Breaking change)** +- Now prioritizes explicitly given fonts (via `--font-paths`) over system and + embedded fonts when both exist +- Fixed `typst watch` not working with some text editors +- Fixed displayed compilation time (now includes export) + +## Miscellaneous Improvements +- Added [`bookmarked`]($heading.bookmarked) argument to heading to control + whether a heading becomes part of the PDF outline +- Added [`caption-pos`]($figure.caption.position) argument to control the + position of a figure's caption +- Added [`metadata`] function for exposing an arbitrary value to the + introspection system +- Fixed that a [`state`] was identified by the pair `(key, init)` instead of + just its `key` +- Improved indent logic of [enumerations]($enum). Instead of requiring at least + as much indent as the end of the marker, they now require only one more space + indent than the start of the marker. As a result, even long markers like `12.` + work with just 2 spaces of indent. +- Fixed bug with indent logic of [`raw`] blocks +- Fixed a parsing bug with dictionaries + +## Development +- Extracted parser and syntax tree into `typst-syntax` crate +- The `World::today` implementation of Typst dependents may need fixing if they + have the same [bug](https://github.com/typst/typst/issues/1842) that the CLI + world had + +## Contributors +<contributors from="v0.6.0" to="v0.7.0" /> diff --git a/docs/changelog/0.8.0.md b/docs/changelog/0.8.0.md new file mode 100644 index 00000000..330cdf1b --- /dev/null +++ b/docs/changelog/0.8.0.md @@ -0,0 +1,124 @@ +--- +title: 0.8.0 +description: Changes in Typst 0.8.0 +--- + +# Version 0.8.0 (September 13, 2023) + +## Scripting +- Plugins (thanks to [@astrale-sharp](https://github.com/astrale-sharp) and + [@arnaudgolfouse](https://github.com/arnaudgolfouse)) + - Typst can now load [plugins]($plugin) that are compiled to WebAssembly + - Anything that can be compiled to WebAssembly can thus be loaded as a plugin + - These plugins are fully encapsulated (no access to file system or network) + - Plugins can be shipped as part of [packages]($scripting/#packages) + - Plugins work just the same in the web app +- Types are now first-class values **(Breaking change)** + - A [type] is now itself a value + - Some types can be called like functions (those that have a constructor), + e.g. [`int`] and [`str`] + - Type checks are now of the form `{type(10) == int}` instead of the old + `{type(10) == "integer"}`. [Compatibility]($type/#compatibility) with the + old way will remain for a while to give package authors time to upgrade, but + it will be removed at some point. + - Methods are now syntax sugar for calling a function scoped to a type, + meaning that `{"hello".len()}` is equivalent to `{str.len("hello")}` +- Added support for [`import`]($scripting/#modules) renaming with `as` +- Added a [`duration`] type +- Added support for [CBOR]($cbor) encoding and decoding +- Added encoding and decoding functions from and to bytes for data formats: + [`json.decode`]($json.decode), [`json.encode`]($json.encode), and similar + functions for other formats +- Added [`array.intersperse`]($array.intersperse) function +- Added [`str.rev`]($str.rev) function +- Added `calc.tau` constant +- Made [bytes] joinable and addable +- Made [`array.zip`]($array.zip) function variadic +- Fixed bug with [`eval`] when the `mode` was set to `{"math"}` +- Fixed bug with [`ends-with`]($str.ends-with) function on strings +- Fixed bug with destructuring in combination with break, continue, and return +- Fixed argument types of [hyperbolic functions]($calc.cosh), they don't allow + angles anymore **(Breaking change)** +- Renamed some color methods: `rgba` becomes `to-rgba`, `cmyk` becomes + `to-cmyk`, and `luma` becomes `to-luma` **(Breaking change)** + +## Export +- Added SVG export (thanks to [@Enter-tainer](https://github.com/Enter-tainer)) +- Fixed bugs with PDF font embedding +- Added support for page labels that reflect the + [page numbering]($page.numbering) style in the PDF + +## Text and Layout +- Added [`highlight`] function for highlighting text with a background color +- Added [`polygon.regular`]($polygon.regular) function for drawing a regular + polygon +- Added support for tabs in [`raw`] elements alongside + [`tab-width`]($raw.tab-size) parameter +- The layout engine now tries to prevent "runts" (final lines consisting of just + a single word) +- Added Finnish translations +- Added hyphenation support for Polish +- Improved handling of consecutive smart quotes of different kinds +- Fixed vertical alignments for [`number-align`]($page.number-align) argument on + page function **(Breaking change)** +- Fixed weak pagebreaks after counter updates +- Fixed missing text in SVG when the text font is set to "New Computer Modern" +- Fixed translations for Chinese +- Fixed crash for empty text in show rule +- Fixed leading spaces when there's a linebreak after a number and a comma +- Fixed placement of floating elements in columns and other containers +- Fixed sizing of block containing just a single box + +## Math +- Added support for [augmented matrices]($math.mat.augment) +- Removed support for automatic matching of fences like `|` and `||` as + there were too many false positives. You can use functions like + [`abs`]($math.abs) or [`norm`]($math.norm) or an explicit [`lr`]($math.lr) + call instead. **(Breaking change)** +- Fixed spacing after number with decimal point in math +- Fixed bug with primes in subscript +- Fixed weak spacing +- Fixed crash when text within math contains a newline + +## Tooling and Diagnostics +- Added hints when trying to call a function stored in a dictionary without + extra parentheses +- Fixed hint when referencing an equation without numbering +- Added more details to some diagnostics (e.g. when SVG decoding fails) + +## Command line interface +- Added `typst update` command for self-updating the CLI + (thanks to [@jimvdl](https://github.com/jimvdl)) +- Added download progress indicator for packages and updates +- Added `--format` argument to explicitly specify the output format +- The CLI now respects proxy configuration through environment variables and has + a new `--cert` option for setting a custom CA certificate +- Fixed crash when field wasn't present and `--one` is passed to `typst query` + +## Miscellaneous Improvements +- Added [page setup guide]($guides/page-setup-guide) +- Added [`figure.caption`]($figure.caption) function that can be used for + simpler figure customization (**Breaking change** because `it.caption` now + renders the full caption with supplement in figure show rules and manual + outlines) +- Moved `caption-pos` argument to `figure.caption` function and renamed it to + `position` **(Breaking change)** +- Added [`separator`]($figure.caption.separator) argument to `figure.caption` + function +- Added support for combination of and/or and before/after + [selectors]($selector) +- Packages can now specify a + [minimum compiler version](https://github.com/typst/packages#package-format) + they require to work +- Fixed parser bug where method calls could be moved onto their own line for + `[#let]` expressions in markup **(Breaking change)** +- Fixed bugs in sentence and title case conversion for bibliographies +- Fixed supplements for alphanumeric and author-title bibliography styles +- Fixed off-by-one error in APA bibliography style + +## Development +- Made `Span` and `FileId` more type-safe so that all error conditions must be + handled by `World` implementors + +## Contributors +<contributors from="v0.7.0" to="v0.8.0" /> diff --git a/docs/changelog/0.9.0.md b/docs/changelog/0.9.0.md new file mode 100644 index 00000000..0cf3c1bd --- /dev/null +++ b/docs/changelog/0.9.0.md @@ -0,0 +1,189 @@ +--- +title: 0.9.0 +description: Changes in Typst 0.9.0 +--- + +# Version 0.9.0 (October 31, 2023) + +## Bibliography management +- New bibliography engine based on [CSL](https://citationstyles.org/) (Citation + Style Language). Ships with about 100 commonly used citation styles and can + load custom `.csl` files. +- Added new [`form`]($cite.form) argument to the `cite` function to produce + different forms of citations (e.g. for producing a citation suitable for + inclusion in prose) +- The [`cite`] function now takes only a single label/key instead of allowing + multiple. Adjacent citations are merged and formatted according to the + citation style's rules automatically. This works both with the reference + syntax and explicit calls to the `cite` function. **(Breaking change)** +- The `cite` function now takes a [label] instead of a string + **(Breaking change)** +- Added [`full`]($bibliography.full) argument to bibliography function to print + the full bibliography even if not all works were cited +- Bibliography entries can now contain Typst equations (wrapped in `[$..$]` just + like in markup), this works both for `.yml` and `.bib` bibliographies +- The hayagriva YAML format was improved. See its + [changelog](https://github.com/typst/hayagriva/blob/main/CHANGELOG.md) for + more details. **(Breaking change)** +- A few bugs with `.bib` file parsing were fixed +- Removed `brackets` argument of `cite` function in favor of `form` + +## Visualization +- Gradients and colors (thanks to [@Dherse](https://github.com/Dherse)) + - Added support for [gradients]($gradient) on shapes and text + - Supports linear, radial, and conic gradients + - Added support for defining colors in more color spaces, including + [Oklab]($color.oklab), [Linear RGB(A)]($color.linear-rgb), + [HSL]($color.hsl), and [HSV]($color.hsv) + - Added [`saturate`]($color.saturate), [`desaturate`]($color.desaturate), and + [`rotate`]($color.rotate) functions on colors + - Added [`color.map`]($color/#predefined-color-maps) module with predefined + color maps that can be used with gradients + - Rename `kind` function on colors to [`space`]($color.space) + - Removed `to-rgba`, `to-cmyk`, and `to-luma` functions in favor of a new + [`components`]($color.components) function +- Improved rendering of [rectangles]($rect) with corner radius and varying + stroke widths +- Added support for properly clipping [boxes]($box.clip) and + [blocks]($block.clip) with a border radius +- Added `background` parameter to [`overline`], [`underline`], and [`strike`] + functions +- Fixed inaccurate color embedding in PDFs +- Fixed ICC profile handling for images embedded in PDFs + +## Text and Layout +- Added support for automatically adding proper + [spacing]($text.cjk-latin-spacing) between CJK and Latin text (enabled by + default) +- Added support for automatic adjustment of more CJK punctuation +- Added [`quote`] element for inserting inline and block quotes with optional + attributions +- Added [`raw.line`]($raw.line) element for customizing the display of + individual lines of raw text, e.g. to add line numbers while keeping proper + syntax highlighting +- Added support for per-side [inset]($table.inset) customization to table + function +- Added Hungarian and Romanian translations +- Added support for Czech hyphenation +- Added support for setting custom [smart quotes]($smartquote) +- The default [figure separator]($figure.caption.separator) now reacts to the + currently set language and region +- Improved line breaking of links / URLs (especially helpful for bibliographies + with many URLs) +- Improved handling of consecutive hyphens in justification algorithm +- Fixed interaction of justification and hanging indent +- Fixed a bug with line breaking of short lines without spaces when + justification is enabled +- Fixed font fallback for hyphen generated by hyphenation +- Fixed handling of word joiner and other no-break characters during hyphenation +- Fixed crash when hyphenating after an empty line +- Fixed line breaking of composite emoji like 🏳️🌈 +- Fixed missing text in some SVGs +- Fixed font fallback in SVGs +- Fixed behavior of [`to`]($pagebreak.to) argument on `pagebreak` function +- Fixed `{set align(..)}` for equations +- Fixed spacing around [placed]($place) elements +- Fixed coalescing of [`above`]($block.above) and [`below`]($block.below) + spacing if given in em units and the font sizes differ +- Fixed handling of `extent` parameter of [`underline`], [`overline`], and + [`strike`] functions +- Fixed crash for [floating placed elements]($place.float) with no specified + vertical alignment +- Partially fixed a bug with citations in footnotes + +## Math +- Added `gap` argument for [`vec`]($math.vec.gap), [`mat`]($math.mat.gap), and + [`cases`]($math.cases.gap) function +- Added `size` argument for [`abs`]($math.abs), [`norm`]($math.norm), + [`floor`]($math.floor), [`ceil`]($math.ceil), and [`round`]($math.round) + functions +- Added [`reverse`]($math.cases.reverse) parameter to cases function +- Added support for multinomial coefficients to [`binom`]($math.binom) function +- Removed `rotation` argument on [`cancel`]($math.cancel) function in favor of a + new and more flexible `angle` argument **(Breaking change)** +- Added `wide` constant, which inserts twice the spacing of `quad` +- Added `csch` and `sech` [operators]($math.op) +- `↼`, `⇀`, `↔`, and `⟷` can now be used as [accents]($math.accent) +- Added `integral.dash`, `integral.dash.double`, and `integral.slash` + [symbols]($category/symbols/sym) +- Added support for specifying negative indices for + [augmentation]($math.mat.augment) lines to position the line from the back +- Fixed default color of matrix [augmentation]($math.mat.augment) lines +- Fixed attachment of primes to inline expressions +- Math content now respects the text [baseline]($text.baseline) setting + +## Performance +- Fixed a bug related to show rules in templates which would effectively disable + incremental compilation in affected documents +- Micro-optimized code in several hot paths, which brings substantial + performance gains, in particular in incremental compilations +- Improved incremental parsing, which affects the whole incremental compilation + pipeline +- Added support for incremental parsing in the CLI +- Added support for incremental SVG encoding during PDF export, which greatly + improves export performance for documents with many SVG + +## Tooling and Diagnostics +- Improved autocompletion for variables that are in-scope +- Added autocompletion for package imports +- Added autocompletion for [labels]($label) +- Added tooltip that shows which variables a function captures (when hovering + over the equals sign or arrow of the function) +- Diagnostics are now deduplicated +- Improved diagnostics when trying to apply unary `+` or `-` to types that only + support binary `+` and `-` +- Error messages now state which label or citation key isn't present in the + document or its bibliography +- Fixed a bug where function argument parsing errors were shadowed by function + execution errors (e.g. when trying to call [`array.sorted`]($array.sorted) and + passing the key function as a positional argument instead of a named one). + +## Export +- Added support for configuring the document's creation + [`date`]($document.date). If the `date` is set to `{auto}` (the default), the + PDF's creation date will be set to the current date and time. +- Added support for configuring document [`keywords`]($document.keywords) +- Generated PDFs now contain PDF document IDs +- The PDF creator tool metadata now includes the Typst version + +## Web app +- Added version picker to pin a project to an older compiler version + (with support for Typst 0.6.0+) +- Fixed desyncs between editor and compiler and improved overall stability +- The app now continues to highlight the document when typing while the document + is being compiled + +## Command line interface +- Added support for discovering fonts through fontconfig +- Now clears the screen instead of resetting the terminal +- Now automatically picks correct file extension for selected output format +- Now only regenerates images for changed pages when using `typst watch` with + PNG or SVG export + +## Miscellaneous Improvements +- Added [`version`] type and `sys.version` constant specifying the current + compiler version. Can be used to gracefully support multiple versions. +- The U+2212 MINUS SIGN is now used when displaying a numeric value, in the + [`repr`] of any numeric value and to replace a normal hyphen in text mode when + before a digit. This improves, in particular, how negative integer values are + displayed in math mode. +- Added support for specifying a default value instead of failing for `remove` + function in [array]($array.remove) and [dictionary]($dictionary.remove) +- Simplified page setup guide examples +- Switched the documentation from using the word "hashtag" to the word "hash" + where appropriate +- Added support for [`array.zip`]($array.zip) without any further arguments +- Fixed crash when a plugin tried to read out of bounds memory +- Fixed crashes when handling infinite [lengths]($length) +- Fixed introspection (mostly bibliography) bugs due to weak page break close to + the end of the document + +## Development +- Extracted `typst::ide` into separate `typst_ide` crate +- Removed a few remaining `'static` bounds on `&dyn World` +- Removed unnecessary dependency, which reduces the binary size +- Fixed compilation of `typst` by itself (without `typst-library`) +- Fixed warnings with Nix flake when using `lib.getExe` + +## Contributors +<contributors from="v0.8.0" to="v0.9.0" /> diff --git a/docs/changelog/earlier.md b/docs/changelog/earlier.md new file mode 100644 index 00000000..cecc56e5 --- /dev/null +++ b/docs/changelog/earlier.md @@ -0,0 +1,309 @@ +--- +title: Earlier +description: Changes in early, unversioned Typst +--- + +# Changes in early, unversioned Typst + +## March 28, 2023 +- **Breaking changes:** + - Enumerations now require a space after their marker, that is, `[1.ok]` must + now be written as `[1. ok]` + - Changed default style for [term lists]($terms): Does not include a colon + anymore and has a bit more indent + +- Command line interface + - Added `--font-path` argument for CLI + - Embedded default fonts in CLI binary + - Fixed build of CLI if `git` is not installed + +- Miscellaneous improvements + - Added support for disabling [matrix]($math.mat) and [vector]($math.vec) + delimiters. Generally with `[#set math.mat(delim: none)]` or one-off with + `[$mat(delim: #none, 1, 2; 3, 4)$]`. + - Added [`separator`]($terms.separator) argument to term lists + - Added [`round`]($math.round) function for equations + - Numberings now allow zeros. To reset a counter, you can write + `[#counter(..).update(0)]` + - Added documentation for `{page()}` and `{position()}` methods on + [`location`] type + - Added symbols for double, triple, and quadruple dot accent + - Added smart quotes for Norwegian Bokmål + - Added Nix flake + - Fixed bibliography ordering in IEEE style + - Fixed parsing of decimals in math: `[$1.2/3.4$]` + - Fixed parsing of unbalanced delimiters in fractions: `[$1/(2 (x)$]` + - Fixed unexpected parsing of numbers as enumerations, e.g. in `[1.2]` + - Fixed combination of page fill and header + - Fixed compiler crash if [`repeat`] is used in page with automatic width + - Fixed [matrices]($math.mat) with explicit delimiter + - Fixed [`indent`]($terms.indent) property of term lists + - Numerous documentation fixes + - Links in bibliographies are now affected by link styling + - Fixed hovering over comments in web app + +<contributors from="v23-03-21" to="v23-03-28" /> + +## March 21, 2023 +- Reference and bibliography management + - [Bibliographies]($bibliography) and [citations]($cite) (currently supported + styles are APA, Chicago Author Date, IEEE, and MLA) + - You can now [reference]($ref) sections, figures, formulas, and works from + the bibliography with `[@label]` + - You can make an element referenceable with a label: + - `[= Introduction <intro>]` + - `[$ A = pi r^2 $ <area>]` + +- Introspection system for interactions between different parts of the document + - [`counter`] function + - Access and modify counters for pages, headings, figures, and equations + - Define and use your own custom counters + - Time travel: Find out what the counter value was or will be at some other + point in the document (e.g. when you're building a list of figures, you + can determine the value of the figure counter at any given figure). + - Counters count in layout order and not in code order + - [`state`] function + - Manage arbitrary state across your document + - Time travel: Find out the value of your state at any position in the + document + - State is modified in layout order and not in code order + - [`query`] function + - Find all occurrences of an element or a label, either in the whole + document or before/after some location + - Link to elements, find out their position on the pages and access their + fields + - Example use cases: Custom list of figures or page header with current + chapter title + - [`locate`] function + - Determines the location of itself in the final layout + - Can be accessed to get the `page` and `x`, `y` coordinates + - Can be used with counters and state to find out their values at that + location + - Can be used with queries to find elements before or after its location + +- New [`measure`] function + - Measure the layouted size of elements + - To be used in combination with the new [`style`] function that lets you + generate different content based on the style context something is inserted + into (because that affects the measured size of content) + +- Exposed content representation + - Content is not opaque anymore + - Content can be compared for equality + - The tree of content elements can be traversed with code + - Can be observed in hover tooltips or with [`repr`] + - New [methods]($content) on content: `func`, `has`, `at`, and `location` + - All optional fields on elements are now settable + - More uniform field names (`heading.title` becomes `heading.body`, + `list.items` becomes `list.children`, and a few more changes) + +- Further improvements + - Added [`figure`] function + - Added [`numbering`]($math.equation.numbering) parameter on equation function + - Added [`numbering`]($page.numbering) and + [`number-align`]($page.number-align) parameters on page function + - The page function's [`header`]($page.header) and [`footer`]($page.footer) + parameters do not take functions anymore. If you want to customize them + based on the page number, use the new [`numbering`]($page.numbering) + parameter or [`counter`] function instead. + - Added [`footer-descent`]($page.footer-descent) and + [`header-ascent`]($page.header-ascent) parameters + - Better default alignment in header and footer + - Fixed Arabic vowel placement + - Fixed PDF font embedding issues + - Renamed `math.formula` to [`math.equation`]($math.equation) + - Font family must be a named argument now: `[#set text(font: "..")]` + - Added support for [hanging indent]($par.hanging-indent) + - Renamed paragraph `indent` to [`first-line-indent`]($par.first-line-indent) + - More accurate [logarithm]($calc.log) when base is `2` or `10` + - Improved some error messages + - Fixed layout of [`terms`] list + +- Web app improvements + - Added template gallery + - Added buttons to insert headings, equations, raw blocks, and references + - Jump to the source of something by clicking on it in the preview panel + (works for text, equations, images, and more) + - You can now upload your own fonts and use them in your project + - Hover debugging and autocompletion now takes multiple files into account and + works in show rules + - Hover tooltips now automatically collapse multiple consecutive equal values + - The preview now automatically scrolls to the right place when you type + - Links are now clickable in the preview area + - Toolbar, preview, and editor can now all be hidden + - Added autocompletion for raw block language tags + - Added autocompletion in SVG files + - New back button instead of four-dots button + - Lots of bug fixes + +## February 25, 2023 +- Font changes + - New default font: Linux Libertine + - New default font for raw blocks: DejaVu Sans Mono + - New default font for math: Book weight of New Computer Modern Math + - Lots of new math fonts available + - Removed Latin Modern fonts in favor of New Computer Modern family + - Removed unnecessary smallcaps fonts which are already accessible through the + corresponding main font and the [`smallcaps`] function +- Improved default spacing for headings +- Added [`panic`] function +- Added [`clusters`]($str.clusters) and [`codepoints`]($str.codepoints) methods + for strings +- Support for multiple authors in [`set document`]($document.author) +- Fixed crash when string is accessed at a position that is not a char boundary +- Fixed semicolon parsing in `[#var ;]` +- Fixed incremental parsing when inserting backslash at end of `[#"abc"]` +- Fixed names of a few font families (including Noto Sans Symbols and New + Computer Modern families) +- Fixed autocompletion for font families +- Improved incremental compilation for user-defined functions + +## February 15, 2023 +- [Box]($box) and [block] have gained `fill`, `stroke`, `radius`, and `inset` + properties +- Blocks may now be explicitly sized, fixed-height blocks can still break across + pages +- Blocks can now be configured to be [`breakable`]($block.breakable) or not +- [Numbering style]($enum.numbering) can now be configured for nested enums +- [Markers]($list.marker) can now be configured for nested lists +- The [`eval`] function now expects code instead of markup and returns an + arbitrary value. Markup can still be evaluated by surrounding the string with + brackets. +- PDFs generated by Typst now contain XMP metadata +- Link boxes are now disabled in PDF output +- Tables don't produce small empty cells before a pagebreak anymore +- Fixed raw block highlighting bug + +## February 12, 2023 +- Shapes, images, and transformations (move/rotate/scale/repeat) are now + block-level. To integrate them into a paragraph, use a [`box`] as with other + elements. +- A colon is now required in an "everything" show rule: Write `{show: it => ..}` + instead of `{show it => ..}`. This prevents intermediate states that ruin your + whole document. +- Non-math content like a shape or table in a math formula is now centered + vertically +- Support for widow and orphan prevention within containers +- Support for [RTL]($text.dir) in lists, grids, and tables +- Support for explicit `{auto}` sizing for boxes and shapes +- Support for fractional (i.e. `{1fr}`) widths for boxes +- Fixed bug where columns jump to next page +- Fixed bug where list items have no leading +- Fixed relative sizing in lists, squares and grid auto columns +- Fixed relative displacement in [`place`] function +- Fixed that lines don't have a size +- Fixed bug where `{set document(..)}` complains about being after content +- Fixed parsing of `{not in}` operation +- Fixed hover tooltips in math +- Fixed bug where a heading show rule may not contain a pagebreak when an + outline is present +- Added [`baseline`]($box.baseline) property on [`box`] +- Added [`tg`]($math.op) and [`ctg`]($math.op) operators in math +- Added delimiter setting for [`cases`]($math.cases) function +- Parentheses are now included when accepting a function autocompletion + +## February 2, 2023 +- Merged text and math symbols, renamed a few symbols (including `infty` to + `infinity` with the alias `oo`) +- Fixed missing italic mappings +- Math italics correction is now applied properly +- Parentheses now scale in `[$zeta(x/2)$]` +- Fixed placement of large root index +- Fixed spacing in `[$abs(-x)$]` +- Fixed inconsistency between text and identifiers in math +- Accents are now ignored when positioning superscripts +- Fixed vertical alignment in matrices +- Fixed `text` set rule in `raw` show rule +- Heading and list markers now parse consistently +- Allow arbitrary math directly in content + +## January 30, 2023 +[Go to the announcement blog post.](https://typst.app/blog/2023/january-update) +- New expression syntax in markup/math + - Blocks cannot be directly embedded in markup anymore + - Like other expressions, they now require a leading hash + - More expressions available with hash, including literals (`[#"string"]`) as + well as field access and method call without space: `[#emoji.face]` +- New import syntax + - `[#import "module.typ"]` creates binding named `module` + - `[#import "module.typ": a, b]` or `[#import "module.typ": *]` to import + items + - `[#import emoji: face, turtle]` to import from already bound module +- New symbol handling + - Removed symbol notation + - Symbols are now in modules: `{sym}`, `{emoji}`, and `{math}` + - Math module also reexports all of `{sym}` + - Modified through field access, still order-independent + - Unknown modifiers are not allowed anymore + - Support for custom symbol definitions with `symbol` function + - Symbols now listed in documentation +- New `{math}` module + - Contains all math-related functions + - Variables and function calls directly in math (without hash) access this + module instead of the global scope, but can also access local variables + - Can be explicitly used in code, e.g. `[#set math.vec(delim: "[")]` +- Delimiter matching in math + - Any opening delimiters matches any closing one + - When matched, they automatically scale + - To prevent scaling, escape them + - To forcibly match two delimiters, use `lr` function + - Line breaks may occur between matched delimiters + - Delimiters may also be unbalanced + - You can also use the `lr` function to scale the brackets (or just one + bracket) to a specific size manually +- Multi-line math with alignment + - The `\` character inserts a line break + - The `&` character defines an alignment point + - Alignment points also work for underbraces, vectors, cases, and matrices + - Multiple alignment points are supported +- More capable math function calls + - Function calls directly in math can now take code expressions with hash + - They can now also take named arguments + - Within math function calls, semicolons turn preceding arguments to arrays to + support matrices: `[$mat(1, 2; 3, 4)$]` +- Arbitrary content in math + - Text, images, and other arbitrary content can now be embedded in math + - Math now also supports font fallback to support e.g. CJK and emoji +- More math features + - New text operators: `op` function, `lim`, `max`, etc. + - New matrix function: `mat` + - New n-ary roots with `root` function: `[$root(3, x)$]` + - New under- and overbraces, -brackets, and -lines + - New `abs` and `norm` functions + - New shorthands: `[|`, `|]`, and `||` + - New `attach` function, overridable attachments with `script` and `limit` + - Manual spacing in math, with `h`, `thin`, `med`, `thick` and `quad` + - Symbols and other content may now be used like a function, e.g. + `[$zeta(x)$]` + - Added Fira Math font, removed Noto Sans Math font + - Support for alternative math fonts through `[#show math.formula: set + text("Fira Math")]` +- More library improvements + - New `calc` module, `abs`, `min`, `max`, `even`, `odd` and `mod` moved there + - New `message` argument on `{assert}` function + - The `pairs` method on dictionaries now returns an array of length-2 arrays + instead of taking a closure + - The method call `{dict.at("key")}` now always fails if `"key"` doesn't exist + Previously, it was allowed in assignments. Alternatives are `{dict.key = x}` + and `{dict.insert("key", x)}`. +- Smarter editor functionality + - Autocompletion for local variables + - Autocompletion for methods available on a value + - Autocompletion for symbols and modules + - Autocompletion for imports + - Hover over an identifier to see its value(s) +- Further editor improvements + - New Font menu with previews + - Single projects may now be shared with share links + - New dashboard experience if projects are shared with you + - Keyboard Shortcuts are now listed in the menus and there are more of them + - New Offline indicator + - Tooltips for all buttons + - Improved account protection + - Moved Status indicator into the error list button +- Further fixes + - Multiple bug fixes for incremental parser + - Fixed closure parameter capturing + - Fixed tons of math bugs + - Bugfixes for performance, file management, editing reliability + - Added redirection to the page originally navigated to after signin diff --git a/docs/changelog/unreleased.md b/docs/changelog/unreleased.md new file mode 100644 index 00000000..bea49f04 --- /dev/null +++ b/docs/changelog/unreleased.md @@ -0,0 +1,399 @@ +--- +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<T>` 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 new file mode 100644 index 00000000..302c3ede --- /dev/null +++ b/docs/changelog/welcome.md @@ -0,0 +1,26 @@ +--- +description: | + Learn what has changed in the latest Typst releases and move your documents + forward. +--- + +# Changelog +Learn what has changed in the latest Typst releases and move your documents +forward. This section documents all changes to Typst since its initial public +release. + +## Versions +- [Unreleased]($changelog/unreleased) +- [Typst 0.11.1]($changelog/0.11.1) +- [Typst 0.11.0]($changelog/0.11.0) +- [Typst 0.10.0]($changelog/0.10.0) +- [Typst 0.9.0]($changelog/0.9.0) +- [Typst 0.8.0]($changelog/0.8.0) +- [Typst 0.7.0]($changelog/0.7.0) +- [Typst 0.6.0]($changelog/0.6.0) +- [Typst 0.5.0]($changelog/0.5.0) +- [Typst 0.4.0]($changelog/0.4.0) +- [Typst 0.3.0]($changelog/0.3.0) +- [Typst 0.2.0]($changelog/0.2.0) +- [Typst 0.1.0]($changelog/0.1.0) +- [Earlier]($changelog/earlier) diff --git a/docs/src/html.rs b/docs/src/html.rs index d702d115..c9ed7a7f 100644 --- a/docs/src/html.rs +++ b/docs/src/html.rs @@ -26,9 +26,11 @@ pub struct Html { #[serde(skip)] md: String, #[serde(skip)] - description: Option<EcoString>, - #[serde(skip)] outline: Vec<OutlineItem>, + #[serde(skip)] + title: Option<EcoString>, + #[serde(skip)] + description: Option<EcoString>, } impl Html { @@ -37,8 +39,9 @@ impl Html { Self { md: String::new(), raw, - description: None, outline: vec![], + title: None, + description: None, } } @@ -47,10 +50,12 @@ impl Html { pub fn markdown(resolver: &dyn Resolver, md: &str, nesting: Option<usize>) -> Self { let mut text = md; let mut description = None; + let mut title = None; let document = YamlFrontMatter::parse::<Metadata>(md); if let Ok(document) = &document { text = &document.content; - description = Some(document.metadata.description.clone()) + title = document.metadata.title.clone(); + description = document.metadata.description.clone(); } let options = md::Options::ENABLE_TABLES @@ -97,8 +102,9 @@ impl Html { Html { md: text.into(), raw, - description, outline: handler.outline, + title, + description, } } @@ -112,23 +118,25 @@ impl Html { &self.md } + /// The outline of the HTML. + pub fn outline(&self) -> Vec<OutlineItem> { + self.outline.clone() + } + /// The title of the HTML. /// /// Returns `None` if the HTML doesn't start with an `h1` tag. pub fn title(&self) -> Option<&str> { - let mut s = Scanner::new(&self.raw); - s.eat_if("<h1").then(|| { - s.eat_until('>'); - s.eat_if('>'); - s.eat_until("</h1>") + self.title.as_deref().or_else(|| { + let mut s = Scanner::new(&self.raw); + s.eat_if("<h1").then(|| { + s.eat_until('>'); + s.eat_if('>'); + s.eat_until("</h1>") + }) }) } - /// The outline of the HTML. - pub fn outline(&self) -> Vec<OutlineItem> { - self.outline.clone() - } - /// The description from the front matter. pub fn description(&self) -> Option<EcoString> { self.description.clone() @@ -144,7 +152,8 @@ impl Debug for Html { /// Front matter metadata. #[derive(Deserialize)] struct Metadata { - description: EcoString, + title: Option<EcoString>, + description: Option<EcoString>, } struct Handler<'a> { diff --git a/docs/src/lib.rs b/docs/src/lib.rs index 4ee6d50d..a30ed088 100644 --- a/docs/src/lib.rs +++ b/docs/src/lib.rs @@ -91,8 +91,7 @@ pub fn provide(resolver: &dyn Resolver) -> Vec<PageModel> { tutorial_pages(resolver), reference_pages(resolver), guide_pages(resolver), - packages_page(resolver), - md_page(resolver, base, load!("changelog.md")), + changelog_pages(resolver), ] } @@ -120,11 +119,11 @@ pub trait Resolver { fn md_page(resolver: &dyn Resolver, parent: &str, md: &str) -> PageModel { assert!(parent.starts_with('/') && parent.ends_with('/')); let html = Html::markdown(resolver, md, Some(0)); - let title: EcoString = html.title().expect("chapter lacks a title").into(); + let title = html.title().expect("chapter lacks a title"); PageModel { - route: eco_format!("{parent}{}/", urlify(&title)), - title, - description: html.description().unwrap(), + route: eco_format!("{parent}{}/", urlify(title)), + title: title.into(), + description: html.description().expect("chapter lacks a description"), part: None, outline: html.outline(), body: BodyModel::Html(html), @@ -179,21 +178,27 @@ fn guide_pages(resolver: &dyn Resolver) -> PageModel { page } -/// Build the packages section. -fn packages_page(resolver: &dyn Resolver) -> PageModel { - PageModel { - route: eco_format!("{}packages/", resolver.base()), - title: "Packages".into(), - description: "Packages for Typst.".into(), - part: None, - outline: vec![], - body: BodyModel::Packages(Html::markdown( - resolver, - load!("reference/packages.md"), - Some(1), - )), - children: vec![], - } +/// Build the changelog section. +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.11.1.md")), + md_page(resolver, &base, load!("changelog/0.11.0.md")), + md_page(resolver, &base, load!("changelog/0.10.0.md")), + md_page(resolver, &base, load!("changelog/0.9.0.md")), + md_page(resolver, &base, load!("changelog/0.8.0.md")), + md_page(resolver, &base, load!("changelog/0.7.0.md")), + md_page(resolver, &base, load!("changelog/0.6.0.md")), + md_page(resolver, &base, load!("changelog/0.5.0.md")), + md_page(resolver, &base, load!("changelog/0.4.0.md")), + md_page(resolver, &base, load!("changelog/0.3.0.md")), + md_page(resolver, &base, load!("changelog/0.2.0.md")), + md_page(resolver, &base, load!("changelog/0.1.0.md")), + md_page(resolver, &base, load!("changelog/earlier.md")), + ]; + page } /// Create a page for a category. @@ -707,7 +712,7 @@ pub fn urlify(title: &str) -> EcoString { .chars() .map(|c| c.to_ascii_lowercase()) .map(|c| match c { - 'a'..='z' | '0'..='9' => c, + 'a'..='z' | '0'..='9' | '.' => c, _ => '-', }) .collect() |
