Centralize um bloco de linhas em uma tabela

Centralize um bloco de linhas em uma tabela

Aqui está um exemplo:

\documentclass{article}
\usepackage[papersize={4.8 in, 6.4 in}, top=0.10cm, bottom=0.5cm, right=0.2cm, left=0.2cm]{geometry}
\begin{document}
\begin{center}
\scriptsize
\begin{tabular}{|l|l|}
\multicolumn{2}{c}{\enspace}                                                                       \\
left-aligned text in column 1                & left-aligned text in column 2                       \\
left-aligned text in column 1                & left-aligned text in column 2                       \\
\multicolumn{2}{c}{\enspace}                                                                       \\
\multicolumn{2}{l}{\hspace{20pt} short line (left-aligned centered block)}                         \\
\multicolumn{2}{l}{\hspace{20pt} now a longer (line in the same left-aligned centered block)}      \\
\multicolumn{2}{c}{\enspace}                                                                       \\
\multicolumn{2}{c}{short line (centered, not left-aligned)}                                        \\
\multicolumn{2}{c}{this is a longer line (centered, not left-aligned)}                             \\
\multicolumn{2}{c}{\enspace}                                                                       \\
left-aligned text in column 1                & left-aligned text in column 2                       \\
left-aligned text in column 1                & left-aligned text in column 2                       \\
\end{tabular}
\end{center}

\end{document}

Eu tenho uma tabela de duas colunas e preciso centralizar o texto que abrange as duas colunas enquanto permanece alinhado à esquerda.

No código acima eu uso uma multicoluna alinhada à esquerda e \hspace para recuar arbitrariamente o bloco em 20 pontos.

Existe alguma maneira de o compilador calcular a largura/comprimento do recuo?

Um recuo adequado para o bloco ser centralizado deve ser algo como: (largura da tabela - comprimento médio da linha) /2.

Qual seria a maneira correta de fazer isso?

Atualizar:

Optei pelo tabular aninhado e obtive praticamente o mesmo layout do original:

insira a descrição da imagem aqui

Responder1

With stackengine, e seu \Centerstackcomando, que pode receber um argumento opcional para o alinhamento (o padrão é c) e \addlinespace(from booktabs) para simplificar o espaçamento vertical em torno desses blocos:

\documentclass{article}
\usepackage[papersize={4.8 in, 6.4 in}, top=0.10cm, bottom=0.5cm, hmargin=0.2cm]{geometry}
\usepackage{booktabs}
\usepackage[usestackEOL]{stackengine}

\begin{document}

\begin{center}
\scriptsize\setlength{\defaultaddspace}{2.7ex}
\begin{tabular}{|l|l|}
\multicolumn{2}{c}{\enspace} \\
left-aligned text in column 1 & left-aligned text in column 2 \\
left-aligned text in column 1 & left-aligned text in column 2 \\
\addlinespace
\multicolumn{2}{c}{\Centerstack[l]{short line (left-aligned centered block) \\
now a longer (line in the same left-aligned centered block)}} \\
\addlinespace
\multicolumn{2}{c}{\Centerstack{short line (centered, not left-aligned) \\
this is a longer line (centered, not left-aligned)}} \\
\addlinespace
left-aligned text in column 1 & left-aligned text in column 2 \\
left-aligned text in column 1 & left-aligned text in column 2 \\
\end{tabular}
\end{center}

\end{document}

insira a descrição da imagem aqui

Editar: carregando eqparbox, você pode obter esse alinhamento com o código abaixo:

\begin{center}
\scriptsize\setlength{\defaultaddspace}{2.7ex}
\begin{tabular}{|l|l|}
\multicolumn{2}{c}{\enspace} \\
left-aligned text in column 1 & left-aligned text in column 2 \\
left-aligned text in column 1 & left-aligned text in column 2 \\
\addlinespace
\multicolumn{2}{c}{\eqparbox{LC}{\Centerstack[l]{short line (left-aligned centered block) \\
now a longer (line in the same left-aligned centered block)}}} \\
\addlinespace
\multicolumn{2}{c}{\eqparbox{LC}{\Centerstack[l]{short line (centered, not left-aligned) \\
this is a longer line (centered, not left-aligned)}}} \\
\addlinespace
left-aligned text in column 1 & left-aligned text in column 2 \\
left-aligned text in column 1 & left-aligned text in column 2 \\
\end{tabular}
\end{center}

insira a descrição da imagem aqui

Responder2

Com os dois pequenos truques a seguir, você pode obter duas linhas alinhadas à esquerda uma em relação à outra, mas centralizadas na tabela.

No primeiro exemplo, usei uma única pcoluna de tipo centralizada para ambas as linhas de texto, enquanto o segundo exemplo é baseado em uma tabela aninhada alinhada à esquerda dentro de uma multicoluna centralizada.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{array}
\usepackage{makecell}
\usepackage[papersize={4.8 in, 6.4 in}, top=0.10cm, bottom=0.5cm, right=0.2cm, left=0.2cm]{geometry}
\begin{document}
\begin{center}
\scriptsize
\begin{tabular}{|l|l|}
\multicolumn{2}{c}{\enspace}                                                                             \\
left-aligned text in column 1   & left-aligned text in column 2                                          \\
left-aligned text in column 1   & left-aligned text in column 2                                          \\
\multicolumn{2}{c}{}                                                                                     \\
\multicolumn{2}{>{\centering\arraybackslash}p{8cm}}{short line (centered, not left-aligned) 
                                                    \newline 
                                                    this is a longer line (centered, not left-aligned)}  \\
\multicolumn{2}{c}{}                                                                                     \\
left-aligned text in column 1   & left-aligned text in column 2                                          \\
left-aligned text in column 1   & left-aligned text in column 2                                          \\
\multicolumn{2}{c}{}                                                                                     \\
\multicolumn{2}{c}{\begin{tabular}{@{}l@{}} 
                     short line (centered, not left-aligned) \\ 
                     this is a longer line (centered, not left-aligned)
                   \end{tabular}}                                                                        \\
\multicolumn{2}{c}{}                                                                                     \\
left-aligned text in column 1   & left-aligned text in column 2                                          \\
left-aligned text in column 1   & left-aligned text in column 2                                          \\
\end{tabular}
\end{center}

\end{document}

Responder3

Usando \makecelle \mboxsua tabela pode ser escrita também da seguinte forma:

\documentclass{article}
\usepackage[papersize={4.8 in, 6.4 in}, 
            top=0.10cm, bottom=0.5cm, right=0.2cm, left=0.2cm]{geometry}
\usepackage{array, makecell}
\usepackage{xparse}
\NewExpandableDocumentCommand\mcc{O{2}m}
    {\multicolumn{#1}{c}{#2}}

\begin{document}
    \begin{center}
\scriptsize
\begin{tabular}{|l|l|}
\mcc{}                                                          \\
left-aligned text in column 1   & left-aligned text in column 2 \\
left-aligned text in column 1   & left-aligned text in column 2 \\
\mcc{}                                                          \\
\mcc{\mbox{%
     \makecell[l]{short line (centered, not left-aligned)\\
                  this is a longer line 
                  (centered, not left-aligned)}}
     }                                                          \\
\mcc{}                                                          \\
left-aligned text in column 1   & left-aligned text in column 2 \\
left-aligned text in column 1   & left-aligned text in column 2 \\
\mcc{}                                                          \\
\mcc{short line (centered, not left-aligned)}                   \\
\mcc{this is a longer line (centered, not left-aligned)}        \\
\mcc{}                                                          \\
left-aligned text in column 1   & left-aligned text in column 2 \\
left-aligned text in column 1   & left-aligned text in column 2 \\
\end{tabular}
    \end{center}
\end{document}

insira a descrição da imagem aqui

informação relacionada