使用 fixltx2e 调用 figure* 环境后放置图形

使用 fixltx2e 调用 figure* 环境后放置图形

我知道有几个关于放置图形、表格、浮点数的问题,例如,将表格/图片放在靠近提及的地方

但我的问题不同。我使用的是 IEEEtran 模板。我在文本中间唤起了环境,figure*因为我手中的图形对于一列来说太大了。但是,该图形被移到了下一页。这没什么问题。

完成此操作后,我使用figure环境放置了另一个图形。这个新图形将出现在最后一个图形之后。但是,我认为它放在前一个图形之前(在上一页中)看起来会更好,否则在我希望它出现的位置和实际位置之间会有很多文本。

我注意到这种情况只会发生在我还使用 fixltx2e 的时候。合理的解决方案是注释该\usepackage{fixltx2e}行或使用[H]float 包中的。但是,我想知道是否有更好的(聪明的)方法来做到这一点,同时保留 fixltx2e 的好处。

\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}

答案1

解决这些问题的通常方法是保存因加载有问题的包而更改的宏的“旧”定义,然后在之后恢复旧版本\usepackagefixltx2e 软件包更改了影响双列浮点位置的九个宏。此示例将它们改回原样。

\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}

需要注意的是,浮动放置代码LaTeX相当复杂,所以我不能肯定这不会对其他东西产生不利影响。事实上,如果 egreg 或 David Carlisle 很快出现并指出这个 hack 是一场彻底的灾难,我也不会感到惊讶。

相关内容