对表格列使用 \underbrace

对表格列使用 \underbrace

我有以下代码:

\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(两个标题之间)

添加\multicolumns 是为了删除随您的列规范插入的垂直线|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

在此处输入图片描述

笔记:

  • 这确实需要两次运行。第一次确定位置,第二次进行绘图。

参考:

代码:

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

相关内容