5

Is there a way to draw a dashed pattern between two nodes taking the middle point of these two nodes as the center point?

This is my code:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsthm,amsmath,amssymb,authblk,tikz,graphicx}
\usetikzlibrary{shapes,decorations,circuits.logic.US,circuits.logic.IEC,fit,external}
\tikzstyle{loosely dashed}=[dash pattern=on 4pt off 8pt]
\tikzstyle{loosely dashed2}=[dash pattern=on 4pt off 8pt]

\begin{document}

\begin{figure}
    \centering
    \begin{tikzpicture}[every node/.style = {draw=none, text=black, circle, minimum size = 13mm, fill=gray!25}]
        \path
        (0,3) node(y) {$Y$}
        (-1.5,0) node[draw, line width=1pt](x1) {$X_1$}
        (1.5,0) node[draw, line width=1pt](x2) {$X_2$};
        \draw [line width=1pt,-,black] (y) -- (x1);
        \draw [line width=1pt,-,black] (y) -- (x2);
        \draw [line width=3pt,-,loosely dashed,black] (x1) to[bend right=40] (x2);
    \end{tikzpicture}
\end{figure}

\end{document}

And the resulting figure:

This is the resulting figure

It can clearly be seen that the dash from the X1 node is longer than that from the X2 node.

I want the right part of the dashed line to be the mirror image of the left part. Is there a way to do this (preferably regardless of the distance between the nodes, and the thickness or specific pattern of the line)?

  • Welcome to TexSE! Did you look at this question? tex.stackexchange.com/q/438299/15036 – Thruston Apr 2 at 10:54
  • Try \draw [line width=3pt,-,loosely dashed,black] (x1.east) to[bend right=40] (x2.west); – CarLaTeX Apr 2 at 11:02
  • @Thruston, thanks! That was indeed on of the pages I read before submitting this question, unfortunately I was not able to understand in. @CarLaTeX, thanks! This works! (I used \draw [line width=3pt,-,loosely dashed,black] (x1.south east) to[bend right=40] (x2.south west);) – Joost Kruis Apr 2 at 11:08
  • @CarLaTeX Please add an answer. – user156344 Apr 2 at 11:12
  • @JouleV I can't explain the reason, maybe it works only by chance. Maybe it's somehow a duplicate of tex.stackexchange.com/questions/133271/…. – CarLaTeX Apr 2 at 12:00
6

There are standard answers, but all of them are very advanced and hard to understand. However, with markings one can "mirror" a half of the curve like this.

\documentclass[tikz]{standalone}
\usetikzlibrary{shapes,decorations,circuits.logic.US,circuits.logic.IEC,fit,external}
\tikzstyle{loosely dashed}=[dash pattern=on 4pt off 8pt]
\tikzstyle{loosely dashed2}=[dash pattern=on 4pt off 8pt]

\begin{document}
    \begin{tikzpicture}[every node/.style = {draw=none, text=black, circle, minimum size = 13mm, fill=gray!25}]
        \path
        (0,3) node(y) {$Y$}
        (-1.5,0) node[draw, line width=1pt](x1) {$X_1$}
        (1.5,0) node[draw, line width=1pt](x2) {$X_2$};
        \draw [line width=1pt,-,black] (y) -- (x1);
        \draw [line width=1pt,-,black] (y) -- (x2);
        %\draw [line width=3pt,-,loosely dashed,black] (x1.south east) to[bend right=40] (x2.south west);
        \path [postaction={
            decorate,
            decoration={
                markings,
                mark=at position 0.5 with \coordinate (mid);
            }
        }] (x1) to[bend right=40] (x2);
        \draw[line width=3pt,-,loosely dashed] ([xshift=-4pt]mid) to[out=180,in=-40] (x1);
        \draw[line width=3pt,-,loosely dashed] ([xshift=4pt]mid) to[out=0,in=-140] (x2);
    \end{tikzpicture}
\end{document}

enter image description here

3

Another way is to measure the path and then stretch the dash length a bit in such a way that the path ends with a full on. Please also note that \tikzstyle is deprecated.

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{decorations.markings}
\tikzset{
    full dash/.style args={on #1 off #2}{
    decoration={
    markings,
    mark=at position 0 with {
      \pgfmathsetmacro{\mystretch}{((\pgfdecoratedpathlength-#1)/(#1+#2))/int((\pgfdecoratedpathlength-#1)/(#1+#2))}
      \pgfmathsetmacro{\myon}{#1*\mystretch}
      \xdef\myon{\myon}
      \pgfmathsetmacro{\myoff}{#2*\mystretch}
      \xdef\myoff{\myoff}
    },
  },
  preaction={decorate},draw=none,
  postaction={draw,dash pattern=on \myon pt off \myoff pt}
  },
}
\begin{document}

\begin{figure}
    \centering
    \begin{tikzpicture}[every node/.style = {draw=none, text=black, circle, minimum size = 13mm, fill=gray!25}]
        \path
        (0,3) node(y) {$Y$}
        (-1.5,0) node[draw, line width=1pt](x1) {$X_1$}
        (1.5,0) node[draw, line width=1pt](x2) {$X_2$};
        \draw [line width=1pt,-,black] (y) -- (x1);
        \draw [line width=1pt,-,black] (y) -- (x2);
        \draw [line width=3pt,-,full dash=on 3pt off 6pt,black] (x1) to[bend right=40] (x2);
    \end{tikzpicture}
\end{figure}

\end{document}

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.