图片标题继续在下一栏

图片标题继续在下一栏

在一个双列文档中,我有一个几乎占据整个列的图形,在列的剩余部分没有足够的空间放置标题。因此,我希望标题继续在下一列中。我尝试了几种方法,包括 \captionof 和 \contcaption(ccaption 包),但都无法获得所需的结果。我能够将整个标题移动到下一列,但我提交的期刊(The Cryosphere)的编辑人员拒绝了该解决方案。我在 photoshop 中编辑了文档的截图以说明所需的结果: 在此处输入图片描述

我想提供一个通用的最小工作示例,但我受限于期刊提供的文档类。与文档类相关的文件以及 MWE 可以下载这里。MWE的内容如下:

\documentclass[journal abbreviation]{copernicus}

%% \usepackage commands included in the copernicus.cls:
%\usepackage[german, english]{babel}
%\usepackage{tabularx}
%\usepackage{cancel}
%\usepackage{multirow}
%\usepackage{supertabular}
%\usepackage{algorithmic}
%\usepackage{algorithm}
%\usepackage{amsthm}
%\usepackage{float}
%\usepackage{subfig}
%\usepackage{rotating} 

\usepackage{blindtext}%Only used in this minimal example

\begin{document}

\begin{figure}[t]
\includegraphics[width=\columnwidth, height=0.9\textheight]{example-image}
\caption{\blindtext[2]}
\end{figure}

\blindtext[5]

\end{document}

如果图像较小(例如 0.6\textheight),它看起来像这样: 在此处输入图片描述

然而对于长图像(0.9\textheight)它看起来像这样 在此处输入图片描述

我需要图形停留在左栏,标题继续停留在右栏,如第一张图所示。

关于如何实现这一点有什么线索吗?

答案1

请注意,copernicus.cls 定义了它自己的\@makecaption

此解决方案添加了两个命令:\splitcaption\mergecaption\splitcaotion添加剩余可用空间的参数(您必须计算), \mergecaption创建一个新图形来处理标题的剩余部分(如果有)。它应在原始图形环境之后立即使用(而不是在内部)。

可以使用\afterpage将图形强制放入左列。注意:\afterpage不适用于\blindtext,可能是因为它构成了一个巨大的段落。

\documentclass[journal abbreviation]{copernicus}

%% \usepackage commands included in the copernicus.cls:
%\usepackage[german, english]{babel}
%\usepackage{tabularx}
%\usepackage{cancel}
%\usepackage{multirow}
%\usepackage{supertabular}
%\usepackage{algorithmic}
%\usepackage{algorithm}
%\usepackage{amsthm}
%\usepackage{float}
%\usepackage{subfig}
%\usepackage{rotating} 

\usepackage{blindtext}%Only used in this minimal example
\usepackage{lipsum}%forms paragraphs
\usepackage{afterpage}

\newsavebox{\splitcaptionbox}
\newlength{\splitcaptionheight}
\makeatletter
\long\def\@makesplitcaption#1#2{% see \@makecaption from copernicux.cls (figure only)
  \if@stage@final
    \vskip0.7\abovecaptionskip
    \addtolength{\splitcaptionheight}{-0.7\abovecaptionskip}%
  \else
    \vskip\abovecaptionskip\goodbreak
    \addtolength{\splitcaptionheight}{-\abovecaptionskip}%
  \fi
  \setbox\splitcaptionbox=\vbox{\interlinepenalty 0
    \reset@font\small{\bfseries#1.} #2\par}%
  \vsplit\splitcaptionbox to \splitcaptionheight
  \global\setbox\splitcaptionbox=\box\splitcaptionbox
  \if@cop@home\ifonline\ifnum\csname c@\@captype\endcsname=1 % for 1st fig or tab only
    \immediate\write\@auxout{\string\gdef\string\@num\@captype{}}%
    \hypertarget{\@captype}{}%
  \fi\fi\fi}

\newcommand{\splitcaption}[3][\empty]% #1=short caption (optional), #2=caption, #3=remaining height
 {\setlength{\splitcaptionheight}{#3}%
  \let\cop@makecaption=\@makecaption
  \let\@makecaption=\@makesplitcaption
  \ifx\empty#1\relax
    \caption{#2}%
  \else
    \caption[#1]{#2}%
  \fi
  \let\@makecaption=\cop@makecaption}
\makeatother

\newcommand{\mergecaption}{\ifdim\ht\splitcaptionbox>0pt
  \begin{figure}[tp]
  \box\splitcaptionbox
  \end{figure}
\fi}

\begin{document}

\afterpage{\begin{figure}[p]
\includegraphics[width=\columnwidth, height=0.9\textheight]{example-image}
\splitcaption{\blindtext}{0.1\textheight}
\end{figure}%
\mergecaption}

\lipsum[1-12]

\end{document}

完整页面

相关内容