Die Tabelle soll über zwei nebeneinander liegende Seiten gehen, Spalten 1, 2 und 3 auf der linken Seite, Spalten 4 und 5 auf der rechten Seite. Drei der Spalten können mehrzeiligen Text enthalten. Manuell zwei separate Tabellen zu bauen fällt aus, da die Tabelle insgesamt ca. 150 Seiten lang wird. Das Ergebnis soll ungefähr so aussehen:

Open in writeLaTeX
                  Buchbindung
linke Seite           |  rechte Seite
                      |
Eins       Zwei  Drei    Vier       Fünf
----------------------  ---------------------
aaaa       aaa   aaaa    aaaaaaa    aaa
                         aaaaa

bbbbbb     bbb   bbb     bbbbbb     bbbb
bbb

cccc       ccc   cccc    ccccc      cccccc
cc

ddddddd    ddd   ddd     ddddd      dddddd
                         dddd       ddddd
                                    ddddd

Das ganze dann eben über sehr viele Seiten. Ich dachte an etwas ähnliches wie ltxtables, habe aber nichts passendes gefunden. Hat hier jemand eine Idee? Es muss auch nicht unbedingt eine Tabelle sein, vielleicht gibt es ja eine andere Möglichkeit Texte auf Doppelseiten vertikal zu synchronisieren.

gefragt 31 Okt '14, 11:08

Ingo's gravatar image

Ingo
61112
Akzeptiert-Rate: 0%

2

In diesem Fall bietet sich an, die Tabelle in einem eigenen Dokument zu erstellen. Je nachdem ob die Tabelle dabei randabfallend oder nicht gesetzt werden soll, verwendet man dabei einen mehr als doppelt so breiten Satzspiegel oder einen genau doppelt so breiten Satzspiegel. Damit reduziert sich das Problem auf die doppelseitige Einbindung von Bildern. Ich bin gerade etwas ausgepowert, aber vielleicht hat ja ein anderer Lust, die Idee weiter auszuführen.

Beim randabfallenden Satz ggf. an den Anschnitt denken, also jeweils etwas mehr als die Hälfte der Tabelle auf jede Seite. Optimal ist, wenn man die Spaltenbreiten so vorgibt, dass auf jeder Seite nur komplette Spalten stehen. Dann hat man weniger Probleme mit dem randabfallenden Satz.

BTW: AFAIK kann ConTeXt solche Tabellen.

(31 Okt '14, 11:16) gast3

An doppelte Breite habe ich auch zuerst gedacht, dann kommen aber die Seiten durcheinander. Auf dem ersten Blatt hätte ich z.B. Seite 1 und 2 vorne, Seite 3 landet auf der Rückseite von 2 (korrekt) Seite 4 auf der Rückseite von 1 (falsch, Seite 4 muss auf die rechte Hälfte von Blatt 2).

ConTeXt sehe ich mir mal an, Syntax ist etwas anders als bei LaTeX aber ähnlich. Leider ist context ein sehr schlechter Suchbegriff bei Google.

Danke schon mal für die schnelle Antwort.

(31 Okt '14, 14:30) Ingo
2

@Ingo: Das ist bei Verwendung eines eigenen Dokuments, das man dann (jede Seite zweimal mit entsprechendem Clipping, so dass die Seiten eben erst beim Einbinden mehr oder weniger halbiert werden) in sein eigentliches Dokument lädt, eben genau kein Problem.

(31 Okt '14, 15:16) gast3

Ach so hast du das gemeint, jetzt hab ich begriffen. Paket pdfpages? Probier ich heute Abend mal aus.

(31 Okt '14, 16:25) Ingo

Hier nun ein Beispiel für das, was ich bereits als Kommentar angeregt hatte:

Open in writeLaTeX
\documentclass[a4paper,twoside]{scrartcl}

\newwrite\longtablefile
\makeatletter
%
% Erzeugung einer Beispieltabelle
%
\AtBeginDocument{%
\immediate\openout\longtablefile \jobname-longtable.tex
\immediate\write\longtablefile{%
  \detokenize{%
    \documentclass{article}^^J%
  }
}
\immediate\write\longtablefile{%
  \noexpand\usepackage[paperwidth=\the\dimexpr 2\textwidth\relax,
    paperheight=\the\textheight,margin=0pt]{geometry}
}
\immediate\write\longtablefile{%
  \detokenize{%
    \usepackage{longtable}^^J%
    \usepackage{booktabs}^^J%
    \begin{document}^^J%
    \begin{longtable}{@{}*4{p{.25\dimexpr
            \textwidth-6\tabcolsep\relax}}@{}}^^J%
      \toprule^^J%
      A & B & C & D \\^^J%
      \midrule^^J%
      \endhead
  }%
}%
\@tempcnta\z@
\@whilenum \@tempcnta<1000\do {%
  \advance\@tempcnta\@ne
  \immediate\write\longtablefile{%
    \the\@tempcnta: \detokenize{%
      erste Spalte & zweite Spalte & dritte Spalte & vierte Spalte \\
    }%
  }%
}
\immediate\write\longtablefile{%
  \detokenize{%
    \end{longtable}^^J%
    \label{pages}^^J%
    \end{document}
  }%
}
\immediate\closeout\longtablefile
\immediate\write18 {pdflatex \jobname-longtable.tex}
\immediate\write18 {pdflatex \jobname-longtable.tex}}
\makeatother

%
% Hier nun der Code, um die Beispieltabelle auf Doppelseiten einzubinden
%
\usepackage{xr}
\externaldocument[\jobname-longtable-]{\jobname-longtable}
\usepackage{refcount}
\usepackage{graphicx}

\makeatletter
\newcommand*\includedoublepages[2]{%
  \cleardoubleevenpage
  \@tempcnta\@ne
  \@whilenum \@tempcnta<#1\do{%
    \edef\reserved@a{%
      \noexpand\includegraphics[%
        page=\the\@tempcnta,
        viewport=0 0 \the\textwidth\space \the\textheight,%
        clip
      ]{#2}%
    }%
    \noindent\reserved@a
    \newpage
    \edef\reserved@a{%
      \noexpand\includegraphics[%
        page=\the\@tempcnta,
        viewport=\the\textwidth\space 0 \the\dimexpr 2\textwidth\relax\space \the\textheight,%
        clip
      ]{#2}%
    }%
    \noindent\reserved@a
    \newpage
    \advance\@tempcnta\@ne
  }%
}
\makeatother

\begin{document}
Auf den folgenden Seiten findet sich die Beispieltabelle.
\includedoublepages{\getpagerefnumber{\jobname-longtable-pages}}{\jobname-longtable.pdf}
\end{document}

Wegen der Erzeugung der Beispieltabelle über \write18 muss das ganze mit

pdflatex -shell-escape beispiel.tex

aufgerufen werden. Es wird dabei dann zum einen das Tabellendokument beispiel-longtable.tex erzeugt, daraus beispiel-longtable.pdf erzeugt und dieses dann in beispiel.tex auf Doppelseiten eingefügt.

Die erste Doppelseite von beispiel.pdf sieht dann so aus:

Doppelseite

Das ganze basiert darauf, dass die Tabelle als eigenes Dokument gesetzt wird. Bei diesem Dokument werden die Ränder auf 0 gesetzt. Das Papierformat wird so eingestellt, dass es genauso hoch und doppelt so breit ist wie der Textbereich des Hauptdokuments. Damit kann dann per \includegraphics die Hälfte jeder Seite als Textbereich der linken Seite und die andere Hälfte als Textbereich der rechten Seite einer Doppelseite geladen werden. Um sicherzustellen, dass auf der linken Seite einer Doppelseite begonnen wird, wird \cleardoubleevenpage verwendet. Diese Anweisung ist in der KOMA-Script-Anleitung erklärt.

Trickreich ist bei der Sache hauptsächlich, dass die \includegraphics-Anweisung mit ihren Argumenten per \edef expandiert wird. Das ist notwendig, weil die Anweisung den Wert für viewport leider nicht selbst expandiert, was zu einer Fehlermeldung führen würde. Falls man dort aber nicht auf Längen zurückgreift, sondern direkt Werte angibt, gibt es dieses Problem nicht.

Permanenter link

beantwortet 03 Nov '14, 19:29

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 03 Nov '14, 19:56

Solche grafischen Workarounds für Tabellenlayouts finde ich eher peinlich.

(04 Nov '14, 22:40) ctansearch

@Ingo Mit dem Paket NOX ist das umsetzbar. Variable Spaltenbreiten sind noch nicht inbegriffen, können aber eventuell eingebaut werden.

Beispiel:

Open in writeLaTeX
\documentclass[a4paper,twoside]{article}
\usepackage[ngerman]{babel} 
\usepackage[utf8]{inputenc} 
\usepackage[colspecstaysintable,l]{nox} 
\makeatletter
%\renewcommand{\thetn@tabline}{}%Zeilenummer ausblenden
\makeatother
\begin{document}
\tntabledimen{1}{3}%Parameter 1 ist Zeilenhöhe, 2 ist Spaltenbreite
\deflintab{
\nox\textbf{Sp1},\nox\textbf{Sp2},\nox\textbf{Sp3},\nox\textbf{Sp4},\nox\textbf{Sp5},\nox\textbf{Sp6},\nox\textbf{Sp7},
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7}
\tntab[7]{40}{Tabelle}%Parameter 1 ist Spaltenanzahl 2 ist Anzahl der Einträge
\pagebreak
\deflintab{
\nox\textbf{Sp8},\nox\textbf{Sp9},\nox\textbf{Sp10},\nox\textbf{Sp11},\nox\textbf{Sp12},\nox\textbf{Sp13},\nox\textbf{Sp14},
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7}
\tntab[7]{40}{Fortsetzung}%Parameter 1 ist Spaltenanzahl 2 ist Anzahl der Einträge
\pagebreak
\deflintab{
\nox\textbf{Sp1},\nox\textbf{Sp2},\nox\textbf{Sp3},\nox\textbf{Sp4},\nox\textbf{Sp5},\nox\textbf{Sp6},\nox\textbf{Sp7},
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7}
\tntab[7]{40}{Fortsetzung}%Parameter 1 ist Spaltenanzahl 2 ist Anzahl der Einträge
\pagebreak
\deflintab{
\nox\textbf{Sp8},\nox\textbf{Sp9},\nox\textbf{Sp10},\nox\textbf{Sp11},\nox\textbf{Sp12},\nox\textbf{Sp13},\nox\textbf{Sp14},
Wert8,Wert9,Wert10,Wert11,Wert12,Wert13,dgdf bfgff Wert14,
Wert8,Wert9,Wert10,Wert11,Wert12,Wert13,Wert14,Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7,
Wert1,Wert2,Wert3,Wert4,Wert5,Wert6,Wert7}
\tntab[7]{40}{Fortsetzung}%Parameter 1 ist Spaltenanzahl 2 ist Anzahl der Einträge
\end{document}
Permanenter link

beantwortet 01 Nov '14, 02:28

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 01 Nov '14, 02:31

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

gestellte Frage: 31 Okt '14, 11:08

Frage wurde gesehen: 10,622 Mal

zuletzt geändert: 04 Nov '14, 22:40