← Overview

Every manuscript starts with a small setup file — typically named 00 Document Setup.md and placed first. It initializes your document: it produces no visible text of its own; instead it holds the blocks that configure how the whole document looks.

<aside> ✨

You usually don't write this file by hand. The /obsitex:obsitex-init command of the Obsitex plugin for Claude Code generates it for you, tailored to your document type — see The Claude Code plugin. This page explains what's inside, for when you want to adjust it.

</aside>

The dds block — document design

A dds block is a small block of Document Design Settings: the document class, how tables and figures are wrapped, the quotation marks, how # levels map to LaTeX commands, the cross-reference command, and so on. It defines how the whole document looks.

{"documentClass":"\\documentclass[10pt]{article}", "tableGridHorizontal":true, "tableAlignment":"l", "documentLevelIndex":1, "createCrossReferenceCmd":true, "crossReferenceCmdText":"\\vref{%labelref%}"}

(abbreviated — the real block has more fields.) In the app, the same settings are also reachable via Tools → Dynamic Document Settings, but this file is where they live for a given document.

The placeholders

Some fields are templates: they hold a piece of LaTeX with a placeholder in it, and Obsitex fills the placeholder in for each figure, table or reference. There are seven, and each one says where its value goes.

Placeholder What it becomes
%caption% the caption you wrote
%label% the same caption, turned into a name LaTeX can point at
%labelref% the name a cross-reference points at
%path% folder and file name in the export, e.g. ./images/chart.png
%filename% the bare file name, no folder
%tablebody% the rows of a table
%columnspec% the column definition of a table, e.g. `

<aside> 💡

An empty value takes its whole command with it. A table without a caption produces no \caption{} line at all, rather than an empty one. So you can leave \caption{%caption%} in the template even for documents where most tables have no caption.

</aside>

The latex-preamble block — packages

A latex-preamble block holds the LaTeX packages and commands that go into the document's preamble:

\usepackage[a4paper,hmargin=3cm,vmargin=3cm]{geometry}
\usepackage[english]{babel}
\usepackage{graphicx}
\usepackage{amsmath}
\usepackage[backend=biber, style=numeric-comp]{biblatex}

If an element you use needs a package — a callout needs framed, a highlight needs soul — that package belongs here. Obsitex never injects packages on its own; the preamble is entirely yours.

Writing in a language other than English

The preamble is set to English. If your document is in German, three lines change. One of them hides a trap.

\usepackage[english, main=ngerman]{babel}
\usepackage[ngerman]{varioref}
\usepackage[noabbrev,ngerman]{cleveref}

<aside> ⚠️

Keep the English option in the babel line. Writing \usepackage[ngerman]{babel} instead looks right, but the build then fails with TeX capacity exceeded [input stack size=10000] and you get no PDF. The reason lies in the varioref package, which Obsitex uses for cross-references: it always switches its own English option on, and without English loaded in babel it ends up calling itself forever. Naming your language with main= keeps both packages happy. This affects TeX Live 2026 and is fixed in varioref v1.6j, shipping with the LaTeX release of 1 November 2026.

</aside>

For other languages, replace ngerman with your babel language name and keep the same shape. English and German are the two we have tested.