使用数组环境中的上/下支撑创建真值表

使用数组环境中的上/下支撑创建真值表

使用代码

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\newcolumntype{C}{>$c<$}
\begin{document}
\[
\begin{array}{C|C|C|C|C|C}
$p$ & $q$ & $p\land q$ & $\overbrace{(p\land q)\to p}^{\textbf{(a)}}$ & $p\lor q$ & $\overbrace{p\to (p\lor q)}^{\textbf{(b)}}$\\
\hline
T & T & T & T & T & T\\
T & F & F & T & T & T\\
F & T & F & T & T & T\\
F & F & F & T & F & T
\end{array}
\]
\end{document}

我得到以下信息: 在此处输入图片描述

我也可以使用

\begin{array}{C|C|C|C|C|C}
$p$ & $q$ & $p\land q$ & $(p\land q)\to p$ & $p\lor q$ & $p\to (p\lor q)$\\
\hline
T & T & T & T & T & T\\
T & F & F & T & T & T\\
F & T & F & T & T & T\\
F & F & F & $\underbrace{\text{T}}_{\textbf{(a)}}$ & F & $\underbrace{\text{T}}_{\textbf{(b)}}$
\end{array}

要得到 在此处输入图片描述

在这两种情况下,唯一的问题是我想要使用上/下支撑,但我不想让垂直线延伸到所有列。有没有办法实现上支撑效果而不让垂直条随之缩放?

注意:如果有人能为这篇文章想出一个更好的标题和/或更合适的标签,那么请将其更改为最有效的方法。

答案1

您可以使用\smash宏来将表达式\overbrace\underbrace材料括起来。

由于表格大多以文本模式设置(标题行除外),我建议您使用tabular而不是array环境。此外,考虑使用center环境,而不是将表格括在\[\]语句中。最后,您应该考虑删除表格中的所有竖线,并使用\midrule(来自booktabs包) 而不是\hline。这将为您提供更加开放的外观。

实际上,如果没有竖线,使用\smash就不是必需的。但是,我建议您保留\smash指令,以防您决定保留(或恢复)表格中的竖线。

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\usepackage{booktabs} % for "\midrule" macro
\usepackage{lipsum} % for filler text
\begin{document}
\lipsum[2]
\bigskip % some extra vertical space *above* the first "center" env.
\begin{center}
\begin{tabular}{cccccc}
$p$ & $q$ & $p\land q$ & $\smash{\overbrace{(p\land q)\to p}^{\textbf{(a)}}}$ & $p\lor q$ & $\smash{\overbrace{p\to (p\lor q)}^{\textbf{(b)}}}$\\
\midrule
T & T & T & T & T & T\\
T & F & F & T & T & T\\
F & T & F & T & T & T\\
F & F & F & T & F & T\\
\end{tabular}
\end{center}

\lipsum[2]

\begin{center}
\begin{tabular}{cccccc}
$p$ & $q$ & $p\land q$ & $(p\land q)\to p$ & $p\lor q$ & $p\to (p\lor q)$\\
\midrule
T & T & T & T & T & T\\
T & F & F & T & T & T\\
F & T & F & T & T & T\\
F & F & F & $\smash{\underbrace{\text{T}}_{\textbf{(a)}}}$ & F & $\smash{\underbrace{\text{T}}_{\textbf{(b)}}}$\\
\end{tabular}
\end{center}

\bigskip  % some extra vertical space *below* the second "center" env.
\lipsum[2]
\end{document}

答案2

为了移除“过度支撑”区域中的分割线(垂直规则),您需要将过度支撑与其引用的单元格分离,这可以通过幻像来实现。遗憾的是,单元格宽度不可用于检查或使用。

\lto我还定义了将箭头变成二进制运算符号的命令,因此具有与\land和相同的间距\lor

\documentclass{article}
\usepackage{amsmath}
\usepackage{lipsum}

\newcommand{\lto}{\mathbin{\to}}

\begin{document}

\lipsum*[2]
\[
\begin{tabular}{c*{5}{|c}}
\multicolumn{3}{c}{}&
\multicolumn{1}{c}{%
  $\overbrace{\hphantom{(p\land q)\lto p}}^{\textbf{(a)}}$%
}
&\multicolumn{1}{c}{}&
\multicolumn{1}{c}{%
  $\overbrace{\hphantom{p\lto (p\lor q)}}^{\textbf{(b)}}$%
}\\[-1ex]
$p$ & $q$ & $p\land q$ & $(p\land q)\lto p$ & $p\lor q$ & $p\to (p\lor q)$\\
\hline
T & T & T & T & T & T\\
T & F & F & T & T & T\\
F & T & F & T & T & T\\
F & F & F & T & F & T
\end{tabular}
\]
\lipsum[3]

\end{document}

在此处输入图片描述

您可以对下部支撑使用类似的技巧。

对于联结词下的复杂公式的真值有不同实现:

\documentclass{article}
\usepackage{amsmath}
\usepackage{booktabs}
\usepackage{lipsum}

\newcommand{\lto}{\mathbin{\to}}

\begin{document}

\lipsum*[2]
\[
\begin{tabular}{*{5}{c}}
\toprule
\multicolumn{5}{c}{\textbf{(a)}} \\
\midrule
$\llap{(}p$ & $\land$ & $q\rlap{)}$ & $\lto$ & $p$ \\
\midrule
% (p  AND  q)  -->  p
   T & T & T  & T & T \\
   T & F & F  & T & T \\
   F & F & T  & T & F \\
   F & F & F  & T & F \\
\bottomrule
\end{tabular}
\]
\lipsum[3]

\end{document}

在此处输入图片描述

相关内容