Longtable 和 floats:带有浮动的页面上的表格中断错误(第 2 部分)

Longtable 和 floats:带有浮动的页面上的表格中断错误(第 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 和 floats:带有 floats 的页面上的表格分隔符错误。请注意,我正在使用修补版本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 已切换到对所有 latex 表使用 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

相关内容