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, 15:52

Cletus's gravatar image

Cletus
995226
Akzeptiert: 71%

bearbeitet 01 Feb, 16:06

2

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

(02 Feb, 10: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, 10: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, 17:18) Ulrike Fischer

Vielen Dank, das wäre sehr erfreulich.

(02 Feb, 17: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, 17:46) Cletus

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, 05:52

saputello's gravatar image

saputello
18.4k22352

bearbeitet 03 Feb, 05:56

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×185
×23
×12

Frage gestellt: 01 Feb, 15:52

Frage wurde angeschaut: 1,125 Mal

Zuletzt aktualisiert: 11 Feb, 17:47