我的问题与我之前的两篇帖子有关(这里和这里)我试图将答案纳入解决方案,但没有成功。
我的任务是这个矩阵乘法并附加描述:
我目前的代码如下:
\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
让您定义一些节点并像在表格中一样组合它们:用 定义列,用&
定义新行\\
。选项draw
并inner 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}