Aggiungi spazio reale tra le righe in una tabella
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
Ecco una soluzione che utilizza \addlinespace
il pacchetto booktabs .

\addlinespace
accetta un argomento opzionale, che indica la quantità di spazio bianco verticale da inserire. Se non viene specificato alcun argomento, \defaultaddspace
viene applicato il parametro , che viene impostato 0.5em
dal 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}
Se usi {NiceTabular}
di nicematrix
, hai due opzioni cell-space-top-limit
e cell-space-bottom-limit
(i nomi sono ispirati ai parametri \cellspacetoplimit
e cellspacebottomlimit
di 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}

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}
È 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 C
se 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}
