Одноколоночное плавающее размещение вверху второй колонки, двухколоночное плавающее размещение внизу страницы

Одноколоночное плавающее размещение вверху второй колонки, двухколоночное плавающее размещение внизу страницы

Я борюсь с 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окружение, из cuted( sttoolsbundle): 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соответствующей адаптации параметра. Должна быть сделана, когда документ действительно, действительно закончен.

Связанный контент