O código abaixo produz 3 imagens uma ao lado da outra, com cada imagem tendo uma legenda e terminando com uma legenda geral abaixo de todas as 3 imagens.
Meu documento tem um título com bloco de autor, depois um resumo e algumas seções com parágrafos de texto. Quando compilo este código, meu texto doIntroduçãopreenche a primeira página e minhas imagens são enviadas para o topo da próxima página. Além disso, o documento usa 2 colunas (daí o asterisco depois figure
).
Como posso posicionar as imagens acima do resumo, abaixo do título?
\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}
O que eu tentei?
float
pacote usando[H]
depoisfigure*
- Mudando a posição de
\maketitle
- Use minipáginas
O que isso parece:
Como deveria ser:
Omiti a maior parte do texto por questões de privacidade. Lembre-se de que sou novo no LaTeX.
Agradeço antecipadamente.
EDITAR: Se você alterar IEEEtran para artigo, as imagens parecerão posicionadas corretamente (quase), mas não acho que possa mudar isso.
Responder1
Você pode conectar-se a \@maketitle
, essa é a macro responsável por imprimir o título.
No entanto, existem algumas coisas que você deve estar ciente:
hyperref
deveria ir por últimocaption
esubcaption
sãonãocompatível comIEEEtran
eles e seu uso faz com que todas as legendas sejam escritas em um estilo que não é desejado pelo IEEE, o que pode provocar a rejeição de seu envio. Você pode ver na imagem abaixo que o estilo do IEEE é ter as legendas alinhadas à esquerda, nunca centralizadas como se fossem impressas se você carregarcaption
(talvez através desubcaption
). Com
\usepackage[caption=false]{subfig}
o problema desaparece. No entanto, a sintaxe para subfloats é diferente, consulte o código.
Também coloquei comentários ao lado de alguns pacotes desativados.
\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}
Não é relevante, mas por razões misteriosas o modelo fornecido pelo IEEE contém a parte boba
\def\BibTeX{{\rm B\kern-.05em{\sc i\kern-.025em b}\kern-.08em
T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}}
o que é errado em muitos aspectos e, acima de tudo, é completamente inútil. Remova. Além disso, a instrução \graphicspath
está melhor colocada no preâmbulo, pois é uma configuração global.
Responder2
O LaTeX fornece flutuadores que abrangem colunas apenas com opções t
e/ou p
, mas não h
. Além disso, a opção H
de pacote float
não pode ser usada com figure*
ou table*
(ou a versão estrela de outros novos carros alegóricos definidos).
Você poderia usar o \twocolumn
truque e evitar usar um float:
\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}
Como alternativa você pode usar indevidamente \author
, mas neste caso você também terá que corrigir manualmente o número da figura:
\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}
Por último, mas não menos importante, você pode usar package stfloats
para colocar a figurano fundoda primeira página:
\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}
O pacote dblfloatfix
que também sugeri no meu primeiro comentário à sua pergunta parece não funcionar com o IEEEtran
. Se você substituir \usepackage{stfloats}
por \usepackage{dblfloatfix}
, a figura ainda será impressa no topo da segunda página.
AFAIK, não existe nenhum pacote que suporte flutuadores que abrangem colunas com a opção h
(ou H
). Então, IMHO, você precisa usar um dos truques, também conhecido como hacks, ou uma figura colocada na parte inferior stfloats
ou uma figura colocada no topo dopróximopágina.