Skip to content

Support multiple fonts in math#6365

Merged
laurmaedje merged 21 commits intotypst:mainfrom
mkorje:math-shaper-fonts
Aug 7, 2025
Merged

Support multiple fonts in math#6365
laurmaedje merged 21 commits intotypst:mainfrom
mkorje:math-shaper-fonts

Conversation

@mkorje
Copy link
Collaborator

@mkorje mkorje commented Jun 2, 2025

Font handling

The default math font (new computer modern math) has been added to the text font fallback list. This means that math will always be able to render, as long as the user doesn't #set text(fallback: false).

The way in which font fallback in math works is nearly identical to normal text layout. The key difference is that we only use fonts that have a MATH table present, skipping ones that don't. Note that while strings in math don't use the text font, they do go through normal text layout. So $🍏$ will render as a tofu, whereas $"🍏"$ will not.

Math layout will fallback through all available fonts, and has its own set of fallback fonts distinct from normal text.

Test changes caused by font handling

math-font-fallback: Font fall back in math only goes through fonts with a MATH table.

Old New
math-font-fallback-old math-font-fallback-new
--- math-font-fallback ---
// Test font fallback.
$and "" and 🏳️‍🌈 $

math-lr-scripts: The zws is now just ignored, so it no longer removes the spacing after the lr. (i.e. the test now matches what it would look like if the zws weren't there.)

Old New
math-lr-scripts-old math-lr-scripts-new
--- math-lr-scripts ---
// Test interactions with script attachments.
$ lr(size: #3em, |)_a^b lr(size: #3em, zws|)_a^b
  lr(size: #3em, [x])_0^1 [x]_0^1
  lr(size: #1em, lr(size: #10em, [x]))_0^1 $

Repr in math

RawElem in math is kinda weird. At the moment it basically ends up going through layout_external since the font has changed:

// Hack because the font is fixed in math.
if styles != outer
&& styles.get_ref(TextElem::font) != outer.get_ref(TextElem::font)
{
let frame = layout_external(elem, self, styles)?;
self.push(FrameFragment::new(styles, frame).with_spaced(true));
continue;
}
To preserve this behaviour, I've opted to cut any processing of RawElem off during realisation in math mode and add a check to not set the baseline for a RawElem.

Multiple fonts in math

As the name of the PR would suggest, multiple fonts now just work in math. No need for box hacks anymore.

New tests as examples

math-font-features-switch: You can use glyphs from a font's stylistic sets now. Notice that the math kerning with the subscripts is still working!
math-font-features-switch

--- math-font-features-switch ---
#let scr(it) = text(features: ("ss01",), $cal(it)$)
$cal(P)_i != scr(P)_i$, $cal(bold(I))_l != bold(scr(I))_l$
$ product.co_(B in scr(B))^(B in scr(bold(B))) cal(B)(X) $

math-font-covers: You can use covers with fonts in math now, so that specific glyphs are from a given font. Again, notice the kerning with the subscripts.
math-font-covers

--- math-font-covers ---
#show math.equation: set text(
  font: (
    // Ignore that this regex actually misses some of the script glyphs...
    (name: "XITS Math", covers: regex("[\u{1D49C}-\u{1D503}]")),
  ),
  features: ("ss01",),
)
$ cal(P)_i (X) * cal(C)_1 $

math-op-font: You can use any font you'd like operators and limits will work as specified.
math-op-font

--- math-op-font ---
// Test with different font.
#let colim = math.op(
  text(font: "IBM Plex Sans", weight: "regular", size: 0.8em)[colim],
  limits: true,
)
$ colim_(x -> 0) inline(colim_(x -> 0)) $

math-op-set-font: Notice the improved kerning between the letters in each operator (less space between c and h in sech, more space between o and d in mod) as well as the ligature.
math-op-set-font

--- math-op-set-font ---
// Test setting font.
#show math.equation: set text(weight: "regular")
#let lig = math.op("fi")
#let test = $sech(x) mod_(x -> oo) lig_1(X)$
#test
#show math.op: set text(font: "New Computer Modern")
#test

More customisation and control

Whenever a glyph is laid out in math by Typst (e.g. the delims for matrices, the accent glyph for accents), it now goes through realisation. Essentially, this means you can now target them with show rules. Combine this with proper support for multiple fonts, and you can do all sorts of stuff (even very cursed things)!

New tests as examples

math-root-show-rule-1
math-root-show-rule-1

--- math-root-show-rule-1 ---
#show "": set text(red, font: "Noto Sans Math")
$ root(2, (a + b) / c) $

math-root-show-rule-2
math-root-show-rule-2

--- math-root-show-rule-2 ---
#show "": set text(2em)
$ sqrt(2) $

math-root-show-rule-3
math-root-show-rule-3

--- math-root-show-rule-3 ---
// Test cursed show rule.
#show "": "!"
$ sqrt(2) root(2, 2) $

math-root-show-rule-4
math-root-show-rule-4

--- math-root-show-rule-4 ---
#show math.root: set text(red)
$ sqrt(x + y) root(4, 2) $

math-root-show-rule-5
math-root-show-rule-5

--- math-root-show-rule-5 ---
#show math.root: it => {
  show "": set text(purple) if it.index == none
  it
}
$ sqrt(1/2) root(3, 1/2) $

math-delim-show-rule-1
math-delim-show-rule-1

--- math-delim-show-rule-1 ---
#show regex("\[|\]"): set text(green, font: "Noto Sans Math")
$ mat(delim: \[, a, b, c; d, e, f; g, h, i) quad [x + y] $

math-delim-show-rule-2
math-delim-show-rule-2

--- math-delim-show-rule-2 ---
#show math.vec: it => {
  show regex("\(|\)"): set text(blue)
  it
}
$ vec(1, 0, 0), mat(1; 0; 0), (1), binom(n, k) $

math-delim-show-rule-3
math-delim-show-rule-3

--- math-delim-show-rule-3 ---
#show "": set text(fuchsia)
$ underbrace(1 + 1 = 2, "obviously") $

math-delim-show-rule-4
math-delim-show-rule-4

--- math-delim-show-rule-4 ---
#show "{": set text(navy)
$ cases(x + y + z = 0, 2x - y = 0, -5y + 2z = 0) $

math-delim-show-rule-5
math-delim-show-rule-5

--- math-delim-show-rule-5 ---
#show regex("\(|\)"): set text(1.5em)
$ 10 dot (9 - 5) dot (1/2 - 1) $

math-primes-show-rule
math-primes-show-rule

--- math-primes-show-rule ---
#show math.primes: set text(maroon)
$f'(x), f''''''(x)$

math-glyph-show-rule
math-glyph-show-rule

--- math-glyph-show-rule ---
#show "+": set text(orange, font: "Noto Sans Math")
$ 1 + 1 = +2 $
#show "+": text(2em)[#sym.plus.circle]
$ 1 + 1 = +2 $

math-accent-show-rule-1
math-accent-show-rule-1

--- math-accent-show-rule-1 ---
#show "\u{0302}": set text(blue, font: "XITS Math")
$hat(x)$, $hat(hat(x))$, x\u{0302}

math-accent-show-rule-2
math-accent-show-rule-2

--- math-accent-show-rule-2 ---
#let rhat(x) = {
  show "\u{0302}": set text(red)
  math.hat(x)
}
$hat(x)$, $rhat(x)$, $hat(rhat(x))$, $rhat(hat(x))$, x\u{0302}

math-accent-show-rule-3
math-accent-show-rule-3

--- math-accent-show-rule-3 ---
#show math.accent: it => {
  show "\u{0300}": set text(green)
  it
}
$grave(x)$, x\u{0300}

math-accent-show-rule-4
math-accent-show-rule-4

--- math-accent-show-rule-4 ---
#show "\u{0302}": box(inset: (bottom: 5pt), text(0.5em, sym.diamond.small))
$hat(X)$, $hat(x)$

Issues

@mkorje mkorje force-pushed the math-shaper-fonts branch from 030ed95 to 0d0481c Compare June 2, 2025 09:41
@istudyatuni
Copy link
Contributor

istudyatuni commented Jun 2, 2025

Why is raw emoji showing but #emoji is not?

@Enivex
Copy link
Collaborator

Enivex commented Jun 2, 2025

Why is raw emoji showing but #emoji is not?

I don't know exactly what you're referring to, but it probably has to do with math fonts not having emojis in them.

@istudyatuni
Copy link
Contributor

When written as $🍏$, emoji is rendered, but when as $#emoji.apple$, is not

@laurmaedje laurmaedje added math Related to math syntax, layout, etc. text Text layout, shaping, internationalization, etc. labels Jun 4, 2025
@mkorje mkorje mentioned this pull request Jun 10, 2025
@laurmaedje laurmaedje added the waiting-on-author Pull request waits on author label Jun 23, 2025
@mkorje mkorje force-pushed the math-shaper-fonts branch from 0d0481c to 640cca9 Compare July 8, 2025 12:58
@mkorje
Copy link
Collaborator Author

mkorje commented Jul 8, 2025

I don't know exactly what you're referring to, but it probably has to do with math fonts not having emojis in them.

Yes, that's why.

When written as $🍏$, emoji is rendered, but when as $#emoji.apple$, is not

I can't reproduce this, they both render as tofus on this branch.

@mkorje mkorje force-pushed the math-shaper-fonts branch 6 times, most recently from abe5a38 to c516a65 Compare July 9, 2025 05:48
@mkorje
Copy link
Collaborator Author

mkorje commented Jul 9, 2025

I've opened typst/typst-dev-assets#7 to add another math font to the test suite.

@mkorje mkorje force-pushed the math-shaper-fonts branch 6 times, most recently from 2587d3b to fe4a4cc Compare July 9, 2025 09:36
@mkorje mkorje force-pushed the math-shaper-fonts branch 4 times, most recently from da12225 to e84434a Compare July 9, 2025 11:41
@mkorje mkorje force-pushed the math-shaper-fonts branch from 27ebd1d to 2baaf22 Compare August 4, 2025 10:04
@mkorje mkorje force-pushed the math-shaper-fonts branch from 69cca4f to e06ebac Compare August 4, 2025 14:30
.and_then(|id| world.font(id))
.filter(|_| family.covers().is_none())
})
.ok_or(::ecow::eco_vec![error!(span, "no font could be found")])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This error is new, right? I guess relying purely on fallback does not work with the font stack thing, but also generally fails because we need all those metrics?

This seem a bit inconsistent with how font fallback otherwise works in Typst, but I guess it is not more restrictive than before with "current font is not suitable for math".

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's basically replaced the old "current font doesn't support math" error thing. Yeah, we just need to grab whatever the current font is for the metrics.

Surely though this error will basically never occur, right? (Unless the font specified doesn't exist and fallback is disabled, I guess)

@mkorje mkorje force-pushed the math-shaper-fonts branch from 366add8 to d7a83b7 Compare August 5, 2025 03:35
@mkorje mkorje force-pushed the math-shaper-fonts branch from 5715c49 to b58935a Compare August 5, 2025 04:29
@mkorje mkorje force-pushed the math-shaper-fonts branch from 172274f to 8e671b4 Compare August 5, 2025 04:41
@laurmaedje
Copy link
Member

Thank you. This is excellent work!

Merged via the queue into typst:main with commit 89dce86 Aug 7, 2025
8 checks passed
@mkorje mkorje deleted the math-shaper-fonts branch August 7, 2025 09:27
hiandy24 pushed a commit to hiandy24/typst that referenced this pull request Sep 27, 2025
… upstream (#1)

* Numbering implementation refactor (typst#6122)

* Pin colspan and rowspan for blank cells (typst#6401)

* Clean up some parser comments (typst#6398)

* Autocomplete fixes for math mode (typst#6415)

* Update docs for gradient.repeat (typst#6385)

* Document how to escape lr delimiter auto-scaling (typst#6410)

Co-authored-by: Laurenz <[email protected]>

* Improve number lexing (typst#5969)

* Report errors in external files (typst#6308)

Co-authored-by: Laurenz <[email protected]>

* Table multiple headers and subheaders (typst#6168)

* Use the shaper in math (typst#6336)

* Standardize trailing slashes in docs route paths (typst#6420)

* Make a more descriptive definition of `module` (typst#6380)

* Specify which CSL style is not suitable for bibliographies (typst#6306)

Co-authored-by: Laurenz <[email protected]>

* Adjust source file API surface (typst#6423)

* Do not force `math.mid` elements to have the Large math class (typst#5980)

* List both YAML file extensions in bibliography docs (typst#6426)

* Fix panic when test source is not found in world (typst#6428)

* Use `codex::ModifierSet` (typst#6159)

Co-authored-by: Laurenz <[email protected]>

* Render `#super` as `<sup>`, `#sub` as `<sub>` in HTML (typst#6422)

* Warning when watching stdin (typst#6381)

Co-authored-by: Laurenz <[email protected]>

* Fix untidy Cargo.lock

* Warn when using variable fonts (typst#6425)

* Check that all translation files are added to TRANSLATIONS and ends with newline (typst#6424)

Co-authored-by: Laurenz <[email protected]>

* Unify `EvalMode` and `LexMode` into `SyntaxMode` (typst#6432)

* Consume `data` argument in `pdf.embed()` (typst#6435)

* Better error message for compile time string interning failure (typst#6439)

* Ensure that label repr is syntactically valid (typst#6456)

* Hint for label in both document and bibliography (typst#6457)

* Prefer `.yaml` over `.yml` in the docs (typst#6436)

* Fix align link in layout documentation (typst#6451)

* Fix param autocompletion false positive (typst#6475)

* Encode empty attributes with shorthand syntax

* Add `Duration::decompose`

* Generic casting for `Axes<T>`

* More type-safe color conversions

* Add  `typst_utils::display`

* Support for generating native functions at runtime

* Typed HTML API (typst#6476)

* Consistent codepoint formatting in HTML and PDF error messages

* Test runner support for HTML export errors

* Turn non-empty void element into export error

* Handle pre elements that start with a newline

* Extract `write_children` function

* Properly handle raw text elements

* Fix stroke cap of shapes with partial stroke (typst#5688)

* Adding Croatian translations entries (typst#6413)

* Rewrite `outline.indent` example (typst#6383)

Co-authored-by: Laurenz <[email protected]>

* Use ICU data to check if accent is bottom (typst#6393)

Co-authored-by: Laurenz <[email protected]>

* Add docs for `std` module (typst#6407)

Co-authored-by: Laurenz <[email protected]>

* Improve equation reference example (typst#6481)

* Add page reference customization example (typst#6480)

Co-authored-by: Laurenz <[email protected]>

* Bump `krilla` to current Git version (typst#6488)

Co-authored-by: Laurenz <[email protected]>

* Check that git tree is clean after build (typst#6495)

* Also fix encoding of `<textarea>` (typst#6497)

* Minor fixes to doc comments (typst#6500)

* Fix typos in page-setup.md (typst#6499)

* Support `in` operator on strings and modules (typst#6498)

* Consistent sizing for `html.frame` (typst#6505)

* Allow deprecating symbol variants (typst#6441)

* Disallow empty labels and references (typst#5776) (typst#6332)

Co-authored-by: Laurenz <[email protected]>

* Fix nested HTML frames (typst#6509)

* Basic support for text decoration functions in HTML (typst#6510)

* Improve sentence in guide for LaTeX users (typst#6511)

* Sort line items by logical order when constructing frame (typst#5887)

Co-authored-by: Laurenz <[email protected]>

* Fix panic when sampling across two coincident gradient stops (typst#6166)

* Bump `typst-dev-assets` (typst#6514)

* Acknowledgements (typst#6528)

* Support HTML tests in test-helper extension (typst#6504)

* Fix typo in Advanced Styling docs tutorial (typst#6517)

* Fix typo in PDF standard CLI help (typst#6518)

* Fix typo in PDF standard CLI help part 2 (typst#6531)

* Fix minor typo in `array.product` docs (typst#6532)

* Fix typos in calc module docs (typst#6535)

* Use "subs" and "sups" font features for typographic scripts (typst#5777)

* Use punctuation math class for Arabic comma (typst#6537)

* Remove duplicate language computation (typst#6557)

* Fix typo in PackageStorage (typst#6556)

* Fix nightly warnings (typst#6558)

* Fix minor typo in function docs (typst#6542)

* Refer to json function instead of deprecated json.decode in groups docs (typst#6552)

* Rewrite foundations of native elements (typst#6547)

* Target-specific native show rules (typst#6569)

* Construct library via extension trait instead of default & inherent impl (typst#6576)

* Move `html` module to `typst-html` crate (typst#6577)

* Fix typo of Typst domain in quote docs (typst#6573)

* Anti-alias clip paths (typst#6570)

* Use "displayed" instead of "repeated" to avoid ambiguity in numbering docs (typst#6565)

* Ignore spans when checking for RawElem equality (typst#6560)

* Add `default` argument for `str.first` and `str.last` (typst#6554)

Co-authored-by: Laurenz <[email protected]>

* Add completions subcommand (typst#6568)

* Update Swedish translations based on defaults used for LaTeX and cleveref (typst#6519)

* Move math styling to codex and add `math.scr` (typst#6309)

* More consistent `Packed<T>` to `Content` conversion methods (typst#6579)

* Support images in HTML export (typst#6578)

* Fix tooltip for figure reference (typst#6580)

* Complete movement of HTML export code to `typst-html` (typst#6584)

* Handle `lower` and `upper` in HTML export (typst#6585)

* Deduplicate labels for code completion (typst#6516)

* Fix regression in reference autocomplete (typst#6586)

* Use "whitespace" instead of "space" to denote block-level equation in docs (typst#6591)

* Fix minor typo in text docs (typst#6589)

* Rephrase docs for truncation of float/decimal to integer (typst#6543)

* HTML frame improvements (typst#6605)

* Change `enum.item.number` to `Smart` instead of `Option` (typst#6609)

* Support setting fonts repeatedly with different `covers` (typst#6604)

* Support intra-doc links in HTML (typst#6602)

* Partially automate span assignment in native show rule (typst#6613)

* Bump `zip` dependency (typst#6615)

* Restore timing scopes for native show rules (typst#6616)

* Slightly improve selector docs (typst#6544)

* Add show rule for smallcaps in HTML (typst#6600)

* Mention Tinymist in README.md (typst#6601)

* Fix documentation oneliners (typst#6608)

* Add rust-analyzer to flake devShell (typst#6618)

* Add Lithuanian translations (typst#6587)

* Bump CI Rust to 1.88

* Bump MSRV to 1.88

* Migrate to 2024 edition

* Fix 2024 clippy warnings

* Yeet `if_chain` macro

* Reformat with 2024 edition

* Add support for PDF embedding (typst#6623)

Co-authored-by: Laurenz <[email protected]>

* Add `pdf` extension to image autocompletions (typst#6643)

* Fix bounding box computation for lines in curves (typst#6647)

Co-authored-by: Laurenz <[email protected]>

* Lint for iterations over hash types (typst#6652)

* Create constructor methods for manifest types (typst#6625)

* Remove unnecessary `comemo` dependency in `typst-syntax` (typst#6668)

* Remove duplicate center alignment style for equations (typst#6667)

* Fix incorrect `vline.x` docs (typst#6657)

* Miscellaneous minor docs improvements (typst#6651)

Co-authored-by: Laurenz <[email protected]>

* Allow explicit autocomplete immediately after comma and colon (typst#6550)

* Improve Guide for LaTeX users, Query Function, and replace invisible emojis (typst#6620)

Co-authored-by: PgBiel <[email protected]>
Co-authored-by: Laurenz <[email protected]>

* Hint that deprecated items will be removed in `0.15.0` (typst#6617)

* Specify the standard smart quotes for `Arabic` (typst#6626)

* Use `rustc-hash` for hash maps and sets (typst#6678)

* Faster constraint checking in comemo (bumps comemo & krilla) (typst#6683)

* Add `--target` argument for `typst query` (typst#6405)

Co-authored-by: Laurenz <[email protected]>

* Require parentheses in all function-like sub/superscripts (typst#6442)

Co-authored-by: Laurenz <[email protected]>

* Fix several wrong anchors in `$` docs link resolution  (typst#6684)

* Add `cargo testit` alias for running integration tests (typst#6682)

Co-authored-by: Laurenz <[email protected]>

* Update guides welcome text to refer to list instead of specific guides (typst#6685)

Co-authored-by: Laurenz <[email protected]>

* Prevent broken glyph assemblies when font data is incorrect (typst#6688)

* Allow custom element names in HTML tag syntax  (typst#6676)

Co-authored-by: Laurenz <[email protected]>

* Add interface to disable timer (typst#6695)

Co-authored-by: Derived Cat <[email protected]>

* Add support for drawing COLR glyphs in SVG export (typst#6693)

* Apply aspect ratio correction for linear gradients in PDF export (typst#6689)

* Wrap raw blocks in `<code>` tag additionally to `<pre>` tag (typst#6701)

* Support for raw syntax highlighting in HTML export (typst#6691)

* Ensure that whitespace is not collapsed in inline raw blocks (typst#6703)

* Show aliases of citation styles in docs and completions (typst#6696)

* Correct CeTZ spelling (typst#6706)

* Add `title` element (typst#5618)

Co-authored-by: Laurenz <[email protected]>

* Make HTML data structures cheaper to clone (typst#6708)

* Move `par`, `box`, and `block` to show rules in HTML export (typst#6709)

* Support smartquotes in HTML export (typst#6710)

Co-authored-by: Malo <[email protected]>

* Avoid dangling reference output for HTML tests (typst#6711)

* Support multiple fonts in math (typst#6365)

* Add link to position field of grid.hline and grid.vline docs (typst#6670)

* Rename `pdf.embed` to `pdf.attach` (typst#6705)

* Include numbering in PDF bookmark (typst#6622)

Co-authored-by: Laurenz <[email protected]>

* Document escaping semicolon, valid identifiers, and `state` tips (typst#6674)

Co-authored-by: Andrew Voynov <[email protected]>
Co-authored-by: Yaksher <[email protected]>
Co-authored-by: Laurenz <[email protected]>

* Ensure table headers trigger rowbreak (typst#6687)

* Fix phrasing of iff (if and only if) in docs (typst#6713)

* Remove redundant "This can be" from stroke docs of curve and polygon (typst#6715)

* Fix curve docs for fill (refer to curve instead of rectangle) (typst#6714)

* Add span to `html.frame` node (typst#6716)

* Fix return type of `missing_method` (typst#6718)

* Encoding fixes for HTML raw text elements (typst#6720)

* Update RelativeTo to include tiling in docs (typst#6730)

* Add missing "the" for cmyk function of color docs (typst#6731)

* Remove use of "last" and "end" for conic gradient circle docs (typst#6733)

* Fix broken links in docs (typst#6734)

* Simplify links in docs (typst#6732)

Co-authored-by: Laurenz <[email protected]>

* Bump hayro and krilla (typst#6741)

* Deduplicate fallback smart quotes (typst#6747)

* Move `is_inline` to `HtmlElem` (typst#6748)

* Move grid cell locator creation to GridLayouter (typst#6746)

* HTML whitespace protection (typst#6750)

* Improve code snippets in Table Guide (typst#6658)

* More accessible color scheme for raw blocks (typst#6754)

Co-authored-by: Laurenz <[email protected]>

* Use `stylistic-set: 1` in favor of `ss01` in docs and tests (typst#6766)

* Implement fraction styles: vertical, skewed, and horizontal. (typst#6672)

* Bump Rust to 1.89 in CI (typst#6775)

Co-authored-by: Drodt <[email protected]>
Co-authored-by: Daniel Drodt <[email protected]>

* Fix typo in doc on quotes parameter of smartquote (typst#6779)

* Fix logical order in bidirectional lines (typst#6796)

* Extract `trim_weak_spacing` function (typst#6797)

* Separate items for hyphens, fixing style of repeated hyphen (typst#6798)

* Fix Unicode mapping of hyphenation artifacts (typst#6799)

* Do not consider default ignorables when picking last resort font (typst#6805)

* Compute width of shaped text on-demand (typst#6806)

* Fix `sub` and `super` oneliners (typst#6791)

* Ensure that hyphenation is possible after a tag (typst#6807)

* Make links to `$grid` in `table` docs more specific (typst#6776)

Co-authored-by: PgBiel <[email protected]>

* Fix `repr` of `foo.with(..)` (typst#6773)

* Fix case in docs serialization (typst#6808)

* Add links and examples in the docs of `str` (typst#6751)

Co-authored-by: Laurenz <[email protected]>

* Hash page instead of frame for watch command (typst#6810)

* Update nix flake and use nixfmt (typst#6827)

* Update & fix tutorial part 3 & 4 example code (typst#6778)

* Improve docs on customizing `raw` (typst#6000)

Co-authored-by: Malo <[email protected]>
Co-authored-by: Laurenz <[email protected]>

* Better handle large numbers (u128/i128) in deserialization (typst#6836)

* Follow the comment on setting the `State`'s mask (typst#6642)

* Allow augment line at the beginning and end of a matrix (typst#5806)

Co-authored-by: Laurenz <[email protected]>

* Fix slicing last n elements using count (typst#6838)

* Fix auto hanging-indent for centered headings (typst#6839)

* Use rust-analyzer from fenix toolchain in flake (typst#6826)

* Type safety for logical indices in line layout (typst#6848)

* Load linked bitmap images in SVG images (typst#6794)

Co-authored-by: Laurenz <[email protected]>

* Fix CJ-Latin space at manual line breaks (typst#6700)

Co-authored-by: Laurenz Mädje <[email protected]>

* Allow multi-character symbols (typst#6489)

Co-authored-by: Max <[email protected]>
Co-authored-by: Laurenz <[email protected]>

* Keep end of line whitespace glyphs (typst#6866)

* Fix punctuation in HTML placeholder (typst#6854)

* Unify and document the behaviours of `{json,yaml,toml,cbor}.encode` (typst#6743)

Co-authored-by: Laurenz <[email protected]>

* Improve docs of various numbering parameters (typst#6757)

Co-authored-by: Laurenz <[email protected]>

* Document and test `Sides<T>` parameters (typst#6862)

Co-authored-by: Laurenz <[email protected]>

* Remove unused `Styles::set_family` (typst#6879)

* Make clear that `Content::query_first` is naive (typst#6880)

* Ensure correct tag nesting with grouping rules (typst#6881)

* Avoid breaking after an empty frame (typst#6335)

* Add test for default ignorables before a breakpoint (typst#6782)

* Fix typos (typst#6878)

* Improve the docs on function params of `array.{sorted,dedup}` (typst#6756)

* Add a link from `math.vec` to `math.{arrow,bold}` in docs (typst#6867)

* Add a disclaimer about embedding PDFs (typst#6888)

Co-authored-by: Laurenz <[email protected]>

* Improve examples in the docs for under/over functions (typst#6889)

* Improve docs of `Celled<T>` params of `table` and `grid` (typst#6764)

Co-authored-by: Laurenz <[email protected]>

* Fix off by one in tag expansion (typst#6900)

* More useful `Debug` impls for `Tag` and `Location` (typst#6901)

* Fix potential crash in `Debug` impl of `Property` (typst#6902)

* Fix `Debug` impl for end tags (typst#6906)

* Make `select_where!` usable outside of typst-library (typst#6910)

* Fix footnote links in presence of styling (typst#6912)

* Consistently ignore styles for tags (typst#6911)

* Expand tags even a bit more around groupings (typst#6909)

* Don't warn for zero-sized horizontal spacing in HTML export

* Use `singleton!` for `HElem::hole`

* Add way to attach role to closest element in HTML export

* Add logical parent mechanism to HTML export

* Generalize mechanism for root styles to HTML export

* Support footnotes in HTML export

* Add `default` argument to `array.join` (typst#6932)

* Replace the non-existent `$math.arrow` with `$math.accent` in the docs for vector (typst#6918)

* Initial Hayagriva bump (typst#6920)

Co-authored-by: Laurenz <[email protected]>

* Use different colors for object keys and string-based values in JSON listings (typst#6873)

* Support for outline in HTML (typst#6606)

* Use Title Case for Doc Pages (typst#6936)

* Improve the docs for dictionary (typst#6899)

* Add an illustration for `par.{leading,spacing}` in docs (typst#6915)

Co-authored-by: Andrew Voynov <[email protected]>
Co-authored-by: Laurenz <[email protected]>

* Initial plan

---------

Co-authored-by: Sam Ireson <[email protected]>
Co-authored-by: PgBiel <[email protected]>
Co-authored-by: Ian Wrzesinski <[email protected]>
Co-authored-by: cAttte <[email protected]>
Co-authored-by: Andrew Voynov <[email protected]>
Co-authored-by: Laurenz <[email protected]>
Co-authored-by: Tobias Schmitz <[email protected]>
Co-authored-by: Max <[email protected]>
Co-authored-by: 3w36zj6 <[email protected]>
Co-authored-by: Malo <[email protected]>
Co-authored-by: T0mstone <[email protected]>
Co-authored-by: Lachlan Kermode <[email protected]>
Co-authored-by: Y.D.X. <[email protected]>
Co-authored-by: Ilia <[email protected]>
Co-authored-by: Noam Zaks <[email protected]>
Co-authored-by: Wannes Malfait <[email protected]>
Co-authored-by: Ivica Nakić <[email protected]>
Co-authored-by: +merlan #flirora <[email protected]>
Co-authored-by: Connor K <[email protected]>
Co-authored-by: Said A. <[email protected]>
Co-authored-by: Florian Bohlken <[email protected]>
Co-authored-by: Robin <[email protected]>
Co-authored-by: Adrián Delgado <[email protected]>
Co-authored-by: frozolotl <[email protected]>
Co-authored-by: Jassiel Ovando <[email protected]>
Co-authored-by: Patrick Massot <[email protected]>
Co-authored-by: Erik <[email protected]>
Co-authored-by: pog102 <[email protected]>
Co-authored-by: Laurenz Stampfl <[email protected]>
Co-authored-by: Niklas Eicker <[email protected]>
Co-authored-by: Marcono1234 <[email protected]>
Co-authored-by: Igor Khanin <[email protected]>
Co-authored-by: hpcfzl <[email protected]>
Co-authored-by: zefr0x <[email protected]>
Co-authored-by: Abdul-Rahman Sibahi <[email protected]>
Co-authored-by: 枚鴉 <[email protected]>
Co-authored-by: Myriad-Dreamin <[email protected]>
Co-authored-by: Derived Cat <[email protected]>
Co-authored-by: Sebastian Eberle <[email protected]>
Co-authored-by: Johann Birnick <[email protected]>
Co-authored-by: Yaksher <[email protected]>
Co-authored-by: Tau <[email protected]>
Co-authored-by: Martin Haug <[email protected]>
Co-authored-by: Théophile Cailliau <[email protected]>
Co-authored-by: Drodt <[email protected]>
Co-authored-by: Daniel Drodt <[email protected]>
Co-authored-by: ultimatile <[email protected]>
Co-authored-by: Poh <[email protected]>
Co-authored-by: Clemens Koza <[email protected]>
Co-authored-by: Siddhant Agarwal <[email protected]>
Co-authored-by: Philipp Niedermayer <[email protected]>
Co-authored-by: Toon Verstraelen <[email protected]>
Co-authored-by: Eric Biedert <[email protected]>
Co-authored-by: Jan Romann <[email protected]>
Co-authored-by: copilot-swe-agent[bot] <[email protected]>
YDX-2147483647 added a commit to YDX-2147483647/typst that referenced this pull request Oct 12, 2025
YDX-2147483647 added a commit to YDX-2147483647/typst that referenced this pull request Oct 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

math Related to math syntax, layout, etc. text Text layout, shaping, internationalization, etc.

Projects

None yet

4 participants