Skip to content

An implementation of numbered theorem environments in typst

License

Notifications You must be signed in to change notification settings

DieracDelta/typst-theorems

 
 

Repository files navigation

typst-theorems

An implementation of numbered theorem environments in typst. Available as ctheorems in the official Typst Universe. Import with

#import "@preview/ctheorems:1.1.3": *
#show: thmrules

Alternatively, copy and import the theorems.typ file to use in your own projects.

Features

  • Numbered theorem environments can be created and customized.
  • Environments can share the same counter, via same identifiers.
  • Environment counters can be attached (just as subheadings are attached to headings) to other environments, headings, or keep a global count via base.
  • The depth of a counter can be manually set, via base_level.
  • Environments can be <label>'d and @reference'd.

Manual and Examples

Get acquainted with typst-theorems by checking out the minimal example below!

You can read the manual for a full walkthrough of functionality offered by this module; flick through manual_examples and its typ file to just see the examples.

The differential_calculus.typ (render) project provides a practical use case. (Hastily translated from my notes written in LaTeX)

basic example

Preamble

#import "theorems.typ": *
#show: thmrules.with(qed-symbol: $square$)

#set page(width: 16cm, height: auto, margin: 1.5cm)
#set text(font: "Libertinus Serif", lang: "en")
#set heading(numbering: "1.1.")

#let theorem = thmbox("theorem", "Theorem", fill: rgb("#eeffee"))
#let corollary = thmplain(
  "corollary",
  "Corollary",
  base: "theorem",
  titlefmt: strong
)
#let definition = thmbox("definition", "Definition", inset: (x: 1.2em, top: 1em))

#let example = thmplain("example", "Example").with(numbering: none)
#let proof = thmproof("proof", "Proof")

Document

= 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("Euclid")[
  There are infinitely many primes.
]
#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.
] <cor_largest_prime>
#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 #qedhere
  $
]

Acknowledgements

Thanks to

  • MJHutchinson for suggesting and implementing the base_level and base: none features,
  • rmolinari for suggesting and implementing the separator: ... feature,
  • DVDTSB for contributing
    • the idea of passing named arguments from the theorem directly to the fmt function.
    • the number: ... override feature.
    • the title: ... override feature in thmbox.
  • PgBiel for fixing breaking changes in version updates.
  • The awesome devs of typst.app for their support.

About

An implementation of numbered theorem environments in typst

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Typst 100.0%