我想创建一个矩阵,其元素是不同大小的矩阵。如果我使用\left[
和\right]
作为元素,当内部矩阵大小不均匀时,括号的线宽不相等。如何使括号看起来相同?
我附加了一个最小的例子和产生的输出的图像,其中问题很明显。
\documentclass{article}
\begin{document}
\[
\left[
\begin{array}{c}
\left[\begin{array}{ccc}1&0&0\\2&0&0\\1&0&0\end{array}\right]\\
\left[\begin{array}{ccc}1&1&0\\1&1&0\end{array}\right]\\
\left[\begin{array}{ccc}1&2&1\end{array}\right]
\end{array}
\right]
\]
\end{document}
答案1
也许 TikZ 矩阵可以帮到你,但你不能使用right
和left delimeter
选项,否则你会遇到同样的问题,而是画一条合适的线。line width=...
你可以选择线条的粗细。
如果您想创建一个新命令来缩短输入时间,您必须使用ampersand replacement=\&
并使用\&
单元格分隔符,如下\mym
所示:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
mymatrix/.style={
matrix of math nodes,
inner ysep= 0pt,
nodes ={inner xsep=4pt,
inner ysep=3pt},
ampersand replacement=\&,
}
}
\newcommand{\thicklen}{2.5pt}
\newcommand{\mym}[1]{%
\begin{tikzpicture}[line width=.7pt]
\matrix[mymatrix](a){#1\\};
\draw ([xshift=\thicklen]a.north west) -- ++(-\thicklen,0) -- (a.south west) -- ++(\thicklen,0);
\draw ([xshift=-\thicklen]a.north east) -- ++(\thicklen,0) -- (a.south east) -- ++(-\thicklen,0);
\end{tikzpicture}}
\begin{document}
\[
\left[
\begin{array}{c}
\mym{1\&0\&0\\2\&0\&0\\1\&0\&0}\\
\mym{1\&1\&0\\1\&1\&0}\\
\mym{1\&2\&1}\\
\end{array}
\right]
\]
\end{document}
编辑:您可以使用来对齐节点align=center
,但也要设置,text width
否则三个矩阵可能不一致。
要对齐外部支架,您也可以使用 TikZ 绘制它,使用overlay
和remember picture
。即使此时拥有三个不同的矩阵也毫无用处。您只需一个矩阵就可以达到相同的结果,请参阅第二次编辑的解决方案。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
mymatrix/.style={
matrix of math nodes,
inner ysep= 0pt,
nodes ={
text width=1.5em,
align=center,
inner xsep=4pt,
inner ysep=3pt},
ampersand replacement=\&,
}
}
\newcommand{\thicklen}{2.5pt}
\newcommand{\mym}[2]{%
\begin{tikzpicture}[remember picture,line width=.7pt]
\matrix[mymatrix](#2){#1\\};
\draw ([xshift=\thicklen]#2.north west) -- ++(-\thicklen,0) -- (#2.south west) -- ++(\thicklen,0);
\draw ([xshift=-\thicklen]#2.north east) -- ++(\thicklen,0) -- (#2.south east) -- ++(-\thicklen,0);
\end{tikzpicture}}
\begin{document}
\[
\begin{array}{c}
\mym{123\&0\&0\\2\&0\&0\\1\&0\&0}{a}\\
\mym{1\&123\&0\\1\&1\&0}{b}\\
\mym{1\&2\&123}{c}
\end{array}
\]
\begin{tikzpicture}[overlay, remember picture, line width=1pt]
\draw ([xshift=-2*\thicklen]a.north west) -- ++(-\thicklen,0) -- ([xshift=-3*\thicklen]c.south west) -- ++(\thicklen,0);
\draw ([xshift=2*\thicklen]a.north east) -- ++(\thicklen,0) -- ([xshift=3*\thicklen]c.south east) -- ++(-\thicklen,0);
\end{tikzpicture}
\end{document}
第二次编辑:只有一个矩阵,完全在 TikZ 中绘制,您可以避免使用ampersand replacement=\&
,而且一切都更简单。
当然,你可以选择你喜欢的线宽,这里只是举个例子:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{
mymatrix/.style={
matrix of math nodes,
inner ysep= 0pt,
nodes ={
text width=1.5em,
align=center,
inner xsep=2pt,
inner ysep=3pt}
}
}
\newcommand{\thicklen}{2.5pt}
\begin{document}
\begin{tikzpicture}
\matrix[mymatrix](a){
123&0&0\\
2&0&0\\
1&0&0\\[4pt]
1&123&0\\
1&1&0\\[4pt]
1&2&123\\};
\foreach \start/\end in {1/3, 4/5, 6/6}{%
\draw[line width=.7pt] ([xshift=-\thicklen]a-\start-1.north west) -- ++(-\thicklen,0) -- ([xshift=-2*\thicklen]a-\end-1.south west) -- ++(\thicklen,0);
\draw[line width=.7pt] ([xshift=\thicklen]a-\start-3.north east) -- ++(\thicklen,0) -- ([xshift=2*\thicklen]a-\end-3.south east) -- ++(-\thicklen,0);}
\draw[line width=1pt] ([xshift=-2*\thicklen]a.north west) -- ++(-\thicklen,0) -- ([xshift=-3*\thicklen]a.south west) -- ++(\thicklen,0);
\draw[line width=1pt] ([xshift=2*\thicklen]a.north east) -- ++(\thicklen,0) -- ([xshift=3*\thicklen]a.south east) -- ++(-\thicklen,0);
\end{tikzpicture}
\end{document}