Подавить вертикальные пробелы над и под массивом?

Подавить вертикальные пробелы над и под массивом?

Среда arrayиспользует \arraystretch\extrarowheightесли arrayпакет загружен) для добавления "интерлиньяжа" между строками array. Кроме того, этот вертикальный пробел добавляется над первой строкой и под последней строкой.

Есть ли способ убрать пробелы над первой строкой и под последней строкой, сохранив при этом межстрочное пространство array?

Сравните вывод с использованием myarrayи mysolidarray(который устанавливает \arraystretchзначение 0), как определено в следующем коде. Я ищу что-то среднее между ними.

введите описание изображения здесь

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

решение1

Вы можете измерить массив, набрав его дважды, сначала для получения высоты первой строки, затем для получения глубины последней строки.

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

введите описание изображения здесь

решение2

Вы что-то имеете в виду \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}

введите описание изображения здесь

решение3

Если вы не используете вертикальные линии (что в любом случае рекомендуется), вы можете использовать \addlinespace[some value]from booktabsсразу после первой \hline и перед последней \hline таблицы, чтобы получить полный контроль:

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

введите описание изображения здесь

Связанный контент