Zelleninhalt in tabularx vertikal zentrieren

Tabellen und Grafiken erstellen und anordnen


Big-Gremlin
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Fr 9. Jan 2015, 16:35

Zelleninhalt in tabularx vertikal zentrieren

Beitrag von Big-Gremlin »

Vertikales zentrieren einer Zelle in TabularX ist garnicht so einfach.
Ich les städnig, dass bei einer vertikalen Zentrierung "m" für die Spalte gesetzt werden soll.
\documentclass[oneside]{scrbook}

\usepackage{array, tabularx, blindtext}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}

\begin{document} 
	\begin{tabularx}{\textwidth}{|
		C{1.5cm} |
		>{\centering\arraybackslash}X |
		m{1.5cm} |
	}
	
	 test & \blindtext & test
	
	\end{tabularx}
\end{document}
In dem Beispiel habe ich für Spalte 1 einen neuen Typ gesetzt und für Spalte 3 m direkt in die Zelle gesetzt. Vertikal zentriert wird aber nichts.

Kann tabularx keien vertikale Zentrierung? Ich hatte es mit tabular* schon versucht, aber die Spaltengröße hatte dabei nicht richtig hingehauen. Außerdem bekam ich damit unschöne zusätzliche Abstände mit rein.

Ich möchte links und rechts eine Spalte mit 1,5cm und in der Mitte eine Spalte die den Rest (der Textbreite) einnimmt. Mir geht es in erster Linie darum, kleine Bilder zu zentrieren.

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

X Spalten werden als p Spalten mit entsprechend angepasster Breite gesetzt. Wenn alle Spalten vertikal zueinander zentriert werden sollen, muss \tabularxcolumn so umdefiniert werden, dass X Spalten auf dem m Spaltentyp basieren.
\renewcommand\tabularxcolumn[1]{m{#1}}
Wenn man das innerhalb von einer Gruppe macht, kann man diese Änderung lokal halten.
\documentclass[oneside]{scrbook} 

\usepackage{tabularx}% lädt auch array
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}

\usepackage{blindtext}
\begin{document}
\begin{center}
\renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{#1}}
\begin{tabularx}{\textwidth}{|C{1.5cm}|X|m{1.5cm}|} 
test & \blindtext & test 
\end{tabularx}
\end{center}

\begin{center}
\begin{tabularx}{\textwidth}{| 
  C{1.5cm} | 
  >{\centering\arraybackslash}X | 
  m{1.5cm} | 
} 
test & \blindtext & test 
\end{tabularx}
\end{center}

\end{document}
Ich habe die Tabellen jeweils zentriert, weil zum einen etwas Abstand eingefügt wird und zum anderen der Absatzeinzug entfällt, der die Tabelle sonst ein Stück in den Rand rutschen lässt.

Gruß
Elke

Big-Gremlin
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Fr 9. Jan 2015, 16:35

Beitrag von Big-Gremlin »

Ansich funktioniert das. Danke schonmal :)

Jedoch wie funktioniert das dann, wenn ich die Tabelle in einen newcommand packe?

Folgendes Beispiel funktioniert nicht
\documentclass[oneside]{scrbook}

\usepackage{tabularx}% lädt auch array
\usepackage{blindtext}

\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcommand{\testtable}[1]{
	\begin{center}
	\renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{#1}}
	\begin{tabularx}{\textwidth}{|C{1.5cm}|X|m{1.5cm}|}
		#1 & \blindtext & #1
	\end{tabularx}
	\end{center}
}

\begin{document}

	\testtable{test}

	\begin{tabularx}{\textwidth}{|C{1.5cm}|X|m{1.5cm}|}
	test & \blindtext & test
	\end{tabularx}
\end{document}

Besserwisser

Beitrag von Besserwisser »

Wie immer: Bei jeder Definitionsebene muss man die # verdoppeln, damit TeX, weiß welches Argument Nummer 1 da gemeint ist:
\documentclass[oneside]{scrbook}

\usepackage{tabularx}% lädt auch array
\usepackage{blindtext}

\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newcommand{\testtable}[1]{
   \begin{center}
   \renewcommand\tabularxcolumn[1]{>{\centering\arraybackslash}m{##1}}
   \begin{tabularx}{\textwidth}{|C{1.5cm}|X|m{1.5cm}|}
      #1 & \blindtext & #1
   \end{tabularx}
   \end{center}
}

\begin{document}

   \testtable{test}

   \begin{tabularx}{\textwidth}{|C{1.5cm}|X|m{1.5cm}|}
   test & \blindtext & test
   \end{tabularx}
\end{document}

Big-Gremlin
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Fr 9. Jan 2015, 16:35

Beitrag von Big-Gremlin »

sehr schön :) danke

Antworten