Думаю, я наткнулся на недокументированную функцию, касающуюся разрыва страниц в 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 и float: неправильные разрывы таблиц на страницах с float. Обратите внимание, что я работаю с исправленной версией longtable.sty
, согласно предложениям Дэвида Карлайла (исправление доступно по адресуhttp://www.latex-project.org/cgi-bin/ltxbugs2html?pr=tools/3512, который, кстати, не попал в TeXlive 2014, несмотря на то, что существует более 2 лет).
Разница с предыдущим вопросом в том, что мой поплавок появляетсяпоследлинный стол. Перемещение поплавка над длинным столом решает проблему, но это явно не настоящее решение. Кто-нибудь знает, как это исправить?
решение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 Writer теперь использует longtable вместо ctable. Это позволяет разбивать таблицы по границам страниц».
В любом случае, я предполагаю, что с этим сталкивается гораздо больше людей, поскольку pandoc — это то, что используется для генерации таблиц при использовании RMarkdown для генерации документов Latex.
Я применил старый патч, и он исправил проблему, однако теперь номера строк немного другие:
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