Ich poste heute, weil ich in einem Dokument, das ich gerade schreibe, Leerzeichen reduzieren möchte. Der Inhalt ist zweispaltig, aber ich habe schwebende Tabellen, die sich über beide Spalten erstrecken ( table*
).
Irgendwann endet der Text am Anfang der ersten Spalte einer neuen Seite. Ich möchte meine Tabelle auf dieser Seite einfügen, da sie unter dem Text viel freien Platz hat, aber wenn ich sie direkt table*
nach dem Text einfüge, landet sie stattdessen am Anfang der nächsten Seite:
Kennen Sie einen Weg, das gewünschte Verhalten zu erreichen?
Minimales funktionierendes Beispiel:
\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}
Antwort1
es scheint keine Möglichkeit zu geben, einen Float in voller Breite oben auf demErsteSeite; es werden verschiedene Mechanismen verwendet, um dies zu verhindern, und ich habe keine Problemumgehung gefunden. (Dies gilt höchstwahrscheinlich auch für die erste Seite eines neuen Kapitels in einem Buch oder Bericht. Vielleicht kennen Frank Mittelbach oder David Carlisle eine Möglichkeit, dies zu tun.)
Die Frage besagt jedoch, dass
Irgendwann endet der Text am Anfang der ersten Spalte einer neuen Seite.
ob es akzeptabel ist, den Float auf einer Seite zu platzierennachErstens ist dies möglich, indem die Eingabe für die Abbildung so weit nach vorne verschoben wird, dass sie eingelesen (und dann verzögert) wird, bevor die Seite fertig ist, die die Seite sein wirdvorhergehendediejenige, auf der die Figur gesucht wird.
Das folgende Beispiel macht das. Es ist hässlich, aber es funktioniert; es wird in Tugboat ständig verwendet. (In Tugboat besteht fast nie die Anforderung, einen solchen Float oben auf der ersten Seite zu platzieren, und wenn dies erforderlich ist, greifen wir auf einfaches Tex zurück.) Ich habe ein hinzugefügt, [t]
um anzufordern, dass der Float oben positioniert wird; das ist wahrscheinlich überflüssig, hat aber bei einigen Dokumentklassen ( amsart
zum Beispiel, aber anscheinend nicht article
) den gewünschten Effekt, wenn der Float das einzige Element auf der Seite ist.
\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}
BEARBEITEN:
Im folgenden Beispiel wird die Zahl in beiden Spalten unten auf der Seite platziert. Dies führt jedoch zu einer Meldung, dass das Feld überfüllt ist. (Ich versuche herauszufinden, wie ich das loswerde, aber es ist mir noch nicht gelungen.)
Der Ansatz besteht darin, eineeinzelne Spaltefloat irgendwo in der ersten Spalte, oberhalb der Stelle, an der es beginnen wird. in der einspaltigen float ist ein eingebettet, minipage
das die volle Seitenbreite hat. nach dem ersten Durchlauf ermitteln, um wie viel die Spalte gekürzt wurde, und irgendwo in der zweiten Spalte einNegativ \enlargethispage
Befehl, der den unteren Teil der Seite leer lässt, sodass die Abbildung in voller Breite in den leeren Bereich überläuft.
\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}
ja, es ist hässlich. Sagen Sie nicht, Sie wären nicht gewarnt worden.
zusätzlicher Vorbehalt – der vertikale Abstand kann durch Abschnittsüberschriften mit eingebauter Streckung durcheinandergebracht werden. Das macht dies zu einem iterativen Prozess. Versuchen Sie, diesen Ansatz zu vermeiden, bis Ihr Text fertig ist, und selbst dann könnte es ratsam sein, zu versuchen, einen Seitenumbruch oben auf der Seite zu „korrigieren“, auf der die Tabelle erscheinen soll.
BEARBEITEN 2:
der hier beschriebene Kludge wurde zu einem Schlepperartikel,„Platzieren eines Einschubs in voller Breite am unteren Ende von zwei Spalten“,Schlepper35:3 (2014), S. 255. (Wie alle Artikel über Schlepper in elektronischer Form unterliegt dieser Artikel einem einjährigen „Embargo“, während dessen er nur Schleppermitgliedern zur Verfügung steht; irgendwann im Spätherbst 2015 wird er für alle verfügbar sein.)
Ein wichtiger Punkt, der in dem Artikel erwähnt wird, ist, dass das stfloats
Paket, das inEine Tabelle* unten auf einer Seite einfügen?
funktioniert nur für Seitennachdie erste Seite.
Antwort2
Ich habe festgestellt, dass dies für mich am besten funktioniert, insbesondere mit einer zweispaltigen Abbildung/Tabelle am unteren Rand desErsteSeite:
% 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*}