Error when using command as parameter for an other command
Clash Royale CLAN TAG#URR8PPP
up vote
1
down vote
favorite
I want to use 2 seperate commands to first execute a calculation on a number and then displaying the number with plus or minus using following code.
When trying to run it I get various errors. I think that propably FPeval
is causing problems.
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)result
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12
MyDisplaySignMyHalf12
enddocument
macros arguments
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
add a comment |Â
up vote
1
down vote
favorite
I want to use 2 seperate commands to first execute a calculation on a number and then displaying the number with plus or minus using following code.
When trying to run it I get various errors. I think that propably FPeval
is causing problems.
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)result
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12
MyDisplaySignMyHalf12
enddocument
macros arguments
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
FPeval
is not expandable, it assigns the result toresult
, so you need to do the evaluation first and then passresult
to the expansion context in the numeric test.
– David Carlisle
Sep 8 at 18:38
add a comment |Â
up vote
1
down vote
favorite
up vote
1
down vote
favorite
I want to use 2 seperate commands to first execute a calculation on a number and then displaying the number with plus or minus using following code.
When trying to run it I get various errors. I think that propably FPeval
is causing problems.
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)result
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12
MyDisplaySignMyHalf12
enddocument
macros arguments
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
I want to use 2 seperate commands to first execute a calculation on a number and then displaying the number with plus or minus using following code.
When trying to run it I get various errors. I think that propably FPeval
is causing problems.
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)result
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12
MyDisplaySignMyHalf12
enddocument
macros arguments
macros arguments
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
asked Sep 8 at 18:30
Paul Götzinger
83
83
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
New contributor
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
Paul Götzinger is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
FPeval
is not expandable, it assigns the result toresult
, so you need to do the evaluation first and then passresult
to the expansion context in the numeric test.
– David Carlisle
Sep 8 at 18:38
add a comment |Â
FPeval
is not expandable, it assigns the result toresult
, so you need to do the evaluation first and then passresult
to the expansion context in the numeric test.
– David Carlisle
Sep 8 at 18:38
FPeval
is not expandable, it assigns the result to result
, so you need to do the evaluation first and then pass result
to the expansion context in the numeric test.– David Carlisle
Sep 8 at 18:38
FPeval
is not expandable, it assigns the result to result
, so you need to do the evaluation first and then pass result
to the expansion context in the numeric test.– David Carlisle
Sep 8 at 18:38
add a comment |Â
2 Answers
2
active
oldest
votes
up vote
3
down vote
accepted
The problem is that for the ifthenelse
test compare #1<0
, #1
has to be a number. But if you pass a macro that contains a number (or, in some way, expands to a number), that macro has to be expandable, so that ifthenelse
can performing the test. The problem, as David said in the comment, is that FPeval
is not expandable because it assigns the result to result
.
But fp_eval:n
is expandable :)
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 <= c_zero_int
$ #1 $
$ + #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Doesn't print "+0" because 0 isn't larger than c_zero_int, so the conditional evaluates to true
MyDisplaySignMyHalf-0 % Prints -0 because of the leading sign
enddocument
The only issue is with 0
. With the code above you don't get the leading +
sign because 0=0
is true, so the first (for negative numbers) is taken. If you want the leading +
sign then you have to print the sign if the value is equal to zero too, but then with negative zero you get +-0
, because -0=+0
and the sign is added too:
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 >= c_zero_int
$ + #1 $
$ #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Prints +0
MyDisplaySignMyHalf-0 % Prints +-0
enddocument
The isn't, as far as I know, a way to get -0
and +0
correct without doing extra tests for this specific scenario.
ifthenelse
does expand the argument in the test, the problem is rather thatFPeval
is not expandable. (but using fp_eval is better, I agree:-)
– David Carlisle
Sep 8 at 18:40
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
1
This would print+0
Withint_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test:int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
The changed version still prints +0.
– egreg
2 days ago
 |Â
show 1 more comment
up vote
1
down vote
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12%
% Now the result is stored in the macro result.
% Let's see the result:
result
% Now let's see the result with preceding algebraic sign:
MyDisplaySignresult
enddocument
add a comment |Â
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
3
down vote
accepted
The problem is that for the ifthenelse
test compare #1<0
, #1
has to be a number. But if you pass a macro that contains a number (or, in some way, expands to a number), that macro has to be expandable, so that ifthenelse
can performing the test. The problem, as David said in the comment, is that FPeval
is not expandable because it assigns the result to result
.
But fp_eval:n
is expandable :)
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 <= c_zero_int
$ #1 $
$ + #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Doesn't print "+0" because 0 isn't larger than c_zero_int, so the conditional evaluates to true
MyDisplaySignMyHalf-0 % Prints -0 because of the leading sign
enddocument
The only issue is with 0
. With the code above you don't get the leading +
sign because 0=0
is true, so the first (for negative numbers) is taken. If you want the leading +
sign then you have to print the sign if the value is equal to zero too, but then with negative zero you get +-0
, because -0=+0
and the sign is added too:
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 >= c_zero_int
$ + #1 $
$ #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Prints +0
MyDisplaySignMyHalf-0 % Prints +-0
enddocument
The isn't, as far as I know, a way to get -0
and +0
correct without doing extra tests for this specific scenario.
ifthenelse
does expand the argument in the test, the problem is rather thatFPeval
is not expandable. (but using fp_eval is better, I agree:-)
– David Carlisle
Sep 8 at 18:40
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
1
This would print+0
Withint_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test:int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
The changed version still prints +0.
– egreg
2 days ago
 |Â
show 1 more comment
up vote
3
down vote
accepted
The problem is that for the ifthenelse
test compare #1<0
, #1
has to be a number. But if you pass a macro that contains a number (or, in some way, expands to a number), that macro has to be expandable, so that ifthenelse
can performing the test. The problem, as David said in the comment, is that FPeval
is not expandable because it assigns the result to result
.
But fp_eval:n
is expandable :)
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 <= c_zero_int
$ #1 $
$ + #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Doesn't print "+0" because 0 isn't larger than c_zero_int, so the conditional evaluates to true
MyDisplaySignMyHalf-0 % Prints -0 because of the leading sign
enddocument
The only issue is with 0
. With the code above you don't get the leading +
sign because 0=0
is true, so the first (for negative numbers) is taken. If you want the leading +
sign then you have to print the sign if the value is equal to zero too, but then with negative zero you get +-0
, because -0=+0
and the sign is added too:
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 >= c_zero_int
$ + #1 $
$ #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Prints +0
MyDisplaySignMyHalf-0 % Prints +-0
enddocument
The isn't, as far as I know, a way to get -0
and +0
correct without doing extra tests for this specific scenario.
ifthenelse
does expand the argument in the test, the problem is rather thatFPeval
is not expandable. (but using fp_eval is better, I agree:-)
– David Carlisle
Sep 8 at 18:40
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
1
This would print+0
Withint_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test:int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
The changed version still prints +0.
– egreg
2 days ago
 |Â
show 1 more comment
up vote
3
down vote
accepted
up vote
3
down vote
accepted
The problem is that for the ifthenelse
test compare #1<0
, #1
has to be a number. But if you pass a macro that contains a number (or, in some way, expands to a number), that macro has to be expandable, so that ifthenelse
can performing the test. The problem, as David said in the comment, is that FPeval
is not expandable because it assigns the result to result
.
But fp_eval:n
is expandable :)
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 <= c_zero_int
$ #1 $
$ + #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Doesn't print "+0" because 0 isn't larger than c_zero_int, so the conditional evaluates to true
MyDisplaySignMyHalf-0 % Prints -0 because of the leading sign
enddocument
The only issue is with 0
. With the code above you don't get the leading +
sign because 0=0
is true, so the first (for negative numbers) is taken. If you want the leading +
sign then you have to print the sign if the value is equal to zero too, but then with negative zero you get +-0
, because -0=+0
and the sign is added too:
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 >= c_zero_int
$ + #1 $
$ #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Prints +0
MyDisplaySignMyHalf-0 % Prints +-0
enddocument
The isn't, as far as I know, a way to get -0
and +0
correct without doing extra tests for this specific scenario.
The problem is that for the ifthenelse
test compare #1<0
, #1
has to be a number. But if you pass a macro that contains a number (or, in some way, expands to a number), that macro has to be expandable, so that ifthenelse
can performing the test. The problem, as David said in the comment, is that FPeval
is not expandable because it assigns the result to result
.
But fp_eval:n
is expandable :)
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 <= c_zero_int
$ #1 $
$ + #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Doesn't print "+0" because 0 isn't larger than c_zero_int, so the conditional evaluates to true
MyDisplaySignMyHalf-0 % Prints -0 because of the leading sign
enddocument
The only issue is with 0
. With the code above you don't get the leading +
sign because 0=0
is true, so the first (for negative numbers) is taken. If you want the leading +
sign then you have to print the sign if the value is equal to zero too, but then with negative zero you get +-0
, because -0=+0
and the sign is added too:
documentclassscrbook
usepackagexparse
ExplSyntaxOn
NewExpandableDocumentCommandMyHalf
m
fp_eval:n trunc ( #1 / 2, 0 )
NewExpandableDocumentCommandMyDisplaySign
m
int_compare:nTF
#1 >= c_zero_int
$ + #1 $
$ #1 $
ExplSyntaxOff
begindocument
MyHalf12 % Prints 6
MyDisplaySignMyHalf12 % Prints +6
MyDisplaySignMyHalf-12 % Prints -6
MyDisplaySignMyHalf0 % Prints +0
MyDisplaySignMyHalf-0 % Prints +-0
enddocument
The isn't, as far as I know, a way to get -0
and +0
correct without doing extra tests for this specific scenario.
edited Sep 8 at 21:48
answered Sep 8 at 18:39


Phelype Oleinik
16.2k33466
16.2k33466
ifthenelse
does expand the argument in the test, the problem is rather thatFPeval
is not expandable. (but using fp_eval is better, I agree:-)
– David Carlisle
Sep 8 at 18:40
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
1
This would print+0
Withint_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test:int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
The changed version still prints +0.
– egreg
2 days ago
 |Â
show 1 more comment
ifthenelse
does expand the argument in the test, the problem is rather thatFPeval
is not expandable. (but using fp_eval is better, I agree:-)
– David Carlisle
Sep 8 at 18:40
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
1
This would print+0
Withint_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test:int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
The changed version still prints +0.
– egreg
2 days ago
ifthenelse
does expand the argument in the test, the problem is rather that FPeval
is not expandable. (but using fp_eval is better, I agree:-)– David Carlisle
Sep 8 at 18:40
ifthenelse
does expand the argument in the test, the problem is rather that FPeval
is not expandable. (but using fp_eval is better, I agree:-)– David Carlisle
Sep 8 at 18:40
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
@DavidCarlisle Ooh. Thanks, I'll fix it :)
– Phelype Oleinik
Sep 8 at 18:41
1
1
This would print
+0
With int_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test: int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
This would print
+0
With int_compare:nTF #1 <= 0
you'd solve the issue. Or reverse the test: int_compare:nNnTF #1 > 0 $+#1$ $#1$
– egreg
Sep 8 at 21:25
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
@egreg Well pointed. Thanks :)
– Phelype Oleinik
Sep 8 at 21:49
The changed version still prints +0.
– egreg
2 days ago
The changed version still prints +0.
– egreg
2 days ago
 |Â
show 1 more comment
up vote
1
down vote
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12%
% Now the result is stored in the macro result.
% Let's see the result:
result
% Now let's see the result with preceding algebraic sign:
MyDisplaySignresult
enddocument
add a comment |Â
up vote
1
down vote
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12%
% Now the result is stored in the macro result.
% Let's see the result:
result
% Now let's see the result with preceding algebraic sign:
MyDisplaySignresult
enddocument
add a comment |Â
up vote
1
down vote
up vote
1
down vote
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12%
% Now the result is stored in the macro result.
% Let's see the result:
result
% Now let's see the result with preceding algebraic sign:
MyDisplaySignresult
enddocument
documentclassscrbook
usepackagefp
usepackageifthen
newcommandMyHalf[1]FPevalresulttrunc(#1 / 2, 0)
newcommandMyDisplaySign[1]ifthenelse#1<0$#1$$+#1$
begindocument
MyHalf12%
% Now the result is stored in the macro result.
% Let's see the result:
result
% Now let's see the result with preceding algebraic sign:
MyDisplaySignresult
enddocument
answered Sep 8 at 21:20
Ulrich Diez
3,350414
3,350414
add a comment |Â
add a comment |Â
Paul Götzinger is a new contributor. Be nice, and check out our Code of Conduct.
Paul Götzinger is a new contributor. Be nice, and check out our Code of Conduct.
Paul Götzinger is a new contributor. Be nice, and check out our Code of Conduct.
Paul Götzinger is a new contributor. Be nice, and check out our Code of Conduct.
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
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f450021%2ferror-when-using-command-as-parameter-for-an-other-command%23new-answer', 'question_page');
);
Post as a guest
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
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
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
FPeval
is not expandable, it assigns the result toresult
, so you need to do the evaluation first and then passresult
to the expansion context in the numeric test.– David Carlisle
Sep 8 at 18:38