使用 tikz 包在矩阵中绘制垂直线

使用 tikz 包在矩阵中绘制垂直线

我的问题与我之前的两篇帖子有关(这里这里)我试图将答案纳入解决方案,但没有成功。

我的任务是这个矩阵乘法并附加描述: 我的任务

我目前的代码如下:

\documentclass{article}
\usepackage{tikz,amsmath} 
\begin{document}
\begin{tikzpicture}
\node[minimum height=0cm,minimum width=2cm] (m) {};
\path[shade,draw] (0,2) -- (0,5) -- (3,5) -- (3,0);
\draw (0,0) --(0,5);
\draw (3,0) --(0,2);
\draw (3,0) --(3,5);
\node (r11) at ([xshift=0.6cm,yshift=4cm]m.south) {$S_{11}$};
\node (r11) at ([xshift=2.5cm,yshift=4cm]m.south) {$S_{12}$};
\node (r11) at ([xshift=2.5cm,yshift=2.15cm]m.south) {$S_{22}$};
\node (r11) at ([xshift=0.6cm,yshift=2.15cm]m.south) {$S_{21}$};
\node (r11) at ([xshift=0.6cm,yshift=2.6cm]m.south) {$--------------$};
\node (r11) at ([xshift=0.6cm,yshift=1.5cm]m.south) {$--------------$};
\end{tikzpicture}
\[
\begin{bmatrix}
\begin{equation}
       wn_{1}           \\[0.3em]
       wn_{2}    

 \end{bmatrix}
 \]
 \end{document}    

输出如下:

我的输出

我无法添加垂直线和节点,也无法将矩阵合并到文档中(矩阵后面的矢量不居中)。节点和合并的问题与这个问题

答案1

你想要这样的东西吗?

在此处输入图片描述

我是如何做到的?

1-矩阵。

\matrix[draw,inner sep=0pt] (S) 
       [matrix of math nodes,
       nodes={outer sep=0pt,minimum width=15mm,minimum height=20mm}]
      {S_{11} & S_{12}\\ S_{21} & S_{22}\\ 0 & S_{32}\\};

Tikz 命令matrix让您定义一些节点并像在表格中一样组合它们:用 定义列,用&定义新行\\。选项drawinner sep=0pt绘制调整后的矩阵边框。如果您发表评论,inner sep您将看到差异。

matrix of math nodes(您需要 TikZ 库矩阵)允许您轻松声明节点。您不需要\node[options] (name) {$S_{11}$};对每个矩阵节点使用,只需对其包含节点使用。此库还为每个节点设置一个名称:matrix_name-column-row。由于矩阵名为S,因此具有 $S_21$ 的节点将是S-2-1

声明nodes={nodes options}所有矩阵节点的大小。在这种情况下,它们的大小是固定的,并且outer sep=0pt使矩阵边界与节点边界重合。

2 - 阴影背景

一旦声明了节点,您就会获得一些与其相关的坐标(北、西北、东……)。所以,让我们使用它们来绘制背景。我们需要backgrounds库来将任何东西绘制到 中background layer

\begin{scope}[on background layer]
\draw[shade] (S-2-1.west) |- (S-1-2.north east) |- (S-3-2.south) -- cycle;
\end{scope}

语法(S-2-1.west) |- (S-1-2.north east)意味着一条垂直线始于(S-2-1.west)并终止于 它与一条穿过 的水平线的交点处(S-1-2.north east)。然后开始一条水平线,终止于(S-1-2.north east)

3 - 水平线和垂直线

\draw[dashed,gray] (S-2-2.north east) --++(180:3cm);
\draw[dashed,gray] (S-2-2.south east) --++(180:3cm);
\draw[dashed,gray] (S-2-1.south east) --++(90:4cm);

我们确定了线的起点(S-2-2.north east)和终点++(180:3cm)。最后一个语法表示距离前一个坐标 3 厘米远的点,并且沿着方向旋转 180 度。

4 - 括号矩阵

\node[label=above:i] (wm) at ([xshift=1cm]S-2-2.east) 
{$\begin{bmatrix}wn_1\\[.3em]wn_2\end{bmatrix}$};

它只是一个位于坐标右侧1cm处的节点S-2-2.east

在查看完整代码之前,因为你想说明矩阵乘法,我建议你看一下例子:矩阵乘法来自优秀的TeXample.net

完整代码如下:

\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
\usetikzlibrary{matrix,backgrounds}

\begin{document}
\begin{tikzpicture}

\matrix[draw,inner sep=0pt] (S) [matrix of math nodes,nodes={outer sep=0pt,minimum width=15mm,minimum height=20mm}]
{S_{11} & S_{12}\\S_{21} & S_{22}\\
0 & S_{32}\\
};

\draw[dashed,gray] (S-2-2.north east) --++(180:4cm);
\draw[dashed,gray] (S-2-2.south east) --++(180:4cm);
\draw[dashed,gray] (S-2-1.south east) --++(90:5cm);

\begin{scope}[on background layer]
\draw[shade] (S-2-1.west) |- (S-1-2.north east) |- (S-3-2.south) -- cycle;
\end{scope}

\node[label=above:i] (wm) at ([xshift=1cm]S-2-2.east) {$\begin{bmatrix}wn_1\\[.3em]wn_2\end{bmatrix}$};

\node[rotate=90,above] (mobs) at (S-3-1.west) {mobs};
\node[rotate=90,above] (m) at (S-2-1.west) {m};
\end{tikzpicture}

 \end{document}

编辑:如何找到水平虚线和对角线的交点并从该点画一条垂直线?

1-在以前的代码中intersections添加库。\usetikzlibrary

2- 添加name path = name_you_like_it到水平

\draw[dashed,gray,name path=line1] (S-2-2.south east) --++(180:4cm);

和对角线

\path [name path=line2] (S-2-1.west)--(S-3-2.south);

3- 从交点画一条垂直线:

\draw [red, name intersections={of=line1 and line2}] (intersection-1) --++(90:5cm);

结果是:

在此处输入图片描述

现在我想象你必须改变所有矩阵维度,因为红线正在覆盖节点名称。如果你喜欢移动对角线,我建议阅读TikZ手册中的“教程:欧几里得的《几何原本》琥珀版”。

答案2

这里有一个方法可以做到这一点nicematrix

\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{backgrounds,calc}

\begin{document}

\newcommand\MyRule{\rule[-8mm]{0pt}{18mm}}
\begin{NiceTabular}{r*{2}{>{$}wc{12mm}<{$}}}%
   [ 
     baseline=3,
     code-before = 
      \tikz \draw[shade] (2-|2) -- ($(3-|2)!0.5!(4-|2)$) -- ($(5-|3)!0.5!(5-|4)$) -- (5-|4) |- cycle ;
   ]
                                                 \\
                       & \MyRule S_{11} & S_{12} \\
\rotate m              & \MyRule S_{21} & S_{22} \\
\rotate \clap{mobs}    & \MyRule 0      & S_{32}
\CodeAfter
    \tikz \draw (2-|2) |- (5-|4) ;
    \tikz \draw [dashed] (3-|1) -- (3-|4) (4-|1) -- (4-|4) (4-|3) -- (1-|3) ;
\end{NiceTabular}%
\quad 
$\begin{bNiceMatrix}[first-row]
\text{i} \\ wn_1\\ wn_2\\
\end{bNiceMatrix}$

\end{document}

上述代码的输出

相关内容