我正在尝试构建一个如何通过萨鲁斯规则计算 3x3 矩阵行列式的图表,经过大量研究后我已经取得了很大进展,但我仍然希望让箭头出现在数字下方,并且弯曲的箭头中间有一个带圆圈的减号,不幸的是我还没有找到这样做的方法,所以如果有人能给我指明正确的方向,我将不胜感激。
这是我正在使用的代码,结果如下。
%preamble
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{circuitikz}
\usepackage{tikz}
\newcommand\tikznode[1]{\tikz[overlay,remember picture] \node (#1) {};}
\tikzset{>=latex}
------------
%document
\begin{equation*}
\left|\begin{matrix}
\tikznode{11}2& \tikznode{12}7 & \tikznode{13}6\\
\tikznode{21}9& \tikznode{22}5 & \tikznode{23}1\\
\tikznode{31}4& \tikznode{32}3 & \tikznode{33}8
\end{matrix}
\middle|\;\begin{matrix}
\tikznode{14}2& \tikznode{15}7\\
\tikznode{24}9& \tikznode{25}5\\
\tikznode{34}4& \tikznode{35}3
\end{matrix}\right| \qquad
\begin{matrix}
4*5*6+3*1*2+8*9*7 = 630\tikznode{top}\\
\\
\\
\\
2*5*8+7*1*4+6*9*3 = 270\tikznode{btn}
\end{matrix}\qquad \qquad
270-630 = -360
\begin{tikzpicture}[overlay, remember picture]
\foreach \i in {1,2,3}
\def\e{\the\numexpr\i+2}
\draw[->,red,line width=1pt] ($(1\i.north east)+(-0.5,0.5)$) -- ($(3\e.south west)+(0.6,-0.2)$);
\foreach \i in {3,4,5}
\def\e{\the\numexpr\i-2}
\draw[<-,blue,line width=1pt] ($(1\i.north west)+(0.7,0.5)$) -- ($(3\e.south east)+(-0.4,-0.2)$);
\path[->,line width=1pt] ($(btn)+(0.25,0)$) edge[bend right=60] ($(top)+(0.25,0)$);
\end{tikzpicture}
\end{equation*}
并且期望的结果类似于以下内容(顶部和底部没有 + 和 - 符号):
答案1
道路pstricks
:
\documentclass{article}
\usepackage{pst-node}%
\begin{document}
\[ \renewcommand{\arraystretch}{1.25}
\begin{array}{|ccc|cc|}
\Rnode{a1}{2} &\Rnode{b1}{7} & \Rnode{c1}{6} & \Rnode{A1}{2} & \Rnode{B1}{7} \\
\Rnode{a2}{9} & \Rnode{b2}{5} & \Rnode{c2}{1} & \Rnode{A2}{9}& 5\\
\Rnode{a3}{4} & \Rnode{b3}{3} & \Rnode{c3}{8} & \Rnode{A3}{4} & \Rnode{B3}{3}
\end{array}
\psset{linecolor=red, nodesepA=0.5pt, nodesepB = 0.5pt, arrowinset=0.1}
\foreach \s/\t/\u in {a1/b2/c3,b1/c2/A3,c1/A2/B3} {\ncline{-}{\s}{\t}\ncline{->}{\t}{\u}}
\psset{linecolor=blue}
\foreach \s/\t/\u in {a3/b2/c1,b3/c2/A1,c3/A2/B1} {\ncline{-}{\s}{\t}\ncline{->}{\t}{\u}}
\]
\end{document}
答案2
这是一个{NiceArray}
使用 的解决方案nicematrix
。
\documentclass{article}
\usepackage{nicematrix}
\usepackage{tikz}
\begin{document}
\NiceMatrixOptions
{ pgf-node-code = \pgfsetfillcolor{white} \pgfusepathqfill }
\pgfset{nicematrix/cell-node/.append style = { inner sep = 1pt } }
$\begin{NiceArray}{|ccc|>{\color{gray}}c>{\color{gray}}c}
\CodeBefore [create-cell-nodes]
\begin{tikzpicture} [shorten < = 2pt,shorten > = 2pt]
\draw [red,->] (1-1) -- (3-3) ;
\draw [red,->] (1-2) -- (3-4) ;
\draw [red,->] (1-3) -- (3-5) ;
\draw [blue,->] (3-1) -- (1-3) ;
\draw [blue,->] (3-2) -- (1-4) ;
\draw [blue,->] (3-3) -- (1-5) ;
\end{tikzpicture}
\Body
a_{11} & a_{12} & a_{13} & a_{11} & a_{12} \\[2mm]
a_{21} & a_{22} & a_{23} & a_{21} & a_{22} \\[2mm]
a_{31} & a_{32} & a_{33} & a_{31} & a_{32} \\
\end{NiceArray}$
\end{document}
您需要多次编译(因为 PGF/Tikz 节点)。
答案3
红色和蓝色箭头本质上是矩阵中每个数字周围的基点的发挥——指南针的每个基点都是箭头起点或终点的锚点——这个想法是将每个箭头尖端偏移一点点,这样箭头就不会与矩阵中的数字相撞——例如———— 表示从数字的右上角(矩阵的第一行和第一列)\draw[->,red, line width=1pt] ($(1\i.north east)+(0.1,-0.1)$) -- ($(3\e.north)+(0,0)$);
开始箭头——偏移箭头的起点,以及——箭头的终点在——即数字(矩阵的第三行和第三列),并将箭头尖端偏移11.north east
2
0.1 cm in x direction
0.1cm down in y direction
33.north
8
(0,0)
\documentclass{article}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage{circuitikz}
\usepackage{tikz}
\newcommand\tikznode[1]{\tikz[overlay,remember picture] \node (#1) {};}
\tikzset{>=latex}
%------------
%document
\begin{document}
\begin{equation*}
\left|\begin{matrix}
\tikznode{11}2& \tikznode{12}7 & \tikznode{13}6\\
\tikznode{21}9& \tikznode{22}5 & \tikznode{23}1\\
\tikznode{31}4& \tikznode{32}3 & \tikznode{33}8
\end{matrix}
\middle|\;\begin{matrix}
\tikznode{14}2& \tikznode{15}7\\
\tikznode{24}9& \tikznode{25}5\\
\tikznode{34}4& \tikznode{35}3
\end{matrix}\right| \qquad
\begin{matrix}
4*5*6+3*1*2+8*9*7 = 630\tikznode{top}\\
\\
\\
\\
2*5*8+7*1*4+6*9*3 = 270\tikznode{btn}
\end{matrix}\qquad \qquad
270-630 = -360
\begin{tikzpicture}[overlay, remember picture]
\foreach \i in {1,2,3}
\def\e{\the\numexpr\i+2}
\draw[->,red,line width=1pt] ($(1\i.north east)+(0.1,-0.1)$) -- ($(3\e.north)+(0,0)$);
\foreach \i in {3,4,5}
\def\e{\the\numexpr\i-2}
\draw[<-,blue,line width=1pt] ($(1\i.south)+(0,0.1)$) -- ($(3\e.north east)+(0.1,0.1)$);
\path[->,line width=1pt] ($(btn)+(0.25,0)$) edge[bend right=60]node[fill=white, circle,draw](){-} ($(top)+(0.25,0)$);
\end{tikzpicture}
\end{equation*}
\end{document}