o que estou tentando fazer é alinhar gráficos dentro de um tabularx
ambiente subfloats
.
Basicamente quero exibir um processo/fluxo de trabalho usando 5 gráficos, tendo 1-3 "conectados" e 4+5.
Este é o meu código: tentei duas abordagens diferentes, mas ambas não estão muito bem alinhadas:
\documentclass{report}
\usepackage{pifont}
\usepackage[svgnames, x11names]{xcolor}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subfig}
\usepackage{tabularx}
\newcommand\bigleftArrow{\color{Tomato2}\rotatebox[origin=c]{180}{\scalebox{2.4}[3.6]{\ding{225}}}}
\newcommand\bigrightArrow{\color{Tomato2}\rotatebox[origin=c]{0}{\scalebox{2.4}[3.6]{\ding{225}}}}
\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{figure} [h]
\begin{tabularx}{\textwidth}{@{}*{5}{>{\centering\arraybackslash}X}@{}}
\subfloat[text 1]{
\includegraphics[width=0.28\textwidth]
{example-image-a}}
&
\bigleftArrow
&
\subfloat[text 2]{
\includegraphics[width=0.28\textwidth]
{example-image-b}}
&
\bigleftArrow
&
\subfloat[text 3 is longer as the others text text text text text]{
\includegraphics[width=0.28\textwidth]
{example-image-c}}
\\
\subfloat[text 4]{
\includegraphics[width=0.28\textwidth]
{example-image}}
&
&
\bigrightArrow
&
&
\subfloat[text 5]{
\includegraphics[width=0.28\textwidth]
{example-image}}
\end{tabularx}
\captionof{figure}[]{long text 1}
\label{fig:merge}
\end{figure}
\begin{figure} [hb]
\begin{tabularx}{\textwidth}{X m{10pt} C{110pt} m{10pt} X}
\centering
\subfloat[text 1]{
\includegraphics[width=0.28\textwidth]
{example-image-a}}
&
\bigleftArrow
&
\subfloat[text 2]{
\includegraphics[width=0.28\textwidth]
{example-image-b}}
&
\bigleftArrow
&
\subfloat[text 3 is longer as the others text text text text text]{
\includegraphics[width=0.28\textwidth]
{example-image-c}}
\\
\subfloat[text4]{
\includegraphics[width=0.28\textwidth]
{example-image}}
&
&
\bigrightArrow
&
&
\subfloat[text5]{
\includegraphics[width=0.28\textwidth]
{example-image}}
\end{tabularx}
\captionof{figure}[]{long text 2}
\end{figure}
\end{document}
O problema é que quero ter as setas verticais e horizontais centralizadas em cada linha. Mas este é o meu resultado:
e é assim que deve ficar:
Alguém pode me dar uma dica sobre o alinhamento (ou outra abordagem, se necessário, para corrigir isso)?
Responder1
Você pode usar algumas combinações de \makebox
.
A \vcenterobject
macro desloca verticalmente seu argumento para que a altura seja igual à profundidade.
O \makebox[0pt]{...}
comando cria uma caixa de largura zero que ficará entre as “colunas”.
Observe que você tem vários espaços espúrios, devido a finais de linha desprotegidos. Também simplifiquei a definição das setas.
\documentclass{report}
\usepackage{pifont}
\usepackage[svgnames, x11names]{xcolor}
\usepackage{graphicx}
\usepackage{caption}
\usepackage{subfig}
\newcommand\bigleftArrow{%
\scalebox{-2.4}[3.6]{%
\color{Tomato2}\ding{225}%
}%
}
\newcommand\bigrightArrow{%
\scalebox{2.4}[3.6]{%
\color{Tomato2}\ding{225}%
}%
}
\newcommand{\vcenterobject}[1]{%
\begin{tabular}{@{}c@{}}#1\end{tabular}%
}
\begin{document}
\begin{figure}[htp]
\makebox[.33333\textwidth]{%
\subfloat[text 1]{%
\vcenterobject{%
\includegraphics[width=0.2\textwidth]{example-image-a}%
}%
}
}%
\hfill\makebox[0pt]{\vcenterobject{\bigleftArrow}}\hfill
\makebox[.33333\textwidth]{%
\subfloat[text 2]{%
\vcenterobject{%
\includegraphics[width=0.2\textwidth]{example-image-b}%
}%
}%
}%
\hfill\makebox[0pt]{\vcenterobject{\bigleftArrow}}\hfill
\makebox[.33333\textwidth]{%
\subfloat[text 3 is longer as the others text text text text text]{%
\vcenterobject{%
\includegraphics[width=0.2\textwidth]{example-image-c}%
}%
}%
}
\makebox[.33333\textwidth]{%
\subfloat[text 4]{%
\vcenterobject{%
\includegraphics[width=0.2\textwidth]{example-image}%
}%
}%
}%
\hfill\makebox[0pt]{\vcenterobject{\bigrightArrow}}\hfill
\makebox[.33333\textwidth]{%
\subfloat[text 5]{%
\vcenterobject{%
\includegraphics[width=0.2\textwidth]{example-image}%
}%
}%
}
\caption{long text 1}\label{fig:merge}
\end{figure}
\end{document}
Responder2
Do ponto de vista primitivo do TeX, você precisa fazer algo assim:
\def\vhb#1{\vtop{\hbox{#1}}}
\def\rb#1{\raise.9cm\hbox{#1}}
\begin{figure}[h]
\hbox to\hsize{%
\vhb{\subfloat[text 1]{\includegraphics[width=0.28\textwidth]{example-image-a}}}%
\hss \rb\bigleftArrow \hss
\vhb{\subfloat[text 2]{\includegraphics[width=0.28\textwidth]{example-image-b}}}%
\hss \rb\bigleftArrow \hss
\vhb{\subfloat[text 3 is longer as the others text text text text text]{
\includegraphics[width=0.28\textwidth]{example-image-c}}}%
}
\hbox to\hsize{%
\vhb{\subfloat[text 4]{\includegraphics[width=0.28\textwidth]{example-image}}}%
\hss \rb\bigrightArrow \hss
\vhb{\subfloat[text 5]{\includegraphics[width=0.28\textwidth]{example-image}}}%
}
\end{figure}