重叠线

重叠线

我有以下 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包以一种很好的方式克服了这些困难,你可以像这个答案

相关内容