如何画图中的阶梯形矩阵?虚线得画上喔

发布于 2025-07-29 15:18:20
关注者
0
被浏览
91
4 个回答
shadow
shadow 1小时前
这个人懒得不得了,竟然啥也没写

给一个用 tikz 的 matrix 实现的方法,和上面的回答一致,但大括号用 \big 配合 \delimitershortfall 命令实现,主要用一下 \delimitershortfall

\documentclass[border=1cm,tikz]{standalone}

\usetikzlibrary {matrix, calc}

\begin{document}

\begin{tikzpicture}

  \matrix (m) [minimum width = 2em, minimum height = 3.5ex, matrix of nodes] {
    1 & 0 & 2 & 0 & -3\\

    0 & 1 & -1 & 0 & 4 \\

    0 & 0 & 0 & 1 & 1 \\

    0 & 0 & 0 & 0 & 0 \\
  };

  \draw[red, dashed] ($(m-1-1.north west)+(0.17,-0.13)$) |- (m-2-1.north east) |-(m-3-3.north east) |-($(m-4-5.north east)-(0.16,0)$);

  \delimitershortfall=-42pt
  \node at($(m.west)+(0.1,0)$) {$\big($ };
  \node at($(m.east)-(0.15,0)$) {$\big)$ };
\end{tikzpicture}

\end{document}

image.png

以上采用 node 的参数 minimum width, minimum height 控制元素的间距,使元素的间距更加均匀,也更容易控制虚线位于两列元素之间的中线位置。

使用 calc 库方便精调括号的位置。

实践中看到,delimitershortfall 的参数对括号的长度控制成梯状,比如 \delimitershortfall=-37\delimitershortfall=-42 大括号没有变化,但 \delimitershortfall=-43就会变长。

tikz 相较于 nicematrix 输出矩阵效率低,但可以调细节,各取所需。

Sagittarius Rover
Sagittarius Rover 18小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

0.提问要给代码,即使是只有矩阵的内容的代码。给代码可以大大方便别人回答。
1.在命令行输入「texdoc nicematrix」回车
2.翻到Page 69,学!

image.png

Sagittarius Rover
Sagittarius Rover 12小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

nicematrix的方案一:

\documentclass{article}
\usepackage{libertinus-otf}
\usepackage{nicematrix}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\lipsum[2]
\[
X = 
\begin{pNiceMatrix}[extra-margin=7pt,cell-space-limits=.125cm]
1\Block[borders={bottom,left,tikz=densely dashed}]{1-1}{} & 0 & 2 & 0 & -3 \\
0 & 1\Block[borders={bottom,left,tikz=densely dashed}]{1-2}{} & -1 & 0 & -4 \\
0 & 0 & 0 & 3\Block[borders={bottom,left,tikz=densely dashed}]{1-2}{} & 5 \\
0 & 0 & 0 & 0 & 0 \\
\end{pNiceMatrix}
= Y
\]
\lipsum[2]

\end{document}

image.png

Sagittarius Rover
Sagittarius Rover 12小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

niceamtrix的方案二:

同样是读文档!!

image.png

\documentclass{article}
\usepackage{libertinus-otf}
\usepackage{nicematrix}
\usepackage{tikz}
\usepackage{lipsum}
\begin{document}
\lipsum[2]
\[
X = 
\begin{pNiceMatrix}[
        create-large-nodes,
        left-margin=7pt,
        right-margin=2pt
    ]
    1 & 0 & 2 & 0 & -3 \\
    0 & 1 & -1 & 0 & -4 \\
    0 & 0 & 0 & 3 & 5 \\
    0 & 0 & 0 & 0 & 0 \\
    \CodeAfter
    \tikz \draw[densely dashed,violet]
    (1|-1) -- (1|-2) -- (2|-2) -- (2|-3) -- (4|-3) -- (4|-4) -- (6|-4)
    ;
\end{pNiceMatrix}
= Y
\]
\lipsum[2]

\end{document}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览