PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \longtable und Position von \label



belfur
12-10-2007, 22:59
Hallo,
Ich habe ein kurzes Problem mit dem \label{} in einer longtable.
Wo muss das hin? Setzte ich es so:
\begin{document}
\usepackage{longtables}

\setlongtables
\begin{longtable}{|l|l|}
\caption{text}
\label{labeltext}
\\\hline
Überschrift & Überschrift\\
\endhead
\hline
\endfoot
Tabellentext & Tabellentext2\\
Tabellentext3 & Tabellentext4\\
\end{longtable}

beschwert sich Latex über "multiply-defined labels"!
Setze ich es nach \endfoot, ist die erste Zelle der Tabelle nicht richtig aligned, setze ich es vor \end{longtable}, habe ich Probleme in der letzten Zeile. Wo gehört das hin?
Anmerkung: ich denke mein Beispiel wird keine multiply-defined labels ergeben, da die Tabelle ja nur auf einer Seite steht und der Head nicht wiederholt wird.
Danke!

sommerfee
13-10-2007, 05:04
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{longtable}
\begin{document}
\begin{longtable}{|l|l|}
\caption{text}
\label{labeltext}
\\\hline
Überschrift & Überschrift\\
\endhead
\hline
\endfoot
Tabellentext & Tabellentext2\\
Tabellentext3 & Tabellentext4\\
\end{longtable}
\end{document}


läuft hier ohne Warnungen durch.

Gruß,
Axel

filbert
10-06-2008, 12:12
ich hab das selbe problem. dass das minimalbeispiel ohne probleme durchläuft wird daran liegen, das die longtable sich im beispiel nicht über mehr als eine seite erstreckt. so zumindest meine vermutung. eine lösung für das problem habe ich leider auch noch nicht gefunden.

grüße
filbert

sommerfee
10-06-2008, 12:51
dass das minimalbeispiel ohne probleme durchläuft wird daran liegen, das die longtable sich im beispiel nicht über mehr als eine seite erstreckt.

Stimmt, Mist.


eine lösung für das problem habe ich leider auch noch nicht gefunden.

Meine Ideen:

- \label{...} direkt nach \endfoot setzen. Das Problem von Belfur, daß es dann Ausrichtung-Probleme gibt, kann ich an meinem Minimalbeispiel nicht nachvollziehen. Ggf. könnte ein % nach dem \label{...} in solchen Fällen helfen.

- Den Kopf in \endfirsthead und \endhead aufteilen, etwa so:


\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage{longtable}
\begin{document}
\listoftables
\begin{longtable}{|l|l|}
\caption{text}\\ % mit Eintrag ins Tabellenverzeichnis...
\label{labeltext} % ...und \label
\hline
Überschrift & Überschrift\\
\endfirsthead
\caption[]{text}\\ % ohne Eintrag ins Tabellenverzeichnis
\hline
Überschrift & Überschrift\\
\endhead
\hline
\endfoot
Tabellentext & Tabellentext2\\
Tabellentext3 & Tabellentext4\\
...
Tabellentext & Tabellentext2\\
Tabellentext3 & Tabellentext4\\
\end{longtable}
\end{document}


Letzteres halte ich sowieso für sinnvoller, da eine reguläre \caption in dem \endhead-Teil (ohne \endfirsthead) mehrfache Einträge ins Tabellenverzeichnis tätigt.

filbert
10-06-2008, 14:01
hey toll, vielen dank sommerfee!

hätte ehrlich gesagt nicht gedacht, dass ein so alter beitrag wieder belebt werden kann :). die lösung funktioniert einwandfrei und ist auch logisch. der kopf der tabelle wird ja auf jeder seite reproduziert, wobei es dann zu der mehrfachvergabe kommt, wenn \label{} dort mit drin ist.

zu ausrichtungs problemen muss beachtet werden, dass longtable mehrere durchläufe braucht um sich auszurichten. also beim ersten mal nicht erschrecken ;)

grüße und danke nochmal
filbert

mister-rod
04-08-2008, 12:24
Ich habe auch ein longtable verwendet, doch ich hab dennoch ein problem. meine caption-anweisung soll unter der tabelle erscheinen, also erst auf der letzten seite. die \label{labeltabelle}-anweisung kann dort aber nicht stehen, da sonst mein \pageref{labeltabelle} auf die falsche (undzwar letzte) seite verweisen würde, d.h. caption steht am ende, und label muss irgendwo am anfang stehen. dort hab ich inzwischen alles ausprobiert. sowohl direkt nach \begin{longtable}{|c|c|}



\begin{longtable}{|c|c|}
\label{labeltabelle}
\endfirsthead
\endhead
\endfoot
\endlastfoot
text1 & text2\\
text3 & text4\\
\caption{eintrag}
\end{longtable}


aber auch nach den kopf- und fuss-definitionen



\begin{longtable}{|c|c|}
\endfirsthead
\endhead
\endfoot
\endlastfoot
\label{labeltabelle}
text1 & text2\\
text3 & text4\\
\caption{eintrag}
\end{longtable}


doch entweder wirft er einen fehler aus, oder er verhaut die erste zeile des tabellentextes

WAS MUSS ICH TUN? :(

sommerfee
05-08-2008, 09:24
doch entweder wirft er einen fehler aus, oder er verhaut die erste zeile des tabellentextes

Wenn es nur um das korrekte \pageref geht, kann man in einer longtable in der Tat das \label einfach an den Anfang des Tabellenrumpfes stellen. Wenn es dir dabei die erste Zeile verhaut, platziere ein % hinter das Label, ansonsten bekommst du ein unerwünschtes Leerzeichen:



\label{labeltabelle}% <= man beachte das %


Wenn auch der Eintrag im Tabellenverzeichnis auf die erste Seite verweisen soll, kannst du für den Eintrag \captionlistentry des caption-Paketes verwenden. Die Befehlsbeschreibung von \captionlistentry enthält auch die Problematik "longtable mit \caption unten" als Beispiel. (Das \label sollte dann nach \captionlistentry platziert werden.)