o

outrageous

@preview

Easier customization of outline entries.

v0.4.1
GPL-3.0-only

Package Information

Last Updated
Minimum Typst Version
0.13.0
Authors
RubixDev

1. Get the package

Download the package using the TPIX CLI:

tpix get @preview/outrageous:0.4.1

2. Import in your Typst file

Add this to your .typ file:

#import "@preview/outrageous:0.4.1": *

Version History

0.4.10.13.0
ba630858ce36...
0.4.00.13.0
17fbf3e33593...
0.3.00.11.0
9353f67fb4f2...
0.2.0
fdce69c2cba6...
0.1.0
26b71aa37d78...

Outrageous

Easier customization of outline entries.

Examples

For the full source see examples/basic.typ and for
more examples see the examples directory.

Default Style

Example: default style

#import "@preview/outrageous:0.4.1"
#show outline.entry: outrageous.show-entry

Custom Settings

Example: custom settings

#import "@preview/outrageous:0.4.1"
#show outline.entry: outrageous.show-entry.with(
  // the typst preset retains the normal Typst appearance
  ..outrageous.presets.typst,
  // we only override a few things:
  // level-1 entries are italic, all others keep their font style
  font-style: ("italic", auto),
  // no fill for level-1 entries, a thin gray line for all deeper levels
  fill: (none, line(length: 100%, stroke: gray + .5pt)),
)

Usage

show-entry

Show the given outline entry with the provided styling. Should be used in a show
rule like #show outline.entry: outrageous.show-entry.

#let show-entry(
  entry,
  font-weight: presets.outrageous-toc.font-weight,
  font-style: presets.outrageous-toc.font-style,
  vspace: presets.outrageous-toc.vspace,
  font: presets.outrageous-toc.font,
  fill: presets.outrageous-toc.fill,
  gap: presets.outrageous-toc.gap,
  fill-right-pad: presets.outrageous-toc.fill-right-pad,
  fill-align: presets.outrageous-toc.fill-align,
  prefix-transform: presets.outrageous-toc.prefix-transform,
  body-transform: presets.outrageous-toc.body-transform,
  page-transform: presets.outrageous-toc.page-transform,
  state-key: "outline-page-number-max-width",
) = { /* ... */ }

Arguments:

For all the arguments that take arrays, the array's first item specifies the
value for all level-one entries, the second item for level-two, and so on. The
array's last item will be used for all deeper/following levels as well.

  • entry: content — The
    outline.entry
    element from the show rule.
  • font-weight: array of (str or int or auto or none) —
    The entry's font weight. Setting to auto or none keeps the context's
    current style.
  • font-style: array of (str or auto or none) — The entry's
    font style. Setting to auto or none keeps the context's current style.
  • vspace: array of (relative or fraction or auto or none)
    — The vertical space above the entry. Setting to auto or none keeps
    the context's current setting.
  • font: array of (str or array or auto or none) — The
    entry's font. Setting to auto or none keeps the context's current font.
  • fill: array of (content or auto or none) — The entry's
    fill. Setting to auto keeps the context's current setting.
  • gap: array of (length or auto or none) — The gap between
    the entry's prefix and body. Setting to auto keeps the context's current
    setting. Setting to none is the same as 0pt.
  • fill-right-pad: relative or none — Horizontal space to put
    between the fill and page number.
  • fill-align: bool — Whether fill-right-pad should be relative to
    the current page number or the widest page number. Setting this to true has
    the effect of all fills ending on the same vertical line.
  • prefix-transform: function or none — Callback for custom edits
    to the entry's prefix. It gets passed the entry's level (int) and prefix
    (content) and should return content or none. If none is returned,
    no modifications are made.
  • body-transform: function or none — Callback for custom edits to
    the entry's body. It gets passed the entry's level (int), prefix
    (content) and body (content) and should return content or none.
    If none is returned, no modifications are made.
  • page-transform: function or none — Callback for custom edits to
    the entry's page number. It gets passed the entry's level (int) and page
    number (content) and should return content or none. If none is
    returned, no modifications are made.
  • state-key: str — The key to use for the internal state which
    tracks the maximum page number width. The state is global for the entire
    document and thus applies to all outlines. If you wish to re-calculate the max
    page number width for fill-align, then you must provide a different key for
    each outline.

Returns: content

presets

Presets for the arguments for show-entry(). You can use them in
your show rule with
#show outline.entry: outrageous.show-entry.with(..outrageous.presets.outrageous-figures).

#let presets = (
  // outrageous preset for a Table of Contents
  outrageous-toc: (
    // ...
  ),
  // outrageous preset for List of Figures/Tables/Listings
  outrageous-figures: (
    // ...
  ),
  // preset without any style changes
  typst: (
    // ...
  ),
)

repeat

Utility function to repeat content to fill space with a fixed size gap.

#let repeat(gap: none, justify: false, body) = { /* ... */ }

Arguments:

  • gap: length or none — The gap between repeated items.
  • justify: bool — Whether to increase the gap to justify the items.
  • body: content — The content to repeat.

Returns: content

align-helper

Utility function to help with aligning multiple items.

#let align-helper(state-key, what-to-measure, display) = { /* ... */ }

Arguments:

  • state-key: str — The key to use for the state that keeps track
    of the maximum encountered width.
  • what-to-measure: content — The content to measure at this call.
  • display: function — A callback which gets passed the maximum
    encountered width and the width of the current item (what was given to
    what-to-measure), both as length, and should return content which
    can make use of these widths for alignment.

Returns: content