Conditional set rules
Some set rules that modify certain fields should only be applied if other fields have specific values. For example, if a theorem has kind: "lemma"
, you may want to set its supplement
field to display as [Lemma]
.
In this case, you can use e.cond-set(filter, field1: value1, field2: value2, ...)
. filter
determines which element instances should be changed, and what comes after are the fields to set.
The filter must be restricted to matching a single element, or it will be rejected. This is only a problem for certain filters, such as NOT filters, custom filters and e.within
filters. In that case, you can use e.filters.and_(element, filter)
to force it to only apply to that element.
e.cond-set(element.with(...), field: value)
is not recursive. This means that a separate element
nested inside a matched element
will not be affected.
This makes it differ from Typst's show-set rule, such as show heading.where(level: 1): set heading(supplement: [Chapter])
, which would also affect any nested heading
.
To also affect children and descendants similarly to Typst's show-set, use e.filtered(element.with(...), e.set_(element, field: value))
together with e.cond-set
.
For example:
#show: e.cond-set(theorem.with(kind: "lemma"), supplement: "Lemma")
// This will display "Theorem 1: The fact is true."
#theorem[The fact is true.]
// This will display "Lemma 1: This fact is also true."
#theorem(kind: "lemma")[This fact is also true.]