Centralização vertical do texto em células tabulares

Oct 27 2020

Estou tentando centralizar verticalmente algum texto em uma célula de uma tabela. Eu encontrei alguns exemplos semelhantes que fazem uso de \rotatebox. No entanto, não consigo fazer a centralização vertical funcionar. Aqui está um exemplo:

\def \figwidth {0.25\textwidth}
\setlength{\tabcolsep}{2pt}
\begin{figure*}[h]
    \centering
    \begin{tabular}{cccc}
       \toprule
        Velocity & s & q & r\\
        \midrule
        \rotatebox[origin=c]{90}{First row} & 
        \includegraphics[width=\figwidth]{example-image-a} & 
        \includegraphics[width=\figwidth]{example-image-b} & 
        \includegraphics[width=\figwidth]{example-image-c} \\
        \rotatebox[origin=c]{90}{Second} & 
        \includegraphics[width=\figwidth]{example-image-a} & 
        \includegraphics[width=\figwidth]{example-image-b} & 
        \includegraphics[width=\figwidth]{example-image-c} \\
        \bottomrule
    \end{tabular}
    \caption[EG]{Some example}
    \label{tbl:eg}
\end{figure*}

Minha saída é assim:

Caso não esteja claro, o problema é onde está escrito "Primeira linha" e "Segunda", que deve estar alinhada verticalmente com a primeira e a segunda linhas da tabela. Muito Obrigado!

Respostas

1 Mico Oct 27 2020 at 12:04

Eu sugiro que você use o mtipo de coluna, que é fornecido pelo arraypacote, em vez do ctipo de coluna para as colunas 2, 3 e 4 da tabela. O conteúdo das mcolunas -type não é apenas centralizado verticalmente; o conteúdo de outras células na linha também será centralizado verticalmente.

Um comentário rápido sobre o snippet de código \def \figwidth {0.25\textwidth}: ele simplesmente funciona para o seu código quando a macro é avaliada para um comprimento. No entanto, em outras situações, pode não funcionar muito bem, levando à perda de muito tempo ao tentar rastrear mensagens de erro criptografadas. Para evitar tais resultados, seria melhor definir \figwidthcomo uma variável de comprimento diretamente, digamos, por meio das instruções

\newlength\figwidth
\setlength\figwidth{0.25\textwidth}
 

\documentclass[twocolumn]{article}
\usepackage{graphicx,booktabs}

\newlength\figwidth
\setlength\figwidth{0.25\textwidth}

\usepackage{array}
% Set up a centered version of 'm' column type:
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}

\begin{document}
\begin{figure*}[h]
\setlength{\tabcolsep}{2pt}
    \centering
    \begin{tabular}{@{} c *{3}{C{\figwidth}} @{}}
    \toprule
    Velocity & s & q & r\\
    \addlinespace %\midrule
    \rotatebox[origin=c]{90}{First row} & 
    \includegraphics[width=\linewidth]{example-image-a} & 
    \includegraphics[width=\linewidth]{example-image-b} & 
    \includegraphics[width=\linewidth]{example-image-c} \\
    \rotatebox[origin=c]{90}{Second row} & 
    \includegraphics[width=\linewidth]{example-image-a} & 
    \includegraphics[width=\linewidth]{example-image-b} & 
    \includegraphics[width=\linewidth]{example-image-c} \\
    \bottomrule
    \end{tabular}
    \caption[EG]{Some example} \label{tbl:eg}
\end{figure*}
\end{document}
1 Zarko Oct 27 2020 at 13:55

I sugerem a utilização tabularxde mesa, definir novo tipo de coluna Ccomo \newcolumntype{C}{>{\centering\arraybackslash}X}e inserção de imagens por utilização de \adjustboxe mover as imagens da linha de base a eles central vertical por valign=cdefinido no adjustboxpacote:

\documentclass[twocolumn]{article}
\usepackage[export]{adjustbox}% it load graphicx too
\usepackage{booktabs, tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}

\begin{document}
    \begin{figure*}
\setlength{\tabcolsep}{3pt}
\adjustboxset{width=\linewidth,valign=c, margin=0pt 3pt 0pt 3pt}
    \begin{tabularx}{\linewidth}{@{} c *{3}{C} @{}}
    \toprule
Velocity & s & q & r\\
    \midrule
\rotatebox[origin=c]{90}{First row} &
    \adjustimage{}{example-image-a} &
    \adjustimage{}{example-image-b} &
    \adjustimage{}{example-image-c} \\
\rotatebox[origin=c]{90}{Second row} &
    \adjustimage{}{example-image-a} &
    \adjustimage{}{example-image-b} &
    \adjustimage{}{example-image-c} \\
    \bottomrule
    \end{tabularx}
\caption[EG]{Some example} 
\label{tbl:eg}
    \end{figure*}
\end{document}