长横向表格-如何让文字继续填充上一页?

长横向表格-如何让文字继续填充上一页?

我的文档中有几张长表格,其中一些是横向模式。当使用 将表格“横向化”时sidewaystable,尽管表格位于下一个整页中,但文本仍会照常显示,直到填满上一页(参见第一张图片)。这是预期的行为,与普通表格或图形相同 - Latex 会找到“最佳位置”,表格/图形前后的文本将照常显示。

由于我的表格很长,我需要使用landscapepdflscapelscape。但是,当使用其中任何一个时,表格后的文本不会像往常一样继续填充上一页(参见第二张图片)。

有什么办法可以解决这个问题吗?我希望能够获得sidewaystable与我的长景观表相同的行为(实际上是通常的行为)。

\beginMWE(将和的注释改为\end{landscape}的注释sidewaystable以交换结果):

\documentclass[11pt, a4paper, oneside]{report}
\usepackage[left=4cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage{xltabular}
\usepackage{pdflscape}
\usepackage{lipsum}
\usepackage{rotating}

\begin{document}

\setlength{\parskip}{6pt}
\lipsum[23]

\begin{sidewaystable}
% \begin{landscape}
 \setlength\LTcapwidth{\linewidth} % I need that for long captions
{\small
\begin{xltabular}{\linewidth}{@{} XXXX @{}}
\caption{{\normalsize This is a caption.\label{table:bla}}}\\
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\endfirsthead
\multicolumn{4}{c}%
{\footnotesize{\tablename\ \thetable\ -- \textit{Continued from previous page}}} \\ \hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\endhead
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\end{xltabular}}
% \end{landscape}
\end{sidewaystable}

\lipsum[1]

\lipsum[2]

\lipsum[3]

\end{document}

使用结果sidewaystable(表格不会中断以更改页面但文本行为“正确”): 横向稳定

使用结果landscape(表格确实中断以更改页面,但文本行为“错误”): 在此处输入图片描述

答案1

这个问题已经发布三年了,所以我希望它对某些人仍然有用。可以使用包“afterpage”解决该问题,其中的命令强制执行传递给参数的代码。

我希望该网站能够继续开放一段时间,所以我分享了 Juanjo 首次解决问题的链接这里。此外,我还提供了所共享的最小示例:


    \documentclass{article}
    \usepackage{array,longtable,lipsum,afterpage,pdflscape}
    \begin{document}
    \lipsum[1]
    \afterpage{
    \begin{landscape}
    \begin{longtable}{|c|>{\raggedright}p{0.7\linewidth}|}
      \hline
      A & \lipsum[1] \tabularnewline \hline
      B & \lipsum[2] \tabularnewline \hline
      C & \lipsum[3] \tabularnewline \hline
      D & \lipsum[4] \tabularnewline \hline
    \end{longtable}
    \end{landscape}
    }
    \lipsum[2-8]
    \end{document}

答案2

似乎没有办法解决这个问题,我只找到了一个不可靠的解决方法:

正如 @DavidCarlisle 在问题的评论中所说,您可以运行不带表格的代码来检查必须在哪里引入表格。您想要的是在代码中将段落拆分到 latex 拆分页面的同一位置。为此,您可以使用\linebreak以便页面中的最后一句话对齐,引入表格,然后以 开始其余文本\noindent

但是,这会导致表格前出现空白页。因此,\linebreak您不能将表格添加到页面最后一行的结束位置,而是必须将其添加到上一行的结束位置:

将 <code>\linebreak</code> 放置在“mi”之后。

参见 MWE:

\documentclass[11pt, a4paper, oneside]{report}
\usepackage[left=4cm,right=2cm,top=2.5cm,bottom=2.5cm]{geometry}

\usepackage{xltabular}
\usepackage{pdflscape}
\usepackage{lipsum}
\usepackage{rotating}

\begin{document}

\setlength{\parskip}{6pt}
\lipsum[2-7]

Nam dui ligula, fringilla a, euismod sodales, sollicitudin vel, wisi. Morbi auctor loremnon justo. Nam lacus libero, pretium at, lobortis vitae, ultricies et, tellus. Donec aliquet, tortor sed accumsan bibendum, erat ligula aliquet magna, vitae ornare odio metus a mi. \linebreak % As seen when running the code without the table, here is where the previous to the last line of the page ends.

\begin{landscape}
\setlength\LTcapwidth{\linewidth}
{\small
\begin{xltabular}{\linewidth}{@{} XXXX @{}}
\caption{{\normalsize This is a caption.\label{table:bla}}}\\
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\endfirsthead
\multicolumn{4}{c}%
{\footnotesize{\tablename\ \thetable\ -- \textit{Continued from previous page}}} \\ \hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\endhead
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\ \hline
\end{xltabular}}
\end{landscape}

\noindent  Morbi ac orci et nisl hendrerit mollis. Suspendisse ut massa. Cras nec ante. Pellentesquea nulla. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculusmus. Aliquam tincidunt urna. Nulla ullamcorper vestibulum turpis. Pellentesque cursusluctus mauris. % \noindent makes the rest of the paragraph start without an indent, as if it would actually continue as normal.

\lipsum[2-7]

\end{document}

这很不可靠,因为 1)必须手工完成所有操作,这对于包含大量此类表格的长文档来说可能非常不切实际,并且每次表格前的间距因任何细微编辑而改变时,您都可能需要重新放置 and \linebreak\noindent2)它甚至不能在它应该在的地方完成 - 在页面末尾 - 而是在上面一行以避免引入空白页。

我确信一定有更好的方法,但没人给出更好的方法。所以,有不靠谱的解决方法总比什么都没有好。

答案3

嗯,当有人问到这个问题时我忽略了这个问题......

  • 针对这种情况,已经定义了afterpage包,它能够在landscape环境和其他类似构造之前填充原本空白的空间,从而在文档中开始新的页面(另请参阅@Erick Garcia 的回答,+1)。-您的表格可以简单地,并且在我看来更美观地使用tabularray使用包的包booktabs(作为其库加载)。_ 为了更好地格式化单元格中的文本,添加了包microtype
\documentclass[11pt, a4paper, oneside]{report}
\usepackage[hmargin={4cm,2cm}, vmargin=2.5cm]{geometry}

\usepackage{microtype}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\usepackage{pdflscape}
\usepackage{afterpage}
\usepackage{lipsum}


\begin{document}
\lipsum[1-5]

\afterpage{
    \begin{landscape}
%\leavevmode\vfil
\begin{longtblr}[
caption=This is a caption,
  label={table:bla}
                ]{
                 colspec = {@{} *{4}{X[j]} @{}},
                 row{2-Z}= {rowsep=4pt},
                 rowhead = 1
                 }
    \toprule
Column 1 & Column 2 & Column 3 & Column 4 \\
    \midrule
% table body
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
\lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5] & \lipsum[2][3-5]   \\
    \bottomrule
\end{longtblr}
    \end{landscape}
    }

\lipsum[6-12]

\end{document}

在此处输入图片描述

在此处输入图片描述

相关内容