我有以下代码:
\begin{displaymath}
\begin{array}{|c|c|c|c}
p
& q
& p\lor{}q
& p\land{}q \\
\hline
0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 \\
1 & 0 & 1 & 0 \\
1 & 1 & 1 & 1 \\
\hline
\end{array}
\end{displaymath}
我想\underbrace
在最后两列下放置一个,但找不到任何 TeX/LaTex 手册说明如何执行此操作。有什么想法吗?
答案1
您需要尝试使用以下内部空间array
:
\documentclass{article}
\begin{document}
\[
\begin{array}{|c|c|c|c}
p
& q
& p\lor{}q
& p\land{}q \\
\hline
0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 \\
1 & 0 & 1 & 0 \\
1 & 1 & 1 & 1 \\
\hline
\multicolumn{1}{c}{} & \multicolumn{1}{c}{} & \multicolumn{2}{@{}l@{}}{%
\raisebox{.5\normalbaselineskip}{%
\rlap{$\underbrace{\hphantom{\mbox{$p\lor{}q$\hspace*{\dimexpr4\arraycolsep+\arrayrulewidth}$p\land{}q$}}}_{\ell}$}}%
}
\end{array}
\]
\end{document}
最后两列的宽度合计为
$p\lor{}q$
(第三列标题)$p\land{}q$
(第四列标题)4\arraycolsep
(两个标题两边各两个,共计 4 个)\arrayrulewidth
(两个标题之间)
添加\multicolumn
s 是为了删除随您的列规范插入的垂直线|c|c|c|c|
。最后,\raisebox{.5\normalbaselineskip}
将整个\underbrace
向上提升半行。
答案2
还有\upbracefill
(和\downbracefill
) 用于\leaders
构建延伸支架。例如,\hbox to 5cm{\upbracefill}
将用支架“填充”该 5 厘米长度。
\documentclass{article}
\begin{document}
\[
\begin{array}{|c|c|c|c}
p
& q
& p\lor{}q
& p\land{}q \\
\hline
0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 \\
1 & 0 & 1 & 0 \\
1 & 1 & 1 & 1 \\
\hline
\noalign{\vspace{-3pt}}
\multicolumn{2}{c}{}&
\multicolumn{2}{@{}c@{}}{${\upbracefill}$} \\
\multicolumn{2}{c}{}&
\multicolumn{2}{c}{\scriptstyle\ell} \\
\end{array}
\]
\end{document}
答案3
您还可以使用通常的过度解决方案tikz
。
笔记:
- 这确实需要两次运行。第一次确定位置,第二次进行绘图。
参考:
- 这是在 amsmath 对齐环境中过度支撑。
\VerticalOffset
已添加一个以转移支架来补偿\hline
。 - 该支架改编自在正文旁边添加一个大括号
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{decorations.pathreplacing}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand*{\BraceAmplitude}{0.5em}% Can be tweaked if
\newcommand*{\VerticalOffset}{1.2ex}% necessary.
\newcommand*{\HorizontalOffset}{0.8em}% necessary.
\newcommand*{\InsertUnderBrace}[4][]{%
\begin{tikzpicture}[overlay,remember picture]
\draw [decoration={brace,amplitude=\BraceAmplitude},decorate, thick,draw=blue,text=black,#1]
($(#3)+(\HorizontalOffset,-\VerticalOffset)$) --
($(#2)+(-\HorizontalOffset,-\VerticalOffset)$)
node [below=\VerticalOffset, midway] {#4};
\end{tikzpicture}%
}%
\begin{document}
\[
\begin{array}{|c|c|c|c}
p
& q
& p\lor{}q
& p\land{}q \\
\hline
0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 \\
1 & 0 & 1 & 0 \\
1 & 1 & \tikzmark{StartBrace}1 & 1\tikzmark{EndBrace} \\
\hline
\end{array}
\]
\InsertUnderBrace[draw=red,text=blue]{StartBrace}{EndBrace}{Explanation}
\end{document}
答案4
这是另一个蒂克兹解决方案,这次使用matrix of math nodes
。将下支撑放在正确的位置需要一些技巧pic
,但最终结果是:
当然,您可以随心所欲地添加颜色和样式!代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}
\newdimen\colL
\newdimen\colR
\tikzset{%
pics/underbrace/.style args={#1,#2,#3,#4}{%
% a pic for putting an underbrace under certain columns
% #1 = left column
% #2 = right column index
% #3 = index of the row with the underbrace
% #4 = label text
code = {
\pgfextractx\colL{\pgfpointanchor{M-#3-#1}{south west}} % x-coords of columns
\pgfextractx\colR{\pgfpointanchor{M-#3-#2}{south east}}
% draw the delimiter with the correct width
\node[rectangle, below delimiter={\}}, minimum width=\dimexpr\colR-\colL-1pt]
at ($ (M-#3-#1)!0.5!(M-#3-#2)+(0,-0.1) $){};
% the label
\node at ($ (M-#3-#1.south)!0.5!(M-#3-#2.south) $)[below=2mm]{$\scriptstyle #4$};
}
},
}
\begin{document}
\begin{center}
\begin{tikzpicture}
\matrix (M)[matrix of math nodes,
nodes={anchor=center,rectangle,
minimum width=9mm, minimum height=5mm,
inner sep=0mm
}
]{
p & q & p\lor{}q & p\land{}q \\
0 & 0 & 0 & 0 \\
0 & 1 & 1 & 0 \\
1 & 0 & 1 & 0 \\
1 & 1 & 1 & 1 \\
};
% vertical lines
\foreach \c in {1,...,4} {
\draw[thick](M-1-\c.north west)--(M-5-\c.south west);
}
% horizontal lines
\foreach \r in {1,5} {
\draw[thick](M-\r-1.south west)--(M-\r-4.south east);
}
% and, finally, the underbrace!
\pic{underbrace={3,4,5,\ell}};
\end{tikzpicture}
\end{center}
\end{document}