使用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

解決這些問題的通常方法是保存透過載入有問題的套件而更改的巨集的「舊」定義,然後在之後還原舊版本\usepackage.這修復ltx2e包更改了影響雙列浮動放置的九個巨集。這個例子把它們改回來。

\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 很快就出現並指出這次駭客攻擊是一場徹底的災難,我不會感到驚訝。

相關內容