Documentation

selectorGo to source

A filter for selecting elements within the document.

To construct a selector you can:

Selectors are used to apply styling rules to elements. You can also use selectors to query the document for certain types of elements.

Furthermore, you can pass a selector to several of Typst’s built-in functions to configure their behaviour. One such example is the outline where it can be used to change which elements are listed within the outline.

Multiple selectors can be combined using the methods shown below. However, not all kinds of selectors are supported in all places, at the moment.

Example

#context query(
  heading.where(level: 1)
    .or(heading.where(level: 2))
)

= This will be found
== So will this
=== But this will not.

Constructor
Question mark

Turns a value into a selector. The following values are accepted:

target
str or regex or label or selector or location or function
RequiredPositional
Question mark

Can be an element function like a heading or figure, a <label> or a more complex selector like heading.where(level: 1).

Definitions
Question mark

orGo to source

Selects all elements that match this or any of the other selectors.

others
str or regex or label or selector or location or function
RequiredPositional
Question mark
Variadic
Question mark

The other selectors to match on.

andGo to source

Selects all elements that match this and all of the other selectors.

others
str or regex or label or selector or location or function
RequiredPositional
Question mark
Variadic
Question mark

The other selectors to match on.

beforeGo to source

Returns a modified selector that will only match elements that occur before the first match of end.

Note: This selector is currently only supported with introspection functions, not in show rules.

end
label or selector or location or function
RequiredPositional
Question mark

The original selection will end at the first match of end.

inclusiveDefault: true

Whether end itself should match or not. This is only relevant if both selectors match the same type of element. Defaults to true.

afterGo to source

Returns a modified selector that will only match elements that occur after the first match of start.

Note: This selector is currently only supported with introspection functions, not in show rules.

start
label or selector or location or function
RequiredPositional
Question mark

The original selection will start at the first match of start.

inclusiveDefault: true

Whether start itself should match or not. This is only relevant if both selectors match the same type of element. Defaults to true.

withinGo to source

Returns a modified selector that will only match elements that are contained within any elements matching the ancestor selector.

ExpandView example: Finding strong elements in lists
*Strong emphasis* that does not count.

- An *important* word
- Another *key* word

Strong elements in lists:
#context {
  query(selector(strong).within(list))
    .map(it => it.body)
    .join[, ]
}

This can also be used in combination with here to find all matches of a selector within a context expression. This can be quite useful to have an introspection return results local to some component you are building.

ExpandView example: Counting elements locally in a context block
#let count(sel, body) = context {
  let n = query(selector(sel).within(here())).len()
  [#body (#n matches)]
}

- #count(emph)[Has _two_ matching _elements_]
- #count(strong)[Has *one* matching element]

Note: This selector is currently only supported with introspection functions, not in show rules.

ancestor
label or selector or location or function
RequiredPositional
Question mark

Only matches of self that are descendants of any element matching this selector will be included in the output.

An element is not considered its own ancestor.