PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabularx mit Page Break (ltxtable,longtable,ltablex,...)



Tim77
23-07-2012, 16:22
Hallo,

ich benötige eine ganze Reihe von Tabellen, bei denen Spalte 1 typischerweise sehr kurz ist und Spalte 2 dann bis zum Rand gehen sollte. Hier kann, muss aber nicht, ein sehr langer Text stehen.

Ich habe also eine tabularx gemacht mit einer "l" und einer "X" Spalte. Klappt soweit auch wie gewünscht, s. Minimalbeispiel:

\documentclass [
fontsize=10pt
]{scrartcl}

\usepackage{lipsum}
\usepackage{tabularx}
%\usepackage{ltablex}

\begin{document}

\section*{Table}

\begin{tabularx}{\textwidth}{|l|X|}
\hline
Row 1 & \texttt{load}\\
& This is a description.\\
\hline
Row 2 & \texttt{save}\\
& This is another description.\\
\hline
\end{tabularx}

\lipsum[1]

\end{document}
Da die Tabellen sehr lang werden können, benötige ich eine Funktion für den Seitenumbruch. Offensichtlich stellt ltxtable das zur Verfügung, indem es tabularx und longtable vereint.

Die Lösung kann ich aber nicht wählen, da für ltxtable die Tabelle extern sein muss. Ich erstelle den Code aber automatisch aus einem Java-Programm heraus und alle Tabellen separat abzuspeichern und einzubinden, ist eine Lösung, die ich in diesem Fall aus unterschiedlichen Gründen nicht wählen kann.

Alternativ ist mir das Paket ltablex begegnet, was im Grunde genau liefert, was ich benötige. Allerdings wird dann die Tabelle nicht mehr bis zum Rand gestreckt. Man kann das schön sehen, wenn man die ltablex-Zeile wieder einkommentiert. Das Paket ist übrigens in texlive nicht enthalten (in MikTex schon) und kann hier (http://www.ctan.org/pkg/ltablex) runter geladen werden.

Meine Fragen sind nun:
- Kann man evtl. ohne ein zusätzliches Paket auf einfache Weise einen Seitenumbruch für tabularx Tabellen erreichen?
- Falls nicht: Gibt es einen Weg, wie ich trotz ltablex die Tabelle auf \textwidth forcieren kann?

Freue mich über jeden Hinweis!

rstuby
23-07-2012, 16:32
So weit ich weiß, gibt es X-Spalten auch in der longtabu-Umgebung aus dem Paket tabu, falls das für dich eine alternative ist.

ctansearch
23-07-2012, 17:22
Vielleicht so, wie in http://www.mrunix.de/forums/showthread.php?t=73619
vorgeschlagen?


\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{longtable,ifthen,graphicx}

%definition zähler für Spalten und Zeilen>
\newcounter{tablines}
\newcounter{tabcols}
%definition zähler für Spalten und Zeilen<

%definition tabellenstruktur>
\newcommand{\tabhead}
{
\begin{longtable}{p{4cm}p{4cm}p{4cm}} \caption{Lange Tabelle } \\
\endfirsthead Das ist der Tabellenkopf \endhead
}
%definitiontabellenstruktur<

%definition Tabellenumbruch>
\newcommand{\tabbreak}{
\setcounter{tabcols}{0}
\end{longtable}
Manueller Umbruch. Neue Tabelle Optionaler Zwischentext
\includegraphics[width=1cm,height=1cm]{test}
\begin{picture}(0,0)\put(0,0){\rule{1cm}{1cm}}\end {picture}
\tabhead
\endfirsthead Das ist der Tabellenkopf
\endhead }
%definition tabelleumbruch<

%definition spaltenumbruch>
\newcommand{\colbreak}{
\stepcounter{tabcols} Col: \thetabcols &
}
%definition spaltenumbruch<

%definition Zeilenumbruch mit Zeilennummer>
\newcommand{\tabline}{
\stepcounter{tablines}
\stepcounter{tabcols}
Col: \thetabcols{}
Line: \thetablines{}
\setcounter{tabcols}{0} \ifnum
\thetablines = 15 \tabbreak \\
\setcounter{tablines}{0} \else \\ \fi
}
%definition Zeilenumbruch mit Zeilennummer<

\begin{document}
\tabhead
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
Test \colbreak Test \colbreak Test \tabline
\end{longtable}
\end{document}

Tim77
23-07-2012, 17:58
Vielen Dank! Mit longtabu klappt es ganz wunderbar!

u_fischer
23-07-2012, 18:38
bei denen Spalte 1 typischerweise sehr kurz ist und Spalte 2 dann bis zum Rand gehen sollte.

Für sowas würde ich eine Liste benutzen (und auf die ganzen Linien verzichten).

Tim77
23-07-2012, 21:40
Grundsätzlich hast Du natürlich recht, aber in diesem Fall ist eine Tabelle eine glasklare Vorgabe. Und mit Inhalt sieht das auch so ganz gut aus ;-)

ctansearch
23-07-2012, 21:48
@Tim77
Tja,das freut, aber leider werden hier immer öfter die Ergebnisse nicht mehr vorgezeigt..und das schmälert die Lust am helfen.

Tim77
24-07-2012, 10:17
@Tim77
Tja,das freut, aber leider werden hier immer öfter die Ergebnisse nicht mehr vorgezeigt..und das schmälert die Lust am helfen.

Natürlich kann ich das Ergebnis gerne vorzeigen. Aber ich dachte, das ergibt sich direkt aus dem oberen: Austausch von tabularx gegen longtabu und das wars...

\documentclass [
fontsize=10pt
]{scrartcl}

\usepackage{lipsum}
\usepackage{longtable}
\usepackage{tabu}

\begin{document}

\section*{Table}

\begin{longtabu}{|l|X|}
\hline
Row 1 & \texttt{load}\\
& This is a description.\\
\hline
Row 2 & \texttt{save}\\
& This is another description.\\
\hline
\end{longtable}

\lipsum[1]

\end{document}