我今天发帖是因为我想减少我正在写的文档中的空白。内容是两列,但我有横跨两列的浮动表格(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*}