有效地重新创建这个数字

有效地重新创建这个数字

我正在写一份技术文档,需要解释使用矩阵和线性方程的几个构造步骤。我很困惑如何创建我的图表,我参考的一篇论文使用了这一点: 步骤是什么样的

我必须做 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}

结果

如何得到上面的图片?

  1. 为图像的不同部分创建样式。

    • 我使用了矩阵,将其内容切换到数学模式
    • 我让矩阵绘制框架和分隔符
  2. 设置{tikzpicture}环境。

  3. 绘制带有框内变量的第一个矩阵。

    • 我们的boxed eqns风格。
    • 用括号给它命名,例如(Variables)
    • 使用\\每个变量,甚至是最后一个。
  4. 用这些值绘制第二个矩阵。

    • 我们的values风格。
    • 用括号给它命名,例如(Values)
    • 使用\\每个值,甚至是最后一个。
    • 将其放置在第一个的右侧right=of Variables
  5. 绘制包含方程式的节点。

    • 我们的equation风格。
    • 用括号给它命名,例如(Eqn)
    • 将其放置在第一个的右侧right=of Values
  6. 画箭头

    • 用于\foreach对列表中的每个项目重复执行操作{1,2,3},并将当前项目保存在 中\l
    • 设置\draw命令以->在末尾获得箭头提示。
    • 路径从 开始(Variables-\l-1),它是第一个矩阵的单元格之一。
    • 在 处结束路径(Eqn)。最佳结束位置会自动计算。

下面的图怎么得到呢?

  1. 如上所示绘制矩阵。

  2. 用于blue box around=(<node name>)构建节点或矩阵的一部分*。

  3. 用于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}

结果 2

但正如您在图片中看到的那样,这需要一些改进……

更新

你可以用一个新的宏来自动化这些事情

% \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}

相关内容