Ich habe etliche komplexere Tabellen und möchte mit dem array-Paket einen Spaltentyp definieren, der eine Tabelle enthält. Mein Ansatz am Beispiel von stefans Antwort zur meiner Frage "Wie kann ich innerhalb einer Tabellenzelle vertikal zentrieren?"

Open in writeLaTeX
\documentclass{article}
\usepackage{array}
\newcolumntype{T}{>{\begin{tabular}{rp{1cm}}}l<{\end{tabular}}}
\begin{document}
\begin{tabular}{T*2{m{1cm}}}
  Oben & Oben ausgerichtet & Mitte & Mitte
\end{tabular}
\end{document}

Das klappt noch nicht, ich erhalte den Fehler;

Open in writeLaTeX
! Emergency stop.
<template> ...hskip 1sp\d@llarbegin \ignorespaces

l.6   O
       ben & Oben ausgerichtet & Mitte & Mitte
!  ==> Fatal error occurred, no output PDF file produced!

Wie kann ich so einen Spaltentyp mit implizitem tabular definieren und benutzen?

gefragt 30 Jul '13, 15:14

Student's gravatar image

Student
5807779104
Akzeptiert-Rate: 82%

bearbeitet 24 Mär '14, 20:08

cgnieder's gravatar image

cgnieder
22.1k253463


Wenn ich die Frage richtig interpretiere, dann hättest Du gern folgenden Output:

Output

Dabei scheinst Du gerne die ersten beiden Zellen in einer internen Tabelle setzen zu wollen. Das wird (man belehre mich, wenn ich mich irre) nicht gehen, wenn man diese Zellen mit einem & getrennt werden, da sie dann als zur äußeren Tabelle gehörig eingelesen werden. Sie zu gruppieren ({ bla & blub } & drei & vier) wird ebenfalls lediglich zu Fehlern führen (! Missing } inserted.). Dein Tabelleninput müsste, selbst wenn die T-Spaltendefinition geklappt hätte, den Fehler

! Extra alignment tab has been changed to \cr.

ausgeben.

Ich umgehe im Code unten das Problem mit einem alternativen Trenner für die ersten beiden Zellen: |. Du kannst aber natürlich auch einen anderen wählen, er sollte nur nicht in der ersten Zelle anderweitig verwendet werden. (Das müsste dann in der Definition des \@coltab-Makros angepasst werden, also statt \def\@coltab#1|#2\@stop entsprechend ein anderes Symbol.)

Die erste Zelle der Tabelle wird mithilfe des collcell Paketes von Martin Scharrer eingesammelt und an ein Makro weitergereicht, das den Inhalt dann in die interne Tabelle setzt. Damit das dann bequem eingegeben werden kann, wird das Einsammeln mit einem neuen Spaltentyp erledigt. Das gibt Dir denn auch eine mögliche Antwort auf Deine konkrete Frage.

\documentclass{article}
\usepackage{array}
\usepackage{collcell}

% mache @ als Buchstaben verwendbar:
\makeatletter
% leite das Argument an ein Helfermakro weiter:
\newcommand\coltab[1]{\@coltab#1\q@stop}

% das erste Argument ist alles bis zum ersten nicht in {} versteckten |,
% das zweite Argument ist alles bis \q@stop;
% beide Argumente werden in einer Tabelle gesetzt:
\long\def\@coltab#1|#2\q@stop{%
  \begin{tabular}{rp{4cm}}
    #1 & #2
  \end{tabular}%
}
\makeatother

% definiere einen Spaltentyp, der die Zellen jeweils einsammelt und an unser Makro
% als Argument weiterreicht:
\newcolumntype{T}{>{\collectcell\coltab}l<{\endcollectcell}}

% Dummy-Text um Getippe zu sparen:
\def\sampletext{Ein Text der mehrere Zeilen umfasst.}
\def\sample{\sampletext\ \sampletext\ \sampletext}

\begin{document}
\begin{tabular}{T*2{m{3cm}}}
  a | \sample & Mitte & Mitte \\
  b | \sample & Mitte & Mitte
\end{tabular}
\end{document}
Permanenter link

beantwortet 30 Jul '13, 16:16

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 30 Jul '13, 19:35

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:

×256
×9
×3

gestellte Frage: 30 Jul '13, 15:14

Frage wurde gesehen: 11,073 Mal

zuletzt geändert: 24 Mär '14, 20:08