Round command argument before usingRounding to nearest integer symbol in LatexRepeating another text multiple times using commandsPass a command as argument for another commandVariable argument commandUsing argument command as argument without bracketsPass blank as argument to a commandNew command without 3 argument bracketsCustom command with predefined argumentUsing an argument as a command in newcommandNumber as Argument for CommandUsing command/macro as an optional argumentLaTeX command returning its argument unalteredly
Why don't humans perceive waves as twice the frequency they are?
How can one convert an expression to a string while keeping the quotation marks of strings that are part of the expression?
How much water can a ship take on before sinking?
The most secure way to handle someone forgetting to verify their account?
How do you give a date interval with diffuse dates?
Why do space operations use "nominal" to mean "working correctly"?
Inscriptio Labyrinthica
Time signature inconsistent
In this iconic lunar orbit rendezvous photo of John Houbolt, why do arrows #5 and #6 point the "wrong" way?
Finding all possible pairs of square numbers in an array
ANOVA or Linear Mixed Model?
Did Hitler say this quote about homeschooling?
Grouping into more groups in one iteration
Applying for jobs with an obvious scar
What did Jeremy Hunt mean by "slipped" to miss a vote?
What is the period of Langton's ant on a torus?
How fast does a character need to move to be effectively invisible?
How to interpret a promising preprint that was never published?
Why are there few or no black super GMs?
How do you send money when you're not sure it's not a scam?
Why does a tetrahedral molecule like methane have a dipole moment of zero?
Zhora asks Deckard: "Are you for real?". Was this meant to be significant?
Software need db owner permission to master database (sql2016)
When designing an adventure, how can I ensure a continuous player experience in a setting that's likely to favor TPKs?
Round command argument before using
Rounding to nearest integer symbol in LatexRepeating another text multiple times using commandsPass a command as argument for another commandVariable argument commandUsing argument command as argument without bracketsPass blank as argument to a commandNew command without 3 argument bracketsCustom command with predefined argumentUsing an argument as a command in newcommandNumber as Argument for CommandUsing command/macro as an optional argumentLaTeX command returning its argument unalteredly
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use
documentclassminimal
usepackagepgffor
newcommandmyrepeat[2]foreach n in 1,...,#1#2
begindocument
myrepeat6x % prints xxxxxx
enddocument
My goal is to pass a decimal number as the first argument to the command (as opposed to an integer currently). The for-loop in the command should round the decimal to determine how many iterations to execute. This way I can universally change the rounding mode (i.e. floor, ceiling, closest integer, etc) later just by updating the one command. For instance
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
How can I achieve this behavior?
Most other threads I have seen only deal with printing rounding/ceiling/floor symbols instead of actually performing the rounding math and allowing you to use the resulting number in further computations.
macros
New contributor
add a comment |
I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use
documentclassminimal
usepackagepgffor
newcommandmyrepeat[2]foreach n in 1,...,#1#2
begindocument
myrepeat6x % prints xxxxxx
enddocument
My goal is to pass a decimal number as the first argument to the command (as opposed to an integer currently). The for-loop in the command should round the decimal to determine how many iterations to execute. This way I can universally change the rounding mode (i.e. floor, ceiling, closest integer, etc) later just by updating the one command. For instance
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
How can I achieve this behavior?
Most other threads I have seen only deal with printing rounding/ceiling/floor symbols instead of actually performing the rounding math and allowing you to use the resulting number in further computations.
macros
New contributor
Welcome to TeX.SE!
– Mensch
8 hours ago
add a comment |
I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use
documentclassminimal
usepackagepgffor
newcommandmyrepeat[2]foreach n in 1,...,#1#2
begindocument
myrepeat6x % prints xxxxxx
enddocument
My goal is to pass a decimal number as the first argument to the command (as opposed to an integer currently). The for-loop in the command should round the decimal to determine how many iterations to execute. This way I can universally change the rounding mode (i.e. floor, ceiling, closest integer, etc) later just by updating the one command. For instance
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
How can I achieve this behavior?
Most other threads I have seen only deal with printing rounding/ceiling/floor symbols instead of actually performing the rounding math and allowing you to use the resulting number in further computations.
macros
New contributor
I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use
documentclassminimal
usepackagepgffor
newcommandmyrepeat[2]foreach n in 1,...,#1#2
begindocument
myrepeat6x % prints xxxxxx
enddocument
My goal is to pass a decimal number as the first argument to the command (as opposed to an integer currently). The for-loop in the command should round the decimal to determine how many iterations to execute. This way I can universally change the rounding mode (i.e. floor, ceiling, closest integer, etc) later just by updating the one command. For instance
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
How can I achieve this behavior?
Most other threads I have seen only deal with printing rounding/ceiling/floor symbols instead of actually performing the rounding math and allowing you to use the resulting number in further computations.
macros
macros
New contributor
New contributor
New contributor
asked 8 hours ago
Addison KlinkeAddison Klinke
211 bronze badge
211 bronze badge
New contributor
New contributor
Welcome to TeX.SE!
– Mensch
8 hours ago
add a comment |
Welcome to TeX.SE!
– Mensch
8 hours ago
Welcome to TeX.SE!
– Mensch
8 hours ago
Welcome to TeX.SE!
– Mensch
8 hours ago
add a comment |
3 Answers
3
active
oldest
votes
One approach would be this. ceil
and floor
are alternatives to round
. There are also command versions of each, as Alan Munn mentions in a comment, i.e. pgfmathround#1
, pgfmathceil#1
, pgfmathfloor#1
.
documentclassarticle
usepackagepgffor
newcommandmyrepeat[2]%
pgfmathparseround(#1)% set rounding function here
foreach n in 1,...,pgfmathresult#2
begindocument
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
enddocument
Slightly shorter:pgfmathround#1
...1,...,pgfmathresult
– Alan Munn
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
add a comment |
You can use the expandable functionality of xfp
:
documentclassarticle
usepackagepgffor,xfp
newcommandmyrepeat[2]foreach n in 1,...,fpevalfloor(#1)#2
begindocument
myrepeat6x % prints xxxxxx
myrepeat3.2x % prints xxx
myrepeat8.1 * sin(pi / 6)x% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05
enddocument
You can use ceiling(#1)
, or round(#1,0)
, or whatever calculation you want.
1
The functionround
uses “ties to even”, so bothround(3.5,0)
andround(4.5,0)
will yield 4. You get “ties to infinity” withround(3.5,0,1)
orround(4.5,0,1)
that would yield 4 and 5 respectively.
– egreg
6 hours ago
add a comment |
Here's a fairly general macro where you can set the mode as an optional argument: choose between round
(default), floor
, ceil
or nearest
.
The generalrepeat
macro accepts the starting point (an integer), the step (an integer, default 1) and the end point (a floating point number).
The myrepeat
macro is a reduced version, always starting from 1 with step 1.
In the final argument (code to repeat), the current value in the loop is denoted by #1
.
documentclassarticle
usepackagexfp
ExplSyntaxOn
NewDocumentCommandgeneralrepeat
Oround % the mode
m % the starting point
O1 % the step
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 #2 #3 #4 #5
NewDocumentCommandmyrepeat
Oround % the mode
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 1 1 #2 #3
cs_new_protected:Nn klinke_repeat_general:nnnnn
cs_set_eq:Nc __klinke_repeat_mode:n __klinke_repeat_#1:n
cs_set_protected:Nn __klinke_repeat_code:n #5
int_step_function:nnnN
#2 % start
#3 % step
__klinke_repeat_mode:n #4 % end
__klinke_repeat_code:n % action
cs_new:Nn __klinke_repeat_round:n fp_eval:n round(#1,0,1)
cs_new:Nn __klinke_repeat_floor:n fp_eval:n floor(#1,0)
cs_new:Nn __klinke_repeat_ceil:n fp_eval:n ceil(#1,0)
cs_new:Nn __klinke_repeat_nearest:n
fp_eval:n #1 - floor(#1,0) < 0.5 ? floor(#1,0) : ceil(#1,0)
ExplSyntaxOff
begindocument
generalrepeat13.4#1 ---
generalrepeat13.5#1 ---
generalrepeat13.6#1
generalrepeat[ceil]13.4#1 ---
generalrepeat[ceil]13.5#1 ---
generalrepeat[ceil]13.6#1
generalrepeat[floor]13.4#1 ---
generalrepeat[floor]13.5#1 ---
generalrepeat[floor]13.6#1
generalrepeat[nearest]13.4#1 ---
generalrepeat[nearest]13.5#1 ---
generalrepeat[nearest]13.6#1
myrepeat3.4x---myrepeat[floor]3.4x---%
myrepeat[ceil]3.4x---myrepeat[nearest]3.4x
myrepeat3.5x---myrepeat[floor]3.5x---%
myrepeat[ceil]3.5x---myrepeat[nearest]3.5x
myrepeat3.6x---myrepeat[floor]3.6x---%
myrepeat[ceil]3.6x---myrepeat[nearest]3.6x
enddocument
Both round
and nearest
integer are implemented to go upward in case of a tie (the 3.5 case).
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
);
);
Addison Klinke 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
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f500551%2fround-command-argument-before-using%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
One approach would be this. ceil
and floor
are alternatives to round
. There are also command versions of each, as Alan Munn mentions in a comment, i.e. pgfmathround#1
, pgfmathceil#1
, pgfmathfloor#1
.
documentclassarticle
usepackagepgffor
newcommandmyrepeat[2]%
pgfmathparseround(#1)% set rounding function here
foreach n in 1,...,pgfmathresult#2
begindocument
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
enddocument
Slightly shorter:pgfmathround#1
...1,...,pgfmathresult
– Alan Munn
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
add a comment |
One approach would be this. ceil
and floor
are alternatives to round
. There are also command versions of each, as Alan Munn mentions in a comment, i.e. pgfmathround#1
, pgfmathceil#1
, pgfmathfloor#1
.
documentclassarticle
usepackagepgffor
newcommandmyrepeat[2]%
pgfmathparseround(#1)% set rounding function here
foreach n in 1,...,pgfmathresult#2
begindocument
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
enddocument
Slightly shorter:pgfmathround#1
...1,...,pgfmathresult
– Alan Munn
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
add a comment |
One approach would be this. ceil
and floor
are alternatives to round
. There are also command versions of each, as Alan Munn mentions in a comment, i.e. pgfmathround#1
, pgfmathceil#1
, pgfmathfloor#1
.
documentclassarticle
usepackagepgffor
newcommandmyrepeat[2]%
pgfmathparseround(#1)% set rounding function here
foreach n in 1,...,pgfmathresult#2
begindocument
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
enddocument
One approach would be this. ceil
and floor
are alternatives to round
. There are also command versions of each, as Alan Munn mentions in a comment, i.e. pgfmathround#1
, pgfmathceil#1
, pgfmathfloor#1
.
documentclassarticle
usepackagepgffor
newcommandmyrepeat[2]%
pgfmathparseround(#1)% set rounding function here
foreach n in 1,...,pgfmathresult#2
begindocument
myrepeat3.2x % should print xxx
myrepeat3.7x % should print xxxx
enddocument
edited 8 hours ago
answered 8 hours ago
Torbjørn T.Torbjørn T.
162k13 gold badges266 silver badges453 bronze badges
162k13 gold badges266 silver badges453 bronze badges
Slightly shorter:pgfmathround#1
...1,...,pgfmathresult
– Alan Munn
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
add a comment |
Slightly shorter:pgfmathround#1
...1,...,pgfmathresult
– Alan Munn
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
Slightly shorter:
pgfmathround#1
... 1,...,pgfmathresult
– Alan Munn
8 hours ago
Slightly shorter:
pgfmathround#1
... 1,...,pgfmathresult
– Alan Munn
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
@AlanMunn Indeed, thanks.
– Torbjørn T.
8 hours ago
add a comment |
You can use the expandable functionality of xfp
:
documentclassarticle
usepackagepgffor,xfp
newcommandmyrepeat[2]foreach n in 1,...,fpevalfloor(#1)#2
begindocument
myrepeat6x % prints xxxxxx
myrepeat3.2x % prints xxx
myrepeat8.1 * sin(pi / 6)x% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05
enddocument
You can use ceiling(#1)
, or round(#1,0)
, or whatever calculation you want.
1
The functionround
uses “ties to even”, so bothround(3.5,0)
andround(4.5,0)
will yield 4. You get “ties to infinity” withround(3.5,0,1)
orround(4.5,0,1)
that would yield 4 and 5 respectively.
– egreg
6 hours ago
add a comment |
You can use the expandable functionality of xfp
:
documentclassarticle
usepackagepgffor,xfp
newcommandmyrepeat[2]foreach n in 1,...,fpevalfloor(#1)#2
begindocument
myrepeat6x % prints xxxxxx
myrepeat3.2x % prints xxx
myrepeat8.1 * sin(pi / 6)x% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05
enddocument
You can use ceiling(#1)
, or round(#1,0)
, or whatever calculation you want.
1
The functionround
uses “ties to even”, so bothround(3.5,0)
andround(4.5,0)
will yield 4. You get “ties to infinity” withround(3.5,0,1)
orround(4.5,0,1)
that would yield 4 and 5 respectively.
– egreg
6 hours ago
add a comment |
You can use the expandable functionality of xfp
:
documentclassarticle
usepackagepgffor,xfp
newcommandmyrepeat[2]foreach n in 1,...,fpevalfloor(#1)#2
begindocument
myrepeat6x % prints xxxxxx
myrepeat3.2x % prints xxx
myrepeat8.1 * sin(pi / 6)x% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05
enddocument
You can use ceiling(#1)
, or round(#1,0)
, or whatever calculation you want.
You can use the expandable functionality of xfp
:
documentclassarticle
usepackagepgffor,xfp
newcommandmyrepeat[2]foreach n in 1,...,fpevalfloor(#1)#2
begindocument
myrepeat6x % prints xxxxxx
myrepeat3.2x % prints xxx
myrepeat8.1 * sin(pi / 6)x% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05
enddocument
You can use ceiling(#1)
, or round(#1,0)
, or whatever calculation you want.
answered 8 hours ago
WernerWerner
457k76 gold badges1021 silver badges1756 bronze badges
457k76 gold badges1021 silver badges1756 bronze badges
1
The functionround
uses “ties to even”, so bothround(3.5,0)
andround(4.5,0)
will yield 4. You get “ties to infinity” withround(3.5,0,1)
orround(4.5,0,1)
that would yield 4 and 5 respectively.
– egreg
6 hours ago
add a comment |
1
The functionround
uses “ties to even”, so bothround(3.5,0)
andround(4.5,0)
will yield 4. You get “ties to infinity” withround(3.5,0,1)
orround(4.5,0,1)
that would yield 4 and 5 respectively.
– egreg
6 hours ago
1
1
The function
round
uses “ties to even”, so both round(3.5,0)
and round(4.5,0)
will yield 4. You get “ties to infinity” with round(3.5,0,1)
or round(4.5,0,1)
that would yield 4 and 5 respectively.– egreg
6 hours ago
The function
round
uses “ties to even”, so both round(3.5,0)
and round(4.5,0)
will yield 4. You get “ties to infinity” with round(3.5,0,1)
or round(4.5,0,1)
that would yield 4 and 5 respectively.– egreg
6 hours ago
add a comment |
Here's a fairly general macro where you can set the mode as an optional argument: choose between round
(default), floor
, ceil
or nearest
.
The generalrepeat
macro accepts the starting point (an integer), the step (an integer, default 1) and the end point (a floating point number).
The myrepeat
macro is a reduced version, always starting from 1 with step 1.
In the final argument (code to repeat), the current value in the loop is denoted by #1
.
documentclassarticle
usepackagexfp
ExplSyntaxOn
NewDocumentCommandgeneralrepeat
Oround % the mode
m % the starting point
O1 % the step
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 #2 #3 #4 #5
NewDocumentCommandmyrepeat
Oround % the mode
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 1 1 #2 #3
cs_new_protected:Nn klinke_repeat_general:nnnnn
cs_set_eq:Nc __klinke_repeat_mode:n __klinke_repeat_#1:n
cs_set_protected:Nn __klinke_repeat_code:n #5
int_step_function:nnnN
#2 % start
#3 % step
__klinke_repeat_mode:n #4 % end
__klinke_repeat_code:n % action
cs_new:Nn __klinke_repeat_round:n fp_eval:n round(#1,0,1)
cs_new:Nn __klinke_repeat_floor:n fp_eval:n floor(#1,0)
cs_new:Nn __klinke_repeat_ceil:n fp_eval:n ceil(#1,0)
cs_new:Nn __klinke_repeat_nearest:n
fp_eval:n #1 - floor(#1,0) < 0.5 ? floor(#1,0) : ceil(#1,0)
ExplSyntaxOff
begindocument
generalrepeat13.4#1 ---
generalrepeat13.5#1 ---
generalrepeat13.6#1
generalrepeat[ceil]13.4#1 ---
generalrepeat[ceil]13.5#1 ---
generalrepeat[ceil]13.6#1
generalrepeat[floor]13.4#1 ---
generalrepeat[floor]13.5#1 ---
generalrepeat[floor]13.6#1
generalrepeat[nearest]13.4#1 ---
generalrepeat[nearest]13.5#1 ---
generalrepeat[nearest]13.6#1
myrepeat3.4x---myrepeat[floor]3.4x---%
myrepeat[ceil]3.4x---myrepeat[nearest]3.4x
myrepeat3.5x---myrepeat[floor]3.5x---%
myrepeat[ceil]3.5x---myrepeat[nearest]3.5x
myrepeat3.6x---myrepeat[floor]3.6x---%
myrepeat[ceil]3.6x---myrepeat[nearest]3.6x
enddocument
Both round
and nearest
integer are implemented to go upward in case of a tie (the 3.5 case).
add a comment |
Here's a fairly general macro where you can set the mode as an optional argument: choose between round
(default), floor
, ceil
or nearest
.
The generalrepeat
macro accepts the starting point (an integer), the step (an integer, default 1) and the end point (a floating point number).
The myrepeat
macro is a reduced version, always starting from 1 with step 1.
In the final argument (code to repeat), the current value in the loop is denoted by #1
.
documentclassarticle
usepackagexfp
ExplSyntaxOn
NewDocumentCommandgeneralrepeat
Oround % the mode
m % the starting point
O1 % the step
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 #2 #3 #4 #5
NewDocumentCommandmyrepeat
Oround % the mode
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 1 1 #2 #3
cs_new_protected:Nn klinke_repeat_general:nnnnn
cs_set_eq:Nc __klinke_repeat_mode:n __klinke_repeat_#1:n
cs_set_protected:Nn __klinke_repeat_code:n #5
int_step_function:nnnN
#2 % start
#3 % step
__klinke_repeat_mode:n #4 % end
__klinke_repeat_code:n % action
cs_new:Nn __klinke_repeat_round:n fp_eval:n round(#1,0,1)
cs_new:Nn __klinke_repeat_floor:n fp_eval:n floor(#1,0)
cs_new:Nn __klinke_repeat_ceil:n fp_eval:n ceil(#1,0)
cs_new:Nn __klinke_repeat_nearest:n
fp_eval:n #1 - floor(#1,0) < 0.5 ? floor(#1,0) : ceil(#1,0)
ExplSyntaxOff
begindocument
generalrepeat13.4#1 ---
generalrepeat13.5#1 ---
generalrepeat13.6#1
generalrepeat[ceil]13.4#1 ---
generalrepeat[ceil]13.5#1 ---
generalrepeat[ceil]13.6#1
generalrepeat[floor]13.4#1 ---
generalrepeat[floor]13.5#1 ---
generalrepeat[floor]13.6#1
generalrepeat[nearest]13.4#1 ---
generalrepeat[nearest]13.5#1 ---
generalrepeat[nearest]13.6#1
myrepeat3.4x---myrepeat[floor]3.4x---%
myrepeat[ceil]3.4x---myrepeat[nearest]3.4x
myrepeat3.5x---myrepeat[floor]3.5x---%
myrepeat[ceil]3.5x---myrepeat[nearest]3.5x
myrepeat3.6x---myrepeat[floor]3.6x---%
myrepeat[ceil]3.6x---myrepeat[nearest]3.6x
enddocument
Both round
and nearest
integer are implemented to go upward in case of a tie (the 3.5 case).
add a comment |
Here's a fairly general macro where you can set the mode as an optional argument: choose between round
(default), floor
, ceil
or nearest
.
The generalrepeat
macro accepts the starting point (an integer), the step (an integer, default 1) and the end point (a floating point number).
The myrepeat
macro is a reduced version, always starting from 1 with step 1.
In the final argument (code to repeat), the current value in the loop is denoted by #1
.
documentclassarticle
usepackagexfp
ExplSyntaxOn
NewDocumentCommandgeneralrepeat
Oround % the mode
m % the starting point
O1 % the step
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 #2 #3 #4 #5
NewDocumentCommandmyrepeat
Oround % the mode
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 1 1 #2 #3
cs_new_protected:Nn klinke_repeat_general:nnnnn
cs_set_eq:Nc __klinke_repeat_mode:n __klinke_repeat_#1:n
cs_set_protected:Nn __klinke_repeat_code:n #5
int_step_function:nnnN
#2 % start
#3 % step
__klinke_repeat_mode:n #4 % end
__klinke_repeat_code:n % action
cs_new:Nn __klinke_repeat_round:n fp_eval:n round(#1,0,1)
cs_new:Nn __klinke_repeat_floor:n fp_eval:n floor(#1,0)
cs_new:Nn __klinke_repeat_ceil:n fp_eval:n ceil(#1,0)
cs_new:Nn __klinke_repeat_nearest:n
fp_eval:n #1 - floor(#1,0) < 0.5 ? floor(#1,0) : ceil(#1,0)
ExplSyntaxOff
begindocument
generalrepeat13.4#1 ---
generalrepeat13.5#1 ---
generalrepeat13.6#1
generalrepeat[ceil]13.4#1 ---
generalrepeat[ceil]13.5#1 ---
generalrepeat[ceil]13.6#1
generalrepeat[floor]13.4#1 ---
generalrepeat[floor]13.5#1 ---
generalrepeat[floor]13.6#1
generalrepeat[nearest]13.4#1 ---
generalrepeat[nearest]13.5#1 ---
generalrepeat[nearest]13.6#1
myrepeat3.4x---myrepeat[floor]3.4x---%
myrepeat[ceil]3.4x---myrepeat[nearest]3.4x
myrepeat3.5x---myrepeat[floor]3.5x---%
myrepeat[ceil]3.5x---myrepeat[nearest]3.5x
myrepeat3.6x---myrepeat[floor]3.6x---%
myrepeat[ceil]3.6x---myrepeat[nearest]3.6x
enddocument
Both round
and nearest
integer are implemented to go upward in case of a tie (the 3.5 case).
Here's a fairly general macro where you can set the mode as an optional argument: choose between round
(default), floor
, ceil
or nearest
.
The generalrepeat
macro accepts the starting point (an integer), the step (an integer, default 1) and the end point (a floating point number).
The myrepeat
macro is a reduced version, always starting from 1 with step 1.
In the final argument (code to repeat), the current value in the loop is denoted by #1
.
documentclassarticle
usepackagexfp
ExplSyntaxOn
NewDocumentCommandgeneralrepeat
Oround % the mode
m % the starting point
O1 % the step
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 #2 #3 #4 #5
NewDocumentCommandmyrepeat
Oround % the mode
m % the final point
+m % the code to repeat (can contain par)
klinke_repeat_general:nnnnn #1 1 1 #2 #3
cs_new_protected:Nn klinke_repeat_general:nnnnn
cs_set_eq:Nc __klinke_repeat_mode:n __klinke_repeat_#1:n
cs_set_protected:Nn __klinke_repeat_code:n #5
int_step_function:nnnN
#2 % start
#3 % step
__klinke_repeat_mode:n #4 % end
__klinke_repeat_code:n % action
cs_new:Nn __klinke_repeat_round:n fp_eval:n round(#1,0,1)
cs_new:Nn __klinke_repeat_floor:n fp_eval:n floor(#1,0)
cs_new:Nn __klinke_repeat_ceil:n fp_eval:n ceil(#1,0)
cs_new:Nn __klinke_repeat_nearest:n
fp_eval:n #1 - floor(#1,0) < 0.5 ? floor(#1,0) : ceil(#1,0)
ExplSyntaxOff
begindocument
generalrepeat13.4#1 ---
generalrepeat13.5#1 ---
generalrepeat13.6#1
generalrepeat[ceil]13.4#1 ---
generalrepeat[ceil]13.5#1 ---
generalrepeat[ceil]13.6#1
generalrepeat[floor]13.4#1 ---
generalrepeat[floor]13.5#1 ---
generalrepeat[floor]13.6#1
generalrepeat[nearest]13.4#1 ---
generalrepeat[nearest]13.5#1 ---
generalrepeat[nearest]13.6#1
myrepeat3.4x---myrepeat[floor]3.4x---%
myrepeat[ceil]3.4x---myrepeat[nearest]3.4x
myrepeat3.5x---myrepeat[floor]3.5x---%
myrepeat[ceil]3.5x---myrepeat[nearest]3.5x
myrepeat3.6x---myrepeat[floor]3.6x---%
myrepeat[ceil]3.6x---myrepeat[nearest]3.6x
enddocument
Both round
and nearest
integer are implemented to go upward in case of a tie (the 3.5 case).
answered 6 hours ago
egregegreg
756k90 gold badges1978 silver badges3324 bronze badges
756k90 gold badges1978 silver badges3324 bronze badges
add a comment |
add a comment |
Addison Klinke is a new contributor. Be nice, and check out our Code of Conduct.
Addison Klinke is a new contributor. Be nice, and check out our Code of Conduct.
Addison Klinke is a new contributor. Be nice, and check out our Code of Conduct.
Addison Klinke is a new contributor. Be nice, and check out our Code of Conduct.
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%2f500551%2fround-command-argument-before-using%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
Welcome to TeX.SE!
– Mensch
8 hours ago