O array
ambiente usa \arraystretch
(e \extrarowheight
se o array
pacote estiver carregado) para adicionar "entrelinha" entre as linhas do arquivo array
. Além disso, este espaço vertical é adicionado acima da primeira linha e abaixo da última linha.
Existe uma maneira de suprimir o espaço acima da primeira linha e abaixo da última linha, preservando ao mesmo tempo o espaço entre linhas do array
?
Compare a saída usando myarray
e mysolidarray
(que é definido \arraystretch
como 0
) conforme definido no código a seguir. Estou procurando algo entre os dois.
\documentclass{standalone}
\usepackage{array}
\usepackage{amsmath}
\newenvironment{myarray}%
{\begin{array}[t]{@{}l@{}}}%
{\end{array}}
\newenvironment{mysolidarray}%
{%
\def\arraystretch{0}%
\begin{array}[t]{@{}l@{}}
}%
{\end{array}}
\begin{document}
\fboxsep=0pt
\begin{tabular}{l}
\verb|$P + Q$|: \fbox{$P + Q$}
\\
\verb|myarray|:
\fbox{$
\begin{myarray}
P + Q
\end{myarray}
$}
\fbox{$
\begin{myarray}
P + {} \\ Q
\end{myarray}
$}
\\
\verb|mysolidarray|:
\fbox{$
\begin{mysolidarray}
P + Q
\end{mysolidarray}
$}
\fbox{$
\begin{mysolidarray}
P + {} \\ Q
\end{mysolidarray}
$}
\end{tabular}
\end{document}
Responder1
Você pode medir a matriz tipografando-a duas vezes, primeiro para obter a altura da primeira linha e depois para a profundidade da última linha.
\documentclass{article}
\usepackage{array}
\usepackage{environ}
\makeatletter
\NewEnviron{mysolidarray}[1]{%
\begingroup
\def\arraystretch{0}%
\extrarowheight=\z@
\sbox\z@{$\begin{array}[t]{#1}\BODY\end{array}$}%
\sbox\tw@{$\begin{array}[b]{#1}\BODY\end{array}$}%
\expandafter\endgroup\expandafter
\firstlineheight\the\ht\expandafter\z@\expandafter
\lastlinedepth\the\dp\tw@\relax
\sbox{\solidarraybox}{$\begin{array}[t]{#1}\BODY\end{array}\m@th$}
\ht\solidarraybox=\firstlineheight
\dp\solidarraybox=\dimexpr\dp\solidarraybox-\dp\@arstrutbox+\lastlinedepth\relax
\box\solidarraybox
}
\makeatother
\newdimen\firstlineheight
\newdimen\lastlinedepth
\newsavebox{\solidarraybox}
\begin{document}
\fboxsep=0pt
\begin{tabular}{lll}
\verb|$P + Q$| & \fbox{$P + Q$}
\\
\verb|array|&
\fbox{$
\begin{array}[t]{@{}l@{}}
P + Q
\end{array}
$}
\fbox{$
\begin{array}[t]{@{}l@{}}
P + {} \\ Q
\end{array}
$}
&\extrarowheight=2pt
\fbox{$
\begin{array}[t]{@{}l@{}}
P + Q
\end{array}
$}
\fbox{$
\begin{array}[t]{@{}l@{}}
P + {} \\ Q
\end{array}
$}
\\
\verb|mysolidarray|&
\fbox{$
\begin{mysolidarray}{@{}l@{}}
P + Q
\end{mysolidarray}
$}
\fbox{$
\begin{mysolidarray}{@{}l@{}}
P + {} \\ Q
\end{mysolidarray}
$}
&\extrarowheight=2pt
\fbox{$
\begin{mysolidarray}{@{}l@{}}
P + Q
\end{mysolidarray}
$}
\fbox{$
\begin{mysolidarray}{@{}l@{}}
P + {} \\ Q
\end{mysolidarray}
$}
\end{tabular}
\end{document}
Responder2
Você quer dizer alguma coisa \setlength{\extrarowheight}{-1pt}
?
\documentclass{standalone}
\usepackage{array}
\usepackage{amsmath}
\newenvironment{myarray}%
{ \setlength{\extrarowheight}{-1pt}
\begin{array}[t]{@{}l@{}}}%
{\end{array}}
\newenvironment{mysolidarray}%
{%
\def\arraystretch{0}%
\begin{array}[t]{@{}l@{}}
}%
{\end{array}}
\begin{document}
\fboxsep=0pt
\begin{tabular}{l}
\verb|$P + Q$|: \fbox{$P + Q$}
\\
\verb|myarray|:
\fbox{$
\begin{myarray}
P + Q
\end{myarray}
$}
\fbox{$
\begin{myarray}
P + {} \\ Q
\end{myarray}
$}
\\
\verb|mysolidarray|:
\fbox{$
\begin{mysolidarray}
P + Q
\end{mysolidarray}
$}
\fbox{$
\begin{mysolidarray}
P + {} \\ Q
\end{mysolidarray}
$}
\end{tabular}
\end{document}
Responder3
Se você não usa regras verticais (o que é recomendado de qualquer maneira), você pode usar \addlinespace[some value]
logo booktabs
após a primeira \hline e antes da última \hline da tabela para ter controle total:
\documentclass{article}
\usepackage{array, booktabs}
\usepackage{amsmath}
\usepackage[table]{xcolor}
\newenvironment{myarray}%
{\begin{array}[t]{@{}l@{}}}%
{\end{array}}
\newenvironment{mysolidarray}%
{%
\def\arraystretch{0}%
\begin{array}[t]{@{}l@{}}
}%
{\end{array}}
\begin{document}
\fboxsep=0pt
\begin{tabular}{l}
\verb|$P + Q$|: \fbox{$P + Q$}
\\
\verb|myarray|:
\fbox{$
\begin{myarray}
P + Q
\end{myarray}
$}
\fbox{$
\begin{myarray}
P + {} \\ Q
\end{myarray}
$}
\\
\verb|mysolidarray|:
\fbox{$
\begin{mysolidarray}
P + Q
\end{mysolidarray}
$}
\fbox{$
\begin{mysolidarray}
P + {} \\ Q
\end{mysolidarray}
$}
\\[3ex]
\verb|othersolidarray|:
$
\begin{array}{@{}l@{}}%
\arrayrulecolor{red}
\hline\addlinespace[-1pt]
P + Q \\ Q + P
\\
\addlinespace[-1.25pt]
\hline
\end{array}
$
$
\begin{array}{@{}l@{}}%
\arrayrulecolor{red}
\hline\addlinespace[-1pt]
P + {} \\ Q
\\
\addlinespace[-1.25pt]
\hline
\end{array}
$
\end{tabular}
\end{document}