Longtable 和浮動:在浮動的頁面上的錯誤表格中斷(第 2 部分)

Longtable 和浮動:在浮動的頁面上的錯誤表格中斷(第 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

我認為輸出例程作者有一個小於一頁長的多頁表,並且表前有一個浮點,表後有一個浮點,所有這些都在同一頁上,這是殘酷的:-)

答案2

我無法發表評論,因為我是新人,所以我必須將其放入答案中。前幾天我遇到了這個問題,因為 pandoc 已轉而對所有乳膠表使用 longtable。

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

“LaTeX 編寫器現在使用 longtable 而不是 ctable。這允許表格在頁面邊界上分割。”

不管怎樣,我想更多的人會遇到這個問題,因為在使用 RMarkdown 產生乳膠文件時,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

相關內容