Estou postando hoje porque gostaria de reduzir o espaço em branco em um documento que estou escrevendo. O conteúdo tem duas colunas, mas tenho tabelas flutuantes que abrangem ambas as colunas ( table*
).
Em algum momento, o texto termina no início da primeira coluna de uma nova página. Gostaria de incluir minha tabela nesta página, pois ela tem muito espaço livre abaixo do texto, mas quando insiro logo table*
após o texto, ela vai para o topo da próxima página:
Você conhece uma maneira de obter o comportamento desejado?
Exemplo mínimo de trabalho:
\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}
Responder1
parece não haver como colocar um flutuador de largura total no topo doprimeiropágina; vários mecanismos são usados para evitá-lo e não encontrei uma solução alternativa. (provavelmente isso também é verdade para a primeira página de um novo capítulo de um livro ou relatório. talvez Frank Mittelbach ou David Carlisle saibam uma maneira de fazer isso.)
no entanto, a pergunta afirma que
Em algum momento, o texto termina no início da primeira coluna de uma nova página.
se é aceitável colocar o float em alguma páginadepoiso primeiro, isso é possível, movendo a entrada da figura o suficiente antes que ela seja lida (e depois atrasada) antes que a página termine, essa será a páginaprecedenteaquele em que a figura é desejada.
o exemplo a seguir fará isso. é feio, mas funciona; é usado em rebocadores o tempo todo. (o rebocador quase nunca tem a necessidade de colocar tal flutuador no topo da primeira página e, se houver tal exigência, voltamos ao texto simples.) Adicionei um [t]
para solicitar que o flutuador seja posicionado no topo ; provavelmente é redundante, mas tem o efeito desejado com algumas classes de documentos ( amsart
por exemplo, mas aparentemente não article
) se o float acabar como a única coisa na página.
\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}
EDITAR:
o exemplo abaixo colocará a figura na parte inferior da página, em ambas as colunas, ao custo de uma caixa de mensagem muito cheia. (estou tentando descobrir como me livrar disso, mas ainda não consegui.)
a abordagem é lançar umcoluna únicaflutue em algum lugar na primeira coluna, acima de onde começará. no float de coluna única está incorporado um minipage
que é a largura total da página. após a primeira execução, determine quanto a coluna foi encurtada e, em algum lugar da segunda coluna, emita umnegativo \enlargethispage
comando que deixará a parte inferior da página em branco, permitindo que a figura de largura total transborde para a área vazia.
\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}
sim, é feio. não diga que você não foi avisado.
advertência adicional - o espaçamento vertical pode ser prejudicado por títulos de seção que possuem alongamento embutido. Isso torna este um processo iterativo. tente evitar aplicar esta abordagem até que seu texto esteja finalizado e, mesmo assim, pode ser sensato tentar "consertar" uma quebra de página no topo da página em que a tabela aparecerá.
EDITAR 2:
o kludge descrito aqui tornou-se um artigo de rebocador,"colocar uma inserção de largura total na parte inferior de duas colunas",rebocador35:3 (2014), p.255. (como todos os artigos sobre rebocadores em formato eletrônico, este artigo tem um "embargo" de um ano, durante o qual estará disponível apenas para membros do rebocador; estará disponível para todos no final do outono de 2015.)
um ponto importante mencionado no artigo é que o stfloats
pacote, mencionado emColocar uma tabela* no final de uma página?
funciona apenas para páginasdepoisa primeira página.
Responder2
Achei que isso funcionava melhor para mim, especialmente com uma figura/tabela de duas colunas na parte inferior doprimeiropágina:
% 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*}