Platzieren Sie Figuren, nachdem Sie die Figur*-Umgebung mit fixltx2e aufgerufen haben

Platzieren Sie Figuren, nachdem Sie die Figur*-Umgebung mit fixltx2e aufgerufen haben

Ich weiß, es gibt ein paar Fragen zum Platzieren von Figuren, Tabellen, Floats im Allgemeinen, wie zum Beispiel:Tabellen/Abbildungen in der Nähe der Stelle platzieren, an der sie erwähnt werden.

Aber meine Frage ist anders. Ich verwende die IEEEtran-Vorlage. In der Mitte des Textes habe ich die figure*Umgebung aufgerufen, weil die Figur, die ich in den Händen halte, zu groß für eine Spalte ist. Diese Figur wird jedoch auf die nächste Seite verschoben. Daran ist nichts auszusetzen.

Danach habe ich die figureUmgebung verwendet, um eine weitere Figur zu platzieren. Diese neue Figur wird nach der letzten erscheinen. Ich denke jedoch, dass sie vor der vorherigen (auf der vorherigen Seite) besser aussieht, da sonst zwischen der Stelle, an der sie erscheinen soll, und der tatsächlichen Platzierung viel Text stehen würde.

Mir ist aufgefallen, dass dies nur passiert, weil ich auch fixltx2e verwende. Die logische Lösung wäre, die \usepackage{fixltx2e}Zeile zu kommentieren oder das [H]aus dem Float-Paket zu verwenden. Ich frage mich jedoch, ob es eine bessere (clevere) Möglichkeit gibt, dies zu tun und gleichzeitig die Vorteile von fixltx2e beizubehalten.

\documentclass{IEEEtran}

\usepackage{fixltx2e}
\usepackage{blindtext}
\usepackage{float}

\begin{document}

\Blindtext

\begin{figure*}
    \caption{fig1}
    \label{fig1}
\end{figure*}

\blindtext

\begin{figure}
    \caption{fig2}
    \label{fig2}
\end{figure}

\begin{figure}[H]
    \caption{fig3}
    \label{fig3}
\end{figure}


\end{document}

Antwort1

Die übliche Vorgehensweise bei diesen Problemen besteht darin, die „alten“ Definitionen von Makros zu speichern, die durch das Laden des fehlerhaften Pakets geändert wurden, und dann die alten Versionen wiederherzustellen \usepackage. Diefixltx2e-Paketändert neun Makros, die die Platzierung von Floats in Doppelspalten beeinflussen. Dieses Beispiel ändert sie zurück.

\documentclass{IEEEtran}

\makeatletter
\let\old@dblfloatplacement\@dblfloatplacement
\let\old@end@dblfloat\end@dblfloat
\let\old@doclearpage\@doclearpage
\let\old@startdblcolumn\@startdblcolumn
\let\old@addtonextcol\@addtonextcol
\let\old@addtodblcol\@addtodblcol
\let\old@addtocurcol\@addtocurcol
\let\old@xtryfc\@xtryfc
\let\old@ztryfc\@ztryfc
\usepackage{fixltx2e}
\let\@dblfloatplacement\old@dblfloatplacement
\let\end@dblfloat\old@end@dblfloat
\let\@doclearpage\old@doclearpage
\let\@startdblcolumn\old@startdblcolumn
\let\@addtonextcol\old@addtonextcol
\let\@addtodblcol\old@addtodblcol
\let\@addtocurcol\old@addtocurcol
\let\@xtryfc\old@xtryfc
\let\@ztryfc\old@ztryfc
\makeatother

\usepackage{blindtext}
\usepackage{float}

\begin{document}
\Blindtext
\begin{figure*}
\rule{0.9\textwidth}{20pt}
    \caption{fig1}
    \label{fig1}
\end{figure*}
\blindtext
\begin{figure}
\rule{0.45\textwidth}{20pt}
    \caption{fig2}
    \label{fig2}
\end{figure}
\end{document}

Es sollte angemerkt werden, dass der Float-Platzierungscode LaTeXziemlich komplex ist, daher kann ich nicht sicher sein, dass dies keine negativen Auswirkungen auf etwas anderes hat. Tatsächlich würde es mich nicht überraschen, wenn entweder egreg oder David Carlisle in Kürze auftauchen und darauf hinweisen würden, dass dieser Hack eine komplette Katastrophe ist.

verwandte Informationen