我正在写一份技术文档,需要解释使用矩阵和线性方程的几个构造步骤。我很困惑如何创建我的图表,我参考的一篇论文使用了这一点:
我必须做 6 或 7 个这样的图,我想知道最有效的方法是什么。每个图中的组件数量和方程的值都会有所不同。我已经知道如何单独创建矩阵和表格。我想知道如何轻松制作出这样的图。我不经常使用 latex,但如果您指出软件包、参考资料或任何材料以供参考,那将是一个很好的开始。
答案1
您可以使用 TikZ 来实现这一点,但我不确定这是否是最有效的方法,因为我不明白您的图像彼此之间会有什么不同。所以您只想更改方程式中的某些数字?
\documentclass{article}
\usepackage{tikz}
% load extra stuff
\usetikzlibrary{shapes.misc,matrix,positioning,fit}
% some settings and style definitions
\tikzset{
boxed eqns/.style={%
matrix of math nodes,
row sep=-0.4pt,
nodes={
draw,
minimum width=1cm,
minimum height=0.6cm,
},
},
values/.style={
matrix of math nodes,
left delimiter=[,
right delimiter=],
},
equation/.style={
execute at begin node={$\displaystyle},
execute at end node={$},
},
blue box around/.style={
draw,
ultra thick,
blue,
fit=#1,
inner sep=0pt,
},
cancel/.style={
cross out,
draw,
red,
ultra thick,
fit=#1,
inner xsep=10pt,
inner ysep=1pt,
},
}
\begin{document}
\begin{tikzpicture}
\matrix (Variables) [boxed eqns] {a_1\\a_2\\a_3\\};
\matrix (Values) [values,right=of Variables] {1\\2\\3\\};
\node (Eqn) [equation,right=of Values] {a_1+a_2+a_3};
\foreach \l in {1,2,3}
\draw [->] (Variables-\l-1) -- (Eqn);
\end{tikzpicture}
\begin{tikzpicture}
\matrix (Variables) [boxed eqns] {a_1\\a_2\\a_3\\};
\matrix (Values) [values,right=of Variables] {1\\2\\3\\};
\node [blue box around=(Variables-2-1)] {};
\node [cancel=(Values)] {};
\end{tikzpicture}
\end{document}
如何得到上面的图片?
为图像的不同部分创建样式。
- 我使用了矩阵,将其内容切换到数学模式
- 我让矩阵绘制框架和分隔符
设置
{tikzpicture}
环境。绘制带有框内变量的第一个矩阵。
- 我们的
boxed eqns
风格。 - 用括号给它命名,例如
(Variables)
。 - 使用
\\
后每个变量,甚至是最后一个。
- 我们的
用这些值绘制第二个矩阵。
- 我们的
values
风格。 - 用括号给它命名,例如
(Values)
。 - 使用
\\
后每个值,甚至是最后一个。 - 将其放置在第一个的右侧
right=of Variables
。
- 我们的
绘制包含方程式的节点。
- 我们的
equation
风格。 - 用括号给它命名,例如
(Eqn)
。 - 将其放置在第一个的右侧
right=of Values
。
- 我们的
画箭头
- 用于
\foreach
对列表中的每个项目重复执行操作{1,2,3}
,并将当前项目保存在 中\l
。 - 设置
\draw
命令以->
在末尾获得箭头提示。 - 路径从 开始
(Variables-\l-1)
,它是第一个矩阵的单元格之一。 - 在 处结束路径
(Eqn)
。最佳结束位置会自动计算。
- 用于
下面的图怎么得到呢?
如上所示绘制矩阵。
用于
blue box around=(<node name>)
构建节点或矩阵的一部分*。用于
cancel=(<node name>)
将十字交叉放在节点或矩阵的一部分上*。
* 矩阵的一部分是节点……
如何绘制方程组?
将此定义添加到\tikzsset
eqn system/.style={
matrix of math nodes,
nodes in empty cells,
row sep=0.1cm,
column sep=0.5cm,
draw,
nodes={
anchor=base east,
},
},
像这样使用它:
\begin{tikzpicture}
\matrix (ES) [eqn system] {
a_1 & + 2a_2 & & + 4a_4 \\
10b_1 & & & -3b_a \\
& - c_2 & + 3c_3 & \\
};
\node [blue box around=(ES-1-1) (ES-1-4)] {};
\end{tikzpicture}
但正如您在图片中看到的那样,这需要一些改进……
更新
你可以用一个新的宏来自动化这些事情
% \autodraw{<Varaibles>}{<Number of Variables>}{<Values>}{<Eqn>}
\newcommand{\autodraw}[4]{%
\begin{tikzpicture}
\matrix (Variables) [boxed eqns] {#1};
\matrix (Values) [values,right=of Variables] {#3};
\node (Eqn) [equation,right=of Values] {#4};
\foreach \l in {1,...,#2}
\draw [->] (Variables-\l-1) -- (Eqn);
\end{tikzpicture}
}
例子
\autodraw{b_1\\b_2\\b_2\\}{3}{7\\2\\5\\}{2b_1+b_2-3b_3}