Ich benötige eine selbstdefinierte Umgebung, um eine tabularx-Tabelle zu beginnen und zu beenden.

Der Hintergrund ist, dass eine externe Anwendung automatisch eine tex-Datei erstellen soll, die aus einer beliebigen Zahl von Tabellenzeilen besteht (Seitenumbrüche können dabei ausgeschlossen werden). Um den Programmcode wartbar zu halten, ist meine Idee, eine eigene Dokumentenklasse zu erstellen, die eine Umgebung für die Tabelle und einen Befehl für die einzelnen Tabellenzeilen definiert, sodass das Programm abgesehen vom üblichen Dokumentenrahmen nur eine Befehlssequenz nach dem Muster »Anfang der Tabelle, Tabellenzeile 1, Tabellenzeile 2, ..., Tabellenzeile n, Ende der Tabelle«, aber keine sonstigen LaTeX-Befehle in eine Datei schreiben muss. Hierdurch wäre es möglich, sämtliche Formatierungsfragen in die Dokumentenklasse auszulagern.

Das erste Problem dabei ist, dass sich die tabularx-Umgebung nicht in eigene Umgebungen einschachteln lässt. Dies wird in der Paketdokumentation beschrieben, wobei als Ausweg auf die Verwendung von \tabularx statt \begin{tabularx} sowie \endtabularx statt \end{tabularx} verwiesen wird, was auch funktioniert.

Das zweite Problem betrifft den Abschluss der Tabelle durch eine horizontale Linie (vgl. meine verwandte Frage). Die folgende Lösung produziert zwar keine Fehlermeldung, gibt jedoch nicht die gewünschte abschließende horizontale Linie aus.

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
\usepackage{tabularx}

\setlength{\parindent}{0pt}

\newenvironment{MeineUmgebung}
    {\tabularx{\linewidth}{|l|X|}
        \hline
        Erste Überschrift & Zweite Überschrift \\
        \hline}
    {\hline\endtabularx}

\begin{document}

\begin{MeineUmgebung}
kurzer Text & \blindtext \tabularnewline
\end{MeineUmgebung}
\end{document}

Wie bekomme ich die Linie dahin? Ein einfaches \hline vor dem Abschluss der Umgebung will ich aus den beschriebenen Gründen vermeiden.

gefragt 01 Feb '16, 21:52

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%

geschlossen 08 Dez '16, 16:02

saputello's gravatar image

saputello
11.1k174365

3

Dass die hline verschwindet ist wohl ein Bug. Ich habe es David Carlisle gemeldet.

(02 Feb '16, 16:01) Ulrike Fischer

Mittlerweile habe eine inhaltsgleiche Frage auf tex.stackexchange gefunden. Allerdings war zum Zeitpunkt der Fragestellung der Entwicklungsstand von tabularx noch ein anderer. Der auf \makeatletter-Trickserei basierende Lösungsvorschlag von D. Carlisle funktioniert aber immerhin.

(02 Feb '16, 16:34) Cletus
1

Die Frage auf tex.sx war wahrscheinlich der Anlass für den neuen Code - nur dass dort ein relax fehlt und es deswegen nicht funktioniert. Wahrscheinlich gibt es ein Update in einigen Tagen.

(02 Feb '16, 23:18) Ulrike Fischer

Vielen Dank, das wäre sehr erfreulich.

(02 Feb '16, 23:20) Cletus

Laut ctan wurde die letzte Änderung an tabularx am 3. 2. 2016 vorgenommen. Ich weiß nicht, ob sich diese schon auf Ulrikes Meldung bezog, jedenfalls funktioniert die hline auch mit einem aktuellen Update nicht. Daher verwende ich jetzt die von Saputello vorgeschlagene Lösung.

(11 Feb '16, 23:46) Cletus
1

Mittlerweile funktioniert das wie gewünscht.

(08 Dez '16, 15:56) Cletus
Ergebnis 5 von 6 show 1 more comments

Die Frage wurde aus folgenden Grund "Das Problem ist veraltet und tritt mit der aktuellen Version von tabularx nicht mehr auf." geschlossen saputello 08 Dez '16, 16:02


tabularx führt eine tabular*-Umgebung aus. Ein einfacher Trick wäre nun, das \hline vor dem Ende von tabular* einzupatchen:

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
\usepackage{tabularx}

\usepackage{xpatch}
\newenvironment{MeineUmgebung}
    {%
    \expandafter\xpretocmd\csname endtabular*\endcsname{\hline}{}{}%
    \tabularx{\linewidth}{|l|X|}
        \hline
        Erste Überschrift & Zweite Überschrift \\
        \hline}
    {\endtabularx}

\begin{document}

\begin{MeineUmgebung}
kurzer Text & \blindtext \tabularnewline
\end{MeineUmgebung}
\end{document}

mit automatischer Linie am Ende

Damit kommt das \hline noch vor dem Ende der Tabelle. Nachteil ist, dass es schief geht, wenn das \tabularnewline am Ende der MeineUmgebung fehlt. Aber das dürfte ein eher generelles Problem werden.

Achtung: Das funktioniert nicht, wenn man ltablex statt tabularx verwendet!

Permanenter link

beantwortet 03 Feb '16, 11:52

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 03 Feb '16, 11:56

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×256
×32
×16

gestellte Frage: 01 Feb '16, 21:52

Frage wurde gesehen: 8,212 Mal

zuletzt geändert: 08 Dez '16, 16:02