Gleittabelle in mehreren Tabellen

Tabellen und Grafiken erstellen und anordnen


Hacks

Gleittabelle in mehreren Tabellen

Beitrag von Hacks »

Hallöle,
ich versuche ein A4 Blatt im Querformat zu benutzen, das in 3 Spalten eingeteilt ist und auf diesen Spalten sind Tabellen, die auch gerne nach "Spaltenende" in der nächsten Spalte weiterführen sollen.

Es ist sehr schwer dazu was zu googlen, weil der Begriff Spalte in diesem Fall ja mehrdeutig ist.

Hier ist mein aktuelles Konstrukt:
\documentclass[paper=landscape,pagesize,DIV=14]{scrartcl}
\usepackage{geometry}
\geometry{top=10mm, left=10mm, right=10mm, bottom=10mm,
headsep=0mm, footskip=0mm}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{multicol}

\begin{document}
\begin{multicols}{3}

\section*{Tabelle 1}
\begin{tabular}{lcr}
 Linie & Richtung & Zeit \\
 RE7 & Schönefeld, Dessau & x:18 Uhr\\
 RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:55 Uhr\\
\end{tabular}
 
\section*{Tabelle 2}
\begin{tabular}{lcr}
 Linie & Richtung & Zeit \\
RE7  & Schönefeld, Dessau & x:31 (13-18U, -4)\\
RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:09\\
S2  & Bernau  & x:04, x:24, x:44\\
RE5  & Dabendorf, Wünsdorf & x:49\\
RE7  &Dabendorf, Wünsdorf & :31\\
\end{tabular}

% hier waren weitere Tabellen, die ich zur Codeübersichtlichkeit herausstrich 
\end{multicols}
\end{document}
(wie man unschwer erkennt ist es eine Abfahrtstafel für Bahnlinien an für mich relevanten Bahnhöfen)

Das Problem hierbei ist, dass die Tabellen
a) Unendlich breit werden und nicht umklappen in die nächste Zeile, daher überlappen sich die drei Dokumentspalten auch so blöd.
b) die Tabellen als komplettes ganzes automatisch in die nächste Spalte springen, wenn ein Teil davon nicht mehr unten hinpasst. Ein Teil der Tabelle darf aber gerne wenn er passt auf der Vorspalte sein.

Hat hier jemand eine interessante Idee für mich?
Wie gesagt, es ist schwierig weil man es unter diesen Begriffen schlecht in Suchmaschinen recherchieren kann.

Danke und schönen Sonntag!

markusv
Forum-Meister
Forum-Meister
Beiträge: 947
Registriert: Do 3. Sep 2015, 17:20
Wohnort: Leipzig

Beitrag von markusv »

Moin.

Du benutzt mit c,l und r Spaltendefinitionen, die kein automatischen Zeilenumbruch kennen.
Für die erste Tabelle würde sich stattdessen {lp{5cm}r} anbieten.

Alternativ kannst du auch das Paket tabularx nutzen, das mit dem Spaltentyp X daher kommt. Hier kannst du der Tabelle per Argument eine definierte Länge geben, die X-Spalte wird automatisch so angepasst, dass es stimmt.

Für Tabellen, die über die "Seitenspalte" hinaus gehen sollen, ist vermutlich longtable (erlaubt Seitenumbrüche) oder ltablex (longtable in Verb. mit tabularx) notwendig.

Beide erwähnten Varianten im Bsp.:
\documentclass[paper=landscape,pagesize,DIV=14]{scrartcl}
\usepackage{geometry}
\geometry{top=10mm, left=10mm, right=10mm, bottom=10mm,
headsep=0mm, footskip=0mm}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{multicol}
\usepackage{tabularx}

\begin{document}
\begin{multicols}{3}
 
\section*{Tabelle 1}
\begin{tabular}{l>{\centering}p{5cm}r}%\centering ergänzt
 Linie & Richtung & Zeit \\
 RE7 & Schönefeld, Dessau & x:18 Uhr\\
 RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:55 Uhr\\
\end{tabular}
 
\section*{Tabelle 2}
\begin{tabularx}{\linewidth}{l>{\centering}Xr}%\centering ergänzt
 Linie & Richtung & Zeit \\
RE7  & Schönefeld, Dessau & x:31 (13-18U, -4)\\
RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:09\\
S2  & Bernau  & x:04, x:24, x:44\\
RE5  & Dabendorf, Wünsdorf & x:49\\
RE7  &Dabendorf, Wünsdorf & :31\\
\end{tabularx}
\end{multicols}
\end{document}
Wäre Microsoft Word für das Schreiben von Büchern entwickelt worden,
würde es Microsoft Book heißen.

Unkomplizierte und schnelle LaTeX-Hilfe, bspw. Erstellung von Vorlagen und Bewerbungen:
Help-LaTeX@web.de

Hacks

Beitrag von Hacks »

Hallo und Danke für Deine Antwort,
also das mit c,l und r hab ich nun verstanden. danke. Das würde gut klappen. Aber das behebt dann wie von Dir schon angemerkt noch nicht das Multicolumn Problem, das kann dann sehr schlimm aussehen stellte ich fest.
LongTable arbeitet nicht in mehreren Spalten eines Multicolumn, wie ich durch eine Fehlermeldung und einen Internetbeitrag erfuhr, siehe hier: https://tex.stackexchange.com/questions ... mode-error


Also hab ich es mal mit supertabular probiert. Das funktioniert nun über mehrere Seiten, wie es longtable auch tut, aber es ignoriert einfach die Existenz der Spalten auf einen Blatt und arbeitet immer auf einer Spalte und geht dann in die nächste A4 Seite. Sehr seltsam.

Eingefügt hab ich diesen Code hier zwischen die \begin{multicols}{3} und \end{multicols} Befehle:
\section*{Dabendorf}
\begin{supertabular}{p{1cm}|p{5cm}|p{2cm}}
 %Linie & Richtung & Zeit \\ \hline
 RE7 & Schönefeld, Dessau & x:18 Uhr\\
 RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:55 Uhr\\
\end{supertabular}
 
\section*{Blankenfelde}
\begin{supertabular}{p{1cm}|p{5cm}|p{2cm}}
RE7  & Schönefeld, Dessau & x:31 (13-18U, -4)\\
RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:09\\
S2  & Bernau  & x:04, x:24, x:44\\
RE5  & Dabendorf, Wünsdorf & x:49\\
RE7  &Dabendorf, Wünsdorf & :31\\
\end{supertabular}

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

Kennst Du auch schon die Antworten, auf die Herr Mittelbach verweist?

Gast

Beitrag von Gast »

Bitte keine Codeschnipsel, sondern immer ein Minimalbeispiel angeben, damit auch die Chance besteht, das ganze über den Overleaf-Link angezeigt zu bekommen (und dort ggf. bearbeiten zu können).

Was man auch probieren könnte ist, für jede Zeile eine eigene Tabelle zu verwenden. Dazu muss man natürlich feste Spaltenbreiten verwenden (wie in deinem supertabular-Beispiel. Damit die vertikalen Linien nicht unterbrochen werden, müsste man wohl noch \lineskip auf 0 setzen (nicht verwechseln mit \baselineskip). Besser ist aber ohnehin auf vertikale Linien zu verzichten. Das versteckt man dann natürlich besser in einem Makro (mit einem Argument je Spalte).

Natürlich könnte man die Tabelle auch manuell umbrechen, also nur an den Spaltengrenzen eine neue Tabelle beginnen.

Hacks

Beitrag von Hacks »

Hallo,
ich hab mir gerade den Kram von Herrn Mittelbach angesehen:
\documentclass[11pt, a4paper]{article}
\usepackage[margin=3cm]{geometry}
\usepackage{longtable}
\usepackage{multicol}

\newsavebox\ltmcbox

\def\shortlipsum{\par Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac, adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna. Donec vehicula augue eu neque.\par}

\newcounter{entryno}
\setcounter{entryno}{1}
\def\tabline{Test & \the\value{entryno} & Description\addtocounter{entryno}{1}\\}
\def\tablines{\tabline\tabline\tabline\tabline\tabline}


\begin{document}





\begin{multicols}{2}
\shortlipsum
\medskip

\setbox\ltmcbox\vbox{
\makeatletter\col@number\@ne
\begin{longtable}{|l|l|l|}
\tablines\tablines\tablines\tablines\tablines\tablines
\end{longtable}
\unskip
\unpenalty
\unpenalty}

\unvbox\ltmcbox




\medskip
\shortlipsum
\end{multicols}
\shortlipsum
\end{document}
Da besitze ich jetzt ein gewisses Hemmnis dagegen. Meine LaTeX Kenntnisse sind jetzt nicht besonders schlecht, aber ich verstehe kein Wort von dem was da steht. Ein Quelltext den ich nicht anpassen kann weil ich nichts verstehe, also das stupide Kopieren von irgendwas graut mir noch viel mehr als den Quatsch einfach in Word zu machen und LaTeX ad acta zu legen.

@Gast: Entschuldige das mit dem Minimalbeispiel, danke für den Hinweis.

Gast

Beitrag von Gast »

Das Prinzip dieses Codes ist es, zunächst eine Box mit der gesamten Tabelle zusammen zu basteln (das ist die \setbox-Anweisung). Eine solche vertikale Box besteht im Innern aus einer sogenannten vertikalen Liste. Grob gesagt ist das eine Liste der Zeilen in der vertikalen Box (etwas genauer besteht sie wiederum aus vertikalen oder horizontalen Boxen oder schlicht horizontalem Inhalt). Mit \unvbox wird genau diese vertikale Liste als Eingabe für die multicols-Umgebung verwendet. Es wird also quasi die Tabelle zeilenweise wieder als Eingabe verwendet. Damit kann zwischen den Zeilen die Spalte umbrochen werden.

Der Unterschied zwischen \usebox (LaTeX) oder \copy (TeX) ist also, dass die Box nicht an ganzes, sondern in ihren Bestandteile eingefügt wird.

Gast

Beitrag von Gast »

Der Vorschlag oben mit den einzelnen Tabellenstücken könnte übrigens so aussehen:
\documentclass[11pt, a4paper]{article}
\usepackage[margin=3cm]{geometry}
\usepackage{longtable}
\usepackage{multicol}
\usepackage{mwe}

\newcounter{entryno}
\setcounter{entryno}{1}
\newcommand*{\dotabline}[3]{\begin{tabular}{|p{2em}|p{1.2em}|p{2cm}|} #1 & #2 & #3\\\end{tabular}\vskip-\lineskip}
\newcommand*{\dotabhline}[3]{\begin{tabular}{|p{2em}|p{1.2em}|p{2cm}|} #1 & #2 & #3\\\hline\end{tabular}\vskip-\lineskip}
\newcommand*{\tabline}{\dotabline{Test}{\theentryno\stepcounter{entryno}}{Description}}
\def\tablines{\tabline\tabline\tabline\tabline\tabline}

\begin{document}

\begin{multicols}{2}
\blindtext
\begin{center}
\dotabhline{Test}{Nr.}{Description}
\tablines\tablines\tablines\tablines\tablines\tablines
\end{center}
\blindtext
\end{multicols}
\blindtext
\end{document}
Wie zu sehen ist, sind die vertikalen Linien in der Tat etwas problematisch. Besser ohne:
\documentclass[11pt, a4paper]{article}
\usepackage[margin=3cm]{geometry}
\usepackage{longtable}
\usepackage{multicol}
\usepackage{booktabs}
\usepackage{mwe}

\newcounter{entryno}
\setcounter{entryno}{1}
\newcommand*{\dotabline}[4][]{\begin{tabular}{p{2em}p{1.2em}p{2cm}} #2 & #3 & #4\\#1\end{tabular}\\}
\newcommand*{\dotabhead}[3]{\begin{tabular}{p{2em}p{1.2em}p{2cm}}\toprule #1 & #2 & #3\\\midrule\end{tabular}\\*}
\newcommand*{\tabline}{\dotabline{Test}{\theentryno\stepcounter{entryno}}{Description}}
\def\tablines{\tabline\tabline\tabline\tabline\tabline}

\begin{document}

\begin{multicols}{2}
\blindtext
\begin{center}
\dotabhead{Test}{Nr.}{Description}
\tablines\tablines\tablines\tablines\tablines\tablines
\dotabline[\bottomrule]{Test}{\theentryno}{Description}
\end{center}
\blindtext
\end{multicols}
\blindtext
\end{document}

Hacks

Beitrag von Hacks »

Hallo und Danke für die Antwort,

es funktioniert nun tatsächlich und sieht nicht schockierend aus!
Ich bin nur mit dem Code nicht ganz zufrieden und würde gerne wissen, ob ich das vielleicht effektiver zusammenfassen kann.
Das sieht sehr repetitiv aus:
\documentclass[paper=landscape,pagesize,DIV=14]{scrartcl}
\usepackage{geometry}
\geometry{top=10mm, left=10mm, right=10mm, bottom=10mm,headsep=0mm, footskip=0mm}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{multicol}
\usepackage{longtable}

%\setlength{\columnseprule}{1pt}
\setlength{\columnsep}{1cm}
\newsavebox\ltmcbox 
        
\begin{document}
\begin{multicols}{2}



\section*{Dabendorf}
\vspace{-0.5cm}
\setbox\ltmcbox\vbox{ 
\makeatletter\col@number\@ne 
\begin{longtable}{p{1.8cm}|p{7cm}|p{3cm}} 
 RE7 & Schönefeld, Dessau & x:18 Uhr\\
 RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:55 Uhr\\
\end{longtable} 
\unskip 
\unpenalty 
\unpenalty} 

\unvbox\ltmcbox 

\vspace{0.5cm}
\section*{Blankenfelde}
\vspace{-0.5cm}

\setbox\ltmcbox\vbox{ 
\makeatletter\col@number\@ne 
\begin{longtable}{p{1.8cm}|p{7cm}|p{3cm}} 
RE7  & Schönefeld, Dessau & x:31 (13-18U, -4)\\
RE5  & Südkreuz, Stralsund (2n), Rostock (2n+1) & x:09\\
S2  & Bernau  & x:04, x:24, x:44\\
RE5  & Dabendorf, Wünsdorf & x:49\\
RE7  &Dabendorf, Wünsdorf & :31\\
\end{longtable} 
\unskip 
\unpenalty 
\unpenalty} 

\unvbox\ltmcbox 

\vspace{0.5cm}
\section*{Schönefeld}
\vspace{-0.5cm}

\setbox\ltmcbox\vbox{ 
\makeatletter\col@number\@ne 
\begin{longtable}{p{1.8cm}|p{7cm}|p{3cm}} 
 RE7  & Dessau  & x:44\\
RE7  & Dabendorf, Wünsdorf  & x:20\\
S9  & Adlershof, Ostkreuz, Pankow  & x:12, x:32, x:52\\
S45  & Adlershof, Südkreuz  & x:00, x:20, x:40\\
B 163, 164  & Adlershof  & 20minütlich\\
B 162, 164  & HU-Sport (Rud.Straße 18)  & 20minütlich\\
\end{longtable} 
\unskip 
\unpenalty 
\unpenalty} 

\unvbox\ltmcbox 

\vspace{0.5cm}

% hier stehen noch viel mehr davon

\end{multicols}
\end{document}

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Ich würde sowas nicht mit Tabellen machen, sondern entweder mit \parboxen, oder mit einer Liste:
\documentclass[paper=landscape,pagesize,DIV=14]{scrartcl}
\usepackage{geometry}
\geometry{top=10mm, left=10mm, right=30mm, bottom=10mm,
headsep=0mm, footskip=0mm,columnsep=3cm}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{multicol}

\newcommand\placezeit[1]{\makebox[0pt][l]{\makebox[\dimexpr\linewidth+3cm][r]{#1}}}

\textheight=3cm %nur damit die Spalten gefüllt werden ...

\begin{document}

\begin{multicols*}{3}\raggedright\raggedcolumns

\section*{Tabelle 1}
\begin{description}
 \item[\placezeit{x:18 Uhr}RE7] Schönefeld, Dessau 
 \item[\placezeit{x:55 Uhr}RE5] Südkreuz, Stralsund (2n), Rostock (2n+1) 
\end{description}

\section*{Tabelle 2}
\begin{description}
 \item[\placezeit{x:18 Uhr}RE7] Schönefeld, Dessau
 \item[\placezeit{x:55 Uhr}RE5] Südkreuz, Stralsund (2n), Rostock (2n+1) 
 \item[\placezeit{x:18 Uhr}RE7] Schönefeld, Dessau
 \item[\placezeit{x:55 Uhr}RE5] Südkreuz, Stralsund (2n), Rostock (2n+1) 
 \item[\placezeit{x:18 Uhr}RE7] Schönefeld, Dessau
 \item[\placezeit{x:55 Uhr}RE5] Südkreuz, Stralsund (2n), Rostock (2n+1) 
\end{description}

\end{multicols*}
\end{document}

Antworten