Centrar un bloque de líneas en una tabla

Centrar un bloque de líneas en una tabla

He aquí un ejemplo:

\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}

Tengo una tabla de dos columnas y necesito centrar el texto que abarca las dos columnas mientras permanece alineado a la izquierda.

En el código anterior utilizo una multicolumna alineada a la izquierda y \hspace para sangrar arbitrariamente el bloque en 20 puntos.

¿Hay alguna manera de que el compilador calcule el ancho/largo de la sangría?

Una sangría adecuada para centrar el bloque debería ser algo como: (ancho de la tabla - longitud promedio de la línea) / 2.

¿Cuál sería la forma correcta de hacer esto?

Actualizar:

Opté por la tabla anidada y obtuve prácticamente el mismo diseño que el original:

ingrese la descripción de la imagen aquí

Respuesta1

Con stackenginey su \Centerstackcomando, que puede tomar un argumento opcional para la alineación (el valor predeterminado es c) y \addlinespace(desde booktabs) para simplificar el espaciado vertical alrededor de estos bloques:

\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}

ingrese la descripción de la imagen aquí

Editar: cargando eqparbox, puedes obtener esta alineación con el siguiente código:

\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}

ingrese la descripción de la imagen aquí

Respuesta2

Con los siguientes dos pequeños trucos podrás conseguir dos líneas que queden alineadas a la izquierda entre sí, pero centradas dentro de la tabla.

En el primer ejemplo, he utilizado una única pcolumna de tipo centrada para ambas líneas de texto, mientras que el segundo ejemplo se basa en una tabla anidada alineada a la izquierda dentro de una columna múltiple centrada.

ingrese la descripción de la imagen aquí

\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}

Respuesta3

Usando \makecelly \mboxsu tabla también se puede escribir de la siguiente manera:

\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}

ingrese la descripción de la imagen aquí

información relacionada