在一个双列文档中,我有一个几乎占据整个列的图形,在列的剩余部分没有足够的空间放置标题。因此,我希望标题继续在下一列中。我尝试了几种方法,包括 \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}