单列浮动位于第二列顶部,双列浮动位于页面底部

单列浮动位于第二列顶部,双列浮动位于页面底部

我正在与 LaTeX 争论这个问题:我想在文档的twocolumn第二列顶部显示一个小的图 1,在页面底部显示一个宽的图 2。此 MWE 说明了这一点:

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

但是,无论我怎么尝试,这似乎都不起作用。要么图 1 位于第一列的顶部;要么宽图 2 位于第 2 页。这似乎是由于

  1. 宽数字必须出现在第一列的开头,并且
  2. 小图形不能出现在第一列,否则它会出现在该列。

有解决方法吗?我知道一旦浮动被定位,编号就可以固定(https://tex.stackexchange.com/a/356902/30810),但首先定位要正确。

更新:如果有帮助:我的问题发生在文档的最后一页。

答案1

环境figure*将其内容放在位置顶部,并且可选参数不起作用。您可以尝试\InsertBoxC嵌套在strip环境中的,来自cutedsttoolsbundle):strip是一种本地单列环境。

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

在此处输入图片描述

答案2

我试过这个。它看起来像一个糟糕的黑客,但我可以忍受它:

\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必须在左栏的段落开头调用。\makebox确保结果具有零宽度(和单行高度,似乎);\raisebox将图形垂直移动到合适的位置;\parbox是必要的,因为\captionof在其他两个框中都不起作用(比较\captionof 在一个框中)。如果这个组合可以简化的话,我也很乐意 :)

校准的工作原理是编译两个页面,导入 Inkscape,测量两个图形的垂直偏移,并10cm相应地调整参数。应在文档真正完成后进行。

相关内容