下面的代码生成 3 个彼此相邻的图像,每个图像都有一个标题,并且所有 3 个图像下方都有一个通用标题。
我的文档有一个标题,其中包含作者区块,然后是摘要和一些包含文本段落的部分。当我编译此代码时,我的文本来自介绍填满第一页,我的图像被发送到下一页的顶部。此外,该文档使用 2 列(因此后面有星号figure
)。
我怎样才能将图像放置在摘要上方、标题下方?
\documentclass{IEEEtran}
\usepackage{cite}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{algorithmic}
\usepackage{textcomp}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{float}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage[super]{nth}
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\begin{document}
\graphicspath{ {./images/} }
\title{foo}
\makeatletter
\setlength{\@fptop}{0pt}
\makeatother
\author{\IEEEauthorblockN{foo}
\IEEEauthorblockA{\textit{foo} \\
foo, foo \\
foo}
}
\maketitle
\begin{figure*}[!th]
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{11\% of full render time}
\label{fig:sceneProgressA}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{52\% of full render time}
\label{fig:sceneProgressB}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{Full render time}
\label{fig:sceneProgressC}
\end{subfigure}
\caption{Pictures of streaming progress}
\label{fig:rendering_progress}
\end{figure*}
\begin{abstract}
Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.
\end{abstract}
\section{Introduction}
Foo bar baz.
\end{document}
我尝试过什么?
float
[H]
使用after进行封装figure*
- 改变位置
\maketitle
- 使用 minipages 代替
它是什么样子的:
它看起来应该是这样的:
出于隐私考虑,我省略了大部分文本。请记住,我是 LaTeX 新手。
先感谢您。
编辑:如果将 IEEEtran 更改为文章,图像似乎会正确定位(几乎),但我认为我无法改变这一点。
答案1
您可能会遇到\@maketitle
,这是负责打印标题的宏。
但是,您应该注意以下几点:
hyperref
应该最后去caption
并且subcaption
不是兼容IEEEtran
并使用它们会导致所有标题都以 IEEE 不想要的样式排版,这可能会导致您的提交被拒绝。您可以在下图中看到,IEEE 的样式是让标题左对齐,而不是像打印的那样居中(如果您加载caption
(可能通过subcaption
))。使用
\usepackage[caption=false]{subfig}
问题就解决了。但是,子浮点数的语法有所不同,请参见代码。
我也在几个已禁用的包旁边添加了评论。
\documentclass{IEEEtran}
\usepackage{cite}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{algorithm}
\usepackage{algorithmic}
%\usepackage{textcomp}% useless
\usepackage{xcolor}
\usepackage{booktabs}
\usepackage{float}
\usepackage{graphicx}
\usepackage[super]{nth}
%\usepackage{subcaption} % not compatible with IEEEtran
\usepackage[caption=false]{subfig}
\usepackage{capt-of}
\usepackage{hyperref}% should go last
% this is just for this example
\usepackage{lipsum}
% hook into \@maketitle to add the wanted figure
\AddToHook{cmd/@maketitle/after}{\ADDINITIALFIGURE}
% the code for the figure
\newcommand{\ADDINITIALFIGURE}{%
% we want to emulate a fixed float
\begin{minipage}{\textwidth}
\vspace*{0.5\baselineskip}
% pretend we're inside figure
\expandafter\def\csname @captype\endcsname{figure}%
% insert the subfloats
\subfloat[11\% of full render time\label{fig:sceneProgressA}]{%
\includegraphics[width=0.3\textwidth]{example-image}%
}\hfill
\subfloat[52\% of full render time\label{fig:sceneProgressB}]{%
\includegraphics[width=0.3\textwidth]{example-image}%
}\hfill
\subfloat[Full render time\label{fig:sceneProgressC}]{%
\includegraphics[width=0.3\textwidth]{example-image}%
}
% the text is processed a few times, so we reset the counter each time
\setcounter{figure}{0}
\captionof{figure}{Pictures of streaming progress\label{fig:rendering_progress}}
\end{minipage}}
\graphicspath{ {./images/} }
\begin{document}
\title{foo}
\author{\IEEEauthorblockN{foo}
\IEEEauthorblockA{\textit{foo} \\
foo, foo \\
foo}
}
\maketitle
\begin{abstract}
Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.
\end{abstract}
\section{Introduction}
\lipsum[1][1-3]
\begin{figure}[ht]
\includegraphics[width=\columnwidth]{example-image}
\caption{Test caption}
\end{figure}
\lipsum
\end{document}
不相关,但不知何故,IEEE 提供的模板包含了愚蠢的部分
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
这在很多方面都是错误的,最重要的是,它完全没用。删除它。另外,该指令\graphicspath
最好放在序言中,因为它是一个全局设置。
答案2
t
LaTeX 仅通过选项and/or提供跨列浮点数p
,而不提供 。此外,包的h
选项不能与or (或其他新定义浮点数的星号版本)一起使用。H
float
figure*
table*
您可以使用这个\twocolumn
技巧并避免使用浮点数:
\documentclass{IEEEtran}
\usepackage{cite}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{algorithmic}
\usepackage{textcomp}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{float}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage[super]{nth}
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\begin{document}
\graphicspath{ {./images/} }
\title{foo}
\makeatletter
\setlength{\@fptop}{0pt}
\makeatother
\author{\IEEEauthorblockN{foo}
\IEEEauthorblockA{\textit{foo} \\
foo, foo \\
foo}
}
\twocolumn[{%
\csname @twocolumnfalse\endcsname
\maketitle
\captionsetup{type=figure}% Tell (sub)caption, that this is a figure
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{11\% of full render time}
\label{fig:sceneProgressA}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{52\% of full render time}
\label{fig:sceneProgressB}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{Full render time}
\label{fig:sceneProgressC}
\end{subfigure}
\caption{Pictures of streaming progress}
\label{fig:rendering_progress}
}]
\begin{abstract}
Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.
\end{abstract}
\section{Introduction}
Foo bar baz.
\end{document}
另外,您也可以误用\author
,但在这种情况下,您还必须手动更正图形编号:
\documentclass{IEEEtran}
\usepackage{cite}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{algorithmic}
\usepackage{textcomp}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{float}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage[super]{nth}
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\begin{document}
\graphicspath{ {./images/} }
\title{foo}
\makeatletter
\setlength{\@fptop}{0pt}
\makeatother
\author{\IEEEauthorblockN{foo}
\IEEEauthorblockA{\textit{foo} \\
foo, foo \\
foo}
\vskip 2\baselineskip
\begin{minipage}{\textwidth}
\setcounter{figure}{0}% Otherwise, you will get Fig. 3 instead of Fig. 1!!!
\captionsetup{type=figure}% Tell (sub)caption, that this is a figure
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{11\% of full render time}
\label{fig:sceneProgressA}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{52\% of full render time}
\label{fig:sceneProgressB}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{Full render time}
\label{fig:sceneProgressC}
\end{subfigure}
\caption{Pictures of streaming progress}
\label{fig:rendering_progress}
\end{minipage}
}
\maketitle
\begin{abstract}
Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.
\end{abstract}
\section{Introduction}
Foo bar baz.
\end{document}
最后但同样重要的是,您可以使用包stfloats
来放置图形在底部第一页:
\documentclass{IEEEtran}
\usepackage{cite}
\usepackage{amsmath,amssymb,amsfonts}
\usepackage{algorithmic}
\usepackage{textcomp}
\usepackage{xcolor}
\usepackage{hyperref}
\usepackage{booktabs}
\usepackage{float}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{blindtext}
\usepackage[super]{nth}
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
\usepackage{stfloats}
\begin{document}
%\graphicspath{ {./images/} }
\title{foo}
\makeatletter
\setlength{\@fptop}{0pt}
\makeatother
\author{\IEEEauthorblockN{foo}
\IEEEauthorblockA{\textit{foo} \\
foo, foo \\
foo}
}
\maketitle
\begin{figure*}[b]
\centering
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{11\% of full render time}
\label{fig:sceneProgressA}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{52\% of full render time}
\label{fig:sceneProgressB}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.3\textwidth}
\includegraphics[width=\textwidth]{example-image}
\caption{Full render time}
\label{fig:sceneProgressC}
\end{subfigure}
\caption{Pictures of streaming progress}
\label{fig:rendering_progress}
\end{figure*}
\begin{abstract}
Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.Foo bar baz.
\end{abstract}
\section{Introduction}
\Blindtext[5]
\end{document}
我在对你的问题的第一条评论中也建议使用这个包dblfloatfix
,但它似乎不适用于IEEEtran
。如果你\usepackage{stfloats}
用替换\usepackage{dblfloatfix}
,该图仍然会打印在第二页的顶部。
据我所知,没有任何包支持使用选项h
(或H
)的跨列浮动。因此,恕我直言,您需要使用技巧(又称 hacks)之一,或者在底部放置一个图形,stfloats
或者在顶部放置一个图形下一个页。