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: Does not include a colon anymore and has a bit more indent
Command line interface
Added
--font-pathargument for CLIEmbedded default fonts in CLI binary
Fixed build of CLI if
gitis not installed
Miscellaneous improvements
Added support for disabling matrix and vector delimiters. Generally with
[#set math.mat(delim: none)]or one-off with[$mat(delim: #none, 1, 2; 3, 4)$].Added
separatorargument to term listsAdded
roundfunction for equationsNumberings now allow zeros. To reset a counter, you can write
[#counter(..).update(0)]Added documentation for
{page()}and{position()}methods onlocationtypeAdded 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
repeatis used in page with automatic widthFixed matrices with explicit delimiter
Fixed
indentproperty of term listsNumerous documentation fixes
Links in bibliographies are now affected by link styling
Fixed hovering over comments in web app
March 21, 2023
Reference and bibliography management
Bibliographies and citations (currently supported styles are APA, Chicago Author Date, IEEE, and MLA)
You can now reference 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
counterfunctionAccess 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
statefunctionManage 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
queryfunctionFind 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
locatefunctionDetermines the location of itself in the final layout
Can be accessed to get the
pageandx,ycoordinatesCan 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
measurefunctionMeasure the layouted size of elements
To be used in combination with the new
stylefunction 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
reprNew methods on content:
func,has,at, andlocationAll optional fields on elements are now settable
More uniform field names (
heading.titlebecomesheading.body,list.itemsbecomeslist.children, and a few more changes)
Further improvements
Added
figurefunctionAdded
numberingparameter on equation functionAdded
numberingandnumber-alignparameters on page functionThe page function's
headerandfooterparameters do not take functions anymore. If you want to customize them based on the page number, use the newnumberingparameter orcounterfunction instead.Added
footer-descentandheader-ascentparametersBetter default alignment in header and footer
Fixed Arabic vowel placement
Fixed PDF font embedding issues
Renamed
math.formulatomath.equationFont family must be a named argument now:
[#set text(font: "..")]Added support for hanging indent
Renamed paragraph
indenttofirst-line-indentMore accurate logarithm when base is
2or10Improved some error messages
Fixed layout of
termslist
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
smallcapsfunction
Improved default spacing for headings
Added
panicfunctionAdded
clustersandcodepointsmethods for stringsSupport for multiple authors in
set documentFixed 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 and block have gained
fill,stroke,radius, andinsetpropertiesBlocks may now be explicitly sized, fixed-height blocks can still break across pages
Blocks can now be configured to be
breakableor notNumbering style can now be configured for nested enums
Markers can now be configured for nested lists
The
evalfunction 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
boxas 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 in lists, grids, and tables
Support for explicit
{auto}sizing for boxes and shapesSupport for fractional (i.e.
{1fr}) widths for boxesFixed 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
placefunctionFixed that lines don't have a size
Fixed bug where
{set document(..)}complains about being after contentFixed parsing of
{not in}operationFixed hover tooltips in math
Fixed bug where a heading show rule may not contain a pagebreak when an outline is present
Added
baselineproperty onboxAdded
tgandctgoperators in mathAdded delimiter setting for
casesfunctionParentheses are now included when accepting a function autocompletion
February 2, 2023
Merged text and math symbols, renamed a few symbols (including
inftytoinfinitywith the aliasoo)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
textset rule inrawshow ruleHeading and list markers now parse consistently
Allow arbitrary math directly in content
January 30, 2023
Go to the announcement blog post.
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 namedmodule[#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
symbolfunctionSymbols now listed in documentation
New
{math}moduleContains 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
lrfunctionLine breaks may occur between matched delimiters
Delimiters may also be unbalanced
You can also use the
lrfunction to scale the brackets (or just one bracket) to a specific size manually
Multi-line math with alignment
The
\character inserts a line breakThe
&character defines an alignment pointAlignment 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:
opfunction,lim,max, etc.New matrix function:
matNew n-ary roots with
rootfunction:[$root(3, x)$]New under- and overbraces, -brackets, and -lines
New
absandnormfunctionsNew shorthands:
[|,|], and||New
attachfunction, overridable attachments withscriptandlimitManual spacing in math, with
h,thin,med,thickandquadSymbols 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
calcmodule,abs,min,max,even,oddandmodmoved thereNew
messageargument on{assert}functionThe
pairsmethod on dictionaries now returns an array of length-2 arrays instead of taking a closureThe 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