Tabelle: Bilder ragen in Kopfzeile rein, Text verschoben

Tabellen und Grafiken erstellen und anordnen


Poldi

Tabelle: Bilder ragen in Kopfzeile rein, Text verschoben

Beitrag von Poldi »

Hallo da draußen,
ich versuche gerade eine Tabelle mit 4 Spalten zu erzeugen. In den ersten drei Spalten ist Text und in der letzten sollen Beispielbilder untereinander angezeigt werden. Kopfzeile und allgemein die Tabellenzellen sind mit Linien von einander abgegrenzt.
Wenn ich meine Bilder einfüge, dann ist das oberste Bild der Spalte ca 2mm zu weit oben eingefügt, so das es in die Kopfzeile reinragt.

Mein zweites Problem ist, dass der Text in den anderen Spalten nach dem einfügen der Bilder nicht mehr oben anfängt, sondern auf die gesamte Spalte zentriert wurde, also mitten auf dem Blatt beginnt. Die Bilderspalte ist davon unberührt, die fängt oben an (wie gesagt sogar 2mm zu weit oben).

Mein Fragen wären also:
Wie kann ich meine Bilder so einfügen, dass sie genau in die Spalte passen u sich mit der Zeile dadrüber nicht überschneidet? bzw. wie kann ich Bilder verschieben?
Wie kann ich definieren, dass der Text oben anfängt?

[code]
%\documentclass{scrartcl}
\documentclass[11pt]{dinbrief}%Schriftgr"oßen können variieren!
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lscape}
\usepackage{longtable}
%\usepackage{dpfloat}
\pagestyle{empty}
\pagenumbering{roman}


\begin{document}
\begin{landscape}

\begin{longtable}{|l|p{.2\textwidth}|p{.3\textwidth}|p{.4\textwidth}|}
\hline

\textsc{Nummer} & \textsc{Titel} & \textsc{Beschreibung} & \textsc{Bild}\\
%Nummer & Titel & Beschreibung & Bild\\
\hline

5781269821034785 & Ein etwas zu lang geratener Titel & Hier ist eine sehr sehr sehr lange Beschreibung, welche teilweise auch mal über eine Seite hinausgehen kann. &
\includegraphics{5781269821034785_a.png} \includegraphics{5781269821034785_b.png} \includegraphics{5781269821034785_c.png}\\
\hline

%\end{tabular}
\end{longtable}
\end{landscape}
\end{document}
[/code]

danke für eure Hilfe

Poldi

Beitrag von Poldi »

hm, keiner der eine Antwort weiß?
also das Problem mit der verschobenen Grafik müsste einfach bloß an der grafischen Ausgabe liegen. Wenn ich es mit nem anderen pdf viewer anschaue sieht es top aus.

Aber das Problem mit dem Text bleibt. Ich habe mitlerweile auch mal an der Ausrichtung rumgespielt. Aber ich habe es nur geschafft den Text von unten nach oben laufen zu lassen in dem ich statt:
\begin{longtable}{|p{.2\textwidth}|p{.2\textwidth}|p{.3\textwidth}|p{.4\textwidth}|}
\begin{longtable}{|p{.2\textwidth}|p{.2\textwidth}|p{.3\textwidth}|b{.4\textwidth}|}
geschrieben habe. Also das letzte p durch ein b ersetzt. Dadurch sind die Bilder in ihrer Spalte immer noch oben und der Text beginnt von unten nach oben.
Ich möchte aber das alles oben beginnt.
Weiß keiner Rat?

Poldi

Beitrag von Poldi »

ein weiteres Problem welches sich bei diesem code ergibt ist, dass bei einem Seitenumbruch der fehlender Text der Spalte nicht mit auf die nächste Seite übernommen wird. Ich dachte eigentlich das \longtable dafür sorgt?

der Text beginnt also nicht nur nicht oben sondern schneidet auch noch ein ganzes Stück ab ohne es auf die nächste Seite zu übernehmen.

Wenn das so weiter geht nehme ich wieder ms word -.-

matze

Beitrag von matze »

...
Zuletzt geändert von matze am Mo 19. Sep 2011, 00:54, insgesamt 1-mal geändert.

Poldi

Beitrag von Poldi »

Hallo Matze,
danke für deine Antwort. Was meinst du mit dem \newline für ne neue Zeile? An welcher Stelle muss das rein? Die aktuelle Zeile wird doch durch die Spaltenbreite vorgegeben. Wenn mein Fließtext an den Rand stößt dann springt er automatisch in die nächste Zeile. Ich wüsste nicht wo ich da noch ein \newline einbauen soll.

Hier das Minimalbeispiel:
\documentclass[11pt]{dinbrief}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lscape}
\usepackage{longtable}
\usepackage{array}
\pagestyle{empty}
\pagenumbering{roman} 
\usepackage{graphicx}


\begin{document}
\begin{landscape}

\begin{longtable}{|p{.2\textwidth}|p{.2\textwidth}|p{.3\textwidth}|p{.4\textwidth}|}
\hline

%Kopfzeile der ersten Seite:
Nummer & Titel & Beschreibung & Bild\\
\hline
\hline
\endfirsthead

%Kopfzeile der folgenden Seiten:
\hline
Nummer & Titel & Beschreibung & Bild\\ 
\hline
\hline
\endhead

12345678912345678 & Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text & "Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text " & \includegraphics{Bild} \includegraphics{Bild}\\
\hline

\end{longtable}
\end{landscape}	
\end{document}
Eigentlich habe ich im Vergleich zu meinem Originaldokument nicht viel geändert. Trotzdem habe ich jetzt eine leere Seite 1 und auf Seite 2 die Tabelle in der zwei Kopfzeilen existieren und der Text (wie schon im Originaldokument) abgeschnitten wird, und er beginnt auch mitten in der Tabelle.
Das das Beispielbild bei \includegraphics{Bild} über die Tabelle geht hab ich auf die Schnelle nicht besser hinbekommen. Die Originalbilder passen genau in die Spalte und fangen auch oben an. Nur der Text halt nicht.

Poldi

Beitrag von Poldi »

So, also das mit dem \newline und der Größenangabe der Bilder klappt soweit. Der Text fängt jetzt, so wie die Bilder, oben an und läuft nach unten.

Was in dem Minimalbeispiel noch nicht stimmt
- sind die doppelte Kopfzeile
- die leere erste Seite, also das die Tabelle auf Seite zwei beginnt
- der Text immer noch am ende der Seite abgeschnitten wird und nicht auf die nächste Seite mitübernommen wird
- statt des fehlenden Textes auf der letzten Seite nur die Kopfzeile erscheint.

Hier noch mal der aktuelle code dazu:
\documentclass[11pt]{dinbrief}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{lscape}
\usepackage{longtable}
\usepackage{array}
\pagestyle{empty}
\pagenumbering{roman} 
\usepackage{graphicx}


\begin{document}
\begin{landscape}

\begin{longtable}{|p{.2\textwidth}|p{.2\textwidth}|p{.3\textwidth}|p{.4\textwidth}|}
\hline

%Kopfzeile der ersten Seite:
Nummer & Titel & Beschreibung & Bild\\
\hline
\hline
\endfirsthead

%Kopfzeile der folgenden Seiten:
\hline
Nummer & Titel & Beschreibung & Bild\\ 
\hline
\hline
\endhead

\newline 12345678912345678 & \newline Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text & \newline "Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text Text TextText Text Text Text TextText Text Text Text TextText Text Text Text Text" & \newline \includegraphics[width=.2\textwidth, keepaspectratio]{Bild} \includegraphics[width=.2\textwidth, keepaspectratio]{Bild}\\
\hline

\end{longtable}
\end{landscape}	
\end{document}

matze

Beitrag von matze »

...
Zuletzt geändert von matze am Mo 19. Sep 2011, 00:54, insgesamt 1-mal geändert.

Poldi

Beitrag von Poldi »

Hm, und wie müsste das dann heißen? wenn ich die üblichen Buchstaben verwende ohne eine feste Breite vorzugeben dann geht die Tabelle ja unendlich in die Breite. Wie wäre denn der Befehl für eine feste Spaltebreite inclusive Seitenumbruch?

matze

Beispiel zum Spaltenumbruch bei longtable mit p-Spalten

Beitrag von matze »

...
Zuletzt geändert von matze am Mo 19. Sep 2011, 00:53, insgesamt 4-mal geändert.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Wenn ich das richtig verstehe, gibt es eigentlich zwei Probleme, deren Ursache ich mal beleuchten will:
  • \includegraphics setzt ein Bild als eine Box, bei der die Höhe das Bildes, die Höhe der Box und die Tiefe 0 ist. Damit sitzt das gesamte Bild oberhalb der Grundlinie. Da p-Spalten oben ausgerichtete Boxen sind, ist bei p-Spalten die oberste Grundlinie maßgeblich für die Ausrichtung der Spalten zueinander. Hat man also in einer p-Spalte eine (hohe) Grafik und in der p-Spalte daneben mehrzeiligen Text, dann wird die Grafik oberhalb der Grundlinie der ersten Zeile des Textes ausgerichtet genau wie bei:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \usepackage[demo]{graphicx}
    \begin{document}
    \noindent
    \parbox[tt]{.2\linewidth}{%
      \includegraphics[width=\linewidth,height=4\baselineskip]{Bild}}%
    \parbox[tt]{.8\linewidth}{\blindtext}
    \end{document}
    Um nun die vertikale Ausrichtung zu ändern, kann man entweder eine leere Zeile in die \parbox einfügen (das ist der Vorschlag mit dem \newline, der übrigens im Beispiel mit der \parbox nicht funktionieren würde und eher pragmatisch als sauber ist), oder man verschiebt die Grafik einfach unter die Grundlinie. Eine ausführliche Beleuchtung der verschiedenen Möglichkeiten, die es hier gibt, findet sich in http://www.golatex.de/wichtige-hinweise ... t4688.html, so dass ich diese hier nicht wiederholen muss. Für Grafiken in Tabellen ist ggf. noch der Hinweis angebracht, dass es neben p-Spalten bei Verwendung von array (also auch bei Verwendung von tabularx und anderen Tabellenpaketen, die array laden) auch noch m-Spalten und b-Spalten gibt. Diese verhalten sich dann wie entsprechend ausgerichtete Boxen aus den Beispielen in obigem Link.
  • longtable bricht eine Tabelle zwar über mehrere Seiten hinweg um, das gilt jedoch nicht innerhalb von Tabellenzeilen/-zellen, sondern nur zwischen Tabellenzeilen/-zellen. Das ist übrigens beim sehr empfehlenswerten Paket tabu ganz genauso. Ein Tabellenpaket, das innerhalb einer Tabellenzelle einen Seitenumbruch durchführen kann, gibt es meines Wissens nach nicht.
Sollte ich das Problem falsch eingeschätzt haben, so bitte ich um Entschuldigung.

Antworten