Skip to content

Releases: touying-typ/touying

Touying 0.6.1

25 Feb 10:19
Compare
Choose a tag to compare

Added support for the theorion package, and used it as the default math theorem environment.

🌌 Theorion

Theorion (The Orion) is an out-of-the-box, customizable and multilingual theorem environment package for Typst. Quick start:

#import "@preview/theorion:0.3.0": *
#import cosmos.fancy: *
// #import cosmos.rainbow: *
// #import cosmos.clouds: *
#show: show-theorion

#theorem(title: "Euclid's Theorem")[
  There are infinitely many prime numbers.
] <thm:euclid>

#theorem-box(title: "Theorem without numbering", outlined: false)[
  This theorem is not numbered.
]

Current features:

  • Out-of-the-box styles 🎨:
    • 📄 Simple - Clean and minimalistic
    • 🌈 Rainbow - Colorful and vibrant
    • ☁️ Clouds - Soft and elegant
    • ✨ Fancy - Professional and polished
  • Highly customizable ⚙️:
    • Custom counters and numbering styles
    • Configurable inheritance levels
    • Custom theorem environments
    • Custom rendering functions
  • Built-in multilingual support 🌐
  • Rich theorem environments 📚: theorem, definition, lemma, corollary, example, proof, and many more presets
  • Theorem restatement 🔄: #theorion-restate(filter: it => it.outlined and it.identifier == "theorem")
  • Additional features 📑:
    • Theorem table of contents
    • Appendix numbering adjustments
    • Complete label and reference system
    • Optional outline and numbering display
    • Touying animation support

Touying 0.6.0

20 Feb 11:20
Compare
Choose a tag to compare

It's not a big update, but it's the first touying release since typst 0.13 was released.

Features

  • feat: add auto style for display-current-heading.
    • For users, you can use show heading: set text(blue) to change color for heading in some themes like dewdrop.
    • For theme creator, you can use syntax like utils.display-current-heading(level: 1, style: auto) to achieve the same result.
  • feat: apply config-info information to set document.
  • feat: set stretch: false by default for alternatives functions. This is a minor breaking change, but I think it would be more intuitive: no auto empty space.

Fixes

  • fix: fix error with uncover using semi-transparent-cover
  • fix: fix type string comparison #153
  • fix: fix horizontal-line bug in typst 0.13.0
  • refactor: fix display-current-short-heading

Touying 0.5.5

19 Dec 13:20
Compare
Choose a tag to compare

Fixed bugs.

Touying 0.5.4

18 Dec 12:21
Compare
Choose a tag to compare

Features

  • docs: improve param documentation and we have better hints for tinymist #98
  • feat: fake frozon states support for heading #124
  • feat: add alpha-changing-cover and color-changing-cover #129
  • feat: add effect function #111
    • Example: #effect(text.with(fill: red), "2-")[Something] will display [Something] if the current slide is 2 or later.
  • feat: add argument config: (..) for xxx-slide functions
  • feat: add align argument for university theme

Fixes

  • fix: also hide enum numbers with show-hide-set-list-marker-none #114
  • fix: fixed progress bar not to break apart when global figure gutter is set nonzero #120
  • fix: fixed frozen-counters bug with multiple #pause commands #124
  • fix: fixed incorrect page num when draft is true #125
  • fix: fix behaviors of fit-to-height and fit-to-width partially #131
  • fix: duplicated footnotes in headings #132
  • fix: do not hardcode page sizes #134
  • fix: add default numbering for page #100
  • refactor: move show-strong-with-alert to per-slide level #123
  • refactor: remove unnecessary config-page(fill: ...)
  • theme(metropolis): fix color of title page and fix #103
  • theme(metropolis): fixed metropolis slide's header to return content if title is specified #126
  • theme(metropolis): respect colors dict in metropolis theme #133

Thanks for the contributions from @enklht.

Touying 0.5.3

15 Oct 08:46
Compare
Choose a tag to compare

Features

  • feat: add stretch parameter for #alternatives[] function class. This allows us to handle cases where the internal element is a context expression.
  • feat: add config-common(align-enum-marker-with-baseline: true) for aligning the enum marker with the baseline.
  • feat: add linebreaks option to components.mini-slides. #96
  • feat: add <touying:skip> label to skip a new-section-slide.
  • feat: add config-common(show-hide-set-list-marker-none: true) to make the markers of list and enum invisible after #pause.
  • feat: add config-common(bibliography-as-footnote: bibliography(title: none, "ref.bib")) to display the bibliography in footnotes.
  • refactor: add config-common(show-strong-with-alert: true) configuration to display strong text with an alert. (small breaking change for some themes)
  • refactor: refactor display-current-heading for preserving heading style in title and subtitle. #71
  • refactor: make new-section-slide-fn function class can receive body parameter. We can use receive-body-for-new-section-slide-fn to control it. (Breaking change)
    • For example, you can add #speaker-note[] for a new section slide, like = Section Title \ #speaker-note[].
    • If you don't want to append content to the body of the new section slide, you can use --- after the section title.

Fixes

  • fix outdated documentation.
  • fix bug of enable-frozen-states-and-counters in handout mode.
  • fix unusable square() function. #73
  • fix hidden footer for show-notes-on-second-screen: bottom. #89
  • fix metadata element in table cells. #77 #95
  • fix auto-offset-for-heading to false by default.
  • fix uncover/only hides more content than it should. #85
  • theme(simple): fix wrong title and subtitle. #70

Touying 0.5.2

03 Sep 18:08
Compare
Choose a tag to compare

Fix some bugs.

Touying 0.5.1

03 Sep 15:35
Compare
Choose a tag to compare

Fix some bugs.

Touying 0.5.0

02 Sep 15:12
Compare
Choose a tag to compare

This is a significant disruptive version update. Touying has removed many mistakes that resulted from incorrect decisions. We have redesigned numerous features. The goal of this version is to make Touying more user-friendly, more flexible, and more powerful.

Major changes include:

  • Avoiding closures and OOP syntax, which makes Touying's configuration simpler and allows for the use of document comments to provide more auto-completion information for the slide function.
    • The existing #let slide(self: none, ..args) = { .. } is now #let slide(..args) = touying-slide-wrapper(self => { .. }), where self is automatically injected.
    • We can use config-xxx syntax to configure Touying, for example, #show: university-theme.with(aspect-ratio: "16-9", config-colors(primary: blue)).
  • The touying-slide function no longer includes parameters like section, subsection, and title. These will be automatically inserted into the slide as invisible level 1, 2, or 3 headings via self.headings (controlled by the slide-level configuration).
    • We can leverage the powerful headings provided by Typst to support numbering, outlines, and bookmarks.
    • Headings within the #slide[= XXX] function will be adjusted to level slide-level + 1 using the offset parameter.
    • We can use labels on headings to control many aspects, such as supporting the <touying:hidden> and other special labels, implementing short headings, or recalling a slide with #touying-recall().
  • Touying now supports the normal use of set and show rules at any position, without requiring them to be in specific locations.

A simple usage example is shown below, and more examples can be found in the examples directory:

#import "@preview/touying:0.5.0": *
#import themes.university: *

#show: university-theme.with(
  aspect-ratio: "16-9",
  config-info(
    title: [Title],
    subtitle: [Subtitle],
    author: [Authors],
    date: datetime.today(),
    institution: [Institution],
    logo: emoji.school,
  ),
)

#set heading(numbering: "1.1")

#title-slide()

= The Section

== Slide Title

#lorem(40)

Theme Migration Guide:

For detailed changes to specific themes, you can refer to the themes directory. Generally, if you want to migrate an existing theme, you should:

  1. Rename the register function to xxx-theme and remove the self parameter.
  2. Add a show: touying-slides.with(..) configuration.
    • Change self.methods.colors to config-colors(primary: rgb("#xxxxxx")).
    • Change self.page-args to config-page().
    • Change self.methods.slide = slide to config-methods(slide: slide).
    • Change self.methods.new-section-slide = new-section-slide to config-methods(new-section-slide: new-section-slide).
    • Change private theme variables like self.xxx-footer to config-store(footer: [..]), which you can access through self.store.footer.
    • Move the configuration of headers and footers into the slide function rather than in the xxx-theme function.
    • You can directly use set or show rules in xxx-theme or configure them through config-methods(init: (self: none, body) => { .. }) to fully utilize the self parameter.
  3. For states.current-section-with-numbering, you can use utils.display-current-heading(level: 1) instead.
    • If you only need the previous heading regardless of whether it is a section or a subsection, use utils.display-current-heading().
  4. The alert function can be replaced with config-methods(alert: utils.alert-with-primary-color).
  5. The touying-outline() function is no longer needed; you can use components.adaptive-columns(outline()) instead. Consider using components.progressive-outline() or components.custom-progressive-outline().
  6. Replace states.slide-counter.display() + " / " + states.last-slide-number with context utils.slide-counter.display() + " / " + utils.last-slide-number. That is, we no longer use states but utils.
  7. Remove the slides function; we no longer need this function. Instead of implicitly injecting title-slide(), explicitly use #title-slide(). If necessary, consider adding it in the xxx-theme function.
  8. Change #let slide(self: none, ..args) = { .. } to #let slide(..args) = touying-slide-wrapper(self => { .. }), where self is automatically injected.
    • Change specific parameter configurations to self = utils.merge-dicts(self, config-page(fill: self.colors.neutral-lightest)).
    • Remove self = utils.empty-page(self) and use config-common(freeze-slide-counter: true) and config-page(margin: 0em) instead.
    • Change (self.methods.touying-slide)() to touying-slide().
  9. You can insert visible headings into slides by configuring config-common(subslide-preamble: self => text(1.2em, weight: "bold", utils.display-current-heading(depth: self.slide-level))).
  10. Finally, don't forget to add document comments to your functions so your users can get better auto-completion hints, especially when using the Tinymist plugin.

Other Changes:

  • theme(stargazer): new stargazer theme modified from Coekjan/touying-buaa.
  • feat: implemented fake frozen states support, allowing you to use numbering and #pause normally. This behavior can be controlled with enable-frozen-states-and-counters, frozen-states, and frozen-counters in config-common().
  • feat: implemented label-only-on-last-subslide functionality to prevent non-unique label warnings when working with @equation and @figure in conjunction with #pause animations.
  • feat: added the touying-recall(<label>) function to replay a specific slide.
  • feat: implemented nontight-list-enum-and-terms, which defaults to true and forces list, enum, and terms to have their tight parameter set to false. You can control spacing size with #set list(spacing: 1em).
  • feat: replaced list with terms implementation to achieve align-list-marker-with-baseline, which is off by default.
  • feat: implemented scale-list-items, scaling list items by a factor, e.g., scale-list-items: 0.8 scales list items by 0.8.
  • feat: supported direct use of #pause and #meanwhile in math expressions, such as $x + pause y$.
  • feat: provided #pause and #meanwhile support for most layout functions, such as grid and table.
  • feat: added #show: appendix support, essentially equivalent to #show: touying-set-config.with((appendix: true)).
  • feat: Introduced special labels <touying:hidden>, <touying:unnumbered>, <touying:unoutlined>, <touying:unbookmarked> to simplify control over heading behavior.
  • feat: added basic utils.short-heading support to display short headings using labels, such as displaying <sec:my-section> as "My Section".
  • feat: added #components.adaptive-columns() to achieve adaptive columns that span a page, typically used with the outline() function.
  • feat: added #show: magic.bibliography-as-footnote.with(bibliography("ref.bib")) to display the bibliography in footnotes.
  • feat: added components like custom-progressive-outline, mini-slides.
  • feat: removed touying-outline(), which can be directly replaced with outline().
  • fix: replaced potentially incompatible code, such as type(s) == "string" and locate(loc => { .. }).
  • fix: Fixed some bugs.

Touying 0.4.2

28 May 17:28
dd5d288
Compare
Choose a tag to compare

Feature: Export slides to PPTX and HTML formats and show presentation online. touying-exporter touying-template online

  • theme(metropolis): decoupled text color with neutral-dark (Breaking change)
  • feat: add mark-style uncover, only and alternatives
  • feat: add warning for styled block for slides
  • feat: add warning for touying-temporary-mark
  • feat: add markup-text for speaker-note
  • fix: fix bug of slides

Touying 0.4.1

13 May 09:01
Compare
Choose a tag to compare

Features

  • feat: support builtin outline and bookmark #44
  • feat: support speaker note for dual-screen #43
  • feat: add touying-mitex function

Fixes

  • fix: add outline-slide for dewdrop theme #42
  • fix: fix regression of default value "auto" for repeat

Miscellaneous Improvements

  • feat: add list support for touying-outline function
  • feat: add auto-reset-footnote
  • feat: add freeze-in-empty-page for better page counter
  • feat: add ..args for register method to capture unused arguments #22