线宽相同的括号

线宽相同的括号

我想创建一个矩阵,其元素是不同大小的矩阵。如果我使用\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 矩阵可以帮到你,但你不能使用rightleft 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 绘制它,使用overlayremember 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}

在此处输入图片描述

相关内容