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 및 floats: float가 있는 페이지에서 잘못된 테이블 나누기. 저는 longtable.styDavid 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 작성자는 이제 ctable 대신 longtable을 사용합니다. 이를 통해 테이블을 페이지 경계로 분할할 수 있습니다."

어쨌든 Pandoc은 RMarkdown을 사용하여 라텍스 문서를 생성할 때 테이블을 생성하는 데 사용되기 때문에 더 많은 사람들이 이 문제를 겪고 있다고 생각합니다.

이전 패치를 적용했더니 문제가 해결되었지만 이제 줄 번호가 약간 다릅니다.

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

관련 정보