Archiv verlassen und diese Seite im Standarddesign anzeigen : Spaltenbreite in Tabelle ändern
evolvente
03-10-2005, 15:32
Hallo,
ich habe mühevoll (mit Hilfe des Forums) folgende Tabelle erstellt:
\documentclass[a4paper,12pt]{scrartcl}
\usepackage{ngerman}
\usepackage[T1]{fontenc}
\usepackage{multirow}
\begin{document}
\begin{tabular}{|c|c|l|l|}
\hline
S & \multirow{4}{8cm}{\parbox{80mm}{\begin{center}Hier \\ kommt ein\\ Text rein \end{center}}} & \multicolumn{2}{|l|}{Name:\hspace{20mm} Matr.-Nr.:}\\
& & \multicolumn{2}{|c|}{}\\
\cline{3-4}
20/ & & Datum:\hspace{15mm} & Gruppe:\\
&&&\\
&&&\\
\cline{3-4}
\hline
Versuch & \multirow{4}{8cm}{\parbox{80mm}{\begin{center}Hier kommt ein anderer\\ Text rein\end{center}}} & Testat:\hspace{5mm} & Stempel:\\
& & &\\
1 DG & & &\\
& & &\\
&&&\\
\hline
\end{tabular}
\end{document}
Ist es irgendwie möglich, die senkrechte Trennlinie zwischen "Testat:" und "Stempel:" nach links zu verschieben ohne dabei die darüberliegende senkrechte Linie zu verschieben? Ich möchte also nur etwas mehr Platz für den "Stempel" haben.
Ich habe schon im Forum gelesen, dass ich noch mehr Spalten hinzufügen und dann mit \multicolumn entsprechend zusammenfassen könnte. Aber da gibts doch bestimmt eine elegantere Möglichkeit, oder?
Gruß,
evolvente
Moin evolvente,
also eigentlich sollte innerhalb einer Spalte keine Breitenänderung vorgenommen werden, aber was solls:
\documentclass[a4paper,12pt]{scrartcl}
\usepackage{ngerman}
\usepackage[T1]{fontenc}
\usepackage{array}
\begin{document}
\newcolumntype{C}[1]{>{\centering}m{#1}}
\begin{tabular}{|c|C{8cm}|l|}
\hline
S & Hier & \begin{tabular}{@{}p{3cm}l@{}}%
Name:& Matr.-Nr.:\\
&\\
\end{tabular}\\
\cline{3-3}
20/ & {kommt ein\\ Text rein} & \begin{tabular}{@{}p{3cm}|l@{}}%
Datum: & Gruppe:\\
& \\
\end{tabular}\\
\hline
Versuch & \dots und hier & \begin{tabular}{@{}p{1.5cm}|p{3cm}@{}}%
Testat: & Stempel:\\
\end{tabular}\\
1 DG & {kommt ein anderer\\ Text rein} & \begin{tabular}{@{}p{1.5cm}|p{3cm}@{}}%
&\\
&\\
&\\
\end{tabular}\\
\hline
\end{tabular}
\end{document}
kannst Du sicherlich ein Deine Bedürfnisse anpassen.
MfG,
evolvente
03-10-2005, 23:47
Danke für deinen Vorschlag, aber ich habe es jetzt anderweitig gelöst (mit mehreren Spalten):
\documentclass[a4paper,12pt]{scrartcl}
\usepackage{ngerman}
\usepackage[T1]{fontenc}
\usepackage{multirow}
\begin{document}
\begin{table}
%\small
\begin{tabular}{|c|c|l|l|c|}
\hline
S & \multirow{4}{80mm}{\parbox{80mm}{\begin{center}Hie r\\kommt ein\\ Text rein\\
\end{center}}} & \multicolumn{3}{|l|}{Name:\hspace{30mm}Matr.-Nr.:}\\
& & \multicolumn{3}{|c|}{}\\
\cline{3-5}
20/ & & \multicolumn{2}{|l|}{Datum:} & Gruppe\\
&&\multicolumn{2}{|l|}{\hspace{35mm} }& \\
\hline
Versuch & \multirow{4}{80mm}{\parbox{80mm}{\begin{center}Hie r kommt ein\\ anderer Text rein\end{center}}} & Testat: & \multicolumn{2}{|c|}{Stempel}\\
& & & \multicolumn{2}{|l|}{}\\
1 DG & & & \multicolumn{2}{|l|}{}\\
& & & \multicolumn{2}{|l|}{}\\
\hline
\end{tabular}
\end{table}
\end{document}
Der Aufbau der Tabelle muss leider so aussehen sonst hätte ich es auch anders gemacht.
Um noch die abschließende Stilfrage zu klären: Welche Möglichkeit ist nun eleganter (vom Code her)?
Der Aufbau der Tabelle muss leider so aussehen sonst hätte ich es auch anders gemacht.
Um noch die abschließende Stilfrage zu klären: Welche Möglichkeit ist nun eleganter (vom Code her)?
Da scheiden sich die Geister...
Am elegantesten ist für mich der Code, der das macht, was man will - und dabei übersichtlich (sprich: möglichst einfach) bleibt.
Das heißt natürlich auch: wenn möglich keine doppelten Anweisungen erteilen - z.B. könntest Du Dir mit Hilfe des array Paketes Deine eigene Spaltendefinition bauen, etwa
\newcolumntype{C}{>{\begin{center}}p{#1}<{\end{center}}}
\begin{tabular}{|c|C{80mm}|l|l|c|}
dadurch könntest Du Dir den Aufruf von \parbox{80mm}{\begin{center}...\end{center}} innerhalb der beiden \multirow Aufrufe einsparen; evtl. könntest Du dann sogar auf \textwidth für die Breite bei \multirow verweisen, dazu kenn ich multirow aber zu wenig.
Alternativ könntest Du vielleicht \mbox statt \parbox{80mm} aufrufen, dann ist zumindest die erste Verdoppelung (multirow 80mm breit, parbox 80mm breit) vorhanden.
Auf der anderen Seite: sooo effizient sieht mein Code nu auch nich aus,
und ob der nu soo elegant ist...;)
MfG,
Da nicht klar ist, welches Ziel du mit deiner Tabelle verfolgst, laesst sich die Frage nicht beantworten.
Aufgrund der jetzigen Struktur wuerde ich zu einer 'textwidth' Tabelle neigen, die zunaechst mit 'tabularx' am besten zu gestalten ist, wenn man dann gleichermassen 'variable' (von TeX zu berechnende) Spaltenbreiten waehlt. Dies setzt voraus, dass die Tabelle sich nicht ueber mehrere Seiten erstreckt. Mein Vorschlag wuerde so aussehen (u.a. auch aus 'konstruktiven' Gruenden der 'Einfachheit'):
...
\usepackage{multirow}
\usepackage{tabularx,array,booktabs}
...
\newcolumntype{Y}{>{\centering\arraybackslash}X}
%\begin{tabularx}{\textwidth}{p{15mm}Xp{25mm}p{25m m}p{25mm}} \toprule
\begin{tabularx}{\textwidth}{p{15mm}Yp{25mm}p{25mm }p{25mm}} \toprule
S & \multirow{4}{8.0cm}{\txt} & \multicolumn{2}{l}{Name:} & Matr.-Nr: \\
& & \multicolumn{3}{l}{} \\\cline{3-5}
20/ & & \multicolumn{2}{l}{Datum:} & Gruppe: \\
& & \multicolumn{3}{l}{} \\\midrule
Versuch & \multirow{4}{8.0cm}{\txt} & Testat: & \multicolumn{2}{l}{Stempel:} \\
& \multicolumn{4}{l}{} \\
1 DG & & \multicolumn{3}{l}{} \\
& & \multicolumn{3}{l}{} \\\bottomrule
\end{tabularx}
...
Es gibt ein paar grundlegende Hinweise bei der Gestaltung zu beachten: Obsolet sind heute vertikale Tabellenstriche (Sollte es ein Formular werden, was du vorhast, mag es vielleicht Geschmacksache sein; in einen (wissenschaftlichen) Text gehoerts nicht hinein).
Schau dir mal tabsatz.pdf von Axel Reichert an.
edico
P.S. Merke gerade, dass ich die Spaltenzuordnung vertauscht habe: insofern Austausch beider Zeilen:
...
S & \multirow{4}{8.0cm}{\txt} & Name: & \multicolumn{2}{l}{Matr.-Nr:}\\
...
20/ & & Datum: & \multicolumn{2}{l}{Gruppe:} \\
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.