答案1
我会用蒂克兹 matrix of math nodes
执行此操作。这些矩阵提供了一种显示“装饰”矩阵的好方法。在这种情况下,您的装饰是 s \underbrace
。任何都\matrix of math nodes
可以\underbrace
在它下面放置一个,但棘手的是您需要\underbrace
在几个不同的列之间放置一个。下面的代码定义了一个,pic
用于\underbrace
在具有给定标签的指定列之间放置一个。代码生成:
以下是完整的 MWE:
\documentclass[10pt,a4paper]{report}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}
\newdimen\colL
\newdimen\colR
\tikzset{%
pics/underbrace/.style args={#1,#2,#3}{%
% a pic for putting an underbrace under certain columns
% #1 = left column
% #2 = right column index
% #3 = label text
code = {
\pgfextractx\colL{\pgfpointanchor{M-1-#1}{south}} % x-coords of columns
\pgfextractx\colR{\pgfpointanchor{M-1-#2}{south}}
% draw the delimiter with the correct width
\node[rectangle, below delimiter={\}}, minimum width=\dimexpr\colR-\colL-1pt]
at ($ (M-1-#1)!0.5!(M-1-#2) $){};
% the label
\node at ($ (M-1-#1.south)!0.5!(M-1-#2.south) $)[below=1mm]{$\scriptstyle #3$};
}
},
}
\begin{document}
\begin{tikzpicture}[auto]
\matrix (M)[matrix of math nodes,row sep=1cm,column sep=1mm]{
x! & 2x! & 3x! & \ldots & (n-x-1)x! & (n-x)x! & (x+1)!\\
};
\pic{underbrace={1,2,2}};
\pic{underbrace={2,3,\tfrac32}};
\pic{underbrace={5,6,\tfrac{n-x}{n-x-1}}};
\pic{underbrace={6,7,\tfrac{x+1}{n-x}}};
\end{tikzpicture}
\end{document}
再解释几句:
该命令
\pic{underbrace={col1,col2,text}};
有三个参数,分别是应该跨越的两列\underbrace
和括号下方的文本。我已将行索引硬编码为 row1
。添加另一个参数以允许将下括号添加到任意行将非常简单。(M)
命令中的表示\matrix (M)
矩阵的行和列可以称为M-<row index>-<column index>
。因此第一行的条目是M-1-1
,M-1-2
,...表示
0.5
这($ (M-1-1.south)!0.5!(M-1-2.south) $)
是位于两列中间的一个点1
,2