Longtable и float: неправильные разрывы таблиц на страницах с float (часть 2)

Longtable и float: неправильные разрывы таблиц на страницах с float (часть 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 и 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

Связанный контент