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?
How does a dynamic QR code work?
How to remove border from elements in the last row?
Should I tell management that I intend to leave due to bad software development practices?
Is there a hemisphere-neutral way of specifying a season?
Why were 5.25" floppy drives cheaper than 8"?
Why do I get negative height?
GFCI outlets - can they be repaired? Are they really needed at the end of a circuit?
Can a virus destroy the BIOS of a modern computer?
Are British MPs missing the point, with these 'Indicative Votes'?
Processor speed limited at 0.4 Ghz
How to travel to Japan while expressing milk?
How can I deal with my CEO asking me to hire someone with a higher salary than me, a co-founder?
In the UK, is it possible to get a referendum by a court decision?
How do conventional missiles fly?
Is it possible to create a QR code using text?
Do creatures with a listed speed of "0 ft., fly 30 ft. (hover)" ever touch the ground?
Why are UK visa biometrics appointments suspended at USCIS Application Support Centers?
How could indestructible materials be used in power generation?
Convert seconds to minutes
Is it a bad idea to plug the other end of ESD strap to wall ground?
Is this draw by repetition?
Could neural networks be considered metaheuristics?
Why didn't Boeing produce its own regional jet?
Why was Sir Cadogan fired?
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?
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:
- In the commented code, what is exactly happening in the
ifnum
expansion, which makes the compilation fail? - How can I fix the
isRight
command in order to be able to use it together withifnum
? - If question 2 is tricky, how can I affect the
ifnum
expansion to achieve what I wish? - Is there in
pgf
a smarter/more straightforward way to check if aTikZ
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:
- How (and where) is
pdfstrcmp
implemented, since it is harmless to use it in aifnum ... fi
construct?
tikz-pgf expansion
add a comment |
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:
- In the commented code, what is exactly happening in the
ifnum
expansion, which makes the compilation fail? - How can I fix the
isRight
command in order to be able to use it together withifnum
? - If question 2 is tricky, how can I affect the
ifnum
expansion to achieve what I wish? - Is there in
pgf
a smarter/more straightforward way to check if aTikZ
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:
- How (and where) is
pdfstrcmp
implemented, since it is harmless to use it in aifnum ... fi
construct?
tikz-pgf expansion
your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum.pdfstrcmp
is a primitive.
– Ulrike Fischer
13 hours ago
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 thatpdfstrcmp
is a primitive clarifies why I was not finding its implementation... I should have had a look to thepdftex
manual before.
– Axel Krypton
12 hours ago
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
12 hours ago
add a comment |
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:
- In the commented code, what is exactly happening in the
ifnum
expansion, which makes the compilation fail? - How can I fix the
isRight
command in order to be able to use it together withifnum
? - If question 2 is tricky, how can I affect the
ifnum
expansion to achieve what I wish? - Is there in
pgf
a smarter/more straightforward way to check if aTikZ
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:
- How (and where) is
pdfstrcmp
implemented, since it is harmless to use it in aifnum ... fi
construct?
tikz-pgf expansion
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:
- In the commented code, what is exactly happening in the
ifnum
expansion, which makes the compilation fail? - How can I fix the
isRight
command in order to be able to use it together withifnum
? - If question 2 is tricky, how can I affect the
ifnum
expansion to achieve what I wish? - Is there in
pgf
a smarter/more straightforward way to check if aTikZ
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:
- How (and where) is
pdfstrcmp
implemented, since it is harmless to use it in aifnum ... fi
construct?
tikz-pgf expansion
tikz-pgf expansion
asked 14 hours ago
Axel KryptonAxel Krypton
475211
475211
your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum.pdfstrcmp
is a primitive.
– Ulrike Fischer
13 hours ago
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 thatpdfstrcmp
is a primitive clarifies why I was not finding its implementation... I should have had a look to thepdftex
manual before.
– Axel Krypton
12 hours ago
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
12 hours ago
add a comment |
your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum.pdfstrcmp
is a primitive.
– Ulrike Fischer
13 hours ago
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 thatpdfstrcmp
is a primitive clarifies why I was not finding its implementation... I should have had a look to thepdftex
manual before.
– Axel Krypton
12 hours ago
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
12 hours ago
your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum.
pdfstrcmp
is a primitive.– Ulrike Fischer
13 hours ago
your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum.
pdfstrcmp
is a primitive.– Ulrike Fischer
13 hours ago
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
12 hours ago
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
12 hours ago
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
12 hours ago
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
12 hours ago
add a comment |
2 Answers
2
active
oldest
votes
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
add a comment |
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
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
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
add a comment |
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
add a comment |
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
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
answered 12 hours ago
marmotmarmot
114k5145276
114k5145276
add a comment |
add a comment |
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
add a comment |
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
add a comment |
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
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
edited 6 hours ago
answered 8 hours ago
KpymKpym
17.5k24191
17.5k24191
add a comment |
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
your commands are not expandable (they assign a number to pgfmathresult) and will never work in a ifnum.
pdfstrcmp
is a primitive.– Ulrike Fischer
13 hours ago
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 thepdftex
manual before.– Axel Krypton
12 hours ago
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
12 hours ago