我正在与 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 页。这似乎是由于
- 宽数字必须出现在第一列的开头,并且
- 小图形不能出现在第一列,否则它会出现在该列。
有解决方法吗?我知道一旦浮动被定位,编号就可以固定(https://tex.stackexchange.com/a/356902/30810),但首先定位要正确。
更新:如果有帮助:我的问题发生在文档的最后一页。
答案1
环境figure*
将其内容放在位置顶部,并且可选参数不起作用。您可以尝试\InsertBoxC
嵌套在strip
环境中的,来自cuted
(sttools
bundle):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
相应地调整参数。应在文档真正完成后进行。