
Ich kämpfe mit LaTeX darüber: Ich möchte in einem twocolumn
Dokument eine kleine Abbildung 1 oben in der zweiten Spalte und eine breite Abbildung 2 unten auf der Seite haben. Dieses MWE veranschaulicht dies:
\documentclass[twocolumn]{article}
\usepackage{stfloats}
\usepackage{lipsum}
%\renewcommand{\topfraction}{0.1}
\begin{document}
\global\csname @topnum\endcsname 0
\lipsum[1]
\begin{figure}[t]
\caption{Fig. 1!}
\end{figure}
\begin{figure*}[b]
\caption{Fig. 2!}
\end{figure*}
\lipsum[2-6]
\end{document}
Doch egal, was ich versuche, es scheint nicht zu funktionieren. Entweder steht Abb. 1 oben in der ersten Spalte oder die breite Abb. 2 steht auf Seite 2. Dies scheint eine Folge von
- die breite Figur muss früh in der ersten Spalte erscheinen und
- Die kleine Zahl darf nicht in der ersten Spalte erscheinen, da sie sonst dort landet.
Gibt es eine Problemumgehung? Ich weiß, dass die Nummerierung nach der Positionierung der Floats festgelegt werden kann (https://tex.stackexchange.com/a/356902/30810), aber zuerst muss die Positionierung stimmen.
Aktualisieren: Falls das hilft: Mein Problem tritt auf der letzten Seite des Dokuments auf.
Antwort1
Die figure*
Umgebung platziert ihren Inhalt am Anfang und das optionale Argument funktioniert nicht. Sie können ein \InsertBoxC
in einer Umgebung verschachteltes versuchen strip
, aus cuted
( sttools
Bundle): strip
ist eine Art lokale Einspaltenumgebung.
\documentclass[twocolumn]{article}
\usepackage{stfloats}
\usepackage[unskipbreak]{cuted}
\usepackage{lipsum}
\usepackage{graphicx, caption}
\input{insbox}
\renewcommand{\topfraction}{0.4}
\begin{document}
\lipsum[1-2]
\begin{figure}[!t]
\centering\includegraphics[scale=0.5]{Nightmare_Fussli}
\caption{Nightmare (\emph{Henry Fuseli})}
\end{figure}
\lipsum[3-4]
%
\begin{strip}
\InsertBoxC{
\includegraphics[scale =0.8]{SanRomano-all}}
\captionof{figure}{The Battle of San Romano (\emph{Paolo Uccello})}
\end{strip}
\lipsum[4-8]
\end{document}
Antwort2
Ich habe das hier probiert. Es sieht aus wie ein furchtbarer Hack, aber ich kann damit leben:
\documentclass[twocolumn]{article}
\usepackage{mwe,lipsum}
% Solution:
\usepackage{capt-of}
\newcommand{\figureTwo}[1]{\makebox[0pt][l]{\raisebox{-#1}[0pt][0pt]{\parbox{\textwidth}{
\centering
\includegraphics[scale=0.5]{example-image-16x9}
\captionof{figure}{Caption}
\label{fig:Label}
}}}}
% for Calibration:
\usepackage{stfloats}
\begin{document}
\global\csname @topnum\endcsname 0
\lipsum[1]
\begin{figure}[t]
\caption{Fig. 1!}
\end{figure}
\enlargethispage{-10\baselineskip}
% compare with and without - same thing!
\noindent\figureTwo{10cm}\indent
\lipsum[2-5]
%\end{document}
\cleardoublepage
Calibration:
\begin{figure*}[b]
\centering
\includegraphics[scale=0.5]{example-image-16x9}
\captionof{figure}{Caption}
\end{figure*}
\end{document}
\figureTwo
muss am Anfang eines Absatzes in der linken Spalte aufgerufen werden. \makebox
stellt sicher, dass das Ergebnis die Breite Null hat (und anscheinend eine einzeilige Höhe); \raisebox
verschiebt die Zahl vertikal an eine gute Position; \parbox
ist notwendig, weil \captionof
es in keinem der beiden anderen Felder funktioniert (vergleiche\captionof in einer Box). Wenn diese Kombination vereinfacht werden könnte, würde mir das auch gefallen :)
Die Kalibrierung erfolgt durch Kompilieren beider Seiten, Importieren in Inkscape, Messen des vertikalen Versatzes beider Abbildungen und 10cm
entsprechendes Anpassen der Parameter. Sollte durchgeführt werden, wenn das Dokument wirklich, wirklich fertig ist.