PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rotate longtable



Latex Noob
01-05-2014, 13:47
Hallo zusammen!

Ich habe diese Frage schon in einem anderen Forum gestellt, aber scheinbar gestaltet es sich doch schwieriger, als ich gedacht hätte. Ich habe mehrere Tabellen, die sowohl zu breit für´s Hochformat sind, als auch zu lang, um auf eine Seite zu passen.
Bislang hatte ich die landscape-Umgebung verwendet, aber mir gefällt nicht, dass dann auch die Kapitelüberschriften gedreht sind.
Also habe ich \rotatebox{90} für mich entdeckt. Das funktioniert jedoch bislang nur für einseitige Tabellen, aber nicht für longtables. Kennt ihr da eine geeignete Lösung?

Hier mein Minimalbeispiel.

(Anmerkung: Da bei meinem letzten Post der Code bei anderen nicht funktionierte, obwohl es bei mir in einer gesonderten Datei lief, habe ich diesmal sämtliche preamble Einträge übernommen)
Code:

\documentclass[12pt, a4paper, toc=flat] {scrartcl}

\usepackage{anysize}
\marginsize{3cm}{2cm}{2cm}{2cm}
\setkomafont{disposition}{\normalfont\bfseries}
\addtokomafont{chapterprefix}{\huge}
\addtokomafont{chapter}{\Huge}

\renewcommand*{\chapterheadstartvskip}{\vspace*{50 pt}}
\renewcommand*{\chapterheadendvskip}{\vspace{40pt} }

\usepackage{etoolbox}

\makeatletter
\patchcmd{\@@makechapterhead}{.5\baselineskip}{20\ p@}{}{}
\makeatother

\usepackage[markuppercase]{scrpage2}
\clearscrheadfoot
\ohead{\pagemark}
\ihead{\headmark}
\cfoot[\pagemark]{}
\pagestyle{scrheadings}

\usepackage{tocstyle}
\usetocstyle{KOMAlike}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{fancybox}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{rotating}
\usepackage{setspace}
\usepackage[colorlinks=true,linkcolor=cyan]{hyperref}
\usepackage{geometry}
\usepackage{hvfloat}
\usepackage{longtable, lscape}

\linespread{1.6}


\begin{document}


\subsection{Minimalbeispiel}
\begin{longtable}{lc}
\rotatebox{90}{
\caption[Minimalbeispiel]{Minimalbeispiel}
\hline \multicolumn{1}{c}{\textbf{Spalte A}} & \multicolumn{1}{c}{\textbf{Spalte B}} \\ \hline
\endfirsthead

\multicolumn{2}{c}
{{\bfseries \tablename\ \thetable{} -- continued from previous page}} \\
\hline \multicolumn{1}{c}{\textbf{Spalte A}} &
\multicolumn{1}{c}{\textbf{Spalte B}} \\ \hline
\endhead

\hline \multicolumn{2}{r}{{Continued on next page}} \\
\endfoot

\hline \hline
\endlastfoot
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
\bottomrule
\end{longtable}
}
\end{document}

u_fischer
01-05-2014, 15:47
Du kannst keine \rotatebox zusammen mit einer mehrseitigen longtable benutzen. Weder innerhalb noch außerhalb.

\rotatebox ginge nur, wenn du manuell aus deiner longtable zwei oder mehr tabular machst.

Man könnte die \subsection-Überschrift drehen, aber ich würde als erstes versuchen zu vermeiden, die Tabellen überhaupt drehen zu müssen. Evtl. kannst du die Daten ja splitten.

Dein Code ist übrigens fehlerhaft (auch ohne die \rotatebox. Es fehlt ein \\ hinter \caption.

Latex Noob
24-05-2014, 20:12
Danke u_fischer für deine Antwort! Ich habe insgesamt 250 Seiten an Tabellen, ich wäre ewig damit beschäftigt, alle longtable-Daten zu spiltten.

Ich habe also versucht, deinen Vorschlag mit dem gedrehten section-Titel umzusetzen. Doch leider setzt Latex den Titel dann nach unten. Wie kann ich den denn nun nach oben bringen?

Hier der abgeänderte Code, Tabelle ist nun im landscape.



\documentclass[12pt, a4paper, toc=flat] {scrartcl}

\usepackage{anysize}
\marginsize{3cm}{2cm}{2cm}{2cm}
\setkomafont{disposition}{\normalfont\bfseries}
\addtokomafont{chapterprefix}{\huge}
\addtokomafont{chapter}{\Huge}

\renewcommand*{\chapterheadstartvskip}{\vspace*{50 pt}}
\renewcommand*{\chapterheadendvskip}{\vspace{40pt} }

\usepackage{etoolbox}

\makeatletter
\patchcmd{\@@makechapterhead}{.5\baselineskip}{20\ p@}{}{}
\makeatother

\usepackage[markuppercase]{scrpage2}
\clearscrheadfoot
\ohead{\pagemark}
\ihead{\headmark}
\cfoot[\pagemark]{}
\pagestyle{scrheadings}

\usepackage{tocstyle}
\usetocstyle{KOMAlike}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{graphicx}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{fancybox}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage{rotating}
\usepackage{setspace}
\usepackage[colorlinks=true,linkcolor=cyan]{hyperref}
\usepackage{geometry}
\usepackage{hvfloat}
\usepackage{longtable, lscape}

\linespread{1.6}


\begin{document}

\begin{landscape}
\rotatebox{270}{
\section{Minimalbeispiel}
}
\begin{longtable}{lc}

\caption[Minimalbeispiel]{Minimalbeispiel} \\
\hline \multicolumn{1}{c}{\textbf{Spalte A}} & \multicolumn{1}{c}{\textbf{Spalte B}} \\ \hline
\endfirsthead

\multicolumn{2}{c}
{{\bfseries \tablename\ \thetable{} -- continued from previous page}} \\
\hline \multicolumn{1}{c}{\textbf{Spalte A}} &
\multicolumn{1}{c}{\textbf{Spalte B}} \\ \hline
\endhead

\hline \multicolumn{2}{r}{{Continued on next page}} \\
\endfoot

\hline \hline
\endlastfoot
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
\bottomrule
\end{longtable}
}
\end{document}

u_fischer
25-05-2014, 11:11
Wie kann ich den denn nun nach oben bringen?

In dem du dir als erstes ein bisschen mehr Mühe mit deinen "Beispielen" gibst. Glaubst du es macht Spaß, erstmal diverse Fehler rauszumachen? Was z.B. sollen alle diese "chapter"-Befehle in scrartcl?

Mache ein fehlerfreies Beispiel. Und entferne auch alle überflüssigen Befehle und Pakete.

Und nein: Du kannst nicht einfach \section in \rotatebox packen.

klops
25-05-2014, 11:38
Klitzekleine Hinweise: Du musst nicht unbedingt die gesamte Tabelle splitten. Eventuell genügt es sie in zwei Tabellen aufzuteilen: Eine vor die erster Seite und eine longtable für die restlichen Seiten.
Wird pdfLaTeX oder LuaLaTeX oder XeLaTeX verwendet, könnte es sinnvoll sein pdflscape statt lscape zu verwenden.
Ein großer Wert für \linespread ist meist ein Zeichen, dass man besser setspace verwenden sollte.
Wenn Du Probleme mit der Erstellung eines Minimalbeispiels hast, solltest Du Dich möglichst genau an die Anleitung zur Erstellung (http://texwelt.de/wissen/fragen/569/was-ist-ein-vollstandiges-minimalbeispiel-oder-kurz-vm-und-wie-erstelle-ich-dieses) selbiger halten.

Latex Noob
25-05-2014, 22:25
u_fischer, hier nun bereinigter Code. Du hast ja recht... :o



\documentclass[a4paper,10pt]{scrartcl}

\usepackage{longtable}
\usepackage{pdflscape}

\begin{document}

\begin{landscape}
\section{Minimalbeispiel}
\begin{longtable}{lc}

\caption[Minimalbeispiel]{Minimalbeispiel} \\
\hline \multicolumn{1}{c}{\textbf{Spalte A}} & \multicolumn{1}{c}{\textbf{Spalte B}} \\ \hline
\endfirsthead

\multicolumn{2}{c}
{{\bfseries \tablename\ \thetable{} -- continued from previous page}} \\
\hline \multicolumn{1}{c}{\textbf{Spalte A}} &
\multicolumn{1}{c}{\textbf{Spalte B}} \\ \hline
\endhead

\hline \multicolumn{2}{r}{{Continued on next page}} \\
\endfoot

\hline \hline
\endlastfoot
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\
Text & 0.0\% \\

\end{longtable}

\end{landscape}

\end{document}

u_fischer
26-05-2014, 09:29
\documentclass[a4paper,10pt]{scrartcl}

\usepackage{longtable}
\usepackage{pdflscape}


\makeatletter
\newcommand\lscapesection[1]{%
\refstepcounter{section}
\addcontentsline{toc}{section}{\protect\numberline {\thesection}#1}%
\sectionmark{#1}%
\noindent\smash{\parbox[t]{\linewidth}{%
\hfill\normalfont\sectfont\size@section
\rotatebox{-90}{\thesection\enskip #1}}}}%
\makeatother

\begin{document}
\begin{landscape}
\lscapesection{Minimalbeispiel}

\begin{longtable}{lc}

Text tex text text & blablablabla \\

\end{longtable}

\end{landscape}

\end{document}

Aber wenn deine Tabelle zu breit ist, wird sie die Überschrift überschreiben. Und eine Überschrift sollte nicht mehrzeilig sein.

ctansearch
28-05-2014, 01:17
Ach Du liebe Zeit, das macht ja gar keinen Sinn.
250 querformatige Tabellen setzt man durchgängig im Querformat, am besten in einer gesonderten Datei, definiert sie als Anhang und fertig.
:cool:

Latex Noob
28-05-2014, 01:25
Ach Du liebe Zeit, das macht ja gar keinen Sinn.
250 querformatige Tabellen setzt man durchgängig im Querformat, am besten in einer gesonderten Datei, definiert sie als Anhang und fertig.
:cool:

Stimmt, das würde tatsächlich keinen Sinn machen. Das hab ich aber auch nie behauptet ;)