TikZ - 解释 3 维方阵行列式的计算

TikZ - 解释 3 维方阵行列式的计算

我想展示计算 3 维方阵行列式的经典技巧。这是我最初的代码。

\documentclass{article}

\usepackage{tikz}
\usepackage{nicematrix}

\begin{document}

$\begin{NiceArray}{|CCC|CC}
    a & b & c & a & b \\
    r & s & t & r & s \\
    x & y & z & x & y
    %
    \CodeAfter
    %
    \tikz\draw[blue] (1-1.south east) -- (3-3.south east) ;
\end{NiceArray}$

\end{document}

这是不需要的输出。

在此处输入图片描述

我希望路径被文本隐藏,就像下面的一样,并且我需要线条更长,如下图所示。

在此处输入图片描述

答案1

最简单的可能性是在相应的条目上添加一个填充为白色的节点。这可行,但前提是页面背景为白色(屏幕截图中不是白色)。所以我们需要避免在某些延伸部分绘制线条。有几种可能性,其中我重点关注剪辑和交叉点。

您可以使用even odd clip。因此,我们首先通过 找到入口的边界路径fit,然后使用该路径和某个大矩形执行奇偶裁剪。遮挡区域的大小取决于节点inner sepfit。拟合圆之外和大框内的所有内容都将可见。

\documentclass{article}

\usepackage{tikz}
\usepackage{nicematrix}
\usetikzlibrary{fit}
\tikzset{% https://tex.stackexchange.com/a/76216
even odd clip/.code={\pgfseteorule}}
\makeatletter
\tikzset{% https://tex.stackexchange.com/a/38995  
reuse path/.code={\pgfsyssoftpath@setcurrentpath{#1}} 
} 
\makeatother
\begin{document}

$\begin{NiceArray}{|CCC|CC}
    a & b & c & a & b \\
    r & s & t & r & s \\
    x & y & z & x & y
    %
    \CodeAfter
    \begin{tikzpicture}
     \node[inner sep=0.5pt,circle,fit=(1-1),save path=\pathA]{};
     \clip[even odd clip,reuse path=\pathA] ([xshift=-1cm,yshift=1cm]1-1)
      rectangle ([xshift=1cm,yshift=-1cm]3-3);
     \draw[semithick,blue,-latex,shorten <=-0.8em,shorten >=-0.8em] 
        (1-1.center) -- (3-3.center); 
    \end{tikzpicture}
\end{NiceArray}$

\end{document}

在此处输入图片描述

因此,如果需要的话,可以省去所有条目。

\documentclass{article}

\usepackage{tikz}
\usepackage{nicematrix}
\usetikzlibrary{arrows.meta,fit}
\tikzset{% https://tex.stackexchange.com/a/76216
even odd clip/.code={\pgfseteorule}}
\makeatletter
\tikzset{% https://tex.stackexchange.com/a/38995  
reuse path/.code={\pgfsyssoftpath@setcurrentpath{#1}} 
} 
\makeatother
\begin{document}

$\begin{NiceArray}{|CCC|CC}
    a & b & c & a & b \\
    r & s & t & r & s \\
    x & y & z & x & y
    %
    \CodeAfter
    \begin{tikzpicture}
     \node[inner sep=0.5pt,circle,fit=(1-1),save path=\pathA]{};
     \node[inner sep=0.5pt,circle,fit=(2-2),save path=\pathB]{};
     \node[inner sep=0.5pt,circle,fit=(3-3),save path=\pathC]{};
     \clip[even odd clip,reuse path=\pathA] ([xshift=-1cm,yshift=1cm]1-1)
      rectangle ([xshift=1cm,yshift=-1cm]3-3);
     \clip[even odd clip,reuse path=\pathB] ([xshift=-1cm,yshift=1cm]1-1)
      rectangle ([xshift=1cm,yshift=-1cm]3-3);
     \clip[even odd clip,reuse path=\pathC] ([xshift=-1cm,yshift=1cm]1-1)
      rectangle ([xshift=1cm,yshift=-1cm]3-3);
     \draw[semithick,blue,-{Latex[round,length=3.5pt]},shorten <=-0.8em,shorten >=-0.8em] 
        (1-1.center) -- (3-3.center); 
    \end{tikzpicture}
\end{NiceArray}$

\end{document}

在此处输入图片描述

或者,也可以使用交叉口。1

\documentclass{article}

\usepackage{tikz}
\usepackage{nicematrix}
\usetikzlibrary{fit,intersections}
\begin{document}

$\begin{NiceArray}{|CCC|CC}
    a & b & c & a & b \\
    r & s & t & r & s \\
    x & y & z & x & y
    %
    \CodeAfter
    \begin{tikzpicture}
     \node[inner sep=0.5pt,circle,fit=(1-1),draw,opacity=0,name path=circ1]{};
     \path (1-1.center) -- (3-3.center) 
        coordinate[pos=-0.2] (start) coordinate[pos=1.2] (end);
     \path[name path=line]  (start) to[bend left=0] (end);
     \draw[semithick,blue,-latex,name intersections={of=line and circ1,total=\t}]
       (start) -- \ifnum\t=2 (intersection-1) (intersection-2) --\fi
        (end);
    \end{tikzpicture}
\end{NiceArray}$

\end{document}

在此处输入图片描述

如果您想要省去几个条目,可以使用循环。

\documentclass{article}

\usepackage{tikz}
\usepackage{nicematrix}
\usetikzlibrary{arrows.meta,fit,intersections}
\begin{document}

$\begin{NiceArray}{|CCC|CC}
    a & b & c & a & b \\
    r & s & t & r & s \\
    x & y & z & x & y
    %
    \CodeAfter
    \begin{tikzpicture}
     \foreach \X in {1,2,3}{
     \node[inner sep=0.5pt,circle,fit=(\X-\X),draw,opacity=0,
        name path global=circ\X]{};
     }
     \path (1-1.center) -- (3-3.center) 
        coordinate[pos=-0.2] (start) coordinate[pos=1.2] (end);
     \path[name path=line]  (start) to[bend left=0] (end);
     \draw[semithick,blue,-{Latex[round,length=3.5pt]},
        name intersections={of=line and circ1,name=i1,total=\tA},
        name intersections={of=line and circ2,name=i2,total=\tB},
        name intersections={of=line and circ3,name=i3,total=\tC},
        ]
        (start) -- \ifnum\tA=2
        (i1-1) (i1-2) --\fi
        \ifnum\tB=2
        (i2-1) (i2-2) --\fi
        \ifnum\tC=2
        (i3-1) (i3-2) --\fi
         (end);
    \end{tikzpicture}
\end{NiceArray}$

\end{document}

在此处输入图片描述

1如果您认为我疯了,因为我用:画了一条直线,bend=0原因是否则对交叉点进行排序会更加困难:https://tex.stackexchange.com/a/418650

相关内容