ロングテーブルとフロート: フロートのあるページでのテーブル区切りが間違っている (パート 2)

ロングテーブルとフロート: フロートのあるページでのテーブル区切りが間違っている (パート 2)

のページ分割に関する文書化されていない機能に偶然出会ったかもしれませんlongtable

次の MWE は (少なくとも私の TeXlive 2014 設定では) 最後の段落がページの下部からはみ出した文書を生成します。

\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}

結果は次のとおりです。

ここに画像の説明を入力してください

問題は、私が思うに、longtabu とフロート: フロートを含むページでテーブルが間違って区切られるlongtable.sty。私はDavid Carlisleの提案に従って、パッチを当てたバージョンの で作業していることに注意してください(パッチはhttp://www.latex-project.org/cgi-bin/ltxbugs2html?pr=tools/3512ちなみに、これは 2 年以上前から存在しているにもかかわらず、TeXlive 2014 には登場していません。

先ほどの質問との違いは、私のフロートが長いテーブル。フロートを長いテーブルの上に移動すると問題は解決しますが、これは明らかに本当の解決策ではありません。これを修正する方法を知っている人はいますか?

答え1

longtable にはバグはありません。興味深い機能だけがあります。

つまり、LT がページをオーバーシュートし、TeX がエラーを出力します。

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

理想的な世界ではそのようなことは起こりませんが、もしそうなった場合は、ページ ブレーカーを利用して、指定された量だけ短くすることができます。

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

1 ページ未満の長さの複数ページの表を作成し、表の前に 1 つのフロートと表の後に 1 つのフロートをすべて同じページに配置することを、通常の著者が出力するのは残酷だと思います :-)

答え2

私は初心者なのでコメントできません。回答でこれを述べなければなりません。先日、この問題に遭遇したのは、Pandoc がすべての LaTeX テーブルに longtable を使用するように切り替えたためです。

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

「LaTeX ライターは、ctable の代わりに longtable を使用するようになりました。これにより、テーブルをページ境界を越えて分割できるようになります。」

いずれにせよ、RMarkdown を使用して LaTeX ドキュメントを生成するときにテーブルを生成するために使用されるのは pandoc なので、この問題に遭遇する人はもっとたくさんいると思います。

古いパッチを適用して問題は修正されましたが、行番号が若干異なります。

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

関連情報