Skip to content

Tabellenspezifikation: Welche Tabellen können formatiert werden ​

Was Sie nach dieser Lektion können

  • Wissen, welche Tabellen vom Plugin formatiert werden können
  • Die Ursache von invalid structure-Fehlern verstehen
  • Konforme Markdown-Tabellen schreiben

Ihr aktuelles Problem ​

Die KI hat eine Tabelle generiert, aber das Plugin hat sie nicht formatiert und am Ende einen Kommentar hinzugefügt:

markdown
<!-- table not formatted: invalid structure -->

Was bedeutet "ungültige Struktur"? Warum funktioniert meine Tabelle nicht?

Wann Sie diesen Trick anwenden ​

  • Sie erhalten einen invalid structure-Fehler und möchten wissen, wo das Problem liegt
  • Sie möchten sicherstellen, dass KI-generierte Tabellen korrekt formatiert werden
  • Sie möchten manuell eine konforme Markdown-Tabelle schreiben

Kernidee ​

Das Plugin führt vor der Formatierung eine dreistufige Validierung durch:

Ebene 1: Ist es eine Tabellenzeile? → isTableRow()
Ebene 2: Gibt es eine Trennzeile? → isSeparatorRow()
Ebene 3: Ist die Struktur gültig? → isValidTable()

Nur wenn alle drei Ebenen bestanden werden, wird formatiert. Wenn eine Ebene fehlschlägt, bleibt die Tabelle unverändert und ein Fehlerkommentar wird hinzugefügt.

Die 4 Bedingungen für gültige Tabellen ​

Bedingung 1: Jede Zeile muss mit | beginnen und enden ​

Dies ist die grundlegendste Anforderung. Jede Zeile einer Markdown-Pipe-Tabelle muss mit | umschlossen sein.

markdown
✅ Korrekt
| Name | Beschreibung |

❌ Falsch
Name | Beschreibung      ← Kein | am Anfang
| Name | Beschreibung     ← Kein | am Ende
Quellcode-Implementierung
typescript
function isTableRow(line: string): boolean {
  const trimmed = line.trim()
  return trimmed.startsWith("|") && trimmed.endsWith("|") && trimmed.split("|").length > 2
}

Quellcode-Position: index.ts:58-61

Bedingung 2: Jede Zeile muss mindestens 2 Trennzeichen haben ​

split("|").length > 2 bedeutet, dass es mindestens 2 | geben muss, die den Inhalt trennen.

markdown
✅ Korrekt (3 |, 2 Trennzeichen)
| Name | Beschreibung |

❌ Falsch (nur 2 |, 1 Trennzeichen)
| Name |

Mit anderen Worten: Einspaltige Tabellen sind gültig, müssen aber als | Inhalt | geschrieben werden.

Bedingung 3: Es muss eine Trennzeile geben ​

Die Trennzeile ist die Zeile zwischen der Kopfzeile und den Datenzeilen, die die Ausrichtung definiert.

markdown
| Name | Beschreibung |
| --- | --- |      ← Das ist die Trennzeile
| Wert1 | Wert2 |

Syntaxregeln der Trennzeile:

Jede Zelle muss dem regulären Ausdruck /^\s*:?-+:?\s*$/ entsprechen, übersetzt in Klartext:

BestandteilBedeutungBeispiel
\s*Optionaler LeerraumErlaubt `
:?Optionaler DoppelpunktZur Angabe der Ausrichtung
-+Mindestens ein Bindestrich-, ---, ------ sind alle möglich

Beispiele für gültige Trennzeilen:

markdown
| --- | --- |           ← Einfachste Form
| :--- | ---: |         ← Mit Ausrichtungsmarkierungen
| :---: | :---: |       ← Zentriert
|---|---|               ← Ohne Leerzeichen auch möglich
| -------- | -------- | ← Lange Bindestriche auch möglich

Beispiele für ungültige Trennzeilen:

markdown
| === | === |           ← Gleichheitszeichen statt Bindestriche
| - - | - - |           ← Leerzeichen zwischen Bindestrichen
| ::: | ::: |           ← Nur Doppelpunkte, keine Bindestriche
Quellcode-Implementierung
typescript
function isSeparatorRow(line: string): boolean {
  const trimmed = line.trim()
  if (!trimmed.startsWith("|") || !trimmed.endsWith("|")) return false
  const cells = trimmed.split("|").slice(1, -1)
  return cells.length > 0 && cells.every((cell) => /^\s*:?-+:?\s*$/.test(cell))
}

Quellcode-Position: index.ts:63-68

Bedingung 4: Alle Zeilen müssen die gleiche Spaltenanzahl haben ​

Wenn die erste Zeile 3 Spalten hat, muss jede folgende Zeile ebenfalls 3 Spalten haben.

markdown
✅ Korrekt (jede Zeile hat 3 Spalten)
| A | B | C |
|--- | --- | ---|
| 1 | 2 | 3 |

❌ Falsch (dritte Zeile hat nur 2 Spalten)
| A | B | C |
|--- | --- | ---|
| 1 | 2 |
Quellcode-Implementierung
typescript
function isValidTable(lines: string[]): boolean {
  if (lines.length < 2) return false

  const rows = lines.map((line) =>
    line.split("|").slice(1, -1).map((cell) => cell.trim()),
  )

  if (rows.length === 0 || rows[0].length === 0) return false

  const firstRowCellCount = rows[0].length
  const allSameColumnCount = rows.every((row) => row.length === firstRowCellCount)
  if (!allSameColumnCount) return false

  const hasSeparator = lines.some((line) => isSeparatorRow(line))
  return hasSeparator
}

Quellcode-Position: index.ts:70-88

Schnellreferenz für Ausrichtungssyntax ​

Die Trennzeile dient nicht nur zur Trennung, sondern auch zur Angabe der Ausrichtung:

SyntaxAusrichtungEffekt
--- oder :---LinksbündigText links (Standard)
:---:ZentriertText zentriert
---:RechtsbündigText rechts

Beispiel:

markdown
| Linksbündig | Zentriert | Rechtsbündig |
|--- | --- | ---|
| Text | Text | Text |

Nach der Formatierung:

markdown
| Linksbündig |  Zentriert  | Rechtsbündig |
|--- | --- | ---|
| Text        |    Text     |        Text |
Quellcode-Implementierung
typescript
function getAlignment(delimiterCell: string): "left" | "center" | "right" {
  const trimmed = delimiterCell.trim()
  const hasLeftColon = trimmed.startsWith(":")
  const hasRightColon = trimmed.endsWith(":")

  if (hasLeftColon && hasRightColon) return "center"
  if (hasRightColon) return "right"
  return "left"
}

Quellcode-Position: index.ts:141-149

Häufige Fehlerbehebung ​

FehlererscheinungMögliche UrsacheLösung
invalid structureFehlende TrennzeileFügen Sie nach der Kopfzeile | --- | --- | hinzu
invalid structureUnterschiedliche SpaltenanzahlÜberprüfen Sie, ob jede Zeile die gleiche Anzahl von | hat
invalid structureFehlendes | am Zeilenanfang/endeErgänzen Sie das fehlende |
Tabelle wird nicht erkanntNur 1 SpalteStellen Sie sicher, dass es mindestens 2 |-Trennzeichen gibt
Ausrichtung wirkt nichtSyntaxfehler in der TrennzeileÜberprüfen Sie, ob Sie - und nicht andere Zeichen verwendet haben

Kontrollpunkte ​

Nach Abschluss dieser Lektion sollten Sie folgende Fragen beantworten können:

  • [ ] Welche Bedingungen müssen Tabellenzeilen erfüllen? (Antwort: Mit | beginnen und enden, mindestens 2 Trennzeichen)
  • [ ] Was bedeutet der reguläre Ausdruck der Trennzeile? (Antwort: Optionaler Doppelpunkt + mindestens ein Bindestrich + optionaler Doppelpunkt)
  • [ ] Warum tritt invalid structure auf? (Antwort: Fehlende Trennzeile, unterschiedliche Spaltenanzahl oder fehlendes | am Zeilenanfang/ende)
  • [ ] Was bedeutet :---: für die Ausrichtung? (Antwort: Zentriert)

Zusammenfassung dieser Lektion ​

BedingungAnforderung
Zeilenanfang und -endeMuss mit | beginnen und enden
Anzahl der TrennzeichenMindestens 2 |
TrennzeileMuss vorhanden sein, Format ist :?-+:?
Spaltenanzahl-KonsistenzAlle Zeilen müssen die gleiche Spaltenanzahl haben

Merksatz:

Pipe-Zeichen an beiden Seiten, Bindestriche in der Trennzeile, Spaltenanzahl muss gleich sein, vier Regeln im Kopf behalten.

Vorschau auf die nächste Lektion ​

In der nächsten Lektion lernen wir Ausrichtung im Detail.

Sie werden lernen:

  • Detaillierte Verwendung der drei Ausrichtungsarten
  • Das Implementierungsprinzip der Trennzeilen-Formatierung
  • Den Zellenfüllalgorithmus

Anhang: Quellcode-Referenz ​

Klicken, um Quellcode-Positionen anzuzeigen

Aktualisiert am: 2026-01-26

FunktionDateipfadZeilennummer
---------
---------
Tabellenvalidierungindex.ts70-88
Ausrichtungsanalyseindex.ts141-149
Behandlung ungültiger Tabellenindex.ts44-47

Wichtige reguläre Ausdrücke:

  • /^\s*:?-+:?\s*$/: Matching-Regel für Trennzeilen-Zellen

Wichtige Funktionen:

  • isTableRow(): Prüft, ob es sich um eine Tabellenzeile handelt
  • isSeparatorRow(): Prüft, ob es sich um eine Trennzeile handelt
  • isValidTable(): Validiert, ob die Tabellenstruktur gültig ist
  • getAlignment(): Analysiert die Ausrichtung