答案1
我建议使用matrix of nodes
,或matrix of math nodes
- 请参阅第 57 节蒂克兹手册。您可能需要调整它以使所有内容完美契合,但以下内容应该可以帮助您入门:
代码如下:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,calc}
\begin{document}
\begin{tikzpicture}
\matrix (M)[matrix of math nodes,
left delimiter=(,
right delimiter=),
row sep=3mm,
column sep=3mm
]{
1& 0 & 0 & 0 \\
2& 3 & 0 & 0 \\
4& 5 & 6 & 0 \\
7& 8 & 9 &10 \\
};
\foreach \row in {1,...,4} {
\foreach \col in {1,...,\row} {
\draw[rounded corners]
($ (M-\row-1.south west)+(-0.04*\col,-0.04*\col) $) rectangle
($ (M-\row-\col.north east)+(0.04*\col,0.04*\col) $);
}
}
\end{tikzpicture}
\end{document}
答案2
@Andrew 的回答略作修改,如果矩阵节点的高度不同,也可以正常工作。对于您示例中的矩阵,这不是必需的,但如果您放入分数,则可能是必需的。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix,calc,fit}
\begin{document}
\begin{tikzpicture}
\matrix (M)[matrix of math nodes,
left delimiter=(,
right delimiter=),
row sep=3mm,
column sep=3mm
]{
1& 0 & 0 & 0 \\
2& 3 & 0 & 0 \\
4& 5 & 6 & 0 \\
7& 8 & \displaystyle\frac{3}{4} &10 \\
};
\foreach \row in {1,...,4} {
\foreach \col [evaluate=\col as \prevcol using int(\col-1)] in {1,...,\row} {
\ifnum\col=1
\node[draw,inner sep=1pt,rounded corners,fit=(M-\row-1) (M-\row-\col)]
(fit-\row-\col){};
\else
\node[draw,inner sep=1pt,rounded corners,fit=(fit-\row-\prevcol) (M-\row-\col)]
(fit-\row-\col){};
\fi
}
}
\end{tikzpicture}
\end{document}