使用代码
\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}