Skip to content

Commit

Permalink
textproc/typst: update to 0.12.0
Browse files Browse the repository at this point in the history
Highlights
    Added support for multi-column floating placement and figures
    Added support for automatic line numbering (often used in academic papers)
    Typst's layout engine is now multithreaded. Typical speedups are 2-3x for larger documents. The multithreading operates on page break boundaries, so explicit page breaks are necessary for it to kick in.
    Paragraph justification was optimized with a new two-pass algorithm. Speedups are larger for shorter paragraphs and go up to 6x.
    Highly reduced PDF file sizes due to better font subsetting (thanks to @LaurenzV)
    Emoji are now exported properly in PDF
    Added initial support for PDF/A. For now, only the PDF/A-2b profile is supported, but more is planned for the future.
    Added various options for configuring the CLI's environment (fonts, package paths, etc.)
    Text show rules now match across multiple text elements
    Block-level equations can now optionally break over multiple pages
    Fixed a bug where some fonts would not print correctly on professional printers
    Fixed a long-standing bug which could cause headings to be orphaned at the bottom of the page

Layout
    Added support for multi-column floating placement and figures via place.scope and figure.scope. Two-column documents should now prefer set page(columns: 2) over show: column.with(2) (see the page setup guide).
    Added support for automatic line numbering (often used in academic papers)
    Added par.spacing property for configuring paragraph spacing. This should now be used instead of show par: set block(spacing: ..) (Breaking change)
    Block-level elements like lists, grids, and stacks now show themselves as blocks and are thus affected by all block properties (e.g. stroke) rather than just spacing (Breaking change)
    Added block.sticky property which prevents a page break after a block
    Added place.flush function which forces all floating figures to be placed before any further content
    Added skew function
    Added auto option for page.header and page.footer which results in an automatic header/footer based on the numbering (which was previously inaccessible after a change)
    Added gap and justify parameters to repeat function
    Added width and height parameters to the measure function to define the space in which the content should be measured. Especially useful in combination with layout.
    The height of a block, image, rect, square, ellipse, or circle can now be specified in fractional units
    The scale function now supports absolute lengths for x, y, factor. This way an element of unknown size can be scaled to a fixed size.
    The values of block.above and block.below can now be retrieved in context expressions.
    Increased accuracy of conversions between absolute units (pt, mm, cm, in)
    Fixed a bug which could cause headings to be orphaned at the bottom of the page
    Fixed footnotes within breakable blocks appearing on the page where the breakable block ends instead of at the page where the footnote marker is
    Fixed numbering of nested footnotes and footnotes in floats
    Fixed empty pages appearing when a context expression wraps whole pages
    Fixed set block(spacing: x) behaving differently from set block(above: x, below: x)
    Fixed behavior of rotate and scale with reflow: true
    Fixed interaction of align(horizon) and v(1fr)
    Fixed various bugs where floating placement would yield overlapping results
    Fixed a bug where widow/orphan prevention would unnecessarily move text into the next column
    Fixed weak spacing not being trimmed at the start and end of lines in a paragraph (only at the start and end of paragraphs)
    Fixed interaction of weak page break and pagebreak.to
    Fixed compilation output of a single weak page break
    Fixed crash when padding by 100%

Text
    Tuned hyphenation: It is less eager by default and hyphenations close to the edges of words are now discouraged more strongly (May lead to larger layout reflows)
    New default font: Libertinus Serif. This is the maintained successor to the old default font Linux Libertine. (May lead to smaller reflows)
    Setting the font to an unavailable family will now result in a warning
    Implemented a new smart quote algorithm, fixing various bugs where smart quotes weren't all that smart
    Added text.costs parameter for tweaking various parameters that affect the choices of the layout engine during text layout
    Added typm highlighting mode for math in raw blocks
    Added basic i18n for Galician, Catalan, Latin, Icelandic, Hebrew
    Implemented hyphenation duplication for Czech, Croatian, Lower Sorbian, Polish, Portuguese, Slovak, and Spanish.
    The smallcaps function is now an element function and can thereby be used in show(-set) rules.
    The raw.theme parameter can now be set to none to disable highlighting even in the presence of a language tag, and to auto to reset to the default
    Multiple stylistic sets can now be enabled at once
    Fixed the Chinese translation for "Equation"
    Fixed that hyphenation could occur outside of words
    Fixed incorrect layout of bidirectional text in edge cases
    Fixed layout of paragraphs with explicit trailing whitespace
    Fixed bugs related to empty paragraphs created via #""
    Fixed accidental trailing spaces for line breaks immediately preceding an inline equation
    Fixed text.historical-ligatures not working correctly
    Fixed accidental repetition of Thai characters around line breaks in some circumstances
    Fixed smart quotes for Swiss French
    New font metadata exceptions for Archivo, Kaiti SC, and Kaiti TC
    Updated bundled New Computer Modern fonts to version 6.0

Math
    Block-level equations can now break over multiple pages if enabled via show math.equation: set block(breakable: true).
    Matrix and vector sizing is now more consistent across different cell contents
    Added stretch function for manually or automatically stretching characters like arrows or parentheses horizontally or vertically
    Improved layout of attachments on parenthesized as well as under- or overlined expressions
    Improved layout of nested attachments resulting from code like #let a0 = $a_0$; $a0^1$
    Improved layout of primes close to superscripts
    Improved layout of fractions
    Typst now makes use of math-specific height-dependent kerning information in some fonts for better attachment layout
    The floor and ceil functions in math are now callable symbols, such that $ floor(x) = lr(floor.l x floor.r) $
    The mat.delim, vec.delim, and cases.delim parameters now allow any character that is considered a delimiter or "fence" (e.g. |) by Unicode. The delim: "||" notation is not supported anymore and should be replaced by delim: bar.double (Minor breaking change)
    Added vec.align and mat.align parameters
    Added underparen, overparen, undershell, and overshell
    Added ~ shorthand for tilde.op in math mode (Minor breaking change)
    Fixed baseline alignment of equation numbers
    Fixed positioning of corner brackets (⌜, ⌝, ⌞, ⌟)
    Fixed baseline of large roots
    Fixed multiple minor layout bugs with attachments
    Fixed that alignment points could affect line height in math
    Fixed that spaces could show up between text and invisible elements like metadata in math
    Fixed a crash with recursive show rules in math
    Fixed lr.size not affecting characters enclosed in mid in some cases
    Fixed resolving of em units in sub- and superscripts
    Fixed bounding box of inline equations when a text edge is set to "bounds"

Introspection
    Implemented a new system by which Typst tracks where elements end up on the pages. This may lead to subtly different behavior in introspections. (Breaking change)
    Fixed various bugs with wrong counter behavior in complex layout situations, through a new, more principled implementation
    Counter updates can now be before the first, in between, and after the last page when isolated by weak page breaks. This allows, for instance, updating a counter before the first page header and background.
    Fixed logical ordering of introspections within footnotes and figures
    Fixed incorrect here().position() when place was used in a context expression
    Fixed resolved positions of elements (in particular, headings) whose show rule emits an invisible element (like a state update) before a page break
    Fixed behavior of stepping a counter at a deeper level than its current state has
    Fixed citation formatting not working in table headers and a few other places
    Displaying the footnote counter will now respect the footnote numbering style

Model
    Document set rules do not need to be at the very start of the document anymore. The only restriction is that they must not occur inside of layout containers.
    The spacing property of lists, enumerations, and term lists is now also respected for tight lists
    Tight lists now only attach (with tighter spacing) to preceding paragraphs, not arbitrary blocks
    The quote element is now locatable (can be used in queries)
    The bibliography heading now uses depth instead of level so that its level can still be configured via a show-set rule
    Added support for more numbering formats: Devanagari, Eastern Arabic, Bengali, and circled numbers
    Added hanging-indent parameter to heading function to tweak the appearance of multi-line headings and improved default appearance of multi-line headings
    Improved handling of bidirectional text in outline entry
    Fixed document set rules being ignored in an otherwise empty document
    Fixed document set rules not being usable in context expressions
    Fixed bad interaction between set document and set page
    Fixed show figure: set align(..). Since the default figure alignment is now a show-set rule, it is not revoked by show figure: it => it.body anymore. (Minor breaking change)
    Fixed numbering of footnote references
    Fixed spacing after bibliography heading

Bibliography
    The Hayagriva YAML publisher field can now accept a dictionary with a location key. The top-level location key is now primarily intended for event and item locations.
    Multiple page ranges with prefixes and suffixes are now allowed
    Added director and catch-all editor types to BibLaTeX parsing
    Added support for disambiguation to alphanumeric citation style
    The year 0 will now render as 1BC
    Fixes for sorting of bibliography entries
    Fixed pluralization of page range labels
    Fixed sorting of citations by their number
    Fixed how citation number ranges collapse
    Fixed when the short form of a title is used
    Fixed parsing of unbalanced dollars in BibLaTeX url field
    Updated built-in citation styles

Visualization
    Added fill-rule parameter to path and polygon functions
    Fixed color mixing and gradients for Luma colors
    Fixed conversion from Luma to CMYK colors
    Fixed offset gradient strokes in PNG export
    Fixed unintended cropping of some SVGs
    SVGs with foreign objects now produce a warning as they will likely not render correctly in Typst

Syntax
    Added support for nested imports like import "file.typ": module.item
    Added support for parenthesized imports like import "file.typ": (a, b, c). With those, the import list can break over multiple lines.
    Fixed edge case in parsing of reference syntax
    Fixed edge case in parsing of heading, list, enum, and term markers immediately followed by comments
    Fixed rare crash in parsing of parenthesized expressions

Scripting
    Added new fixed-point decimal number type for highly precise arithmetic on numbers in base 10, as needed for finance
    Added std module for accessing standard library definitions even when a variable with the same name shadows/overwrites it
    Added array.to-dict, array.reduce, array.windows methods
    Added exact argument to array.zip
    Added arguments.at method
    Added int.from-bytes, int.to-bytes, float.from-bytes, and float.to-bytes
    Added proper support for negative values of the digits parameter of calc.round (the behaviour existed before but was subtly broken)
    Conversions from int to float will now error instead of saturating if the float is too large (Minor breaking change)
    Added float.nan and float.inf, removed calc.nan (Minor breaking change)
    Certain symbols are now generally callable like functions and not only specifically in math. Examples are accents or floor and ceil.
    Improved repr of relative values, sequences, infinities, NaN, type(none) and type(auto)
    Fixed crash on whole packages (rather than just files) cyclically importing each other
    Fixed return type of calc.round on integers when a non-zero value is provided for digits

Styling
    Text show rules now match across multiple text elements
    The string " in a text show rule now matches smart quotes
    Fixed a long-standing styling bug where the header and footer would incorrectly inherit styles from a lone element on the page (e.g. a heading)
    Fixed set page not working directly after a counter/state update
    Page fields configured via an explicit page(..)[..] call can now be properly retrieved in context expressions

Export
    Highly reduced PDF file sizes due to better font subsetting
    Emoji are now exported properly in PDF
    Added initial support for PDF/A. For now, only the standard PDF/A-2b is supported, but more is planned for the future. Enabled via --pdf-standard a-2b in the CLI and via the UI in File > Export as > PDF in the web app.
    Setting page.fill to none will now lead to transparent pages instead of white ones in PNG and SVG. The new default of auto means transparent for PDF and white for PNG and SVG.
    Improved text copy-paste from PDF in complex scenarios
    Exported SVGs now contain the data-typst-label attribute on groups resulting from labelled boxes and blocks
    Fixed a bug where some fonts would not print correctly on professional printers
    Fixed a bug where transparency could leak from one PDF object to another
    Fixed a bug with CMYK gradients in PDF
    Fixed various bugs with export of Oklab gradients in PDF
    Fixed crashes related to rendering of non-outline glyphs
    Two small fixes for PDF standard conformance

Performance
    Typst's layout engine is now multithreaded. Typical speedups are 2-3x for larger documents. The multithreading operates on page break boundaries, so explicit page breaks are necessary for it to kick in.
    Paragraph justification was optimized with a new two-pass algorithm. Speedups are larger for shorter paragraphs and range from 1-6x.

Command Line Interface
    Added --pages option to select specific page ranges to export
    Added --package-path and --package-cache-path as well as TYPST_PACKAGE_PATH and TYPST_PACKAGE_CACHE_PATH environment variables for configuring where packages are loaded from and cached in, respectively
    Added --ignore-system-fonts flag to disable system fonts fully for better reproducibility
    Added --make-deps argument for outputting the dependencies of the current compilation as a Makefile
    Added --pretty option to typst query, with the default now being to minify (only applies to JSON format)
    Added --backup-path to typst update to configure where the previous version is backed up
    Added useful links to help output
    The CLI will now greet users who invoke just typst for the first time
    The document can now be written to stdout by passing - as the output filename (for PDF or single-page image export)
    Typst will now emit a proper error message instead of failing silently when the certificate specified by --cert or TYPST_CERT could not be loaded
    The CLI now respects the SOURCE_DATE_EPOCH environment variable for better reproducibility
    When exporting multiple images, you can now use t (total pages), p (current page), and 0p (zero-padded current page, same as current n) in the output path
    The input and output paths now allow non-UTF-8 values
    Times are now formatted more consistently across the CLI
    Fixed a bug related to the --open flag
    Fixed path completions for typst not working in zsh

Tooling and Diagnostics
    The "compiler" field for specifying the minimum Typst version required by a package now supports imprecise bounds like 0.11 instead of 0.11.0
    Added warning when a label is ignored by Typst because no preceding labellable element exists
    Added hint when trying to apply labels in code mode
    Added hint when trying to call a standard library function that has been shadowed/overwritten by a local definition
    Added hint when trying to set both the language and the region in the lang parameter
    Added hints when trying to compile non-Typst files (e.g. after having typed typst c file.pdf by accident)
    Added hint when a string is used where a label is expected
    Added hint when a stray end of a block comment (*/) is encountered
    Added hints when destructuring arrays with the wrong number of elements
    Improved error message when trying to use a keyword as an identifier in a let binding
    Improved error messages when accessing nonexistent fields
    Improved error message when a package exists, but not the specified version
    Improved hints for unknown variables
    Improved hint when trying to convert a length with non-zero em component to an absolute unit
    Fixed a crash that could be triggered by certain hover tooltips
    Fixed an off-by-one error in to-source jumps when first-line-indent is enabled
    Fixed suggestions for . after the end of an inline code expressions
    Fixed autocompletions being duplicated in a specific case

Symbols
    New: parallelogram, original, image, crossmark, rest, natural, flat, sharp, tiny, miny, copyleft, trademark, emoji.beet, emoji.fingerprint, emoji.harp, emoji.shovel, emoji.splatter, emoji.tree.leafless,
    New variants: club.stroked, diamond.stroked, heart.stroked, spade.stroked, gt.neq, lt.neq, checkmark.heavy, paren.double, brace.double, shell.double, arrow.turn, plus.double, plus.triple, infinity.bar, infinity.incomplete, infinity.tie, multimap.double, ballot.check, ballot.check.heavy, emptyset.bar, emptyset.circle, emptyset.arrow.l, emptyset.arrow.r, parallel.struck, parallel.eq, parallel.equiv, parallel.slanted, parallel.tilde, angle.l.curly, angle.l.dot, angle.r.curly, angle.r.dot, angle.oblique, angle.s, em.two, em.three
    Renamed: turtle to shell, notes to note, ballot.x to ballot.cross, succ.eq to succ.curly.eq, prec.eq to prec.curly.eq, servicemark to trademark.service, emoji.face.tired to emoji.face.distress (Breaking change)
    Changed codepoint: prec.eq, prec.neq, succ.eq, succ.neq, triangle from ▷ to △, emoji.face.tired (Breaking change)
    Removed: lt.curly in favor of prec, gt.curly in favor of succ (Breaking change)

Deprecations
    counter.display without an established context
    counter.final with a location
    state.final with a location
    state.display
    query with a location as the second argument
    locate with a callback function
    measure with styles
    style

Development
    Added typst-kit crate which provides useful APIs for World implementors
    Added go-to-definition API in typst-ide
    Added package manifest parsing APIs to typst-syntax
    As the compiler is now capable of multithreading, World implementations must satisfy Send and Sync
    Changed signature of World::main to allow for the scenario where the main file could not be loaded
    Removed Tracer in favor of Warned<T> and typst::trace function
    The xz2 dependency used by the self-updater is now statically linked
    The Dockerfile now has an ENTRYPOINT directive
  • Loading branch information
0323pin committed Oct 19, 2024
1 parent ed7691b commit f928f75
Show file tree
Hide file tree
Showing 5 changed files with 922 additions and 899 deletions.
7 changes: 3 additions & 4 deletions textproc/typst/Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
# $NetBSD: Makefile,v 1.12 2024/10/16 22:10:55 wiz Exp $
# $NetBSD: Makefile,v 1.13 2024/10/19 21:09:21 pin Exp $

DISTNAME= typst-0.11.1
PKGREVISION= 1
DISTNAME= typst-0.12.0
CATEGORIES= textproc
MASTER_SITES= ${MASTER_SITE_GITHUB:=typst/}
GITHUB_PROJECT= typst
Expand All @@ -15,7 +14,7 @@ LICENSE= apache-2.0
.include "cargo-depends.mk"

# Depends on an unpublished crate. Can't use cargo.mk to fetch it.
TYPST-DEV-ASSETS_REV= ee8ae61cca138dc92f9d818fc7f2fc046d0148c5
TYPST-DEV-ASSETS_REV= b07d1560143d6883887358d30edb25cb12fcf5b9
DISTFILES= ${DEFAULT_DISTFILES}
DISTFILES+= typst-dev-assets-${TYPST-DEV-ASSETS_REV}.tar.gz
SITES.typst-dev-assets-${TYPST-DEV-ASSETS_REV}.tar.gz+= -${MASTER_SITE_GITHUB:=typst/}typst-dev-assets/archive/${TYPST-DEV-ASSETS_REV}.tar.gz
Expand Down
Loading

0 comments on commit f928f75

Please sign in to comment.