Settings and Config
Global Styles
For Touying, global styles refer to set rules or show rules that need to be applied everywhere, such as #set text(size: 20pt).
Themes in Touying encapsulate some of their own global styles, which are placed in #self.methods.init. For example, the simple theme encapsulates:
config-methods(
init: (self: none, body) => {
set text(fill: self.colors.neutral-darkest, size: 25pt)
show footnote.entry: set text(size: .6em)
show strong: self.methods.alert.with(self: self)
show heading.where(level: self.slide-level + 1): set text(1.4em)
body
},
)
If you are not a theme creator but simply want to add some of your own global styles to your slides, you can easily place them before or after #show: xxx-theme.with(). For example, the metropolis theme recommends that you add the following global styles yourself:
#set text(font: "Fira Sans", weight: "light", size: 20pt)
#show math.equation: set text(font: "Fira Math")
#set strong(delta: 100)
#set par(justify: true)
Global Information
Like Beamer, Touying helps you better maintain global information through a unified API design, allowing you to easily switch between different themes. Global information is a typical example of this.
You can set the title, subtitle, author, date, and institution information of your slides with:
config-info(
title: [Title],
subtitle: [Subtitle],
author: [Authors],
date: datetime.today(),
institution: [Institution],
)
Later on, you can access them through self.info.
This information is generally used in the theme's title-slide, header, and footer, such as #show: metropolis-theme.with(aspect-ratio: "16-9", footer: self => self.info.institution).
The date can accept datetime format and content format, and the date display format of the datetime format can be changed with:
config-common(datetime-format: "[year]-[month]-[day]")
Preamble
The config-common(preamble: ...) option lets you run setup code on every slide without repeating it manually. This is useful when integrating packages like codly:
#show: simple-theme.with(
config-common(preamble: {
codly(languages: codly-languages)
}),
)
However you may also set this locally for individual slides, see below.
Show-Rule Config Overrides
You can override any configuration for all following slides and the current one, using #show: touying-set-config.with(...), just like you would write a show/set-rule normally.
#import "@preview/touying:0.7.0": *
#import themes.simple: *
#show: simple-theme.with(aspect-ratio: "16-9")
== Normal Slide
This slide uses the default settings.
== Blue Background Slide
#show: touying-set-config.with(config-page(fill: blue.lighten(80%)))
This slide has a blue background applied via `touying-set-config`.
== Red Accent Slide
#show: touying-set-config.with(config-colors(primary: red))
This slide uses a red primary color, e.g. in `#alert` boxes.
#alert[This is an alert box with red accent color.]
== Changed Cover
#show: touying-set-config.with(config-methods(
cover: utils.semi-transparent-cover,
))
Initial Content.
#pause
Content that appears with a semi-transparent cover effect.
Local Config Overrides
If you want to affect only one specific slide, you can set the config locally via #slide(config: ...)[...].
== Local Config
#slide(config:config-page(fill: purple.lighten(90%)))[
Only this slide has a light purple background, but the next slide goes back being light blue.
]
Deferred Config Show Rules
You may even defer a config change to the beginning of the next slide.
This is also how show: appendix works, but also useful for setting a custom preamble or similar that affects not just the slide's content. (Note that config-common has no effect, you can also write your config dict without it.)
== Content Slide
Some content.
#show: touying-set-config.with(defer:true, config-common(appendix:true))
// you can just write `show: appendix`
== Appendix
Page counter does no longer increase.
#show: touying-set-config.with(defer:true, (preamble:{codly(languages: codly-languages)}))
== Deferred Config Change
Now we have codly available.
Frozen Counters
When using animation, figure and theorem counters inside a single slide keep advancing per subslide by default. To freeze a counter (so it does not change between subslides), use:
config-common(frozen-counters: (figure.where(kind: image),))
This is especially useful when working with the Theorion package:
config-common(frozen-counters: (theorem-counter,))