Anlegen. Ordnen. Planen. Schreiben. Bauen.
Ohne den Editor zu verlassen.
Eine native macOS-App für Schreibprojekte in LaTeX und Markdown: aus fertigen DIN-5008-Vorlagen, mit Gliederungsplaner, eigenem Quelltexteditor, Live-Protokoll, Fehlerliste und PDF-Vorschau. Dazu ein Schreibassistent, der auf dem eigenen Rechner läuft und nichts von dort weggibt.
- macOS 15 oder neuer
- SwiftUI, Apple Silicon und Intel
- LaTeX und Markdown
- DIN 5008 · KOMA-Script
- Oberfläche auf Deutsch
Anlegen
Ein Assistent in drei Schritten: Vorlage, Angaben, Ort und Optionen. Heraus kommt ein vollständiger, autarker Projektordner: Hauptdatei mit eingesetzten Werten, Kopie der Präambel, Makefile, .latexmkrc, .gitignore, README.md, bilder/ und material/, auf Wunsch mit Git-Repository und literatur.bib.
- Sieben Vorlagen. Artikel, Bericht, Buch und Brief in LaTeX, dazu Artikel, Bericht und Buch in Markdown, jede mit Beschreibung und KOMA-Klasse.
- Die Vorlagen bleiben gültige Dokumente. Die App schreibt keine Platzhalter, sondern ersetzt die Argumente vorhandener Makros (
\title{…},\setkomavar{…}{…}) beziehungsweise die Werte vorhandener YAML-Schlüssel. Jede Vorlage lässt sich weiterhin für sich kompilieren. - Ein Projekt ist ein Ordner, kein Datenbankeintrag. Vorlage, Gruppe und Schlagwörter stehen in einer
.schreibprojekt.jsonim Ordner selbst. Bestehende Ordner lassen sich übernehmen, auch auf einem anderen Rechner.
Ordnen
Eine sortierbare Tabelle mit Projektname und Pfad, Vorlage und Art, Wortstand, Gruppe, Schlagwörtern sowie Änderungs- und Baudatum.
- Gruppen und Schlagwörter statt Ordnerhierarchie: ein Projekt liegt in höchstens einer Gruppe und trägt beliebig viele Schlagwörter. Beides sind gepflegte Einträge: eine leere Gruppe bleibt stehen, umbenannt wird an einer Stelle.
- Zugewiesen wird per Ziehen auf die Seitenleiste, über das Kontextmenü, die Detailspalte oder den Assistenten. Die Zuordnung steht im Projektordner und wandert mit ihm.
- Suche über zwei Bereiche. „Projekte“ durchsucht Namen, Pfade, Gruppen und Schlagwörter, „Inhalt“ die Textdateien der Projekte.
- Filter mit Zähler nach Aktiv/Alle/Archiviert, Vorlage, Gruppe und Schlagwort, dazu ein Filtermenü in der Liste, das mehrere Schlagwörter kombiniert.
Planen
Der Bereich „Planer“ (⌘6) hält einen Baum aus Karten mit Titel, Kurzfassung, Notiz, Status und Wortziel, aus dem sich die Reihenfolge des Dokuments ergibt. Das Gegenstück zur Gliederung, die den Quelltext nur liest: hier wird geschrieben, und zwar auch dann, wenn es noch keine Zeile Text gibt.
- Für jedes Dokument. Keine Vorlage ist ausgenommen, beide Projektarten sind dabei, und es gibt nichts freizuschalten. Der Typ heißt „Karte“ und nicht „Kapitel“: ein Roman staffelt Teil → Kapitel → Szene, ein Bericht Abschnitt → Unterabschnitt, ein Aufsatz bleibt flach.
- Teildateien sind freiwillig. Hat keine Karte eine Datei, rührt der Planer die Hauptdatei nicht an. Dann ist er ein Notizbrett, und auch das ist ein vollwertiger Betriebszustand.
- Umfang gegen Wortziel, je Karte und für das Ganze. Gezählt wird der Stand im Editor, ungesicherte Absätze zählen also mit.
- Umsortieren per Ziehen oder über ⌃⌘↑↓←→. Das Ziehen bestimmt die Stelle, Ein- und Ausrücken die Stufe. Der Planer lässt sich in ein eigenes Fenster heben; beide Ansichten zeigen denselben Stand.
Drei Sichten auf denselben Stand
Gliederung, Korkbrett und Tabelle zeigen dieselben Karten; der Aufklappzustand gilt überall, und die zuletzt gewählte Sicht steht beim nächsten Start wieder da. Die Tabelle sortiert bewusst nicht: Die Reihenfolge der Zeilen ist die des Dokuments.
Die Karte
Ein Doppelklick öffnet sie: Titel und Kurzfassung, eine Notiz für sich selbst, ein Status (Idee, Entwurf, Überarbeitung, Fertig) und ein Wortziel. Darunter die Verbindung zur Datei: anlegen, im Editor öffnen oder wieder lösen. Fehlt die Datei, weil jemand sie im Finder gelöscht hat, sagt die Karte es.
Wird aus einer Karte eine Teildatei, richtet sich die Überschrift im Gerüst nach Dokumentklasse und Kartentiefe: in scrbook und scrreprt beginnt die oberste Reihe bei \chapter, sonst bei \section, je Stufe tiefer eine Ebene weiter. Bei Markdown zählt allein die Tiefe.
Aus einem vorhandenen Dokument
„Aus Quelltext übernehmen“ macht aus den Überschriften Karten, gestaffelt relativ zur kleinsten vorkommenden Ebene, damit ein Aufsatz mit \section genauso richtig herauskommt wie ein Buch mit \part.
- Es folgt der Einbindungskette. Bei LaTeX werden
\inputund\includeverfolgt, rekursiv und mit Zyklenschutz; die Überschriften erscheinen an der Stelle der Einbindung. Bei Markdown zählen die Dateien des bestehenden Plans, genau die, die pandoc beim Bauen an die Hauptdatei hängt. - Die Karten bleiben verbunden. Die erste Überschrift jeder eingebundenen Datei behält deren Pfad; Wortstände, Umsortieren und die Anzeige fehlender Dateien greifen sofort. Eine Datei ohne Überschrift wird zur Karte mit dem Dateinamen. Nichts fällt still weg.
- Und es bleibt harmlos: das Übernehmen liest nur. Am Dokument ändert sich dabei nichts; geschrieben wird erst wieder beim Ordnen der Karten. Ein Schalter stellt auf Wunsch das alte Verhalten her: nur die Hauptdatei, keine Karte trägt eine Datei.
Und wieder zurück ins Dokument
- LaTeX: ein
\input-Block, der dem Planer gehört, zwischen zwei Marken. Alles außerhalb bleibt, wie der Autor es gesetzt hat. - Markdown: gar nichts im Dokument. Beim Bauen übergibt die App die Dateien gemeinsam an pandoc. Ein Gegenstück zu
\inputbraucht Markdown damit nicht. - Geschrieben wird nur, wenn sich die Dateifolge geändert hat. Ein neuer Titel oder ein neuer Status geht das Dokument nichts an.
Schreiben
Ein eingebauter Quelltexteditor, wahlweise als Bereich in der Detailspalte oder als eigenes Fenster. Beide arbeiten auf demselben Stand: eine Datei hat genau ein Dokument, egal von wie vielen Stellen aus sie geöffnet wird, inklusive gemeinsamem Rückgängig-Stapel.
- Syntaxhervorhebung für LaTeX und Markdown: Befehle, Argumente, Kommentare, Mathematik, Verbatim, Überschriften; bei Markdown auch der YAML-Kopf.
- Vervollständigung für Befehle und Umgebungen aus einem Grundstock, dazu
\newcommand,\newenvironmentund\labelaus den Dateien des Projekts sowie die Schlüssel ausliteratur.bib. - Bausteinleiste über dem Text: Überschriften, Fett, Kursiv, Code, Aufzählungen, Bild, Tabelle, Verweis, Zitat. Steht etwas ausgewählt, legt sich der Baustein darum.
- Suchen und Ersetzen mit Trefferzahl und Sprungpfeilen (⌘F), „Gehe zu Zeile“, Zeilennummern und eine Gliederungsspalte als Sprungliste.
- Zum Schreiben hin eingerichtet: frei einstellbare Textbreite und Zeilenabstand, Schreibmaschinen-Scrollen, Absatzfokus und ein Schreibmodus (⌃⌘F) im Vollbild ohne Beiwerk.
- Rechtschreibung und Grammatik mit Sprache je Projekt; LaTeX-Befehlsnamen bleiben von der Prüfung ausgenommen. Unter dem Text stehen Wörter, Anschläge, Normseiten und Lesezeit.
Der Assistent
Rechts im Editor eine einklappbare Spalte, die mit einem lokal laufenden Ollama spricht. Kein Dienst im Netz, kein Schlüssel, nichts verlässt diesen Rechner. Adresse, Modell, Systemanweisung und Temperatur stehen in den Einstellungen; die Modellliste holt ein Knopf, von selbst ruft nichts ab.
- Er darf in den Quelltext schreiben, aber erst nach Bestätigung. Ob das Modell von sich aus ein Werkzeug ruft oder du „Einfügen“ am Antwortblock drückst: es entsteht immer erst ein Vorschlag mit angezeigtem Unterschied, und übernommen wird er auf Klick.
- Geschrieben wird in den Editor, nicht auf die Platte. ⌘Z nimmt es zurück, gesichert wird mit ⌘S.
- Was der Assistent sieht, bestimmst du. Vier Schalter: markierter Text, ganze Datei, Umgebung der Cursorstelle und Angaben zum Projekt. Was aus ist, geht nicht mit.
- Ein Gespräch je Datei, abgelegt unter
.assistenz/im Projektordner. Es überlebt den Neustart, reist mit dem Ordner und löst keinen Auto-Bau aus.
Finden und Stil
Zwei Bereiche, die das Projekt als Ganzes lesen, und zwar den Stand im Editor, nicht den auf der Platte: ein offenes, ungesichertes Dokument zählt mit.
- Finden (⌘7) beantwortet vier Fragen und liefert für jede dasselbe, nämlich Datei, Zeile, Text, Art: alle
\labelund\ref(ein Verweis ins Leere wird gemeldet), diefigure- undtable-Umgebungen samt nicht eingebundener Bilder, die Aufgaben aus% TODO,FIXME,XXXundOFFEN. Dazu Suchen und Ersetzen über das ganze Projekt. - Stil (⌘8) rechnet, es urteilt nicht: wie viele Sätze, wie lang im Schnitt, welche die längsten sind, welche Wörter sich häufen und wie viele Füllwörter darunter sind. Die Schwelle für „langer Satz“ lässt sich verstellen, für Erzählendes gilt eine andere als für Sachtexte. Gelesen werden Hauptdatei und Teildateien, sonst nichts.
Bauen
latexmk mit LuaLaTeX oder pdfLaTeX, direkt aus der App, mit Live-Protokoll während des Laufs, abbrechbar und nach Schwere filterbar.
- Das Protokoll wird gelesen, nicht durchgereicht. Aus dem Lauf entsteht eine Fehlerliste mit Datei und Zeilennummer; „Im Editor“ springt an die Fehlerstelle, „Im PDF“ an die Fundstelle im Dokument.
- Auto-Bau nach jeder Änderung im Projektordner, mit einstellbarer Wartezeit. Mehrere Hauptdateien je Projekt sind möglich, „Alle Hauptdateien bauen“ arbeitet sie nacheinander ab.
- Literaturverzeichnisse über biber;
literatur.biblässt sich jederzeit nachrüsten, biblatex trägt die App dann selbst ein.
Markdown-Projekte gehen zweistufig denselben Weg, damit es nicht zwei Hälften der App gibt:
<name>.md ──pandoc──▶ build/<name>.tex ──latexmk──▶ build/<name>.pdf
Dadurch bleiben Protokoll, Fehlerliste, Vorschau, biber, Auto-Bau und Aufräumen genau dieselben wie bei LaTeX. Angesehen wird das Ergebnis in einer PDF-Vorschau direkt neben dem Projekt, mit Suche im PDF, Miniaturleiste, Zoom und einem Doppelklick, der über SyncTeX die zugehörige Zeile im Editor öffnet.
Überarbeiten
- Fassungen je Datei. Auf Knopfdruck den Stand einer Datei festhalten, ihn später ansehen, mit dem aktuellen vergleichen oder zurückholen. Ergänzt Git, statt es zu ersetzen: Git meint das ganze Projekt, eine Fassung genau eine Datei. Abgelegt unter
.fassungen/im Projektordner. - Markierter Vergleich (latexdiff). Aus zwei Ständen entsteht ein Quelltext, dessen Bau die Änderungen markiert zeigt, mit
--flatten, damit die Kapitel mitkommen. - Der Ordner
material/für Recherche-PDFs, Bilder zum Nachsehen und Notizblätter, die nicht ins Dokument gehören. Eine Änderung dort löst keinen Auto-Bau aus. - Metadaten nachträglich ändern: dasselbe Formular wie im Assistenten, jetzt am fertigen Projekt. Geschrieben wird über den Editor, ein offener, ungesicherter Stand wird also nicht überschrieben.
Fortschritt verfolgen
- Wortzahl (über
texcount, sonst mit eigenem Zähler), Zeichen und Seiten, dazu ein Sitzungszähler für das, was seit dem Öffnen des Programms dazugekommen ist. - Ziel-Wortzahl je Projekt mit Fortschrittsbalken, auf Wunsch mit Frist: die App rechnet aus, was pro Tag übrig bleibt („613 Wörter an 8 Tagen“). Eine verstrichene Frist steht rot da.
- Schreibverlauf je Projekt und Tag, zwei Jahre Aufbewahrung, als Diagramm über 30 Tage, 3 Monate, 12 Monate oder alles, mit Ziellinie, Tagesstand, Schnitt je Schreibtag und längster Serie. Die Kurve wächst beim Sichern, nicht erst beim Bauen.
Das Kleingedruckte
| Plattform | macOS 15 oder neuer, SwiftUI, Apple Silicon und Intel |
|---|---|
| Aufbau | Kern/: ein UI-freies SwiftPM-Paket mit der gesamten Logik; Schreibprojekte/: das App-Target |
| Tests | 619 im Kern, 323 für Modelle und Ansichten, 3 Oberflächentests |
| Sandbox | bewusst ohne App Sandbox: die App startet latexmk und pandoc und schreibt in Ordner, die der Nutzer wählt. Nicht für den App Store gedacht. |
| Netz | genau zwei Zugriffe, beide nur auf Knopfdruck: DOI/ISBN nachschlagen und der Assistent auf einem lokal laufenden Ollama |
| Voraussetzungen | eine TeX-Distribution mit latexmk (etwa MacTeX); für Markdown-Projekte zusätzlich pandoc; optional texcount, latexdiff, git und ollama |
Zu haben ist sie derzeit nicht
Schreibprojekte ist ein Werkzeug für eine Person und wird derzeit nicht vertrieben. Was seit dem Sommer dazugekommen ist, allen voran der Planer, steht im Blog.