--- sidebar_position: 2 --- # Getting Started Before you begin, make sure you have the Typst environment installed. If not, you can use the [Web App](https://typst.app/) or install the [Tinymist LSP](https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist) plugins for VS Code. To use Touying, you just need to include the following in your document: ```typst #import "@preview/touying:0.6.1": * #import themes.simple: * #show: simple-theme.with(aspect-ratio: "16-9") = Title == First Slide Hello, Touying! #pause Hello, Typst! ``` ![image](https://github.com/touying-typ/touying/assets/34951714/f5bdbf8f-7bf9-45fd-9923-0fa5d66450b2) It's that simple! You've created your first Touying slides. Congratulations! 🎉 **Tip:** You can use Typst syntax like `#import "config.typ": *` or `#include "content.typ"` to implement Touying's multi-file architecture. ## More Complex Examples In fact, Touying provides various styles for slide writing. You can also use the `#slide[..]` syntax to access more powerful features provided by Touying. Touying offers many built-in themes to easily create beautiful slides. For example, in this case: ```typst #import "@preview/touying:0.6.1": * #import themes.university: * #import "@preview/cetz:0.3.2" #import "@preview/fletcher:0.5.5" as fletcher: node, edge #import "@preview/numbly:0.1.0": numbly #import "@preview/theorion:0.3.2": * #import cosmos.clouds: * #show: show-theorion // cetz and fletcher bindings for touying #let cetz-canvas = touying-reducer.with(reduce: cetz.canvas, cover: cetz.draw.hide.with(bounds: true)) #let fletcher-diagram = touying-reducer.with(reduce: fletcher.diagram, cover: fletcher.hide) #show: university-theme.with( aspect-ratio: "16-9", // align: horizon, // config-common(handout: true), config-common(frozen-counters: (theorem-counter,)), // freeze theorem counter for animation config-info( title: [Title], subtitle: [Subtitle], author: [Authors], date: datetime.today(), institution: [Institution], logo: emoji.school, ), ) #set heading(numbering: numbly("{1}.", default: "1.1")) #title-slide() == Outline #components.adaptive-columns(outline(title: none, indent: 1em)) = Animation == Simple Animation We can use `#pause` to #pause display something later. #pause Just like this. #meanwhile Meanwhile, #pause we can also use `#meanwhile` to #pause display other content synchronously. #speaker-note[ + This is a speaker note. + You won't see it unless you use `config-common(show-notes-on-second-screen: right)` ] == Complex Animation At subslide #touying-fn-wrapper((self: none) => str(self.subslide)), we can use #uncover("2-")[`#uncover` function] for reserving space, use #only("2-")[`#only` function] for not reserving space, #alternatives[call `#only` multiple times \u{2717}][use `#alternatives` function #sym.checkmark] for choosing one of the alternatives. == Callback Style Animation #slide( repeat: 3, self => [ #let (uncover, only, alternatives) = utils.methods(self) At subslide #self.subslide, we can use #uncover("2-")[`#uncover` function] for reserving space, use #only("2-")[`#only` function] for not reserving space, #alternatives[call `#only` multiple times \u{2717}][use `#alternatives` function #sym.checkmark] for choosing one of the alternatives. ], ) == Math Equation Animation Equation with `pause`: $ f(x) &= pause x^2 + 2x + 1 \ &= pause (x + 1)^2 \ $ #meanwhile Here, #pause we have the expression of $f(x)$. #pause By factorizing, we can obtain this result. == CeTZ Animation CeTZ Animation in Touying: #cetz-canvas({ import cetz.draw: * rect((0, 0), (5, 5)) (pause,) rect((0, 0), (1, 1)) rect((1, 1), (2, 2)) rect((2, 2), (3, 3)) (pause,) line((0, 0), (2.5, 2.5), name: "line") }) == Fletcher Animation Fletcher Animation in Touying: #fletcher-diagram( node-stroke: .1em, node-fill: gradient.radial(blue.lighten(80%), blue, center: (30%, 20%), radius: 80%), spacing: 4em, edge((-1, 0), "r", "-|>", `open(path)`, label-pos: 0, label-side: center), node((0, 0), `reading`, radius: 2em), edge((0, 0), (0, 0), `read()`, "--|>", bend: 130deg), pause, edge(`read()`, "-|>"), node((1, 0), `eof`, radius: 2em), pause, edge(`close()`, "-|>"), node((2, 0), `closed`, radius: 2em, extrude: (-2.5, 0)), edge((0, 0), (2, 0), `close()`, "-|>", bend: -40deg), ) = Theorems == Prime numbers #definition[ A natural number is called a #highlight[_prime number_] if it is greater than 1 and cannot be written as the product of two smaller natural numbers. ] #example[ The numbers $2$, $3$, and $17$ are prime. @cor_largest_prime shows that this list is not exhaustive! ] #theorem(title: "Euclid")[ There are infinitely many primes. ] #pagebreak(weak: true) #proof[ Suppose to the contrary that $p_1, p_2, dots, p_n$ is a finite enumeration of all primes. Set $P = p_1 p_2 dots p_n$. Since $P + 1$ is not in our list, it cannot be prime. Thus, some prime factor $p_j$ divides $P + 1$. Since $p_j$ also divides $P$, it must divide the difference $(P + 1) - P = 1$, a contradiction. ] #corollary[ There is no largest prime number. ] #corollary[ There are infinitely many composite numbers. ] #theorem[ There are arbitrarily long stretches of composite numbers. ] #proof[ For any $n > 2$, consider $ n! + 2, quad n! + 3, quad ..., quad n! + n $ ] = Others == Side-by-side #slide(composer: (1fr, 1fr))[ First column. ][ Second column. ] == Multiple Pages #lorem(200) #show: appendix = Appendix == Appendix Please pay attention to the current slide number. ``` ![image](https://github.com/user-attachments/assets/b1dfc4d9-e263-46ff-8588-a0635870e370) For more detailed tutorials on themes, you can refer to the following sections.