¿Suprimir el espacio vertical encima y debajo de la matriz?

¿Suprimir el espacio vertical encima y debajo de la matriz?

El arrayentorno utiliza \arraystretch(y \extrarowheightsi el arraypaquete está cargado) para agregar "interlineado" entre las filas del archivo array. Además, este espacio vertical se agrega encima de la primera fila y debajo de la última fila.

¿Hay alguna manera de suprimir el espacio encima de la primera fila y debajo de la última fila conservando al mismo tiempo el espacio entre filas de array?

Compare la salida usando myarrayy mysolidarray(que se establece \arraystretchen 0) como se define en el siguiente código. Estoy buscando algo entre los dos.

ingrese la descripción de la imagen aquí

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

Respuesta1

Puede medir la matriz componiéndola dos veces, primero para obtener la altura de la primera fila y luego para la profundidad de la última fila.

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

ingrese la descripción de la imagen aquí

Respuesta2

¿Quieres decir algo \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}

ingrese la descripción de la imagen aquí

Respuesta3

Si no usa reglas verticales (lo cual se recomienda de todos modos), puede usarlas \addlinespace[some value]justo booktabsdespués de la primera \hline y antes de la última \hline de la tabla para tener control 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} 

ingrese la descripción de la imagen aquí

información relacionada