File size: 9,609 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
---
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" />