Seite 1 von 1

Text mit TikZ-Bild in Tabelle oben ausrichten

Verfasst: Fr 22. Apr 2016, 16:21
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

Kleiner Trick

Verfasst: Fr 22. Apr 2016, 17:33
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

Verfasst: Mo 25. Apr 2016, 09:48
von Tom_Gast
Vielen Dank, hat prima funktioniert.

Verfasst: Mo 25. Apr 2016, 09:58
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?

Verfasst: Mo 25. Apr 2016, 10:04
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.

Verfasst: Mo 25. Apr 2016, 10:08
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.