Skip to content

Themes

A theme controls everything visual about a MaTiSSe presentation that is not the slide content itself: the canvas background, slide dimensions and colours, headers, footers, sidebars, list bullets, TOC appearance, environment styling, and code highlighting.


Built-in themes

MaTiSSe ships eight ready-to-use themes. Apply one with the --theme flag:

bash
matisse build -i talk.md --theme dracula

Or list all available names:

bash
matisse build --print-themes
NameLayoutColour scheme
matisseRight sidebar + header + footerBlue gradient
sapienzaHeader + footerSapienza red
draculaLeft sidebar + header + footerDracula dark
solarized-darkLeft sidebar + header + footerSolarized dark
beamer-antibesThree stacked headersBeamer blue
beamer-berkelyLeft sidebar + headerBeamer blue
beamer-berlinThree stacked headers + two footersBeamer dark blue
beamer-madridHeader + footerBeamer blue

Each built-in theme may also set default metadata (title page layout, logo placement) via companion metadata.yaml and titlepage.md files — these are injected automatically.


Writing your first custom theme

A theme block is a YAML document embedded directly in your source file:

yaml
---
theme:
  canvas:
    background: 'radial-gradient(rgb(240,240,240), rgb(110,110,110))'
  layout:
    slide:
      width: '900px'
      height: '700px'
    content:
      background: 'white'
      padding: '2%'
---

Place it anywhere in the source — conventionally at the top, before any slide content. Multiple theme: blocks in the same file are merged (later values override earlier ones).

All sections are optional. Include only what you want to override.


The seven theme sections

A theme can contain up to seven top-level sections:

yaml
---
theme:
  palette:    # named colour variables — reference with $varname
  canvas:     # full-viewport body background
  lists:      # ordered and unordered list styling
  toc:        # table of contents styling
  layout:     # slide structure (dimensions, headers, footers, sidebars, content)
  entities:   # box, note, table, figure, video environments
  code:       # fenced code block styling and Pygments theme
---

For a minimal presentation you will typically only need canvas and layout. A typical conference talk uses all seven.


Keeping themes in a separate file

For reusable or long themes, put the YAML in a separate file and include it:

markdown
$include(theme.yaml)
$include(metadata.yaml)

# Chapter one
...

theme.yaml is a plain YAML file — no surrounding markdown, no --- delimiters needed. The $include directive is processed before parsing, so the theme is available to all slides.


Per-slide overrides

Any individual slide can override the global theme using an overtheme: block placed immediately after its #### heading:

markdown
#### My special slide
---
overtheme:
  layout:
    slide:
      border-radius: '50%'
    content:
      padding: '15% 20%'
      font-size: '180%'
---

Slide content here.

Use copy-from-theme: true to inherit the full global theme first and then patch it:

markdown
#### $titlepage
---
overtheme:
  copy-from-theme: true
  layout:
    content:
      padding: '0%'
---

Without copy-from-theme, the overtheme starts from scratch (all layout defaults).


Next steps

There are two deeper resources depending on what you need:

  • Reference: Theme YAML — complete schema specification: every accepted key, value type, and default for palette, canvas, lists, toc, layout, entities, and code. The authoritative lookup when you want to know exactly what a key does.
  • Advanced: Themes In Depth — comprehensive walkthrough with real-world examples: palette variable patterns, sidebar/header/footer metadata placeholders, Prezi-style round slides, absolute positioning, and a full conference-talk theme you can copy and adapt.