Longtable und Floats: Falsche Tabellenumbrüche auf Seiten mit Floats (Teil 2)

Longtable und Floats: Falsche Tabellenumbrüche auf Seiten mit Floats (Teil 2)

Ich glaube, ich bin möglicherweise über eine nicht dokumentierte Funktion zum Seitenumbruch in gestolpert longtable.

Das folgende MWE erzeugt (zumindest in meinem TeXlive 2014-Setup) ein Dokument, in dem die letzten Absätze über den unteren Seitenrand hinausragen.

\documentclass{article}

\usepackage[margin=1in]{geometry}
\usepackage{lipsum}
\usepackage{longtable}

\begin{document}
  \begin{figure}
    \sffamily \lipsum[2]
    \caption{A figure}
  \end{figure}
  \lipsum[1-2]

 \begin{longtable}{ll}
    a & b \\
    c & d 
  \end{longtable}

  \begin{figure}
    \sffamily \lipsum[1]
    \caption{A figure}
  \end{figure}

  \lipsum[1-4]

\end{document}

Das Ergebnis ist:

Bildbeschreibung hier eingeben

Das Problem hängt meiner Meinung nach mitlongtabu und floats: falsche Tabellenumbrüche auf Seiten mit floats. Beachten Sie, dass ich mit einer gepatchten Version von arbeite longtable.sty, gemäß den Vorschlägen von David Carlisle (Patch verfügbar unterhttp://www.latex-project.org/cgi-bin/ltxbugs2html?pr=tools/3512, das es übrigens nicht in TeXlive 2014 geschafft hat, obwohl es schon seit über 2 Jahren existiert).

Der Unterschied zur vorherigen Frage besteht darin, dass mein Float erscheintnachder lange Tisch. Das Verschieben des Floats über den langen Tisch behebt das Problem, ist aber offensichtlich keine echte Lösung. Weiß jemand zufällig, wie man das beheben kann?

Antwort1

Es gibt keine Fehler in Longtable: nur interessante Funktionen.

also... LT überschreitet die Seite und TeX beschwert sich:

Overfull \vbox (89.34776pt too high) has occurred while \output is active

Im Idealfall würde das nicht passieren, falls doch, können Sie mit dem Seitenumbruch nachhelfen und den Text um die angegebene Menge kürzen.

\begin{longtable}{ll}
    a & b \\
    c & d 
  \end{longtable}
\makeatletter
\global\advance\@colroom-90pt
\makeatother

Ich halte es für eine Grausamkeit gegenüber den Autoren von Ausgaberoutinen, eine mehrseitige Tabelle zu haben, die weniger als eine Seite lang ist, und einen Float vor der Tabelle und einen Float nach der Tabelle zu haben, alles auf derselben Seite :-)

Antwort2

Ich kann nichts dazu sagen, weil ich neu bin, also muss ich das in eine Antwort schreiben. Ich bin neulich auf dieses Problem gestoßen, weil Pandoc dazu übergegangen ist, für alle Latex-Tabellen Longtable zu verwenden.

http://johnmacfarlane.net/pandoc/releases.html

"Der LaTeX-Writer verwendet jetzt longtable statt ctable. Dadurch können Tabellen über Seitengrenzen hinweg aufgeteilt werden."

Wie dem auch sei, ich kann mir vorstellen, dass dieses Problem bei viel mehr Leuten auftritt, da Pandoc zum Generieren von Tabellen verwendet wird, wenn RMarkdown zum Generieren von Latex-Dokumenten verwendet wird.

Ich habe den alten Patch angewendet und das Problem wurde behoben. Allerdings sind die Zeilennummern jetzt etwas anders:

diff longtable.sty.bak longtable.sty
167c167
<     \advance\vsize-\ht\LT@foot
---
>     \global\advance\vsize-\ht\LT@foot
195a196,200
>   \ifvoid\LT@foot\else
>     \global\advance\vsize\ht\LT@foot
>     \global\advance\@colroom\ht\LT@foot
>     \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@
>   \fi
198d202
<   \pagegoal\vsize
394a399
>         \advance\dimen@\ht\LT@foot
399a405
>             \global\vsize\@colroom
403,406c409
<       \global\@colroom\@colht
<       \global\vsize\@colht
<       \vbox
<         {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
---
>       \unvbox\z@\ifvoid\LT@lastfoot\copy\LT@foot\else\box\LT@lastfoot\fi

verwandte Informationen