File size: 13,652 Bytes
2d83f30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
---
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` 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" />