Bei der Vereinigung von longtable mit Hilfe tabularx mit Hilfe von ltxtable muss die entsprechende Tabelle bekanntlich als eigene Datei vorliegen, die dann über den Befehl \LTXtable geladen wird. Hat man in einem Dokument mehrere Tabellen, so kann die steigende Anzahl an externen Tabellendateien die Übersicht im Dokument schnell stören. Gibt es eine Möglichkeit, trotz ltxtable die Tabellen in den eigentlichen Dokumentdateien stehen zu haben?

gefragt 20 Sep '13, 12:40

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 20 Sep '13, 14:31


Ja, eine solche Möglichkeit gibt es und zwar mit Hilfe des Pakets filecontents. Wie bereits in der Antwort zum Thema VM kurz erklärt, verändert dieses Paket die LaTeX-Standard-Umgebungen filecontents und filecontents* in zweierlei Hinsicht:

  1. Die Umgebung überschreibt eine gleichnamige Datei, wenn sie bereits existiert.
  2. Die Umgebung kann auch noch innerhalb des Dokuments, also nach \begin{document} verwendet werden.

Diese beiden Eigenschaften sind genau das, was man für ltxtable benötigt. Man kann so nämlich die jeweilige Tabelle einfach via filecontents-Umgebung an der jeweiligen Stelle im Dokument, also unmittelbar vor der zugehörigen \LTXtable-Anweisung in eine Hilfsdatei schreiben lassen:

\documentclass{article}
\usepackage{longtable, ltxtable, booktabs}

\usepackage{selinput}
\SelectInputMappings{adieresis={ä}, germandbls={ß}, Euro={€}}

\usepackage[ngerman]{babel}
\usepackage{filecontents}

\usepackage{lipsum}

\begin{document}

\section{Beispiel}

\begin{filecontents}{\jobname-ltxtable.tex}
\begin{longtable}{lX}
\caption{Testtabelle}\label{tab:log1}\\ 
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endfirsthead
\caption[]{Testtabelle \small(Fortsetzung)}\\
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endhead
\midrule
\endfoot 
\bottomrule
\endlastfoot 
A & \lipsum[1] \\
B & \lipsum[2] \\
C & \lipsum[3] \\
D & \lipsum[4] \\
\end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{\jobname-ltxtable.tex}

\lipsum[2]

\begin{filecontents}{\jobname-ltxtable.tex}
\begin{longtable}{Xl}
\caption{noch eine Testtabelle}\label{tab:log2}\\ 
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endfirsthead
\caption[]{noch eine Testtabelle \small(Fortsetzung)}\\
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endhead
\midrule
\endfoot 
\bottomrule
\endlastfoot 
\lipsum[1] & A \\
\lipsum[2] & B \\
\lipsum[3] & C \\
\lipsum[4] & D \\
\end{longtable}
\end{filecontents}
\LTXtable{\textwidth}{\jobname-ltxtable.tex}

\end{document}

Wie in dem Beispiel zu sehen ist, kann sogar derselbe Dateiname für die Hilfsdateien mit den Tabellen immer wieder verwendet werden, so dass nicht das gesamte Verzeichnis mit Hilfsdateien überladen wird. Natürlich kann man aber auch immer wieder neue Dateinamen verwenden. In dem Fall bietet es sich an, den Label-Namen in den Dateinamen einfließen zu lassen, beispielsweise als tab-log1.tex und tab-log2.tex statt als \jobname-ltxtable.tex.

Permanenter link

beantwortet 20 Sep '13, 12:54

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 20 Sep '13, 13:01

Man kann an Stelle des Pakets ltxtable auch das Paket ltablex verwenden. Dieses erfordert nicht, dass man die langen Tabellen in eine eigene Datei schreibt. Dafür unterstützt es kein leeres optionales Argument für \caption:

\documentclass{article}
\usepackage{ltablex, booktabs}

\usepackage{selinput}
\SelectInputMappings{adieresis={ä}, germandbls={ß}, Euro={€}}

\usepackage[ngerman]{babel}
\usepackage{filecontents}

\usepackage{lipsum}

\begin{document}

\section{Beispiel}

\begin{tabularx}{\linewidth}{lX}
\caption{Testtabelle}\label{tab:log1}\\ 
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endfirsthead
\caption*{Testtabelle \small(Fortsetzung)}\\
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endhead
\midrule
\endfoot 
\bottomrule
\endlastfoot 
A & \lipsum[1] \\
B & \lipsum[2] \\
C & \lipsum[3] \\
D & \lipsum[4] \\
\end{tabularx}

\lipsum[2]

\end{document}
Permanenter link

beantwortet 20 Sep '13, 14:23

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

Das Paket tabu bietet zusammen mit longtable ebenfalls die Möglichkeit X-Spalten in einer seitenübergreifenden Tabelle zu verwenden:

\documentclass{article}
\usepackage{longtable,tabu,booktabs}

\usepackage{selinput}
\SelectInputMappings{adieresis={ä}, germandbls={ß}, Euro={€}}

\usepackage[ngerman]{babel}
\usepackage{filecontents}

\usepackage{lipsum}

\begin{document}

\section{Beispiel}

\begin{longtabu} to \textwidth{lX}
\caption{Testtabelle}\label{tab:log1}\\ 
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endfirsthead
\caption[]{Testtabelle \small(Fortsetzung)}\\
\toprule
Spalte 1 & Spalte 2 \\
\midrule
\endhead
\midrule
\endfoot 
\bottomrule
\endlastfoot 
A & \lipsum[1] \\
B & \lipsum[2] \\
C & \lipsum[3] \\
D & \lipsum[4] \\
\end{longtabu}

\lipsum[2]

\end{document}

Leider ist derzeit der Status des Pakets bzw. dessen Zukunft ungeklärt. Möglicherweise wird diese Lösung daher bei zukünftigen Versionen des Pakets nicht mehr oder ganz anders funktionieren. Dafür kann bei tabu wie von longtable gewohnt auch mit einer \caption-Anweisung mit leerem optionalem Argument gearbeitet werden, um einen Eintrag ins Tabellenverzeichnis für Tabellenfolgeseiten zu vermeiden.

Permanenter link

beantwortet 20 Sep '13, 14:27

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 20 Sep '13, 14:29

Deine Antwort
Vorschau umschalten

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:

×254
×39
×32
×3

gestellte Frage: 20 Sep '13, 12:40

Frage wurde gesehen: 14,405 Mal

zuletzt geändert: 20 Sep '13, 14:31