Layouts
Layouts
A layout decides how a slide arranges its content. Tachyonn ships with eleven of them, covering the patterns you reach for most: plain content, two columns, a big statistic, a code window, and so on.
Every ## slide uses the standard layout unless you say otherwise. To pick a different one, you have two options:
- Add
/layout[name]right after the title, or - Set
layout: namein the slide's per-slide frontmatter.
## A slide with two panels
/layout[two-column]
Left column.
---
Right column.The --- separator splits content into the layout's regions (columns, image-and-text sides, etc.). Let's go through each layout.
title β Cover
Generated automatically from your frontmatter. It centers the title, subtitle, and author. By default it shows no footer. You rarely write this one by hand:
===
title: Quantum Physics
subtitle: An Introduction
author: Prof. Ana Souza
===Extra content on the cover: coverBody:
title, subtitle and author are the only fields the cover prints β date:
and description: are deck metadata for the footer tokens ({date},{description}), not cover text. For anything else, write a body for the
cover with coverBody:. Each occurrence of the key is one line of .tac, so
repeating it gives you line breaks, blank lines (new paragraph), lists and
images β the full language, not just a string:
===
title: Quantum Physics
subtitle: An Introduction
author: Prof. Ana Souza
coverVariant: split
coverImage: cover.jpg
coverBody: Class 4 β **Tuesdays, 2pm**
coverBody:
coverBody: - Room B-204
coverBody: - Bring the lab notebook
coverBody:
coverBody: ![<w=140> logo.png]
===In the split / stacked variants this lands in the text column, under the
title block; in centered it sits below the author. If you prefer a single key,
a literal \n also breaks the line: coverBody: First line\n\nSecond paragraph.
Size and spacing: coverBodySize: / coverBodyGap:.
A cover written by hand (/layout[cover], below) takes its body from the slide
itself and ignores coverBody: β that key exists precisely because the
automatic cover has no body of its own.
cover β a cover anywhere
/layout[cover] is an alias of title that drops a full cover slide in the
middle of the deck β perfect for one big .tac holding several lectures, each
opened by its own cover. Set the cover variant: and image: in the slide's own=== (the same knobs as the deck cover: centered Β· image-bg Β· image-title
Β· split Β· stacked Β· minimal):
## Lecture 2 β Thermodynamics
/layout[cover]
===
variant: split
image: cover.jpg
coverSplitWidth: 35%
===
Entropy and the arrow of time
- Room B-204, Tuesdays
- Prof. Ana Souza
![<w=140> logo.png]Two knobs make this layout flexible:
- Anything you write in the body lands in the text column, below the title,
subtitle and author β paragraphs, lists, an image (a course logo), whatever you
need. Tune it withcoverBodySize:andcoverBodyGap:. The deck's automatic
cover has no body: it is generated from the frontmatter, so use/layout[cover]
(withcover: falsein the frontmatter, or simply as the deck's first slide)
when you want one. coverSplitWidth:(aliasescoverSplit,splitWidth) sets how much of the
slide the media takes β a width insplit, a height instacked. Default50%. Set it in the slide's own===, in the deck frontmatter, in atac.config, or in a.tttheme, like any other style key.
section β Section divider
Created by a # heading. A solid background with a centered title, used to announce a new chapter. No footer by default.
# Part I β FoundationsThe deck-wide sectionVariant sets the style of every divider, but a section can
override its own in its === β and opt out of the index entirely withtoc: false (handy for an appendix):
# Appendix
===
variant: centered
toc: false // this section won't appear in the index on the other dividers
===The variants: centered (default), toc and toc-side (an index of every
section, the current one highlighted), number (a big chapter numeral),backdrop (styled for a background image or video), color-block andbigtype.
color-block β the divider as a block of color
The whole slide becomes a flat fill of the accent color with the title in
negative, left-aligned and anchored a little above the middle. The cut between
parts of the talk comes from color, not from ornament β it reads instantly
from the back of the room and needs no image.
# Codebase Q&A
===
variant: color-block
kicker: Getting your feet wet
===kicker: (aliases overline:, eyebrow:) is the short line above the title β
context in small type, without competing with the title. It works on the other
variants too, not just this one.
| Key | What it changes |
|---|---|
sectionBlockColor | The fill (defaults to the deck accent) |
sectionBlockTextColor | Title and kicker over the fill |
sectionBlockSize | Title size on this variant (default 5rem) |
kickerSize / kickerColor / kickerFont | The overline |
Set them deck-wide, in a .tt theme, or in one divider's own === β which
is how you give each part of the talk its own color:
# Part II β Thermodynamics
===
variant: color-block
sectionBlockColor: #123a5f
sectionBlockTextColor: #f4f7fb
===bigtype β the typography is the slide
The title alone, as large as it fits, wrapping over as many lines as it needs,
anchored bottom-left with the kicker above it. No fill, no ornament: the impact
comes from scale. It is the section-divider sibling of the cover's minimal.
# Part III β Quantum states
===
variant: bigtype
kicker: Parte III
sectionBigTypeSize: 8rem // optional; default 7rem
===standard β Standard slide
The default. A title at the top, free-flowing content below β paragraphs, lists, images, code, anything.
## The problem
Compile time directly affects how productive the team feels.
- Average build: 45 seconds
- Perceived as: far too slowtwo-column β Two columns
Splits content into a left and right column, separated by ---.
## Comparison
/layout[two-column]
**Markdown**
- Simple
- No layouts
- Exports to HTML
---
**Tachyonn**
- Just as simple
- Eleven layouts
- A native appthree-column β Three columns
Three panels, each separated by ---.
## Three approaches
/layout[three-column]
### Approach A
Text...
---
### Approach B
Text...
---
### Approach C
Text...image-and-text β Image beside text
An image on one side, text on the other. Choose the side with imageSide: left or imageSide: right in the per-slide frontmatter.
## Our product
===
layout: image-and-text
imageSide: left
===
![product.png]
---
Descriptive text next to the image.
- Benefit one
- Benefit twobig-number β Headline number
Perfect for a single statistic. A large number, centered, with a label beneath it.
## Global adoption
/layout[big-number]
**87%**
of users would recommend itquote β Quotation
A centered quotation with an attribution.
## A perspective
> Simplicity is the ultimate sophistication.
β Leonardo da VinciThe box takes 70% of the slide width and is centered, whatever the length of
the quotation β so two quote slides in a row line up instead of each finding its
own width. Change it with quoteWidth:, and the type size with quoteSize::
## A longer perspective
===
layout: quote
quoteWidth: 85%
quoteSize: 2.2rem
===
> β¦grid β Card grid
Lays items out in a grid. Set the number of columns with columns: N in the per-slide frontmatter (the default is 3).
## Our stack
===
layout: grid
columns: 3
===
**Rust** β backend and parser
**Vue 3** β frontend
**Tauri** β desktop shell
**Nuxt 4** β rendering
**Shiki** β syntax highlighting
**drauu** β vector drawingcode-window β Code spotlight
A layout dedicated to a single code sample, presented in a styled window with an optional title.
## The parser entry point
===
layout: code-window
===
```rust
fn parse(input: &str) -> AST {
let tokens = lexer(input);
parser().parse(tokens)
}
```media β Full-bleed media
Centers a single image (or video) to fill most of the slide. No footer by default.
## Architecture diagram
/layout[media]
![<f> architecture.png, A bird's-eye view of the system]Setting layout per slide
Besides /layout[name], you can use the per-slide frontmatter block right after the title β handy when you also want to set other options like columns or imageSide:
## Comparing data
===
layout: two-column
===
Left column.
---
Right column.