Changes in early, unversioned Typst
March 28, 2023
-
Breaking changes:
- Enumerations now require a space after their marker, that is,
1.okmust now be written as1. ok - Changed default style for term lists: Does not include a colon anymore and has a bit more indent
- Enumerations now require a space after their marker, that is,
-
Command line interface
- Added
--font-pathargument for CLI - Embedded default fonts in CLI binary
- Fixed build of CLI if
gitis not installed
- Added
-
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 lists - Added
roundfunction for equations - Numberings now allow zeros. To reset a counter, you can write
#counter(..).update(0) - Added documentation for
page()andposition()methods onlocationtype - 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
repeatis used in page with automatic width - Fixed matrices with explicit delimiter
- Fixed
indentproperty of term lists - Numerous documentation fixes
- Links in bibliographies are now affected by link styling
- Fixed hovering over comments in web app
- Added support for disabling matrix and vector
delimiters. Generally with
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
counterfunction- 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
statefunction- 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
queryfunction- 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
locatefunction- Determines the location of itself in the final layout
- Can be accessed to get the
pageandx,ycoordinates - 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
measurefunction- Measure 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
repr - New methods on content:
func,has,at, andlocation - All 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
figurefunction - Added
numberingparameter on equation function - Added
numberingandnumber-alignparameters on page function - The 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-ascentparameters - Better default alignment in header and footer
- Fixed Arabic vowel placement
- Fixed PDF font embedding issues
- Renamed
math.formulatomath.equation - Font family must be a named argument now:
#set text(font: "..") - Added support for hanging indent
- Renamed paragraph
indenttofirst-line-indent - More accurate logarithm when base is
2or10 - Improved some error messages
- Fixed layout of
termslist
- Added
-
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
panicfunction - Added
clustersandcodepointsmethods for strings - Support for multiple authors in
set document - 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 and block have gained
fill,stroke,radius, andinsetproperties - Blocks may now be explicitly sized, fixed-height blocks can still break across pages
- Blocks can now be configured to be
breakableor not - Numbering 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 ofshow 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
autosizing 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
placefunction - Fixed that lines don't have a size
- Fixed bug where
set document(..)complains about being after content - Fixed parsing of
not inoperation - Fixed hover tooltips in math
- Fixed bug where a heading show rule may not contain a pagebreak when an outline is present
- Added
baselineproperty onbox - Added
tgandctgoperators in math - Added delimiter setting for
casesfunction - Parentheses 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 rule - Heading 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, bor#import "module.typ": *to import items#import emoji: face, turtleto import from already bound module
- New symbol handling
- Removed symbol notation
- Symbols are now in modules:
sym,emoji, andmath - 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
symbolfunction - Symbols now listed in documentation
- New
mathmodule- 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
lrfunction - Line 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 break - The
&character defines an alignment point - Alignment points also work for underbraces, vectors, cases, and matrices
- Multiple alignment points are supported
- The
- 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:
mat - New n-ary roots with
rootfunction:$root(3, x)$ - New under- and overbraces, -brackets, and -lines
- New
absandnormfunctions - New shorthands:
[|,|], and|| - New
attachfunction, overridable attachments withscriptandlimit - Manual spacing in math, with
h,thin,med,thickandquad - 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")
- New text operators:
- More library improvements
- New
calcmodule,abs,min,max,even,oddandmodmoved there - New
messageargument onassertfunction - The
pairsmethod 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 aredict.key = xanddict.insert("key", x).
- New
- 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