Better use of rounded corners with tikz on draw[->]












5















I have this code:



% !TeX encoding = UTF-8


documentclass[utf8]{article}
usepackage{tikz}
usetikzlibrary{matrix}
usetikzlibrary{positioning}

newcommand{multilinks}[3]{foreach noeud in {#1} {draw[<-, rounded corners] (#2.west) -| ++(-#3em,0em) |- (noeud.east);}}

begin{document}
begin{figure}[htp]
centering
tikzset{
basic/.style={draw, rounded corners=2pt, thick, text width=8em, align=flush center, node distance=2em},
}
begin{tikzpicture}
matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
node(n1){Text}; & node(n3){another text}; \
node(n2){one thing}; & node(n4){again text}; \
};
multilinks{n1,n2}{n3}{3}
multilinks{n1}{n4}{1}
end{tikzpicture}
end{figure}

end{document}


It gives me this result:





As you can see, a curve is weird. How can I fix it?



Here's the result I want:












share|improve this question





























    5















    I have this code:



    % !TeX encoding = UTF-8


    documentclass[utf8]{article}
    usepackage{tikz}
    usetikzlibrary{matrix}
    usetikzlibrary{positioning}

    newcommand{multilinks}[3]{foreach noeud in {#1} {draw[<-, rounded corners] (#2.west) -| ++(-#3em,0em) |- (noeud.east);}}

    begin{document}
    begin{figure}[htp]
    centering
    tikzset{
    basic/.style={draw, rounded corners=2pt, thick, text width=8em, align=flush center, node distance=2em},
    }
    begin{tikzpicture}
    matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
    node(n1){Text}; & node(n3){another text}; \
    node(n2){one thing}; & node(n4){again text}; \
    };
    multilinks{n1,n2}{n3}{3}
    multilinks{n1}{n4}{1}
    end{tikzpicture}
    end{figure}

    end{document}


    It gives me this result:





    As you can see, a curve is weird. How can I fix it?



    Here's the result I want:












    share|improve this question



























      5












      5








      5


      1






      I have this code:



      % !TeX encoding = UTF-8


      documentclass[utf8]{article}
      usepackage{tikz}
      usetikzlibrary{matrix}
      usetikzlibrary{positioning}

      newcommand{multilinks}[3]{foreach noeud in {#1} {draw[<-, rounded corners] (#2.west) -| ++(-#3em,0em) |- (noeud.east);}}

      begin{document}
      begin{figure}[htp]
      centering
      tikzset{
      basic/.style={draw, rounded corners=2pt, thick, text width=8em, align=flush center, node distance=2em},
      }
      begin{tikzpicture}
      matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
      node(n1){Text}; & node(n3){another text}; \
      node(n2){one thing}; & node(n4){again text}; \
      };
      multilinks{n1,n2}{n3}{3}
      multilinks{n1}{n4}{1}
      end{tikzpicture}
      end{figure}

      end{document}


      It gives me this result:





      As you can see, a curve is weird. How can I fix it?



      Here's the result I want:












      share|improve this question
















      I have this code:



      % !TeX encoding = UTF-8


      documentclass[utf8]{article}
      usepackage{tikz}
      usetikzlibrary{matrix}
      usetikzlibrary{positioning}

      newcommand{multilinks}[3]{foreach noeud in {#1} {draw[<-, rounded corners] (#2.west) -| ++(-#3em,0em) |- (noeud.east);}}

      begin{document}
      begin{figure}[htp]
      centering
      tikzset{
      basic/.style={draw, rounded corners=2pt, thick, text width=8em, align=flush center, node distance=2em},
      }
      begin{tikzpicture}
      matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
      node(n1){Text}; & node(n3){another text}; \
      node(n2){one thing}; & node(n4){again text}; \
      };
      multilinks{n1,n2}{n3}{3}
      multilinks{n1}{n4}{1}
      end{tikzpicture}
      end{figure}

      end{document}


      It gives me this result:





      As you can see, a curve is weird. How can I fix it?



      Here's the result I want:









      tikz-pgf






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited 18 hours ago







      Vinccool96

















      asked 19 hours ago









      Vinccool96Vinccool96

      3189




      3189






















          1 Answer
          1






          active

          oldest

          votes


















          6














          A slight change in the definition of multilinks and the list #1 in the first multilinks:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          foreach noeud in {#1} {
          draw[<-, rounded corners] (#2.west) -- ++(-#3 em,0em) |- (noeud.east);
          }
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here





          Edit



          In case you want to keep the original way, the definition of multilinks is a bit more complicated:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          begin{scope}[x=1em,y=1em]
          newdimenxend
          newdimenyend
          path (#2.west);
          pgfgetlastxy{xend}{yend}
          foreach i in {#1} {
          newdimenxstart
          newdimenystart
          path (i.east);
          pgfgetlastxy{xstart}{ystart}
          coordinate (1) at ({xend-#3 em},ystart);
          coordinate (2) at ({xend-#3 em},yend);
          ifdimystart=yend
          draw[->] (i.east)--(#2.west);
          else
          draw[->,rounded corners] (i.east)--(1)--(2)--(#2.west);
          fi
          }
          end{scope}
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n1,n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here



          We have to add an ifdim because TikZ is quite confused when it is commanded to draw a rounded corners path from point A to point A (i.e. two identical points):



          documentclass[tikz,margin=3mm]{standalone}
          begin{document}
          begin{tikzpicture}[y=0.2cm]
          draw[rounded corners] (0,0) --(1,0) --(1,0)--(2,0) ; % Some bugs?
          draw[rounded corners] (0,-1)--(1,-1)-- (2,-1);
          draw[rounded corners] (0,-2)-- (2,-2);
          end{tikzpicture}
          end{document}


          enter image description here






          share|improve this answer


























          • It doesn't works with multilinks{n1,n2}{n3}{3}

            – Vinccool96
            18 hours ago













          • @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

            – JouleV
            17 hours ago











          Your Answer








          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "85"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: false,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f480027%2fbetter-use-of-rounded-corners-with-tikz-on-draw%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          6














          A slight change in the definition of multilinks and the list #1 in the first multilinks:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          foreach noeud in {#1} {
          draw[<-, rounded corners] (#2.west) -- ++(-#3 em,0em) |- (noeud.east);
          }
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here





          Edit



          In case you want to keep the original way, the definition of multilinks is a bit more complicated:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          begin{scope}[x=1em,y=1em]
          newdimenxend
          newdimenyend
          path (#2.west);
          pgfgetlastxy{xend}{yend}
          foreach i in {#1} {
          newdimenxstart
          newdimenystart
          path (i.east);
          pgfgetlastxy{xstart}{ystart}
          coordinate (1) at ({xend-#3 em},ystart);
          coordinate (2) at ({xend-#3 em},yend);
          ifdimystart=yend
          draw[->] (i.east)--(#2.west);
          else
          draw[->,rounded corners] (i.east)--(1)--(2)--(#2.west);
          fi
          }
          end{scope}
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n1,n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here



          We have to add an ifdim because TikZ is quite confused when it is commanded to draw a rounded corners path from point A to point A (i.e. two identical points):



          documentclass[tikz,margin=3mm]{standalone}
          begin{document}
          begin{tikzpicture}[y=0.2cm]
          draw[rounded corners] (0,0) --(1,0) --(1,0)--(2,0) ; % Some bugs?
          draw[rounded corners] (0,-1)--(1,-1)-- (2,-1);
          draw[rounded corners] (0,-2)-- (2,-2);
          end{tikzpicture}
          end{document}


          enter image description here






          share|improve this answer


























          • It doesn't works with multilinks{n1,n2}{n3}{3}

            – Vinccool96
            18 hours ago













          • @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

            – JouleV
            17 hours ago
















          6














          A slight change in the definition of multilinks and the list #1 in the first multilinks:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          foreach noeud in {#1} {
          draw[<-, rounded corners] (#2.west) -- ++(-#3 em,0em) |- (noeud.east);
          }
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here





          Edit



          In case you want to keep the original way, the definition of multilinks is a bit more complicated:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          begin{scope}[x=1em,y=1em]
          newdimenxend
          newdimenyend
          path (#2.west);
          pgfgetlastxy{xend}{yend}
          foreach i in {#1} {
          newdimenxstart
          newdimenystart
          path (i.east);
          pgfgetlastxy{xstart}{ystart}
          coordinate (1) at ({xend-#3 em},ystart);
          coordinate (2) at ({xend-#3 em},yend);
          ifdimystart=yend
          draw[->] (i.east)--(#2.west);
          else
          draw[->,rounded corners] (i.east)--(1)--(2)--(#2.west);
          fi
          }
          end{scope}
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n1,n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here



          We have to add an ifdim because TikZ is quite confused when it is commanded to draw a rounded corners path from point A to point A (i.e. two identical points):



          documentclass[tikz,margin=3mm]{standalone}
          begin{document}
          begin{tikzpicture}[y=0.2cm]
          draw[rounded corners] (0,0) --(1,0) --(1,0)--(2,0) ; % Some bugs?
          draw[rounded corners] (0,-1)--(1,-1)-- (2,-1);
          draw[rounded corners] (0,-2)-- (2,-2);
          end{tikzpicture}
          end{document}


          enter image description here






          share|improve this answer


























          • It doesn't works with multilinks{n1,n2}{n3}{3}

            – Vinccool96
            18 hours ago













          • @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

            – JouleV
            17 hours ago














          6












          6








          6







          A slight change in the definition of multilinks and the list #1 in the first multilinks:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          foreach noeud in {#1} {
          draw[<-, rounded corners] (#2.west) -- ++(-#3 em,0em) |- (noeud.east);
          }
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here





          Edit



          In case you want to keep the original way, the definition of multilinks is a bit more complicated:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          begin{scope}[x=1em,y=1em]
          newdimenxend
          newdimenyend
          path (#2.west);
          pgfgetlastxy{xend}{yend}
          foreach i in {#1} {
          newdimenxstart
          newdimenystart
          path (i.east);
          pgfgetlastxy{xstart}{ystart}
          coordinate (1) at ({xend-#3 em},ystart);
          coordinate (2) at ({xend-#3 em},yend);
          ifdimystart=yend
          draw[->] (i.east)--(#2.west);
          else
          draw[->,rounded corners] (i.east)--(1)--(2)--(#2.west);
          fi
          }
          end{scope}
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n1,n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here



          We have to add an ifdim because TikZ is quite confused when it is commanded to draw a rounded corners path from point A to point A (i.e. two identical points):



          documentclass[tikz,margin=3mm]{standalone}
          begin{document}
          begin{tikzpicture}[y=0.2cm]
          draw[rounded corners] (0,0) --(1,0) --(1,0)--(2,0) ; % Some bugs?
          draw[rounded corners] (0,-1)--(1,-1)-- (2,-1);
          draw[rounded corners] (0,-2)-- (2,-2);
          end{tikzpicture}
          end{document}


          enter image description here






          share|improve this answer















          A slight change in the definition of multilinks and the list #1 in the first multilinks:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          foreach noeud in {#1} {
          draw[<-, rounded corners] (#2.west) -- ++(-#3 em,0em) |- (noeud.east);
          }
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here





          Edit



          In case you want to keep the original way, the definition of multilinks is a bit more complicated:



          documentclass[tikz]{standalone}
          usetikzlibrary{matrix,positioning}

          newcommand{multilinks}[3]{
          begin{scope}[x=1em,y=1em]
          newdimenxend
          newdimenyend
          path (#2.west);
          pgfgetlastxy{xend}{yend}
          foreach i in {#1} {
          newdimenxstart
          newdimenystart
          path (i.east);
          pgfgetlastxy{xstart}{ystart}
          coordinate (1) at ({xend-#3 em},ystart);
          coordinate (2) at ({xend-#3 em},yend);
          ifdimystart=yend
          draw[->] (i.east)--(#2.west);
          else
          draw[->,rounded corners] (i.east)--(1)--(2)--(#2.west);
          fi
          }
          end{scope}
          }

          begin{document}
          tikzset{
          basic/.style={
          draw,
          rounded corners=2pt,
          thick,
          text width=8em,
          align=flush center,
          node distance=2em
          }
          }
          begin{tikzpicture}
          fontsize{8}{9} selectfont
          matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
          node(n1){Text}; & node(n3){another text}; \
          node(n2){one thing}; & node(n4){again text}; \
          };
          multilinks{n1,n2}{n3}{3}
          multilinks{n1}{n4}{1}
          end{tikzpicture}

          end{document}


          enter image description here



          We have to add an ifdim because TikZ is quite confused when it is commanded to draw a rounded corners path from point A to point A (i.e. two identical points):



          documentclass[tikz,margin=3mm]{standalone}
          begin{document}
          begin{tikzpicture}[y=0.2cm]
          draw[rounded corners] (0,0) --(1,0) --(1,0)--(2,0) ; % Some bugs?
          draw[rounded corners] (0,-1)--(1,-1)-- (2,-1);
          draw[rounded corners] (0,-2)-- (2,-2);
          end{tikzpicture}
          end{document}


          enter image description here







          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 17 hours ago

























          answered 18 hours ago









          JouleVJouleV

          6,44121750




          6,44121750













          • It doesn't works with multilinks{n1,n2}{n3}{3}

            – Vinccool96
            18 hours ago













          • @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

            – JouleV
            17 hours ago



















          • It doesn't works with multilinks{n1,n2}{n3}{3}

            – Vinccool96
            18 hours ago













          • @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

            – JouleV
            17 hours ago

















          It doesn't works with multilinks{n1,n2}{n3}{3}

          – Vinccool96
          18 hours ago







          It doesn't works with multilinks{n1,n2}{n3}{3}

          – Vinccool96
          18 hours ago















          @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

          – JouleV
          17 hours ago





          @Vinccool96 I edited my answer so that it works with multilinks{n1,n2}{n3}{3}.

          – JouleV
          17 hours ago


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f480027%2fbetter-use-of-rounded-corners-with-tikz-on-draw%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          How did Captain America manage to do this?

          迪纳利

          南乌拉尔铁路局