![Longtable 和 floats:带有浮动的页面上的表格中断错误(第 2 部分)](https://linux22.com/image/298680/Longtable%20%E5%92%8C%20floats%EF%BC%9A%E5%B8%A6%E6%9C%89%E6%B5%AE%E5%8A%A8%E7%9A%84%E9%A1%B5%E9%9D%A2%E4%B8%8A%E7%9A%84%E8%A1%A8%E6%A0%BC%E4%B8%AD%E6%96%AD%E9%94%99%E8%AF%AF%EF%BC%88%E7%AC%AC%202%20%E9%83%A8%E5%88%86%EF%BC%89.png)
我想我可能偶然发现了有关分页的未记录的功能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