PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grafik in Zelle ausrichten



hpb
28-07-2005, 10:01
Hallo,
ich verwende in einer Zelle einer Tabelle (tabularx) eine Grafik, die höher als eine Zeile ist. Da sich der Text in der Zelle daneben über mehrere Zeilen ersteckt, möchte ich die Grafik OBEN an der Zellenkante ausrichte.
Ich habe hierzu mal diesen Thread (http://www.mrunix.de/forums/showthread.php?t=36913&highlight=Zelle+ausrichten) gelesen (lößt aber mein Problem nicht ganz).

Die angefügte Grafik zeigt wie es aussehen soll.
Mein bisheriges Coding:


\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
\begin{document} % Dokument fängt an
\begin{tabularx}{\linewidth}{c X}
\hline
%\begin{minipage}[b][76pt][c]{23pt}
\fbox{\includegraphics{test}}
%\end{minipage}
& Diese Zeile ist soooooooooooooooooooooooooooooooooooooooooo lange, dass sie sich über mehrere Zeilen erstreckt. Die Graphik gegenüber sollte an der Kante oben ausgerichtet sein. Es soll also kein zusätzlicher Abstand nach oben entstehen\\
\hline
bla bla & bla bla\\
\hline
\end{tabularx}
\end{document}

edico
28-07-2005, 15:19
Ich würde es so machen:
%
\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage{tabularx, booktabs} %<<<<<<<<<<< schau, was booktabs kann
\begin{document}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{tabularx}{\textwidth}{YX}\toprule
\raisebox{-\height}{\rule{50mm}{50mm}} &\vspace*{0pt} Diese Zeile ist sooooooooooooooooooooo\-o\-oo\-ooo\-oo\-ooo\-oooooooooo lange, dass sie sich ber mehrere Zeilen erstreckt. Die Graphik gegenber sollte an der Kante oben ausgerichtet sein. Es soll also kein zustzlicher Abstand nach oben entstehen\\\midrule
blabla & blabla \\\bottomrule
\end{tabularx}
ßend{document}
%
... und informier dich mal, was ein Minimalbeispiel ist.
edico

hpb
01-08-2005, 12:37
Kannst du mir noch etwas näher erklären, was du da genau gemacht hast? Ich habe versucht dein Beispiel zu übernehmen. Leider sind jetzt beide Spalten gleich breit. Ich bräuchte aber eine Spalte, die nur so breit wie die Abbildung ist und die andere soll den restlichen freien Platz einnehmen.

(Wie kann man den neuen Spaltentyp so definieren, dass er analog zum "c" nur die tatsächlich nötige Breite nimmt?)

Danke,
PETER

edico
01-08-2005, 15:33
% Grafik in Zelle ausrichten
\documentclass{scrbook}
\usepackage[latin1]{inputenc}
\usepackage{graphicx}
\usepackage[ngerman]{babel}
\usepackage{tabularx, booktabs} %<<<<<<<<<<< schau, was booktabs kann
\begin{document}
% tabularx-Spaltendefinitionen
%\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcolumntype{Y}{>{\arraybackslash}X}
\begin{tabularx}{\textwidth}{YX}\toprule
\raisebox{-\height}{\rule{50mm}{50mm}} &\vspace*{0pt} Diese Zeile ist sooooooooooooooooooooo\-o\-oo\-ooo\-oo\-ooo\-oooooooooo lange, dass sie sich ber mehrere Zeilen erstreckt. Die Graphik gegenber sollte an der Kante oben ausgerichtet sein. Es soll also kein zustzlicher Abstand nach oben entstehen\\\midrule
blabla & blabla \\\bottomrule
\end{tabularx}

>Kannst du mir noch etwas naeher erklaeren, was du da genau gemacht hast? Ich habe versucht dein
>Beispiel zu uebernehmen. Leider sind jetzt beide Spalten gleich breit. Ich braeuchte aber eine Spalte, die
>nur so breit wie die Abbildung ist und die andere soll den restlichen freien Platz einnehmen.\par
>(Wie kann man den neuen Spaltentyp so definieren, dass er analog zum 'c' nur die tatsaechlich noetige
>Breite nimmt?)

%\newcolumntype{Y}{>{\arraybackslash}X}
\begin{tabularx}{\textwidth}{cX}\toprule
\raisebox{-\height}{\rule{50mm}{25mm}} &\vspace*{0pt} Diese Zeile ist sooooooooooooooooooooo\-o\-oo\-ooo\-oo\-ooo\-oooooooooo lange, dass sie sich ber mehrere Zeilen erstreckt. Die Graphik gegenber sollte an der Kante oben ausgerichtet sein. Es soll also kein zustzlicher Abstand nach oben entstehen\\\midrule
\raisebox{-\height}{\rule{25mm}{25mm}} &\vspace*{0pt} Diese Zeile ist sooooooooooooooooooooo\-o\-oo\-ooo\-oo\-ooo\-oooooooooo lange, dass sie sich ber mehrere Zeilen erstreckt. Die Graphik gegenber sollte an der Kante oben ausgerichtet sein. Es soll also kein zustzlicher Abstand nach oben entstehen\\\midrule
blabla & blabla \\\bottomrule
\end{tabularx}

Wie du richtig erkannt hast, ist es das Ansinnen von 'tabularx', die Tabellenspalten (meistens) in der gesamten Textbreite ('textwidth') gleichmaessig aufzuteilen (ursaechlich und ansich der Unterschied zu 'tabular'. Deswegen sind die Spalte X und die neu definierte (hier zentrierte) Spalte Y gleich breit. [Probier einmal bei bestehender Tabelle aus, welche Unterschiede sich aus der Kombination XX,XY,YX,YY vom Lauyout ergeben.] Um nun den von dir erwuenschten Effekt zu erhalten, muss ich diese Spaltendeklaration verlassen und mit den 'herkoemmlichen' Optionen l,c,r komibieren. In der geposteten Tabelle ist eine der Loesungen realisiert. Dabei habe ich den Spaltentyp Y nicht mehr zentriert gesetzt, weil du das nicht gewuenscht hast. An sich haette ich auch die ehemalige Definition stehen lassen koennen und statt des 'Y' ein 'X' (=> cX) schreiben koennen. Naeheres siehe bitte manpages.
\end{document}
%
edico