Aggiungi spazio reale tra le righe in una tabella

Aug 22 2020

Vorrei aggiungere un po 'di spazio tra le righe in una tabella, specificamente per evitare che le parentesi nelle mie matrici si tocchino, cfr. questo MWE:

\documentclass{article}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\begin{document}

\begin{tabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz\\
\end{tabular}

\end{document}

Ci sono molte domande su TeX.SE che chiedono come aggiungere spazio tra le righe in una tabella, e mi sembra che le risposte suggeriscano sempre di aumentare il valore di \arraystretch, vedi ad esempio questa domanda tra le tante.

Ma per quanto ne so, questo in realtà non aggiunge spazio tra le righe, semplicemente allunga le righe verticalmente. Se qualcosa riempie lo spazio verticale delle righe, come fanno le mie matrici, il contenuto di queste righe tocca ancora, cfr. sotto:

\documentclass{article}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\renewcommand{\arraystretch}{2}

\begin{document}

\begin{tabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz\\
\end{tabular}

\end{document}

Quindi la mia domanda è: c'è un modo per aggiungere veramente spazio tra le righe in una tabella (diverso dall'inserimento di righe vuote, che aggiunge troppo spazio)?

Risposte

5 Mico Aug 21 2020 at 22:26

Ecco una soluzione che utilizza \addlinespaceil pacchetto booktabs .

\addlinespaceaccetta un argomento opzionale, che indica la quantità di spazio bianco verticale da inserire. Se non viene specificato alcun argomento, \defaultaddspaceviene applicato il parametro , che viene impostato 0.5emdal pacchetto.

\documentclass{article}
\newcommand*{\mymatrix}[1]{%
  \ensuremath{\left[\begin{tabular}{@{}l@{}} #1 \end{tabular}\right]}}
\usepackage{booktabs} % for "\addlinespace" macro

\begin{document}

\begin{tabular}{*{3}{l}}
foo & bar & baz\\ 
foo & \mymatrix{top\\bottom} & baz\\ \addlinespace
foo & \mymatrix{top\\bottom} & baz\\ \addlinespace
foo & bar & baz
\end{tabular}
\end{document}
5 F.Pantigny Aug 21 2020 at 23:23

Se usi {NiceTabular}di nicematrix, hai due opzioni cell-space-top-limite cell-space-bottom-limit(i nomi sono ispirati ai parametri \cellspacetoplimite cellspacebottomlimitdi cellspace) che puoi impostare una volta per tutte e si applicheranno a tutti gli ambienti {NiceTabular}.

\documentclass{article}
\usepackage{nicematrix}
\NiceMatrixOptions{cell-space-top-limit=1pt,cell-space-bottom-limit=1pt}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\begin{document}

\begin{NiceTabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz\\
\end{NiceTabular}

\end{document}

4 jsbibra Aug 21 2020 at 22:13

Questo risolve il problema

Nessun pacchetto extra

\documentclass{article}

\newcommand*{\mymatrix}[1]{
  \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
  }%
}

\begin{document}

\begin{tabular}{*3{l}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\[8pt]
foo & \mymatrix{top\\bottom} & baz\\[8pt]
foo & bar & baz\\
\end{tabular}

\end{document}

** funziona anche la modifica aggiungendo un montante predefinito **

stesso risultato

\def\mystrut{\rule{0pt}{2\normalbaselineskip}}
\begin{tabular}{*3{l}}
    foo & bar & baz\\
    foo & \mymatrix{top\\bottom}\mystrut & baz\\[8pt]
    foo & \mymatrix{top\\bottom}\mystrut & baz\\[8pt]
    foo & bar & baz\\
\end{tabular}
3 Bernard Aug 21 2020 at 22:56

È facile ottenere ciò che desideri automaticamente con cellspace, che definisce le spaziature verticali minime nella parte superiore e inferiore delle celle in colonne con specificatore prefisso con la lettera S, o Cse carichi siunitx, o anche qualsiasi lettera che desideri tramite l' column=opzione tempo di caricamento:

\documentclass{article}
\usepackage[column=O]{cellspace}
\setlength{\cellspacetoplimit}{3pt}
\setlength{\cellspacebottomlimit}{3pt}

\newcommand*{\mymatrix}[1]{
 \ensuremath{%
    \left[\begin{tabular}{@{}l@{}}#1\end{tabular}\right]%
 }%
}

\begin{document}

\begin{tabular}{*3{Ol}}
foo & bar & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & \mymatrix{top\\bottom} & baz\\
foo & bar & baz
\end{tabular}

\end{document}