如何将全宽表格放在与参考文本相同的双列页面的顶部或底部?

如何将全宽表格放在与参考文本相同的双列页面的顶部或底部?

我今天发帖是因为我想减少我正在写的文档中的空白。内容是两列,但我有横跨两列的浮动表格(table*)。

在某个时候,文本会在新页面的第一列开头结束。我想将表格包含在此页面中,因为它在文本下方有很多可用空间,但是当我在table*文本后面插入表格时,它会转到下一页的顶部:

您知道获得所需行为的方法吗?

最小工作示例:

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\twocolumn

\paragraph{}
\lipsum[1]

\begin{table*}
\centering
\begin{tabular}{|c|c|c|c|}
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\end{tabular}
\end{table*}%


\end{document}

答案1

似乎没有办法把一个全宽的浮动元素放在第一的页面;各种机制都被用于防止这种情况发生,但我还没有找到解决方法。(这对于书籍或报告中新章节的第一页很可能也是如此。也许 Frank Mittelbach 或 David Carlisle 知道一种方法来做到这一点。)

然而,问题指出

在某个时刻,文本会在新页面的第一列的开头结束。

是否可以接受将浮动放置在某个页面上第一种,这是可能的,通过将图形的输入移得足够早,以便在页面完成之前读入(然后延迟),这将是页面想要该图形的那个。

下面的示例将执行此操作。它很丑陋,但它有效;它一直在 tugboat 中使用。(tugboat 几乎从来没有要求将这样的浮动放在第一页的顶部,如果有这样的要求,我们会恢复为纯文本。)我添加了一个[t]以要求将浮动放置在顶部;它可能是多余的,但如果浮动最终成为页面上唯一的东西,它确实对某些文档类(amsart对于一个,但显然不是article)产生了预期的效果。

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\twocolumn

\paragraph{}
\lipsum[1-4]

%% this table should appear *before* the paragraph indicated below.
%% it is placed here in the input to force its position at the top of the next page.
\begin{table*}[t]
\centering
\begin{tabular}{|c|c|c|c|}
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\end{tabular}
\end{table*}

\lipsum[5-6]

%% the table coded above should appear at the top of the page on which
%% this paragraph appears.
\paragraph{I want the figure above this text}
\lipsum[1]

\end{document}

编辑:

下面的示例将图形放在页面底部,跨越两列,代价是出现一个过满的框消息。(我试图弄清楚如何摆脱它,但还没有成功。)

方法是启动一个单列浮动在第一列的某个位置,高于其开始的位置。在单列浮动中嵌入了一个minipage等于整个页面宽度的浮动。第一次运行后,确定列缩短了多少,然后在第二列的某个位置发出一个消极的 \enlargethispage命令会让页面的底部保持空白,从而允许全宽图形溢出到空白区域。

\documentclass{article}
\usepackage{lipsum}

\begin{document}

\twocolumn

%% avoid overfull boxes from the lipsum test.
\sloppy

\paragraph{}
\lipsum[1]

%% this table should appear at the bottom of the page.
%% it must be placed in the input somewhere near the top of the
%% first column so that it will actually appear in the first column.
\begin{table}[b]
\begin{minipage}{\textwidth}
\centering
\begin{tabular}{|c|c|c|c|}
\hline
Column 1 & Column 2 & Column 3 & Column 4 \\
\hline

Column 1 & Column 2 & Column 3 & Column 4 \\
\hline
\end{tabular}
\end{minipage}
\end{table}

%% the table coded above should appear at the bottom of the page on which
%% this paragraph appears.
\textbf{I want the figure at the bottom of the page}

\lipsum[1]

\lipsum[2]

%% somewhere in the second column, reduce the page (column) length
%% by the amount needed to clear the figure.
\enlargethispage{-4\baselineskip}

\lipsum[3-6]

\end{document}

是的,它很丑。别说你没有被警告过。

额外的警告——垂直间距可能会被内置拉伸的节标题弄乱。这使这成为一个迭代过程。尽量避免在文本最终定稿之前应用这种方法,即使那样,尝试在表格出现的页面顶部“修复”分页符也是明智之举。

编辑2:

这里描述的临时解决方案变成了一篇拖船文章,“在两列的底部放置一个全宽插入内容”拖船35:3(2014 年),第 255 页。(与所有电子版的拖船文章一样,本文也有一年的“禁运期”,在此期间仅供拖船成员使用;它将在 2015 年深秋的某个时候向所有人开放。)

文章中提到的一个重点是stfloats在页面底部放置表格*? 仅适用于页面第一页。

答案2

我发现这对我来说效果最好,尤其是在底部有两列图表/表格的情况下第一的页:

% The trick is with the following package. You **need** to use the following package.
\usepackage{nidanfloat}

% ....

% Put your figure near the first page content.
\begin{figure*}[b]
    \centering
    \def\svgwidth{\textwidth}
    \import{sections/images/}{some_figure.pdf_tex}
    \caption{Some caption.}
    \label{fig:some_label}
\end{figure*}

相关内容