macOS-App · Fassung 1.12.0

Schreibprojekte

Ordnung, Text und Satz an einer Stelle, statt an dreien.

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
Das Hauptfenster: Seitenleiste mit Gruppen und Schlagwörtern, Projektliste und Detailspalte mit PDF-Vorschau
Seitenleiste, Projektliste, PDF-Vorschau
7
Vorlagen
3
Sichten auf den Plan
2
Formate
2
Zugriffe ins Netz
Schritt 1

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.json im Ordner selbst. Bestehende Ordner lassen sich übernehmen, auch auf einem anderen Rechner.
Schritt 2

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.
Schritt 3

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.

Der Planer: Kartenbaum als Gliederung, Status je Karte, Umfang gegen Wortziel
Der Planer: Gliederung, Status je Karte, Umfang gegen Wortziel
  • 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.

Das Kartenblatt mit Titel, Kurzfassung, Notiz, Status, Wortziel und der verbundenen Teildatei
Das Kartenblatt mit Notiz, Wortziel und verbundener Teildatei

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.

Das Blatt „Aus Quelltext übernehmen“ mit dem Schalter für die Einbindungen
„Aus Quelltext übernehmen“ samt Schalter für die Einbindungen
  • Es folgt der Einbindungskette. Bei LaTeX werden \input und \include verfolgt, 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 \input braucht 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.
Schritt 4

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.

Editor mit Markdown-Hervorhebung, Bausteinleiste, Umfangsleiste und der Assistenzspalte rechts
Editor mit Hervorhebung, Bausteinleiste und Assistenzspalte
  • 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, \newenvironment und \label aus den Dateien des Projekts sowie die Schlüssel aus literatur.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.
Neben dem Text

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.
Über das ganze Projekt

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 \label und \ref (ein Verweis ins Leere wird gemeldet), die figure- und table-Umgebungen samt nicht eingebundener Bilder, die Aufgaben aus % TODO, FIXME, XXX und OFFEN. 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.
Schritt 5

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.bib lä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.

Schritt 6

Ü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.
Über die Zeit

Fortschritt verfolgen

Der Schreibverlauf mit Ziellinie, Tagesstand, Schnitt je Schreibtag und längster Serie
Schreibverlauf mit Ziellinie und Kennzahlen
  • 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.
Technisches

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.

Ein Kapitel verschieben, ohne Zeilen zu verschieben →

Und hier: warum es die App überhaupt gibt