我有以下 MWE:
\documentclass[class=article,border=0pt,svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,arrows.meta,matrix,backgrounds}
\begin{document}
\tikzset{%
transition/.style={
-{Triangle Cap[cap angle=100]},
line width=1pt,
black,
line join=round,
line cap=round,
opacity=1,
double=Crimson!25,
double distance=10mm},
tableau proportionnalite/.style={
draw,
matrix of math nodes,
row sep=2cm,
column sep=2cm,
nodes={
font=\Huge,
minimum width=2cm,
minimum height=2cm,
}
}
}
\begin{tikzpicture}
\matrix (tableau) [tableau proportionnalite]{
3 & 4\\
5 & A\\
};
\begin{scope}[on background layer]
\draw[transition] (tableau-2-2.center)
-- (tableau-1-1.center)
-- (tableau-1-2.center)
-- (tableau-2-1.center);
\end{scope}
\end{tikzpicture}
\end{document}
产生以下图片:
我希望读者明白,要找到 A 的值,他必须使用 3、4 和 5该命令。因此,沿着这条线的箭根本就没有达到它的目标!
但是,我无法找到一个简单的解决方案来使路径顺序更加清晰。我尝试沿着线放置一些颜色渐变(以直观地识别线的起点和终点),但我发现使用 TikZ 做这件事并不是一件简单的事情。
然后我想到了一个无法实现的解决方案:如果这条线有边框,它会使线与自身重叠。因此,线的起点和终点将完全显而易见。但正如您所见,它不起作用,因为线不与自身重叠,并且线的第一部分的边框似乎根本不在线的最后一部分的下方。此外,线的箭头末端与边框无关,这是不可接受的。
也许你们中的一些人会像往常一样有一个好主意?
提前感谢您的回答。Sylvain
编辑
我考虑过使用knots
薛定谔猫答案中建议的库,这应该可以带来更可重复的方法来完成这项工作。除了用圆形而不是四边形制作的交叉点外,它工作得很好……而且看起来很奇怪。我试过因子,clip width
但没有效果……如果我减少clip radius
,交叉点就不再可见了……
任何想法 ?
\documentclass[class=article,border=0pt,svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,arrows.meta,matrix,backgrounds,knots,positioning}
\begin{document}
\tikzset{%
transition/.style={
-{Triangle Cap[cap angle=100]},
line width=10mm,
Crimson!50,
line join=round,
line cap=round,
opacity=1,},
tableau proportionnalite/.style={
draw,
matrix of math nodes,
row sep=2cm,
column sep=2cm,
nodes={
font=\Huge,
minimum width=2cm,
minimum height=2cm,
}
},
couleur/.store in=\couleur,
couleur=NavyBlue}
\begin{tikzpicture}
\matrix[tableau proportionnalite] (tableau) {
3 & 4\\
5 & A\\
};
\begin{scope}[on background layer]
\begin{knot}[
line width=10mm,
clip radius=8mm,
background color=white,
consider self intersections,
ignore endpoint intersections=false,
only when rendering/.style={
transition
}
]
\strand (tableau-2-2.center)
-- (tableau-1-1.center)
-- (tableau-1-2.center)
-- (tableau-2-1.center);
\flipcrossings{1}
\end{knot}
\end{scope}
\end{tikzpicture}
\end{document}
答案1
我认为可以中断过渡并使其看起来更清晰。为此,我增加了矩阵的长度并将过渡分成两部分。我不得不使用\phantom
矩阵中的附加节点。
\documentclass[class=article,border=0pt,svgnames,preview]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,arrows.meta,matrix,backgrounds}
\begin{document}
\tikzset{%
transition/.style={
-{Triangle Cap[cap angle=100]},
line width=1pt,
black,
line join=round,
line cap=round,
opacity=1,
double=Crimson!25,
double distance=10mm},
capless/.style={
%-{Triangle Cap[cap angle=100]},
line width=1pt,
black,
line join=round,
line cap=round,
opacity=1,
double=Crimson!25,
double distance=10mm},
tableau proportionnalite/.style={
draw,
matrix of math nodes,
row sep=2cm,
column sep=2cm,
nodes={
font=\Huge,
minimum width=2cm,
minimum height=2cm,
}
}
}
\begin{tikzpicture}
\matrix (tableau) [tableau proportionnalite]{
3 & & & & &4\\
& & & & &\\
& & & \phantom{1pt} & &\\
& & \phantom{1pt} & & &\\
& & & & &\\
5 & & & & &A\\
};
\begin{scope}[on background layer]
\draw[capless] (tableau-6-6.center)
-- (tableau-1-1.center)
-- (tableau-1-6.center)
-- (tableau-3-4.center);
\draw[transition] (tableau-4-3.center)
-- (tableau-6-1.center);
\end{scope}
\end{tikzpicture}
\end{document}
答案2
问题在于,双重操作分为两个步骤:首先用一种颜色画一条稍粗的线,然后用另一种颜色画一条稍细的线。为了让路径与自身交叉,您可以在第二步添加一条短线。
\documentclass[class=article,border=0pt,svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,arrows.meta,matrix,backgrounds}
\begin{document}
\tikzset{%
transition line/.style={line width=1pt,
black,
double=Crimson!25,
double distance=10mm},
transition/.style={
transition line,
line join=round,
line cap=round,
opacity=1,
-{Triangle Cap[cap angle=100]}},
tableau proportionnalite/.style={
draw,
matrix of math nodes,
row sep=2cm,
column sep=2cm,
nodes={
font=\Huge,
minimum width=2cm,
minimum height=2cm,
}
}
}
\begin{tikzpicture}
\matrix (tableau) [tableau proportionnalite]{
3 & 4\\
5 & A\\
};
\begin{scope}[on background layer]
\draw[transition,shorten >=3ex,] (tableau-2-2.center)
-- (tableau-1-1.center)
-- (tableau-1-2.center)
-- (tableau-2-1.center);
\draw[transition line,shorten <=4em,shorten >=5em,
postaction={draw,line width=10mm,color=Crimson!25,shorten <=3.9em,shorten
>=4.9em}]
(tableau-1-2.center)
-- (tableau-2-1.center);
\end{scope}
\end{tikzpicture}
\end{document}
这是一个带有假箭头的版本(倾斜的图片)。
\documentclass[class=article,border=0pt,svgnames]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,backgrounds}
\begin{document}
\tikzset{%
transition line/.style={line width=1pt,
black,
double=Crimson!25,
double distance=10mm},
transition/.style={
transition line,
line join=round,
line cap=round,
opacity=1},
pics/tarot/.style={code={\pgfmathsetmacro{\pft}{#1}
\draw[fill=Crimson!25,line width=1pt,shorten >=0pt,shorten <=0pt]
(5mm,\pft pt) -- (0pt,\pft pt) -- ({-cos(50)*\pft pt},0)
-- (0pt,-\pft pt) -- (5mm,-\pft pt); }},
tableau proportionnalite/.style={
draw,
matrix of math nodes,
row sep=2cm,
column sep=2cm,
nodes={
font=\Huge,
minimum width=2cm,
minimum height=2cm,
}
}
}
\begin{tikzpicture}
\matrix (tableau) [tableau proportionnalite]{
3 & 4\\
5 & A\\
};
\begin{scope}[on background layer]
\draw[transition,shorten >=7ex,] (tableau-2-2.center)
-- (tableau-1-1.center)
-- (tableau-1-2.center)
-- (tableau-2-1.center);
\draw[transition line,shorten <=4em,shorten >=6em,
postaction={draw,line width=10mm,color=Crimson!25,shorten <=3.9em,shorten
>=4.9em}]
(tableau-1-2.center)
-- (tableau-2-1.center) pic[pos=0.87,sloped]{tarot={5mm+0.5pt}};
\end{scope}
\end{tikzpicture}
\end{document}
请注意knots
包以一种很好的方式克服了这些困难,你可以像这个答案。