Centra un blocco di linee in una tabella

Aug 24 2020

Ecco un esempio:

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

Ho una tabella a due colonne e ho bisogno di centrare il testo che si estende su due colonne rimanendo allineato a sinistra.

Nel codice precedente utilizzo una multicolonna allineata a sinistra e \ hspace per indentare arbitrariamente il blocco di 20pt.

C'è un modo in cui posso fare in modo che il compilatore calcoli la larghezza / lunghezza del rientro?

Un rientro adatto per il blocco da centrare dovrebbe essere qualcosa del tipo: (larghezza della tabella - lunghezza media della riga) / 2.

Quale sarebbe il modo corretto per farlo?

Aggiornare:

Ho optato per il tabulare annidato e ho ottenuto praticamente lo stesso layout dell'originale:

Risposte

5 Bernard Aug 24 2020 at 03:40

Con stackengine, e il suo \Centerstackcomando, che può richiedere un argomento opzionale per l'allineamento (l'impostazione predefinita è c) e \addlinespace(da booktabs) per semplificare la spaziatura verticale attorno a questi blocchi:

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

Modifica : caricando eqparbox, puoi ottenere questo allineamento con il codice sottostante:

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

4 leandriis Aug 24 2020 at 02:40

Con i seguenti due piccoli accorgimenti si possono ottenere due linee che rimangono allineate l'una rispetto all'altra, ma centrate all'interno della tabella.

Nel primo esempio, ho usato una singola pcolonna di tipo centrata per entrambe le righe di testo, mentre il secondo esempio si basa su una tabella nidificata allineata a sinistra all'interno di una multicolonna centrata.

\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}
4 Zarko Aug 24 2020 at 03:48

Utilizzando \makecelle la \mboxtua tabella può essere scritta anche nel seguente modo:

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