Grape Suite

April 2, 2026 · View on GitHub

The grape suite is a suite consisting of following templates:

  • exercises (for exams, homework, etc.)

    • essays and minutess
  • seminar papers

  • slides (using polylux)

Exercises

Use the exercise module to create exercise sheets or exams (or hand in your homework):

screenshot of a document that represents an exercise sheet with multiple tasks screenshot of a document that represents an exercise sheet with tasks and a highlighted hint for a specific subtask screenshot of a document that represents an exercise sheet with tasks and solutions for two tasks
Tasks Hints Solutions

The exercise module also supports exams with a titlepage, point distributions and grading rubric:

screenshot of a document that represents the title page of an exam sheet screenshot of a document that represents an exercise sheet with lines for students to write on screenshot of a document that represents an exercise sheet with a table of criteria that allow transparent grading
Title page Tasks Grading Rubric

For written minutes and essays see subtypes module.

Setup

#import "@preview/grape-suite:4.0.0": exercise
#import exercise: project, task, subtask

#show: project.with(
    title: "Lorem ipsum dolor sit",

    university: [University],
    institute: [Institute],
    seminar: [Seminar],

    abstract: lorem(100),
    show-outline: true,

    author: "John Doe",

    show-solutions: false
)

Documentation

project
nooptional, number, default: none, number of the sheet in the series
typeoptional, content, default: [Exam], type of the series, eg. exam, homework, ...
titleoptional, content, default: none, title of the document: if none, then generated from no, type and suffix-title
suffix-titleoptional, content, default: none, used if title is none to generate the title of the document
show-outlineoptional, bool, default: false, show outline after title iff true
abstractoptional, content, default: none, show abstract between outline and title
document-titleoptional, content, default: none, shown in the upper right corner of the page header: if none, title is used
show-namefieldoptional, bool, default: false, show namefield at the end of the left header iff true
namefieldoptional, content/array, default: [Name:], content shown iff show-namefield; can take an array of strings/content iff show-titlepage is true that will be shown on the titlepage
show-timefieldoptional, bool, default: false, show timefield at the end of right header iff true
timefieldoptional, function, default: (time) => [Time: #time min.], to generate the content shown as the timefield iff show-timefield is true
max-timeoptional, number, default: 0, time value used in the timefield function generator
show-titlepageoptional, bool, default: false, generate a title page for the exercise
show-linesoptional, bool, default: false, draw automatic lines for each task, if lines parameter of task is set
show-solutionsoptional, bool, default: false, will not display solutions iff false
show-hintsoptional, bool, default: false, will not display hints iff false
show-point-distributionoptional, bool, default: false, show point distribution after tasks iff true
show-points-tableoptional, bool, default: false, show a table of all tasks and their points at the end of the document
show-grading-rubricoptional, bool, default: false, show solutions as a grading rubric iff true - description of point distribution in each task can be provided through rubric
universityoptional, content, default: none
facultyoptional, content, default: none
instituteoptional, content, default: none
seminaroptional, content, default: none
semesteroptional, content, default: none
instructoroptional, content, default: none
authoroptional, content, default: none
dateoptional, datetime or content, default: datetime.today()
date-formatoptional, function, default: (date) => if type(date) == type(datetime.today()) { date.display("[day].[month].[year]") } else { date }
header-gutteroptional, length, default: 20%, overwrite header gutter
headeroptional, content, default: none, overwrite page header
header-rightoptional, content, default: none, overwrite right header part
header-middleoptional, content, default: none, overwrite middle header part
header-leftoptional, content, default: none, overwrite left header part
show-header-lineoptional, bool, default: true, show colors-primary line in header
footeroptional, content, default: none, overwrite footer part
footer-rightoptional, content, default: none, overwrite right footer part
footer-middleoptional, content, default: none, overwrite middle footer part
footer-leftoptional, content, default: none, overwrite left footer part
show-footer-lineoptional, bool, default: true, show colors-primary line in footer
task-typeoptional, content, default: [Task], content shown in task title box before numbering
extra-task-typeoptional, content, default: [Extra task], for tasks where the extra parameter is true, content shown in title box before numbering
box-task-titleoptional, content, default: [Task], shown as the title of a task box used by the slides library
box-hint-titleoptional, content, default: [Hint], shown as the title of a tasks colored hint box
box-solution-titleoptional, content, default: [Solution], shown as the title of a tasks colored solution box
box-definition-titleoptional, content, default: [Definition], shown as the title of a definition box used by the slides library
box-notice-titleoptional, content, default: [Notice], shown as the title of a notice box used by the slides library
box-example-titleoptional, content, default: [Example], shown as the title of a example box used by the slides library
hint-typeoptional, content, default: [Hint], title of a tasks hint version
hints-titleoptional, content, default: [Hints], title of the hints section
solution-typeoptional, content, default: [Suggested solution], title of a tasks solution version
solutions-titleoptional, content, default: [Suggested solutions], title of the solutions section
grading-rubric-task-headeroptional, content, default: [Tasks], first column header of the grading rubric, column contains the reasons on how to achieve the points
grading-rubric-achieved-points-headeroptional, content, default: [Points achieved], second column header the grading rubric, column contains the points the one achieved
show-grading-rubric-comment-fieldoptional, bool, default: false, show comment field in the grading rubric
grading-rubric-comment-field-valueoptional, content, default: [*Note:* #v(0.5cm)], value of the grading rubric comment fields
distribution-header-point-valueoptional, content, default: [Point], first row of point distribution, used to indicate the points needed to get a specific grade
distribution-header-point-gradeoptional, content, default: [Grade], second row of point distribution
points-table-header-taskoptional, content, default: [Task], first row of point distribution
points-table-header-pointsoptional, content, default: [Points], second row of point distribution
points-table-header-achievedoptional, content, default: [Achieved], third row of point distribution
messageoptional, function, default: (points-sum, extrapoints-sum) => [In sum #points-sum + #extrapoints-sum P. are achievable. You achieved #box(line(stroke: colors-primary, length: 1cm)) out of #points-sum points.], used to generate the message part above the point distribution
grade-scaleoptional, array, default: (([excellent], 0.9), ([very good], 0.8), ([good], 0.7), ([pass], 0.6), ([fail], 0.49)), list of grades and percentage of points to reach that grade
page-marginsoptional, margins, default: none, overwrite page margins
text-fontoptional, content, default: ("Atkinson Hyperlegible Next", "Atkinson Hyperlegible", "Libertinus Serif"), overwrite font family for text content
math-fontoptional, content, default: ("STIX Two Math", "New Computer Modern Math"), overwrite font family for math equations
fontsizeoptional, size, default: 11pt, overwrite font size
show-todolistoptional, bool, default: true, show list of usages of the todo function after the outline
format-linksoptional, bool, default: true, links are underlined and in primary color iff true
colors-primaryoptional, color, default: purple, primary color of the document
colors-accentoptional, color, default: blue, accent color of the document
colors-highlightoptional, color, default: magenta, highlight color of the document
colors-warningoptional, color, default: yellow, warning color of the document
colors-warning-darkoptional, color, default: brown, dark version of the warning color of the document
bodycontent, document content

task creates a task element in an exercise project.

task
linesoptional, number, default: 0, number of lines to draw if show-lines in exercise's project is set to true
pointsoptional, number, default: 0, number of points achievable
extraoptional, bool, default: false, determines if the task is obligatory (false) or additional (true)
numbering-formatoptional, function, default: none,
instruction-formatoptional, function, default: emph,
title-formatoptional, function, default: none,
rubricoptional, list of tuples, default: none, first element has to be the number of points, second the description of what the points are for. sum of points here must be equal to the sum of task points.
titlecontent, title of the task
instructioncontent, instruction of the task, highlighted
..args1: content, body of the task

solution and hint create elements that can be toggled via exercise's show-solutions and show-hints arguments.

solution
bodycontent, body of the solution
hint
hintcontent, body of the hint

subtask creates a part of a task. Its points are added to the parent task. Subtasks are to be use inside of the task's body or inside of another subtask's body.

subtask
pointsoptional, number, default: 0, points achievable, adds to a tasks point
tightoptional, bool, default: false, enum style
markersoptional, array, default: ("1.", "a)"), numbering format for each level, fallback is i.
show-pointsoptional, bool, default: true, show points next to subtask's body iff true
counteroptional, counter, default: none, change number styled by the numbering format; if none, each level has an incremental auto counter
contentcontent, subtask body

Seminar paper

screenshot of a document that represents the title page of a paper or essay screenshot of a document which shows the outline of a paper or essay screenshot of a document that shows formatted text the package can produce
Title page Outline Body

Note: The template generates a German statement of authorship as the last page by default. This behavior can be deactivated by using show-declaration-of-independent-work.

Setup

#import "@preview/grape-suite:4.0.0": seminar-paper

#show: seminar-paper.project.with(
    title: "Die Intensionalität von dass-Sätzen",
    subtitle: "Intensionale Kontexte in philosophischen Argumenten",

    university: [Universität Musterstadt],
    faculty: [Exemplarische Fakultät],
    institute: [Institut für Philosophie],
    instructor: [Dr. phil. Berta Beispielprüferin],
    seminar: [Beispielseminar],

    submit-to: [Eingereicht bei],
    submit-by: [Eingereicht durch],

    semester: german-dates.semester(datetime.today()),

    author: "Max Muster",
    email: "max.muster@uni-musterstadt.uni",
    address: [
        12345 Musterstadt \
        Musterstraße 67
    ]
)

Documentation

project
titleoptional, content, default: none, title used on the title page
subtitleoptional, content, default: none, subtitle used on title page
submit-tooptional, content, default: "Submitted to", title for the assignees's section
submit-byoptional, content, default: "Submitted by", title for the assigned's section
universityoptional, content, default: "UNIVERSITY"
facultyoptional, content, default: "FACULTY"
instituteoptional, content, default: "INSTITUTE"
seminaroptional, content, default: "SEMINAR"
semesteroptional, content, default: "SEMESTER"
instructoroptional, content, default: "ISNTRUCTOR"
authoroptional, content, default: "AUTHOR"
student-numberoptional, content, default: none
emailoptional, content, default: "EMAIL"
addressoptional, content, default: "ADDRESS"
title-page-partoptional, content, default: none, overwrite date, assignee and assigned section
title-page-part-submit-dateoptional, content, default: none, overwrite date section
title-page-part-submit-tooptional, content, default: none, overwrite assignee section
title-page-part-submit-byoptional, content, default: none, overwrite assigned section
dateoptional, datetime or content, default: datetime.today()
date-formatoptional, function, default: (date) => if type(date) == type(datetime.today()) { date.display("[day].[month].[year]") } else { date }
headeroptional, content, default: none, overwrite page header
header-rightoptional, content, default: none, overwrite right header part
header-middleoptional, content, default: none, overwrite middle header part
header-leftoptional, content, default: none, overwrite left header part
show-header-lineoptional, bool, default: true, show colors-primary line in header
footeroptional, content, default: none, overwrite footer part
footer-rightoptional, content, default: none, overwrite right footer part
footer-middleoptional, content, default: none, overwrite middle footer part
footer-leftoptional, content, default: none, overwrite left footer part
show-footer-lineoptional, bool, default: true, show colors-primary line in footer
show-outlineoptional, bool, default: true, show outline
show-declaration-of-independent-workoptional, bool, default: true, show German declaration of independent work
page-marginsoptional, margins, default: none, overwrite page margins
text-fontoptional, content, default: ("Atkinson Hyperlegible Next", "Atkinson Hyperlegible", "Libertinus Serif"), overwrite font family for text content
math-fontoptional, content, default: ("STIX Two Math", "New Computer Modern Math"), overwrite font family for math equations
fontsizeoptional, size, default: 11pt, overwrite fontsize
show-todolistoptional, bool, default: true, show list of usages of the todo function after the outline
box-task-titleoptional, content, default: [Task], shown as the title of a slide's task box
box-hint-titleoptional, content, default: [Hint], shown as the title of a slide's tasks colored
box-solution-titleoptional, content, default: [Solution], shown as the title of a slide's tasks colored
box-definition-titleoptional, content, default: [Definition], shown as the title of a slide's definition box
box-notice-titleoptional, content, default: [Notice], shown as the title of a slide's notice box
box-example-titleoptional, content, default: [Example], shown as the title of a slide's example box
format-linksoptional, bool, default: true, links are underlined and in primary color iff true
colors-primaryoptional, color, default: purple, primary color of the document
colors-accentoptional, color, default: blue, accent color of the document
colors-highlightoptional, color, default: magenta, highlight color of the document
colors-warningoptional, color, default: yellow, warning color of the document
colors-warning-darkoptional, color, default: brown, dark version of the warning color of the document
bodycontent, document content
sidenote
bodysidenote content, which is a block with 3cm width and will be displayed in the right margin of the page

Slides

screenshot of a document that represents the title slide of a series of presentation slides screenshot of the second slide which shows the outline of the presentation screenshot of a content slide with a heading
screenshot of a content slide with a task box screenshot of a content slide with an example box

Setup

#import "@preview/grape-suite:4.0.0": slides
#import slides: *

#show: slides.with(
    no: 1,
    series: [Logik-Tutorium],
    title: [Organisatorisches und Einführung in die Logik],

    author: "Tristan Pieper",
    email: link("mailto:tristan.pieper@uni-rostock.de"),
)

Documentation

slides
nooptional, number, default: 0, number in the series
seriesoptional, content, default: none, name of the series
titleoptional, content, default: none, title of the presentation
topicsoptional, array, default: (), topics of the presentation
authoroptional, content, default: none, author
emailoptional, content, default: none, author's email
head-replacementoptional, content, default: none, replace head on title slide with given content
title-replacementoptional, content, default: none, replace title below head on title slide with given content
footeroptional, content, default: none, replace footer on slides with given content
page-numberingoptional, function, default: (n, total) => {...}, function that creates the page numbering (where n is the current, total is the last page)
show-semesteroptional, bool, default: true, show name of the semester (e.g. "SoSe 24")
show-dateoptional, bool, default: true, show date in german format
show-outlineoptional, bool, default: true, show outline on the second slide
outline-depthoptional, number, default: 1, maximum heading depth shown in the outline
heading-numberingoptional, none/str/function (see here), default: none, how to number headings
box-task-titleoptional, content, default: [Task], shown as the title of a slide's task box
box-hint-titleoptional, content, default: [Hint], shown as the title of a slide's tasks colored
box-solution-titleoptional, content, default: [Solution], shown as the title of a slide's tasks colored
box-definition-titleoptional, content, default: [Definition], shown as the title of a slide's definition box
box-notice-titleoptional, content, default: [Notice], shown as the title of a slide's notice box
box-example-titleoptional, content, default: [Example], shown as the title of a slide's example box
dateoptional, datetime or content, default: datetime.today()
date-formatoptional, function, default: (date) => if type(date) == type(datetime.today()) [#weekday(date.weekday()), #date.display("[day].[month].[year]")] else { date }
show-todolistoptional, bool, default: true, show list of usages of the todo function after the outline
show-title-slideoptional, bool, default: true, show title slide
show-authoroptional, bool, default: true, show author name on title slide
show-footeroptional, bool, default: true, show footer on slides
show-page-numbersoptional, bool, default: true, show page numbering
outline-title-textoptional, content, default: "Outline", title for the outline
text-fontoptional, content, default: ("Atkinson Hyperlegible Next", "Atkinson Hyperlegible", "Libertinus Serif"), overwrite font family for text content
math-fontoptional, content, default: ("STIX Two Math", "New Computer Modern Math"), overwrite font family for math equations
colors-primaryoptional, color, default: purple, primary color of the document
colors-accentoptional, color, default: blue, accent color of the document
colors-highlightoptional, color, default: magenta, highlight color of the document
colors-warningoptional, color, default: yellow, warning color of the document
colors-warning-darkoptional, color, default: brown, dark version of the warning color of the document
bodycontent, document content
focus-slide
bodycontent, document content
  • slide, later, only, uncover: imported from polylux

Subtypes

The subtypes module contains templates for essays and minutes based on the exercise module.

screenshot of document that represents the first page of an essay screenshot that shows the second page of the essay screenshot that shows the third page of the essay
screenshot of a document that represents the minutes of a meeting screenshot of the second page of the minutes screenshot of the third page of the minutes

Setup

Essay:

#import "@preview/grape-suite:4.0.0": subtype

#show: subtype.essay.with(
    title: "Lorem ipsum dolor sit",
    university: [University],
    institute: [Institute],
    seminar: [Seminar],
    semester: [Semester],
    instructor: [Instructor],
    author: [Author],
    date: [1#super[st] January 1970],
)

Minutes:

#import "@preview/grape-suite:4.0.0": subtype

#show: subtype.minutes.with(
    title: "Some session's title",
    university: [University],
    institute: [Institute],
    seminar: [Seminar],
    semester: [Semester],
    instructor: [Instructor],
    author: [Author],
    date: [1#super[st] January 1970],
)

Documentation

The base layout of these functions is provided by exercise.project.

essay
titleoptional, content, default: [#todo[Title]]
universityoptional, content, default: [#todo[University]]
instituteoptional, content, default: [#todo[Institute]]
seminaroptional, content, default: [#todo[Seminar]]
semesteroptional, content, default: [#todo[Semester]]
instructoroptional, content, default: [#todo[Instructor]]
authoroptional, content, default: [#todo[Author]]
dateoptional, content, default: [#todo[Date]]
bodycontent, document content
minutes
titleoptional, content, default: [#todo[Title]]
universityoptional, content, default: [#todo[University]]
instituteoptional, content, default: [#todo[Institute]]
seminaroptional, content, default: [#todo[Seminar]]
semesteroptional, content, default: [#todo[Semester]]
instructoroptional, content, default: [#todo[Instructor]]
authoroptional, content, default: [#todo[Author]]
dateoptional, content, default: [#todo[Date]]
bodycontent, document content

Color Customization

All templates support customizable colors to match your institution's branding or personal preferences. You can override the default colors by passing color parameters to any template's setup function.

Available Color Parameters

  • colors-primary: Main color for headings, links, and separator lines (default: purple)
  • colors-accent: Color for task boxes and backgrounds (default: blue)
  • colors-highlight: Color for definitions, notices, and todos (default: magenta)
  • colors-warning: Color for hints and examples (default: yellow)
  • colors-warning-dark: Darker variant for warning text (default: brown)

Color Usage Map

ColorUsed For
primaryHeadings, links, header/footer lines, focus slides
primary-lightHeading numbers, subtitle text
accentTask/solution boxes (border)
accent-lightTask backgrounds, point distribution tables
accent-lighterTask/solution box backgrounds
highlightDefinition/notice boxes, todo markers
highlight-lightDefinition/notice backgrounds, todo highlights
warningHint/example boxes (border)
warning-lightHint/example backgrounds
warning-darkHint/example title text

Examples

Exercise with Custom Colors

#import "@preview/grape-suite:4.0.0": exercise
#import exercise: project, task

#show: project.with(
  type: [Exam],
  title: [Mathematics Exam],

  // Custom institutional colors
  colors-primary: rgb("#003366"),    // Dark blue
  colors-accent: rgb("#0066cc"),     // Medium blue
  colors-highlight: rgb("#cc0000"),  // Red
  colors-warning: rgb("#ff9900"),    // Orange
  colors-warning-dark: rgb("#cc6600"),
)

= Problem Set
#task(points: 10, title: [Derivatives])[
  Calculate the derivative of $f(x) = x^2 + 3x + 2$.
]

Seminar Paper with Custom Colors

#import "@preview/grape-suite:4.0.0": seminar-paper
#import seminar-paper: project

#show: project.with(
  title: [Research on Color Theory],
  author: [Student Name],

  colors-primary: rgb("#2c3e50"),
  colors-accent: rgb("#3498db"),
  colors-highlight: rgb("#e74c3c"),
)

Slides with Custom Colors

#import "@preview/grape-suite:4.0.0": slides
#import slides: *

#show: slides.with(
  series: [Lecture],
  no: 1,
  title: [Introduction],

  colors-primary: rgb("#8b0000"),    // Dark red
  colors-accent: rgb("#4169e1"),     // Royal blue
)

Using Default Colors

If you don't specify color parameters, the templates use the default grape-suite color scheme.

Todos

The following functions can be imported from slides, exercise and seminar-paper:

  • todo(content, ...) - create a highlighted inline todo-note
  • list-todos() - create list of all todo-usages with page of usage and content
  • hide-todos() - hides all usages of todo() in the document

Elements

The following functions can be imported from slides, exercise and seminar-paper: definition

Citation

This package offers an optional citation style made for internal use. If you're obliged to use the style, configure it like this:

#import "@preview/grape-suite:4.0.0": citation
#import citation: *

#show: grape-suite-citation

...

This configures the new bibliography style. All citations are now fully printed like in bibliography, instead of @entry and cite(<entry>) use one of the following functions:

  • ct(key, ..a): in a footnote, call ct-full(key, ..a).
  • cf(key, ..a): in a footnote, call cf-full(key, ..a).
  • ct-full(key, ..a): writes full citation, where the first optional positional parameter of a is the supplement of the citation, the last positional parameter is a prefix.
  • cf-full(key, ..a): calls ct-full with a prefix that adds (depending on language) "Vgl." (German) or "Cf." (not German) to citations.

For direct quotes use ct(key), for indirect quotes use cf(key).

Changelog

With version 3.0.0, the versioning of grape-suite is based on Semantic Versioning extended for template purposes. Taken into account (next to API compatibility) are the visual results compared to the last version. Thus the major version of the package increases if either the changes of the API are incompatible (so a Typst document from a previous package version might not compile with the new package version) or if visual equivalence to the last version cannot be guaranteed.

4.0.0

Fixes:

  • the colors module does not set orange, red and green to none

New:

  • supports color themes via the colors-* parameters in exercise, seminar-paper and slides
  • slides now supports the arguments outline-depth and heading-numbering
  • tasks now has the arguments instruction-format, title-format and rubric
  • exercise can generate a per-task point table via show-points-per-task-table, translation via:
    • point-table-header-task
    • point-table-header-points
    • point-table-header-achieved
  • exericse: added argument show-titlepage, adjusted namefield for this purpose
  • elements, tasks and todo can be imported the package for internals
  • translated all examples into English

Changes:

  • (breaking) tasks and their solutions are now decoupled: the task syntax is different, hints and solutions are not generated separately but in place, this affects show-point-distribution-in-tasks and show-point-distribution-in-solutions, which are renamed to show-point-distribution
  • (breaking) points for grading rubric is now provided by task's rubric argument
  • (breaking) internal functions are now guarded and can't be imported from templates
  • (breaking) some function and attribute names were translated wrong into English, the following has been changed:
    • solution matrix → graduation rubric, which affects: exercise.show-solution-matrix, exercise.show-solution-matrix-comment-field, exercise.solution-matrix-comment-field-value, exercise.solution-matrix-task-header and exercise.solution-matrix-achieved-points-header
    • protocol → minutes, which affects: subtypes.minutes
    • docent → instructor, which affects: exercise.project.docent, subtypes.procotol.docent (now subtypes.minutes) and seminar-paper.project.docent

3.1.0

Fixes:

  • metadata querying in todo and exercise (todos and subtasks)
  • Readme versioning clarification

New:

  • citation can be importet from package

3.0.0

Fixes:

  • sidenote in seminar-paper

New:

  • subtypes:
    • subtypes.essay
    • subtypes.minutes
  • show-header-line and show-footer-line in exercise.project and seminar-paper.project
  • styling for Typst-native quote in favor of blockquote

Changes:

  • seminar-paper: adjust par.leading to comply with internal requierments (in addition: par.spacing and par.first-line-indent for aesthetical purposes)
  • blockquote now just creates a quote element with attribution
  • date (in seminar-paper, exercise and slides) now accepts content too
  • big-heading moved from tasks module to elements module
  • layout of subtasks in exercise and tasks modules

2.0.0

Fixes:

  • typos in Readme file

New:

  • math-font and text-font options in slides, exercise.project and seminar-paper.project
  • date-format in slides

Breaking Changes:

  • updated polylux to 0.4.0: replacing #pause in favor of #show: later

1.0.1

Fixes:

  • titles of solutions and hints
  • generation of semester name in german-dates.typ

New:

  • focus-slide in slides
  • header-gutter option in exercise.typ

1.0.0

New:

  • todo, list-todos, hide-todos in todo.typ, importable from slides, exercise.project and seminar-paper.project
  • show-todolist attribute in above templates
  • ignore-points attribute in task and subtask of exercises, so that their points won't be shown in the grading rubric or point distribution
  • comment field and a standard-value for grading rubric via show-grading-rubric-comment-field and grading-rubric-comment-field-value options in exercise.project
  • optional parameter type in slides.task
  • new parameters in slides.slides:
    • head-replacement
    • title-replacement
    • footer
    • page-numbering
    • show-title-slide
    • show-author (on title slide)
    • show-date
    • show-footer
    • show-page-numbers
  • optional parameter show-outline in seminar-paper.project

Changes:

  • dates.typ becomes german-dates.typ

Fixes:

  • remove forced German from the slides template
  • long headings are now properly aligned
  • subtask counter now resets for each part of task

Breaking Changes:

  • dates becomes german-dates
  • changed all with-outline to show-outline