借楼:
在QQ群中恰有一位朋友的类似需求如下:

这里总结一些我的尝试和搜罗到的解答,也希望@u78 老师能做点补充:
方法一
尝试基于tikz的matrix库,利用网格化的node定位确保平行...但缺陷也是有的,不好方便地控制「斜线倾斜的角度」
\documentclass[tikz,border=3pt]{standalone}
\usepackage{amsmath}
\usepackage{newpxmath}
\usetikzlibrary{matrix}
\usetikzlibrary{ext.positioning-plus}
\newcommand\blind{\phantom{a_{11}}}
\begin{document}
\begin{tikzpicture}[line cap=round]
\matrix (det) [matrix of math nodes,nodes={circle}]
{
\blind & \blind & a_{11} & a_{12} & a_{13} & \blind & \blind \\
\blind & \blind & a_{21} & a_{22} & a_{23} & \blind & \blind \\
\blind & \blind & a_{31} & a_{32} & a_{33} & \blind & \blind \\
\blind & \blind & \blind & \blind & \blind & \blind & \blind \\
};
\draw[blue,dashed,thick] (det-1-3.center) -- (det-3-1.center) -- (det-4-3.ext_corner south west) -- (det-2-5.center);
\draw[blue,dashed,thick] (det-1-4.center) -- (det-3-2.center) -- (det-4-4.ext_corner south west) -- (det-3-5.center);
\draw[blue,dashed,thick] (det-1-5.center) -- (det-3-3.center);
\draw[red,thick] (det-1-4.center) -- (det-3-6.center) -- (det-4-5.ext_corner south west) -- (det-3-3.center);
\draw[red,thick] (det-1-5.center) -- (det-3-7.center) -- (det-4-6.ext_corner south west) -- (det-3-4.center);
\draw[red,thick] (det-1-3.center) -- (det-3-5.center);
\draw[thick]
(det-1-3.ext_corner north west) -- (det-3-3.ext_corner south west)
(det-1-5.ext_corner north east) -- (det-3-5.ext_corner south east)
;
\end{tikzpicture}
\end{document}
方法二
基于nicematrix的\CodeAfter.
感谢@u98900 提出的思路:为了避免使用「绝对坐标」调整,使用calc计算「差向量」来辅助定位以保证绝对的平行.
\documentclass{article}
\usepackage{newpxmath}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\setlength{\extrarowheight}{1mm}
\[
D = \begin{vNiceMatrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{32} & a_{33}\\
\CodeAfter
\begin{tikzpicture}[line cap=round]
\coordinate (vec1) at ($(3-3.center)-(1-1.center)$);
\coordinate (vec2) at ($(3-1.center)-(1-3.center)$);
\draw[blue,dashed,thick] (1-3.center) -- (3-1.center);
\draw[blue,dashed,thick] (1-1.center) -- ++(vec2) -- ++($.75*(vec1)$) -- (2-3.center);
\draw[blue,dashed,thick] (1-2.center) -- ++(vec2) -- ++($.75*(vec1)$) -- (3-3.center);
\draw[red,thick] (1-1.center) -- (3-3.center);
\draw[red,thick] (1-2.center) -- ++(vec1) -- ++($.75*(vec2)$) -- (3-1.center);
\draw[red,thick] (1-3.center) -- ++(vec1) -- ++($.75*(vec2)$) -- (2-1.center);
\end{tikzpicture}
\end{vNiceMatrix}
\]
\end{document}
Edited:
耿楠老师曾经说过:
一锤子买卖的话,没必要用代码,咋画都行。
如果后期需要维护,需要微调,需要大量复制,我建议还是上代码。
如果追求的是自由和乐趣,那就用代码思考人生。
基于nicematrix做了一点小小的自动化,如下:
% https://ask.latexstudio.net/ask/question/17826.html
\documentclass{article}
\usepackage{newpxmath}
\usepackage{nicematrix}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\pagestyle{empty}
\setlength{\extrarowheight}{1.5mm}
\ExplSyntaxOn
\def\N{8}
\def\ratio{\fpeval{\N/(2*(\N-1))}}
\[
\begin{vNiceMatrix}
% \c_math_subscript_token
\int_step_inline:nn {\N} {%
a\c_math_subscript_token{#11}%
\int_step_inline:nnn {2}{\N} {%
& a\c_math_subscript_token{#1{##1}}%
}%
\int_compare:nNnTF {#1} < {\N} {\\} {}%
}%
\CodeAfter%
\begin{tikzpicture}[line~cap=round]
% 定义主/副对角线的向量
\coordinate (main-vec) at ($(\N-\N.center)-(1-1.center)$);
\coordinate (secondary-vec) at ($(\N-1.center)-(1-\N.center)$);
% 处理副对角线方向的其他 \N-1 条虚线
\draw[orange,dashed,thick] (1-\N.center) -- (\N-1.center);
\int_step_inline:nn {\N-1} {
\draw[orange,dashed,thick,rounded~corners=5mm] (1-#1.center) --++(secondary-vec) --++($\ratio*(main-vec)$) -- (\int_eval:n{#1+1}-\N.center);
}
% 处理主对角线方向的其他 \N-1 条实线
\draw[magenta,thick] (1-1.center) -- (\N-\N.center);
\int_step_inline:nn {\N-1} {
\draw[magenta,thick,rounded~corners=5mm] (1-\int_eval:n{#1+1}.center) --++(main-vec) --++($\ratio*(secondary-vec)$) -- (\int_eval:n{\N-#1+1}-1.center);
}
\end{tikzpicture}
\end{vNiceMatrix}
\]
\ExplSyntaxOff
\end{document}

















问 三阶行列式计算图解如何画?