環境は(パッケージがロードされている場合は)array
を使用して、の行間に「先頭」を追加します。さらに、この垂直スペースは最初の行の上と最後の行の下に追加されます。\arraystretch
\extrarowheight
array
array
行間のスペースを維持しながら、最初の行の上と最後の行の下のスペースを抑制する方法はありますかarray
?
myarray
次のコードで定義されているように、とmysolidarray
(\arraystretch
に設定)を使用して出力を比較します0
。私は 2 つの中間の値を探しています。
\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
配列を 2 回タイプセットして測定することができます。最初は最初の行の高さを取得し、次に最後の行の深さを取得します。
\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
垂直線を使用しない場合 (いずれにしても推奨されます)、 テーブルの最初の \hline の直後と最後の \hline の前に\addlinespace[some value]
from を使用して完全な制御を行うことができます。booktabs
\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}