
Я знаю, что есть пара вопросов о размещении фигур, таблиц, плавающих элементов в целом, например,Размещение таблиц и рисунков поблизости от места их упоминания.
Но мой вопрос в другом. Я использую шаблон 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
.пакет fixltx2eизменяет девять макросов, которые влияют на размещение двухколоночного float. Этот пример изменяет их обратно.
\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}
Следует отметить, что код размещения float LaTeX
довольно сложен, поэтому я не могу быть уверен, что это не окажет негативного влияния на что-то еще. На самом деле, я не удивлюсь, если egreg или Дэвид Карлайл вскоре появятся и укажут, что этот хак — полная катастрофа.