Check if a point is right or left of another one in TikZExtract x, y coordinate of an arbitrary point in TikZRotate a node but not its content: the case of the ellipse decorationNumerical conditional within tikz keys?TikZ: Drawing an arc from an intersection to an intersectionDrawing rectilinear curves in Tikz, aka an Etch-a-Sketch drawingReferencing locations within a text boxLine up nested tikz enviroments or how to get rid of themTikz-qtree : graphs in the nodesHow to draw more than 8 edges to one node in tikz-er2Using tikz Calc package to add cordinatesIn Tikz is there a way to make Tikz images begin “exactly” at the leftmost point in the page?

Mathematical cryptic clues

Font hinting is lost in Chrome-like browsers (for some languages )

Fully-Firstable Anagram Sets

Test whether all array elements are factors of a number

Did Shadowfax go to Valinor?

How to find program name(s) of an installed package?

Why "Having chlorophyll without photosynthesis is actually very dangerous" and "like living with a bomb"?

Pattern match does not work in bash script

Email Account under attack (really) - anything I can do?

Schoenfled Residua test shows proportionality hazard assumptions holds but Kaplan-Meier plots intersect

Compress a signal by storing signal diff instead of actual samples - is there such a thing?

Why Is Death Allowed In the Matrix?

To string or not to string

Is a conference paper whose proceedings will be published in IEEE Xplore counted as a publication?

Is it important to consider tone, melody, and musical form while writing a song?

The Clique vs. Independent Set Problem

Why are electrically insulating heatsinks so rare? Is it just cost?

Can a Warlock become Neutral Good?

What do the dots in this tr command do: tr .............A-Z A-ZA-Z <<< "JVPQBOV" (with 13 dots)

In Japanese, what’s the difference between “Tonari ni” (となりに) and “Tsugi” (つぎ)? When would you use one over the other?

Assigning pointers to atomic type to pointers to non atomic type

Theorems that impeded progress

Smoothness of finite-dimensional functional calculus

Fencing style for blades that can attack from a distance



Check if a point is right or left of another one in TikZ


Extract x, y coordinate of an arbitrary point in TikZRotate a node but not its content: the case of the ellipse decorationNumerical conditional within tikz keys?TikZ: Drawing an arc from an intersection to an intersectionDrawing rectilinear curves in Tikz, aka an Etch-a-Sketch drawingReferencing locations within a text boxLine up nested tikz enviroments or how to get rid of themTikz-qtree : graphs in the nodesHow to draw more than 8 edges to one node in tikz-er2Using tikz Calc package to add cordinatesIn Tikz is there a way to make Tikz images begin “exactly” at the leftmost point in the page?













3















Trying to implement a handy way to check if a TikZ point is right or left of another one, I came up with the following MWE.



documentclass[border=1mm, tikz]standalone

makeatletter
% prints 1 if #1.center is right than #2.center, 0 otherwise
newcommandisRight[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center
pgfmathparsegreater(pgf@x,0)pgfmathresult


% 1 if #1.center is left than #2.center, 0 otherwise -> result in pgfmathresult
newcommandcheckIfLeft[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center%
pgfmathparseless(pgf@x,0)

makeatother

begindocument

begintikzpicture
node[draw] (A) at (0,0) A;
node[draw] (B) at (1,0) B;

checkIfLeftAB
ifnumpgfmathresult=1
node at (0.5,1)A is left of B;
fi

%ifnumisRightBA=1
% node at (0.5,-1)B is right of A;
%fi
endtikzpicture
enddocument


but I am quite unsatisfied with it. What I would like to have is something that may be used in a ifnum ... fi construct, as in the commented code (and I would like not to use packages beyond what pgf loads).



Here my questions:



  1. In the commented code, what is exactly happening in the ifnum expansion, which makes the compilation fail?

  2. How can I fix the isRight command in order to be able to use it together with ifnum?

  3. If question 2 is tricky, how can I affect the ifnum expansion to achieve what I wish?

  4. Is there in pgf a smarter/more straightforward way to check if a TikZ point is left/right of another point? My final goal would be to draw something only if a point is right/left of another.

Bonus question:



  1. How (and where) is pdfstrcmp implemented, since it is harmless to use it in a ifnum ... fi construct?









share|improve this question






















  • your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum. pdfstrcmp is a primitive.

    – Ulrike Fischer
    Apr 2 at 12:46












  • Thanks for the comment. I find it a bit cryptic, though. Do you want to say that I should give up and what I got so far is the best I can have? The fact that pdfstrcmp is a primitive clarifies why I was not finding its implementation... I should have had a look to the pdftex manual before.

    – Axel Krypton
    Apr 2 at 13:14











  • You will have to give up one part - either ifnum or pgfmath commands. You could implement something working with ifnum by using e.g. zrefsavepos (needs two compilations) but not with pgfmathparse.

    – Ulrike Fischer
    Apr 2 at 13:24















3















Trying to implement a handy way to check if a TikZ point is right or left of another one, I came up with the following MWE.



documentclass[border=1mm, tikz]standalone

makeatletter
% prints 1 if #1.center is right than #2.center, 0 otherwise
newcommandisRight[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center
pgfmathparsegreater(pgf@x,0)pgfmathresult


% 1 if #1.center is left than #2.center, 0 otherwise -> result in pgfmathresult
newcommandcheckIfLeft[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center%
pgfmathparseless(pgf@x,0)

makeatother

begindocument

begintikzpicture
node[draw] (A) at (0,0) A;
node[draw] (B) at (1,0) B;

checkIfLeftAB
ifnumpgfmathresult=1
node at (0.5,1)A is left of B;
fi

%ifnumisRightBA=1
% node at (0.5,-1)B is right of A;
%fi
endtikzpicture
enddocument


but I am quite unsatisfied with it. What I would like to have is something that may be used in a ifnum ... fi construct, as in the commented code (and I would like not to use packages beyond what pgf loads).



Here my questions:



  1. In the commented code, what is exactly happening in the ifnum expansion, which makes the compilation fail?

  2. How can I fix the isRight command in order to be able to use it together with ifnum?

  3. If question 2 is tricky, how can I affect the ifnum expansion to achieve what I wish?

  4. Is there in pgf a smarter/more straightforward way to check if a TikZ point is left/right of another point? My final goal would be to draw something only if a point is right/left of another.

Bonus question:



  1. How (and where) is pdfstrcmp implemented, since it is harmless to use it in a ifnum ... fi construct?









share|improve this question






















  • your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum. pdfstrcmp is a primitive.

    – Ulrike Fischer
    Apr 2 at 12:46












  • Thanks for the comment. I find it a bit cryptic, though. Do you want to say that I should give up and what I got so far is the best I can have? The fact that pdfstrcmp is a primitive clarifies why I was not finding its implementation... I should have had a look to the pdftex manual before.

    – Axel Krypton
    Apr 2 at 13:14











  • You will have to give up one part - either ifnum or pgfmath commands. You could implement something working with ifnum by using e.g. zrefsavepos (needs two compilations) but not with pgfmathparse.

    – Ulrike Fischer
    Apr 2 at 13:24













3












3








3








Trying to implement a handy way to check if a TikZ point is right or left of another one, I came up with the following MWE.



documentclass[border=1mm, tikz]standalone

makeatletter
% prints 1 if #1.center is right than #2.center, 0 otherwise
newcommandisRight[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center
pgfmathparsegreater(pgf@x,0)pgfmathresult


% 1 if #1.center is left than #2.center, 0 otherwise -> result in pgfmathresult
newcommandcheckIfLeft[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center%
pgfmathparseless(pgf@x,0)

makeatother

begindocument

begintikzpicture
node[draw] (A) at (0,0) A;
node[draw] (B) at (1,0) B;

checkIfLeftAB
ifnumpgfmathresult=1
node at (0.5,1)A is left of B;
fi

%ifnumisRightBA=1
% node at (0.5,-1)B is right of A;
%fi
endtikzpicture
enddocument


but I am quite unsatisfied with it. What I would like to have is something that may be used in a ifnum ... fi construct, as in the commented code (and I would like not to use packages beyond what pgf loads).



Here my questions:



  1. In the commented code, what is exactly happening in the ifnum expansion, which makes the compilation fail?

  2. How can I fix the isRight command in order to be able to use it together with ifnum?

  3. If question 2 is tricky, how can I affect the ifnum expansion to achieve what I wish?

  4. Is there in pgf a smarter/more straightforward way to check if a TikZ point is left/right of another point? My final goal would be to draw something only if a point is right/left of another.

Bonus question:



  1. How (and where) is pdfstrcmp implemented, since it is harmless to use it in a ifnum ... fi construct?









share|improve this question














Trying to implement a handy way to check if a TikZ point is right or left of another one, I came up with the following MWE.



documentclass[border=1mm, tikz]standalone

makeatletter
% prints 1 if #1.center is right than #2.center, 0 otherwise
newcommandisRight[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center
pgfmathparsegreater(pgf@x,0)pgfmathresult


% 1 if #1.center is left than #2.center, 0 otherwise -> result in pgfmathresult
newcommandcheckIfLeft[2]
%pgfpointdiffab gives b-a
pgfpointdiffpgfpointanchor#2centerpgfpointanchor#1center%
pgfmathparseless(pgf@x,0)

makeatother

begindocument

begintikzpicture
node[draw] (A) at (0,0) A;
node[draw] (B) at (1,0) B;

checkIfLeftAB
ifnumpgfmathresult=1
node at (0.5,1)A is left of B;
fi

%ifnumisRightBA=1
% node at (0.5,-1)B is right of A;
%fi
endtikzpicture
enddocument


but I am quite unsatisfied with it. What I would like to have is something that may be used in a ifnum ... fi construct, as in the commented code (and I would like not to use packages beyond what pgf loads).



Here my questions:



  1. In the commented code, what is exactly happening in the ifnum expansion, which makes the compilation fail?

  2. How can I fix the isRight command in order to be able to use it together with ifnum?

  3. If question 2 is tricky, how can I affect the ifnum expansion to achieve what I wish?

  4. Is there in pgf a smarter/more straightforward way to check if a TikZ point is left/right of another point? My final goal would be to draw something only if a point is right/left of another.

Bonus question:



  1. How (and where) is pdfstrcmp implemented, since it is harmless to use it in a ifnum ... fi construct?






tikz-pgf expansion






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Apr 2 at 12:01









Axel KryptonAxel Krypton

477211




477211












  • your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum. pdfstrcmp is a primitive.

    – Ulrike Fischer
    Apr 2 at 12:46












  • Thanks for the comment. I find it a bit cryptic, though. Do you want to say that I should give up and what I got so far is the best I can have? The fact that pdfstrcmp is a primitive clarifies why I was not finding its implementation... I should have had a look to the pdftex manual before.

    – Axel Krypton
    Apr 2 at 13:14











  • You will have to give up one part - either ifnum or pgfmath commands. You could implement something working with ifnum by using e.g. zrefsavepos (needs two compilations) but not with pgfmathparse.

    – Ulrike Fischer
    Apr 2 at 13:24

















  • your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum. pdfstrcmp is a primitive.

    – Ulrike Fischer
    Apr 2 at 12:46












  • Thanks for the comment. I find it a bit cryptic, though. Do you want to say that I should give up and what I got so far is the best I can have? The fact that pdfstrcmp is a primitive clarifies why I was not finding its implementation... I should have had a look to the pdftex manual before.

    – Axel Krypton
    Apr 2 at 13:14











  • You will have to give up one part - either ifnum or pgfmath commands. You could implement something working with ifnum by using e.g. zrefsavepos (needs two compilations) but not with pgfmathparse.

    – Ulrike Fischer
    Apr 2 at 13:24
















your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum. pdfstrcmp is a primitive.

– Ulrike Fischer
Apr 2 at 12:46






your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum. pdfstrcmp is a primitive.

– Ulrike Fischer
Apr 2 at 12:46














Thanks for the comment. I find it a bit cryptic, though. Do you want to say that I should give up and what I got so far is the best I can have? The fact that pdfstrcmp is a primitive clarifies why I was not finding its implementation... I should have had a look to the pdftex manual before.

– Axel Krypton
Apr 2 at 13:14





Thanks for the comment. I find it a bit cryptic, though. Do you want to say that I should give up and what I got so far is the best I can have? The fact that pdfstrcmp is a primitive clarifies why I was not finding its implementation... I should have had a look to the pdftex manual before.

– Axel Krypton
Apr 2 at 13:14













You will have to give up one part - either ifnum or pgfmath commands. You could implement something working with ifnum by using e.g. zrefsavepos (needs two compilations) but not with pgfmathparse.

– Ulrike Fischer
Apr 2 at 13:24





You will have to give up one part - either ifnum or pgfmath commands. You could implement something working with ifnum by using e.g. zrefsavepos (needs two compilations) but not with pgfmathparse.

– Ulrike Fischer
Apr 2 at 13:24










3 Answers
3






active

oldest

votes


















6














Here is some low level code based on this answer that do not use calc.



documentclass[tikz,border=7pt]standalone
newififleft
makeatletter
defisleft(#1)of(#2)?%
tikz@scan@one@pointpgfutil@firstofone(#1)relax%
pgf@xa=pgf@x%
tikz@scan@one@pointpgfutil@firstofone(#2)relax%
ifdimpgf@xa<pgf@xrelaxlefttrueelseleftfalsefi

makeatother

begindocument
begintikzpicture[nodes=circle]
node[draw] (A) at (0,0) A;
node[draw] (B) at (2,1) right of A;
isleft(A)of(B)?
path (A) ifleft edge[latex-] (B) else edge[-latex] (B) fi ;
foreach~in1,...,70
path[ultra thin] (180*rand:1) coordinate(N)
pgfextraisleft(N)of(A)?
ifleft [red] else [blue] fi node[scale=2].
(N) ifleft edge[latex-] (A) else edge[-latex] (A) fi;
endtikzpicture
enddocument


enter image description here






share|improve this answer

























  • I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

    – Axel Krypton
    Apr 3 at 8:55


















6














How about



documentclass[border=1mm, tikz]standalone
usetikzlibrarycalc
tikzsetif left/.style n args=4insert path=%
let p1=($#1-#2$) in ifdimx1<0pt
#3
else
#4
fi

begindocument

begintikzpicture
node[draw] (A) at (0,0) A;
node[draw] (B) at (1,0) B;
path[if left=(A)(B)(0.5,1) node A is left of B];
path[if left=(B)(A)(0.5,-1) node B is left of A];
endtikzpicture
enddocument


enter image description here






share|improve this answer























  • This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

    – Axel Krypton
    Apr 3 at 8:42











  • @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

    – marmot
    Apr 3 at 13:46











  • @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

    – marmot
    2 days ago











  • In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

    – Axel Krypton
    2 days ago











  • And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

    – Axel Krypton
    2 days ago


















0














Just for future record, I want to share a tiny elaboration of what Kpym suggested in his answer. Just to avoid having the newif, it is possible to supply two more arguments to the macro. Of course, having the ifleft gives versatility in the usage (as nicely demonstrated in the Kpym's answer), but maybe this is not really needed (like in my case).



documentclass[border=1mm, tikz]standalone

makeatletter
longdefIfLeft(#1)of(#2)#3#4%
tikz@scan@one@pointpgfutil@firstofone(#1)relax%
pgf@xa=pgf@x%
tikz@scan@one@pointpgfutil@firstofone(#2)relax%
ifdimpgf@xa<pgf@xrelax#3else#4fi

makeatother

begindocument

begintikzpicture
node[draw] (A) at (0,0) A;
node[draw] (B) at (1,0) B;
node[draw] (C) at (2,0) C;

IfLeft(A)of(B)%
foreach n in 10,20,...,90
fill[red!n!yellow] (0.5,0) ++(n/100,0.5) circle(1mm);

%
foreach n in 10,20,...,90
fill[black!n!gray] (0.5,0) ++(n/100,-0.5) circle(1mm);



IfLeft(C)of(B)%
foreach n in 10,20,...,90
fill[black!n!gray] (0.5,0) ++(n/100,0.5) circle(1mm);

%
foreach n in 10,20,...,90
fill[blue!n!magenta] (0.5,0) ++(n/100,-0.5) circle(1mm);


endtikzpicture
enddocument



 



    enter image description here






share|improve this answer























    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%2f482761%2fcheck-if-a-point-is-right-or-left-of-another-one-in-tikz%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6














    Here is some low level code based on this answer that do not use calc.



    documentclass[tikz,border=7pt]standalone
    newififleft
    makeatletter
    defisleft(#1)of(#2)?%
    tikz@scan@one@pointpgfutil@firstofone(#1)relax%
    pgf@xa=pgf@x%
    tikz@scan@one@pointpgfutil@firstofone(#2)relax%
    ifdimpgf@xa<pgf@xrelaxlefttrueelseleftfalsefi

    makeatother

    begindocument
    begintikzpicture[nodes=circle]
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (2,1) right of A;
    isleft(A)of(B)?
    path (A) ifleft edge[latex-] (B) else edge[-latex] (B) fi ;
    foreach~in1,...,70
    path[ultra thin] (180*rand:1) coordinate(N)
    pgfextraisleft(N)of(A)?
    ifleft [red] else [blue] fi node[scale=2].
    (N) ifleft edge[latex-] (A) else edge[-latex] (A) fi;
    endtikzpicture
    enddocument


    enter image description here






    share|improve this answer

























    • I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

      – Axel Krypton
      Apr 3 at 8:55















    6














    Here is some low level code based on this answer that do not use calc.



    documentclass[tikz,border=7pt]standalone
    newififleft
    makeatletter
    defisleft(#1)of(#2)?%
    tikz@scan@one@pointpgfutil@firstofone(#1)relax%
    pgf@xa=pgf@x%
    tikz@scan@one@pointpgfutil@firstofone(#2)relax%
    ifdimpgf@xa<pgf@xrelaxlefttrueelseleftfalsefi

    makeatother

    begindocument
    begintikzpicture[nodes=circle]
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (2,1) right of A;
    isleft(A)of(B)?
    path (A) ifleft edge[latex-] (B) else edge[-latex] (B) fi ;
    foreach~in1,...,70
    path[ultra thin] (180*rand:1) coordinate(N)
    pgfextraisleft(N)of(A)?
    ifleft [red] else [blue] fi node[scale=2].
    (N) ifleft edge[latex-] (A) else edge[-latex] (A) fi;
    endtikzpicture
    enddocument


    enter image description here






    share|improve this answer

























    • I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

      – Axel Krypton
      Apr 3 at 8:55













    6












    6








    6







    Here is some low level code based on this answer that do not use calc.



    documentclass[tikz,border=7pt]standalone
    newififleft
    makeatletter
    defisleft(#1)of(#2)?%
    tikz@scan@one@pointpgfutil@firstofone(#1)relax%
    pgf@xa=pgf@x%
    tikz@scan@one@pointpgfutil@firstofone(#2)relax%
    ifdimpgf@xa<pgf@xrelaxlefttrueelseleftfalsefi

    makeatother

    begindocument
    begintikzpicture[nodes=circle]
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (2,1) right of A;
    isleft(A)of(B)?
    path (A) ifleft edge[latex-] (B) else edge[-latex] (B) fi ;
    foreach~in1,...,70
    path[ultra thin] (180*rand:1) coordinate(N)
    pgfextraisleft(N)of(A)?
    ifleft [red] else [blue] fi node[scale=2].
    (N) ifleft edge[latex-] (A) else edge[-latex] (A) fi;
    endtikzpicture
    enddocument


    enter image description here






    share|improve this answer















    Here is some low level code based on this answer that do not use calc.



    documentclass[tikz,border=7pt]standalone
    newififleft
    makeatletter
    defisleft(#1)of(#2)?%
    tikz@scan@one@pointpgfutil@firstofone(#1)relax%
    pgf@xa=pgf@x%
    tikz@scan@one@pointpgfutil@firstofone(#2)relax%
    ifdimpgf@xa<pgf@xrelaxlefttrueelseleftfalsefi

    makeatother

    begindocument
    begintikzpicture[nodes=circle]
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (2,1) right of A;
    isleft(A)of(B)?
    path (A) ifleft edge[latex-] (B) else edge[-latex] (B) fi ;
    foreach~in1,...,70
    path[ultra thin] (180*rand:1) coordinate(N)
    pgfextraisleft(N)of(A)?
    ifleft [red] else [blue] fi node[scale=2].
    (N) ifleft edge[latex-] (A) else edge[-latex] (A) fi;
    endtikzpicture
    enddocument


    enter image description here







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Apr 2 at 19:33

























    answered Apr 2 at 18:00









    KpymKpym

    17.8k24191




    17.8k24191












    • I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

      – Axel Krypton
      Apr 3 at 8:55

















    • I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

      – Axel Krypton
      Apr 3 at 8:55
















    I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

    – Axel Krypton
    Apr 3 at 8:55





    I like your idea a lot! Indeed it is perfect for my needs, up to a tiny adjustment. The comments to the question clarify the other points.

    – Axel Krypton
    Apr 3 at 8:55











    6














    How about



    documentclass[border=1mm, tikz]standalone
    usetikzlibrarycalc
    tikzsetif left/.style n args=4insert path=%
    let p1=($#1-#2$) in ifdimx1<0pt
    #3
    else
    #4
    fi

    begindocument

    begintikzpicture
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (1,0) B;
    path[if left=(A)(B)(0.5,1) node A is left of B];
    path[if left=(B)(A)(0.5,-1) node B is left of A];
    endtikzpicture
    enddocument


    enter image description here






    share|improve this answer























    • This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

      – Axel Krypton
      Apr 3 at 8:42











    • @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

      – marmot
      Apr 3 at 13:46











    • @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

      – marmot
      2 days ago











    • In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

      – Axel Krypton
      2 days ago











    • And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

      – Axel Krypton
      2 days ago















    6














    How about



    documentclass[border=1mm, tikz]standalone
    usetikzlibrarycalc
    tikzsetif left/.style n args=4insert path=%
    let p1=($#1-#2$) in ifdimx1<0pt
    #3
    else
    #4
    fi

    begindocument

    begintikzpicture
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (1,0) B;
    path[if left=(A)(B)(0.5,1) node A is left of B];
    path[if left=(B)(A)(0.5,-1) node B is left of A];
    endtikzpicture
    enddocument


    enter image description here






    share|improve this answer























    • This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

      – Axel Krypton
      Apr 3 at 8:42











    • @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

      – marmot
      Apr 3 at 13:46











    • @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

      – marmot
      2 days ago











    • In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

      – Axel Krypton
      2 days ago











    • And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

      – Axel Krypton
      2 days ago













    6












    6








    6







    How about



    documentclass[border=1mm, tikz]standalone
    usetikzlibrarycalc
    tikzsetif left/.style n args=4insert path=%
    let p1=($#1-#2$) in ifdimx1<0pt
    #3
    else
    #4
    fi

    begindocument

    begintikzpicture
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (1,0) B;
    path[if left=(A)(B)(0.5,1) node A is left of B];
    path[if left=(B)(A)(0.5,-1) node B is left of A];
    endtikzpicture
    enddocument


    enter image description here






    share|improve this answer













    How about



    documentclass[border=1mm, tikz]standalone
    usetikzlibrarycalc
    tikzsetif left/.style n args=4insert path=%
    let p1=($#1-#2$) in ifdimx1<0pt
    #3
    else
    #4
    fi

    begindocument

    begintikzpicture
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (1,0) B;
    path[if left=(A)(B)(0.5,1) node A is left of B];
    path[if left=(B)(A)(0.5,-1) node B is left of A];
    endtikzpicture
    enddocument


    enter image description here







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered Apr 2 at 13:24









    marmotmarmot

    115k5146277




    115k5146277












    • This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

      – Axel Krypton
      Apr 3 at 8:42











    • @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

      – marmot
      Apr 3 at 13:46











    • @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

      – marmot
      2 days ago











    • In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

      – Axel Krypton
      2 days ago











    • And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

      – Axel Krypton
      2 days ago

















    • This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

      – Axel Krypton
      Apr 3 at 8:42











    • @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

      – marmot
      Apr 3 at 13:46











    • @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

      – marmot
      2 days ago











    • In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

      – Axel Krypton
      2 days ago











    • And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

      – Axel Krypton
      2 days ago
















    This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

    – Axel Krypton
    Apr 3 at 8:42





    This is for sure a good idea and I indeed thought about something in this direction at the beginning. However, if I have to draw a lot (nodes, paths, for-loops, etc.) in the if-else branches, then this approach is not handy.

    – Axel Krypton
    Apr 3 at 8:42













    @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

    – marmot
    Apr 3 at 13:46





    @AxelKrypton I actually beg to disagree. You can definitely use this in loops and so on. Can you please tell me a scenario in which you think this has disadvantages?

    – marmot
    Apr 3 at 13:46













    @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

    – marmot
    2 days ago





    @AxelKrypton Just add path foreach X in 1,...,100 (rnd*360:1) coordinate(aux) [if left=(aux)(A) (A) edge[red,-latex] (aux)(A) edge[blue,-latex] (aux)]; to my code. I did not have to adjust anything. You can pick whatever answer you like. But making statements about my code that do not apply just to make Kpym happy is IMHO not useful for other users who have a similar problem and want a simple solution without any makeatletter and so on stuff. All the foreach's of your own post can be done in the very same way.

    – marmot
    2 days ago













    In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

    – Axel Krypton
    2 days ago





    In my comment I actually recognized that your approach is good, I do not know why you think my comment is against you in favour of Kpym. I simply said that if I have to draw a lot, like many nodes, paths, for loops, whatever then your tikzstyle is not as handy as having an if-clause.

    – Axel Krypton
    2 days ago













    And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

    – Axel Krypton
    2 days ago





    And this does not mean that your solution would not work, just that having something very similar to a if ... fi block makes the conditional code stand out and this in my opinion also increases readability. It was simply better in my use case.

    – Axel Krypton
    2 days ago











    0














    Just for future record, I want to share a tiny elaboration of what Kpym suggested in his answer. Just to avoid having the newif, it is possible to supply two more arguments to the macro. Of course, having the ifleft gives versatility in the usage (as nicely demonstrated in the Kpym's answer), but maybe this is not really needed (like in my case).



    documentclass[border=1mm, tikz]standalone

    makeatletter
    longdefIfLeft(#1)of(#2)#3#4%
    tikz@scan@one@pointpgfutil@firstofone(#1)relax%
    pgf@xa=pgf@x%
    tikz@scan@one@pointpgfutil@firstofone(#2)relax%
    ifdimpgf@xa<pgf@xrelax#3else#4fi

    makeatother

    begindocument

    begintikzpicture
    node[draw] (A) at (0,0) A;
    node[draw] (B) at (1,0) B;
    node[draw] (C) at (2,0) C;

    IfLeft(A)of(B)%
    foreach n in 10,20,...,90
    fill[red!n!yellow] (0.5,0) ++(n/100,0.5) circle(1mm);

    %
    foreach n in 10,20,...,90
    fill[black!n!gray] (0.5,0) ++(n/100,-0.5) circle(1mm);



    IfLeft(C)of(B)%
    foreach n in 10,20,...,90
    fill[black!n!gray] (0.5,0) ++(n/100,0.5) circle(1mm);

    %
    foreach n in 10,20,...,90
    fill[blue!n!magenta] (0.5,0) ++(n/100,-0.5) circle(1mm);


    endtikzpicture
    enddocument



     



        enter image description here






    share|improve this answer



























      0














      Just for future record, I want to share a tiny elaboration of what Kpym suggested in his answer. Just to avoid having the newif, it is possible to supply two more arguments to the macro. Of course, having the ifleft gives versatility in the usage (as nicely demonstrated in the Kpym's answer), but maybe this is not really needed (like in my case).



      documentclass[border=1mm, tikz]standalone

      makeatletter
      longdefIfLeft(#1)of(#2)#3#4%
      tikz@scan@one@pointpgfutil@firstofone(#1)relax%
      pgf@xa=pgf@x%
      tikz@scan@one@pointpgfutil@firstofone(#2)relax%
      ifdimpgf@xa<pgf@xrelax#3else#4fi

      makeatother

      begindocument

      begintikzpicture
      node[draw] (A) at (0,0) A;
      node[draw] (B) at (1,0) B;
      node[draw] (C) at (2,0) C;

      IfLeft(A)of(B)%
      foreach n in 10,20,...,90
      fill[red!n!yellow] (0.5,0) ++(n/100,0.5) circle(1mm);

      %
      foreach n in 10,20,...,90
      fill[black!n!gray] (0.5,0) ++(n/100,-0.5) circle(1mm);



      IfLeft(C)of(B)%
      foreach n in 10,20,...,90
      fill[black!n!gray] (0.5,0) ++(n/100,0.5) circle(1mm);

      %
      foreach n in 10,20,...,90
      fill[blue!n!magenta] (0.5,0) ++(n/100,-0.5) circle(1mm);


      endtikzpicture
      enddocument



       



          enter image description here






      share|improve this answer

























        0












        0








        0







        Just for future record, I want to share a tiny elaboration of what Kpym suggested in his answer. Just to avoid having the newif, it is possible to supply two more arguments to the macro. Of course, having the ifleft gives versatility in the usage (as nicely demonstrated in the Kpym's answer), but maybe this is not really needed (like in my case).



        documentclass[border=1mm, tikz]standalone

        makeatletter
        longdefIfLeft(#1)of(#2)#3#4%
        tikz@scan@one@pointpgfutil@firstofone(#1)relax%
        pgf@xa=pgf@x%
        tikz@scan@one@pointpgfutil@firstofone(#2)relax%
        ifdimpgf@xa<pgf@xrelax#3else#4fi

        makeatother

        begindocument

        begintikzpicture
        node[draw] (A) at (0,0) A;
        node[draw] (B) at (1,0) B;
        node[draw] (C) at (2,0) C;

        IfLeft(A)of(B)%
        foreach n in 10,20,...,90
        fill[red!n!yellow] (0.5,0) ++(n/100,0.5) circle(1mm);

        %
        foreach n in 10,20,...,90
        fill[black!n!gray] (0.5,0) ++(n/100,-0.5) circle(1mm);



        IfLeft(C)of(B)%
        foreach n in 10,20,...,90
        fill[black!n!gray] (0.5,0) ++(n/100,0.5) circle(1mm);

        %
        foreach n in 10,20,...,90
        fill[blue!n!magenta] (0.5,0) ++(n/100,-0.5) circle(1mm);


        endtikzpicture
        enddocument



         



            enter image description here






        share|improve this answer













        Just for future record, I want to share a tiny elaboration of what Kpym suggested in his answer. Just to avoid having the newif, it is possible to supply two more arguments to the macro. Of course, having the ifleft gives versatility in the usage (as nicely demonstrated in the Kpym's answer), but maybe this is not really needed (like in my case).



        documentclass[border=1mm, tikz]standalone

        makeatletter
        longdefIfLeft(#1)of(#2)#3#4%
        tikz@scan@one@pointpgfutil@firstofone(#1)relax%
        pgf@xa=pgf@x%
        tikz@scan@one@pointpgfutil@firstofone(#2)relax%
        ifdimpgf@xa<pgf@xrelax#3else#4fi

        makeatother

        begindocument

        begintikzpicture
        node[draw] (A) at (0,0) A;
        node[draw] (B) at (1,0) B;
        node[draw] (C) at (2,0) C;

        IfLeft(A)of(B)%
        foreach n in 10,20,...,90
        fill[red!n!yellow] (0.5,0) ++(n/100,0.5) circle(1mm);

        %
        foreach n in 10,20,...,90
        fill[black!n!gray] (0.5,0) ++(n/100,-0.5) circle(1mm);



        IfLeft(C)of(B)%
        foreach n in 10,20,...,90
        fill[black!n!gray] (0.5,0) ++(n/100,0.5) circle(1mm);

        %
        foreach n in 10,20,...,90
        fill[blue!n!magenta] (0.5,0) ++(n/100,-0.5) circle(1mm);


        endtikzpicture
        enddocument



         



            enter image description here







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Apr 3 at 8:53









        Axel KryptonAxel Krypton

        477211




        477211



























            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%2f482761%2fcheck-if-a-point-is-right-or-left-of-another-one-in-tikz%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

            Romeo and Juliet ContentsCharactersSynopsisSourcesDate and textThemes and motifsCriticism and interpretationLegacyScene by sceneSee alsoNotes and referencesSourcesExternal linksNavigation menu"Consumer Price Index (estimate) 1800–"10.2307/28710160037-3222287101610.1093/res/II.5.31910.2307/45967845967810.2307/2869925286992510.1525/jams.1982.35.3.03a00050"Dada Masilo: South African dancer who breaks the rules"10.1093/res/os-XV.57.1610.2307/28680942868094"Sweet Sorrow: Mann-Korman's Romeo and Juliet Closes Sept. 5 at MN's Ordway"the original10.2307/45957745957710.1017/CCOL0521570476.009"Ram Leela box office collections hit massive Rs 100 crore, pulverises prediction"Archived"Broadway Revival of Romeo and Juliet, Starring Orlando Bloom and Condola Rashad, Will Close Dec. 8"Archived10.1075/jhp.7.1.04hon"Wherefore art thou, Romeo? To make us laugh at Navy Pier"the original10.1093/gmo/9781561592630.article.O006772"Ram-leela Review Roundup: Critics Hail Film as Best Adaptation of Romeo and Juliet"Archived10.2307/31946310047-77293194631"Romeo and Juliet get Twitter treatment""Juliet's Nurse by Lois Leveen""Romeo and Juliet: Orlando Bloom's Broadway Debut Released in Theaters for Valentine's Day"Archived"Romeo and Juliet Has No Balcony"10.1093/gmo/9781561592630.article.O00778110.2307/2867423286742310.1076/enst.82.2.115.959510.1080/00138380601042675"A plague o' both your houses: error in GCSE exam paper forces apology""Juliet of the Five O'Clock Shadow, and Other Wonders"10.2307/33912430027-4321339124310.2307/28487440038-7134284874410.2307/29123140149-661129123144728341M"Weekender Guide: Shakespeare on The Drive""balcony"UK public library membership"romeo"UK public library membership10.1017/CCOL9780521844291"Post-Zionist Critique on Israel and the Palestinians Part III: Popular Culture"10.2307/25379071533-86140377-919X2537907"Capulets and Montagues: UK exam board admit mixing names up in Romeo and Juliet paper"Istoria Novellamente Ritrovata di Due Nobili Amanti2027/mdp.390150822329610820-750X"GCSE exam error: Board accidentally rewrites Shakespeare"10.2307/29176390149-66112917639"Exam board apologises after error in English GCSE paper which confused characters in Shakespeare's Romeo and Juliet""From Mariotto and Ganozza to Romeo and Guilietta: Metamorphoses of a Renaissance Tale"10.2307/37323537323510.2307/2867455286745510.2307/28678912867891"10 Questions for Taylor Swift"10.2307/28680922868092"Haymarket Theatre""The Zeffirelli Way: Revealing Talk by Florentine Director""Michael Smuin: 1938-2007 / Prolific dance director had showy career"The Life and Art of Edwin BoothRomeo and JulietRomeo and JulietRomeo and JulietRomeo and JulietEasy Read Romeo and JulietRomeo and Julieteeecb12003684p(data)4099369-3n8211610759dbe00d-a9e2-41a3-b2c1-977dd692899302814385X313670221313670221

            Creating closest line along the point''s azimuth using PostgreSQL Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) Announcing the arrival of Valued Associate #679: Cesar Manara Unicorn Meta Zoo #1: Why another podcast?Drawing line between points at specific distance in PostGIS?How to efficiently find the closest point over the dateline?How to find the nearest point by using PostGIS function?PostGIS nearest point with LATERAL JOIN in PostgreSQL 9.3+Creating a table and inserting selected streets using plpgsql functionsCreating a table that stores Distances and other columnSaving select query results (year wise) from PostgreSQL/PostGIS to text filesWhat is the information behind this geometry?How to give start and end vertex ids dynamically in pgr_dijkstra?Point to Polygon nearest distance DS_distance is not using geography index & knn <-> or <#> does not give result in orderLine to point conversion with start point and end point detection?

            Crop image to path created in TikZ? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)Crop an inserted image?TikZ pictures does not appear in posterImage behind and beyond crop marks?Tikz picture as large as possible on A4 PageTransparency vs image compression dilemmaHow to crop background from image automatically?Image does not cropTikzexternal capturing crop marks when externalizing pgfplots?How to include image path that contains a dollar signCrop image with left size given