Text mit TikZ-Bild in Tabelle oben ausrichten

Tabellen und Grafiken erstellen und anordnen


Tom_Gast

Text mit TikZ-Bild in Tabelle oben ausrichten

Beitrag von Tom_Gast »

Hallo,

ich habe ein Problem, das ich auch durch sämliche Foren-Einträge noch nicht lösen konnte:
Ich habe eine Tabelle mit vier Spalten. In den ersten 3 Spalten steht Text und in der letzten Spalte befindet sich ein TiKz-Bild.
Das Problem das ich habe ist, dass der Text erst anfängt, wenn das Bild zuende ist, obwohl genügend Platz vorhanden ist. Kurz gesagt: Ich möchte den Text in den ersten drei Spalten ganz oben ausrichten, sodass er neben dem Bild steht.

Hier ein einfaches lauffähiges Minimalbeispiel: (Ich werde selbstverständlich das TiKz-Bild noch in eine extra Datei auslagern und mit \input einfügen, aber für das Minimalbeispiel wollte ich eben nur eine Datei haben).
\documentclass[]{book}
\usepackage{ngerman} 
\usepackage{tikz}
\usepackage{booktabs}
\usepackage{tabularx}

\begin{document}
	\begin{table}[h!]
		\begin{tabular}{p{3cm} p{3cm} p{2cm} p{4cm}}
			\toprule
			Spalte1 & Spalte2 & Spalte3 & Spalte4\\
			\midrule
			Hier steht Text, der oben ausgerichtet sein soll & Hier steht weiterer Text, der auch 	oben ausgerichtet sein soll & Hier nochmal & \begin{tikzpicture}\draw (0,0)--(4,0)--(2,-4)--(0,0); \end{tikzpicture}\\
			\bottomrule
		\end{tabular}
	\end{table}
\end{document}
Ich würde mich freuen, wenn mir jemand weiter helfen könnte,
Gruß Tom

Stamm-

Kleiner Trick

Beitrag von Stamm- »

Hilfe für solche Dinge findet man häufig auf {TeX} SX [1]. Das hier sollte brauchbar aussehen.
\documentclass[ngerman]{book}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{
  adieresis={ä},
  germandbls={ß}
}
\usepackage{babel} 
\usepackage{tikz}
\usepackage{booktabs}
\usepackage{microtype}

\begin{document}
  \begin{table}[!htb]
    \begin{tabular}{p{3cm} p{3cm} p{2cm} p{4cm}} \toprule
      Spalte 1 & Spalte 2 & Spalte 3 & Spalte 4 \\ \midrule
      Hier steht Text, der oben ausgerichtet sein soll & Hier steht weiterer Text, der auch oben ausgerichtet sein soll & Hier nochmal & \leavevmode\vadjust{\vspace{-0.75\baselineskip}}\newline\tikz\draw (0,0) -- (4,0) -- (2,-4) --cycle; \\ \bottomrule
    \end{tabular}
  \end{table}
\end{document}

[1] Aligning an enumeration item to the top of a tikzpicture – TeX - LaTeX Stack Exchange

Tom_Gast

Beitrag von Tom_Gast »

Vielen Dank, hat prima funktioniert.

Tom_Gast

Beitrag von Tom_Gast »

Ich hab nochmal eine kurze Frage:

Wenn ich die Spalten der Tabelle so formatiere:
\begin{tabular}{p{0.2\textwidth} p{0.2\textwidth} p{0.2\textwidth} p{0.4\textwidth}}
Wieso geht das dann über die Textbreite hinaus, obwohl ich insgesamt 20%+20%+20%+40%=100% der Textbreite eingestellt hab?

Besserwisser

Beitrag von Besserwisser »

Das ist aber ein wenig sehr von hinten durch die Brust ins Knie. tikzpicture (aber auch \tikz) bietet mit Option baseline selbst die Möglichkeit, die Grundlinie des Bildes festzulegen:
\documentclass{book}
\usepackage[ngerman]{babel}% Paket ngerman ist veraltet!
\usepackage{tikz}
\usepackage{booktabs}
\usepackage{tabularx}

\begin{document}
   \begin{table}[h!]
      \begin{tabular}{p{3cm} p{3cm} p{2cm} p{4cm}}
         \toprule
         Spalte1 & Spalte2 & Spalte3 & Spalte4\\
         \midrule
         Hier steht Text, der oben ausgerichtet sein soll & Hier steht weiterer Text, der auch    oben ausgerichtet sein soll & Hier nochmal & \begin{tikzpicture}[baseline=-\ht\strutbox]\draw (0,0)--(4,0)--(2,-4)--(0,0); \end{tikzpicture}\\
         \bottomrule
      \end{tabular}
   \end{table}
\end{document}
Die Option baseline ist in der Anleitung erklärt.

Besserwisser

Beitrag von Besserwisser »

Tom_Gast hat geschrieben:Wenn ich die Spalten der Tabelle so formatiere:
\begin{tabular}{p{0.2\textwidth} p{0.2\textwidth} p{0.2\textwidth} p{0.4\textwidth}}
Wieso geht das dann über die Textbreite hinaus, obwohl ich insgesamt 20%+20%+20%+40%=100% der Textbreite eingestellt hab?
Neue Fragen solltest du grundsätzlich als neues Thema stellen!

Du hast die Spaltenabstände in deiner Rechnung vergessen. Die sind \tabcolsep breit und existieren vor und nach jeder Spalte (also im Endeffekt vor der ersten Spalte, nach der letzten Spalte und zweimal zwischen allen Spalten). Den verfügbaren Platz auf die Spalten verteilen, geht übrigens einfacher mit tabularx. In der [d]tabularx[/d]-Anleitung, Abschnitt 4.3 findest du auch, wie man via \hsize-Änderung die Spalten trotzdem unterschiedlich breit machen kann. Falls weitere Fragen dazu sind, stell bitte eine ganz neue Frage mit neuem, darauf angepassten Minimalbeispiel.

Antworten