如何强制将多个表格放到一个页面上?

如何强制将多个表格放到一个页面上?

我正在对一本书进行最后的排版,虽然 LaTeX 大多数时候都能“正确”地完成排版工作,并且偶尔出现的丑陋之处可以通过对文本进行轻微的修改来改善,但在某些情况下,我感觉除了强迫 LaTeX 采取行动之外别无选择。

我现在正在看的案例是三个表格,由于上下文,它们需要靠近在一起,并且基本上可以单独填满一整页。

然而,LaTeX 基本上坚持认为一页上的三个表格看起来很糟糕,并将它们分散到多个页面上。

我怎么能力量这些表格是否位于同一页上?

声明\begin{table}[h]不起作用。(LaTeX 显然只是忽略了该设置。)

将表格放入页面大小表格的单个单元格(“HTML 方式”)不起作用,因为我无法通过这种方式正确地添加标题和标签。

附件是该问题的一种简化版本,它是一种 MWE。我使用scrbookdocumentclass 是因为原始文档位于其中,并且更改它(或布局twocolumn)不是一种选择。

\documentclass[paper=a4,fontsize=10pt,twocolumn]{scrbook}

\usepackage{lipsum}
\usepackage{tabularx}

\begin{document}

\lipsum[1]

\begin{table}
\caption{Tab 1}
\begin{tabularx}{\columnwidth}{|X|}
\hline
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\hline
\end{tabularx}
\end{table}

\lipsum[2]

\begin{table}
\caption{Tab 2}
\begin{tabularx}{\columnwidth}{|X|}
\hline
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\hline
\end{tabularx}
\end{table}

\lipsum[3]

\begin{table}
\caption{Tab 3}
\begin{tabularx}{\columnwidth}{|X|}
\hline
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\\
\hline
\end{tabularx}
\end{table}

\end{document}

答案1

如果您确实希望将表格放在一页上,请稍微作弊。将所有材料放在一个表格环境中。这意味着您需要将内容放在表格之间,无论是在表格前面还是在表格后面。下面是一个简单的示例。

\documentclass[twocolumn,paper=a4,fontsize=11pt,captions=tableabove]{scrbook}

\usepackage{showframe}
\usepackage{lipsum}
\usepackage{xcolor}
\usepackage{tabularx}
\colorlet{tablegray}{gray!50!white}
\newcommand{\faketable}[1]{{\color{tablegray}\rule{\linewidth}{.#1\textheight}}}
\begin{document}

\lipsum[1-2]

Now we are using a twocolumn, floating environment and put all
tables and all captions inside. This is hardwired, LaTeX will
float the *whole container* around. This might need some
readjustments.

\begin{table*}
    \begin{minipage}{0.45\textwidth}
        \caption{I am das duck}
        \faketable{3}
        \bigbreak
        \caption{I am the penguin}
        \faketable{5}
    \end{minipage}
    \hfill
    \begin{minipage}{.45\linewidth}
        \caption{I bin das Walross}
        \faketable{8}
    \end{minipage}
\end{table*}

\lipsum[2]
\lipsum[3]
\end{document}

以下是 pdflatex 为您提供的内容:

第 1 页 第2页

相关内容