Round command argument before usingRounding to nearest integer symbol in LatexRepeating another text multiple...

Is it possible to have a career in SciComp without contributing to arms research?

Difference between c++14 and c++17 using: `*p++ = *p`

Grouping into more groups in one iteration

Operation Unzalgo

Term “console” in game consoles

When can a polynomial be written as a polynomial function of another polynomial?

Why did my "seldom" get corrected?

How to draw a winding on a toroid of a circular cross section?

How fast does a character need to move to be effectively invisible?

Finding all possible pairs of square numbers in an array

What details should I consider before agreeing for part of my salary to be 'retained' by employer?

Is Error correction and detection can be done with out adding extra bits?

How can electric field be defined as force per charge, if the charge makes its own, singular electric field?

Why won't some unicode characters print to my terminal?

Time signature inconsistent

Why aren't there any women super GMs?

Why teach C using scanf without talking about command line arguments?

Is straight-up writing someone's opinions telling?

Strategy to pay off revolving debt while building reserve savings fund?

We get more abuse than anyone else

I have found a mistake on someone's code published online: what is the protocol?

What was the difference between a Games Console and a Home Computer?

"This used to be my phone number"

How can I help our ranger feel special about her beast companion?



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;
}







5















I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use



documentclass{minimal}
usepackage{pgffor}
newcommand{myrepeat}[2]{foreach n in {1,...,#1}{#2}}

begin{document}
myrepeat{6}{x} % prints xxxxxx
end{document}


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



myrepeat{3.2}{x}  % should print xxx
myrepeat{3.7}{x} % 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.










share|improve this question







New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Welcome to TeX.SE!

    – Mensch
    9 hours ago


















5















I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use



documentclass{minimal}
usepackage{pgffor}
newcommand{myrepeat}[2]{foreach n in {1,...,#1}{#2}}

begin{document}
myrepeat{6}{x} % prints xxxxxx
end{document}


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



myrepeat{3.2}{x}  % should print xxx
myrepeat{3.7}{x} % 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.










share|improve this question







New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • Welcome to TeX.SE!

    – Mensch
    9 hours ago














5












5








5








I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use



documentclass{minimal}
usepackage{pgffor}
newcommand{myrepeat}[2]{foreach n in {1,...,#1}{#2}}

begin{document}
myrepeat{6}{x} % prints xxxxxx
end{document}


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



myrepeat{3.2}{x}  % should print xxx
myrepeat{3.7}{x} % 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.










share|improve this question







New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I am new to LaTeX and found a helpful custom command for repeating text n times here. Below is an example use



documentclass{minimal}
usepackage{pgffor}
newcommand{myrepeat}[2]{foreach n in {1,...,#1}{#2}}

begin{document}
myrepeat{6}{x} % prints xxxxxx
end{document}


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



myrepeat{3.2}{x}  % should print xxx
myrepeat{3.7}{x} % 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






share|improve this question







New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.










share|improve this question







New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








share|improve this question




share|improve this question






New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








asked 9 hours ago









Addison KlinkeAddison Klinke

261 bronze badge




261 bronze badge




New contributor



Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




New contributor




Addison Klinke is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • Welcome to TeX.SE!

    – Mensch
    9 hours ago



















  • Welcome to TeX.SE!

    – Mensch
    9 hours ago

















Welcome to TeX.SE!

– Mensch
9 hours ago





Welcome to TeX.SE!

– Mensch
9 hours ago










3 Answers
3






active

oldest

votes


















4














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}.



documentclass{article}
usepackage{pgffor}
newcommand{myrepeat}[2]{%
pgfmathparse{round(#1)}% set rounding function here
foreach n in {1,...,pgfmathresult}{#2}}

begin{document}
myrepeat{3.2}{x} % should print xxx

myrepeat{3.7}{x} % should print xxxx
end{document}





share|improve this answer


























  • Slightly shorter: pgfmathround{#1} ... {1,...,pgfmathresult}

    – Alan Munn
    9 hours ago











  • @AlanMunn Indeed, thanks.

    – Torbjørn T.
    9 hours ago



















3














You can use the expandable functionality of xfp:



enter image description here



documentclass{article}

usepackage{pgffor,xfp}

newcommand{myrepeat}[2]{foreach n in {1,...,fpeval{floor(#1)}}{#2}}

begin{document}

myrepeat{6}{x} % prints xxxxxx

myrepeat{3.2}{x} % prints xxx

myrepeat{8.1 * sin(pi / 6)}{x}% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05

end{document}


You can use ceiling(#1), or round(#1,0), or whatever calculation you want.






share|improve this answer



















  • 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
    8 hours ago



















3














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.



documentclass{article}
usepackage{xfp}

ExplSyntaxOn
NewDocumentCommand{generalrepeat}
{
O{round} % the mode
m % the starting point
O{1} % the step
m % the final point
+m % the code to repeat (can contain par)
}
{
klinke_repeat_general:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
}

NewDocumentCommand{myrepeat}
{
O{round} % 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

begin{document}

generalrepeat{1}{3.4}{#1 }---
generalrepeat{1}{3.5}{#1 }---
generalrepeat{1}{3.6}{#1 }

generalrepeat[ceil]{1}{3.4}{#1 }---
generalrepeat[ceil]{1}{3.5}{#1 }---
generalrepeat[ceil]{1}{3.6}{#1 }

generalrepeat[floor]{1}{3.4}{#1 }---
generalrepeat[floor]{1}{3.5}{#1 }---
generalrepeat[floor]{1}{3.6}{#1 }

generalrepeat[nearest]{1}{3.4}{#1 }---
generalrepeat[nearest]{1}{3.5}{#1 }---
generalrepeat[nearest]{1}{3.6}{#1 }

myrepeat{3.4}{x}---myrepeat[floor]{3.4}{x}---%
myrepeat[ceil]{3.4}{x}---myrepeat[nearest]{3.4}{x}

myrepeat{3.5}{x}---myrepeat[floor]{3.5}{x}---%
myrepeat[ceil]{3.5}{x}---myrepeat[nearest]{3.5}{x}

myrepeat{3.6}{x}---myrepeat[floor]{3.6}{x}---%
myrepeat[ceil]{3.6}{x}---myrepeat[nearest]{3.6}{x}

end{document}


enter image description here



Both round and nearest integer are implemented to go upward in case of a tie (the 3.5 case).






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
    });


    }
    });






    Addison Klinke is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    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









    4














    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}.



    documentclass{article}
    usepackage{pgffor}
    newcommand{myrepeat}[2]{%
    pgfmathparse{round(#1)}% set rounding function here
    foreach n in {1,...,pgfmathresult}{#2}}

    begin{document}
    myrepeat{3.2}{x} % should print xxx

    myrepeat{3.7}{x} % should print xxxx
    end{document}





    share|improve this answer


























    • Slightly shorter: pgfmathround{#1} ... {1,...,pgfmathresult}

      – Alan Munn
      9 hours ago











    • @AlanMunn Indeed, thanks.

      – Torbjørn T.
      9 hours ago
















    4














    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}.



    documentclass{article}
    usepackage{pgffor}
    newcommand{myrepeat}[2]{%
    pgfmathparse{round(#1)}% set rounding function here
    foreach n in {1,...,pgfmathresult}{#2}}

    begin{document}
    myrepeat{3.2}{x} % should print xxx

    myrepeat{3.7}{x} % should print xxxx
    end{document}





    share|improve this answer


























    • Slightly shorter: pgfmathround{#1} ... {1,...,pgfmathresult}

      – Alan Munn
      9 hours ago











    • @AlanMunn Indeed, thanks.

      – Torbjørn T.
      9 hours ago














    4












    4








    4







    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}.



    documentclass{article}
    usepackage{pgffor}
    newcommand{myrepeat}[2]{%
    pgfmathparse{round(#1)}% set rounding function here
    foreach n in {1,...,pgfmathresult}{#2}}

    begin{document}
    myrepeat{3.2}{x} % should print xxx

    myrepeat{3.7}{x} % should print xxxx
    end{document}





    share|improve this answer















    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}.



    documentclass{article}
    usepackage{pgffor}
    newcommand{myrepeat}[2]{%
    pgfmathparse{round(#1)}% set rounding function here
    foreach n in {1,...,pgfmathresult}{#2}}

    begin{document}
    myrepeat{3.2}{x} % should print xxx

    myrepeat{3.7}{x} % should print xxxx
    end{document}






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 9 hours ago

























    answered 9 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
      9 hours ago











    • @AlanMunn Indeed, thanks.

      – Torbjørn T.
      9 hours ago



















    • Slightly shorter: pgfmathround{#1} ... {1,...,pgfmathresult}

      – Alan Munn
      9 hours ago











    • @AlanMunn Indeed, thanks.

      – Torbjørn T.
      9 hours ago

















    Slightly shorter: pgfmathround{#1} ... {1,...,pgfmathresult}

    – Alan Munn
    9 hours ago





    Slightly shorter: pgfmathround{#1} ... {1,...,pgfmathresult}

    – Alan Munn
    9 hours ago













    @AlanMunn Indeed, thanks.

    – Torbjørn T.
    9 hours ago





    @AlanMunn Indeed, thanks.

    – Torbjørn T.
    9 hours ago













    3














    You can use the expandable functionality of xfp:



    enter image description here



    documentclass{article}

    usepackage{pgffor,xfp}

    newcommand{myrepeat}[2]{foreach n in {1,...,fpeval{floor(#1)}}{#2}}

    begin{document}

    myrepeat{6}{x} % prints xxxxxx

    myrepeat{3.2}{x} % prints xxx

    myrepeat{8.1 * sin(pi / 6)}{x}% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05

    end{document}


    You can use ceiling(#1), or round(#1,0), or whatever calculation you want.






    share|improve this answer



















    • 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
      8 hours ago
















    3














    You can use the expandable functionality of xfp:



    enter image description here



    documentclass{article}

    usepackage{pgffor,xfp}

    newcommand{myrepeat}[2]{foreach n in {1,...,fpeval{floor(#1)}}{#2}}

    begin{document}

    myrepeat{6}{x} % prints xxxxxx

    myrepeat{3.2}{x} % prints xxx

    myrepeat{8.1 * sin(pi / 6)}{x}% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05

    end{document}


    You can use ceiling(#1), or round(#1,0), or whatever calculation you want.






    share|improve this answer



















    • 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
      8 hours ago














    3












    3








    3







    You can use the expandable functionality of xfp:



    enter image description here



    documentclass{article}

    usepackage{pgffor,xfp}

    newcommand{myrepeat}[2]{foreach n in {1,...,fpeval{floor(#1)}}{#2}}

    begin{document}

    myrepeat{6}{x} % prints xxxxxx

    myrepeat{3.2}{x} % prints xxx

    myrepeat{8.1 * sin(pi / 6)}{x}% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05

    end{document}


    You can use ceiling(#1), or round(#1,0), or whatever calculation you want.






    share|improve this answer













    You can use the expandable functionality of xfp:



    enter image description here



    documentclass{article}

    usepackage{pgffor,xfp}

    newcommand{myrepeat}[2]{foreach n in {1,...,fpeval{floor(#1)}}{#2}}

    begin{document}

    myrepeat{6}{x} % prints xxxxxx

    myrepeat{3.2}{x} % prints xxx

    myrepeat{8.1 * sin(pi / 6)}{x}% prints xxxx sin(pi/6) = 1/2; 8.1 * 1/2 = 4.05

    end{document}


    You can use ceiling(#1), or round(#1,0), or whatever calculation you want.







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered 9 hours ago









    WernerWerner

    457k76 gold badges1021 silver badges1756 bronze badges




    457k76 gold badges1021 silver badges1756 bronze badges








    • 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
      8 hours ago














    • 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
      8 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
    8 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
    8 hours ago











    3














    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.



    documentclass{article}
    usepackage{xfp}

    ExplSyntaxOn
    NewDocumentCommand{generalrepeat}
    {
    O{round} % the mode
    m % the starting point
    O{1} % the step
    m % the final point
    +m % the code to repeat (can contain par)
    }
    {
    klinke_repeat_general:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
    }

    NewDocumentCommand{myrepeat}
    {
    O{round} % 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

    begin{document}

    generalrepeat{1}{3.4}{#1 }---
    generalrepeat{1}{3.5}{#1 }---
    generalrepeat{1}{3.6}{#1 }

    generalrepeat[ceil]{1}{3.4}{#1 }---
    generalrepeat[ceil]{1}{3.5}{#1 }---
    generalrepeat[ceil]{1}{3.6}{#1 }

    generalrepeat[floor]{1}{3.4}{#1 }---
    generalrepeat[floor]{1}{3.5}{#1 }---
    generalrepeat[floor]{1}{3.6}{#1 }

    generalrepeat[nearest]{1}{3.4}{#1 }---
    generalrepeat[nearest]{1}{3.5}{#1 }---
    generalrepeat[nearest]{1}{3.6}{#1 }

    myrepeat{3.4}{x}---myrepeat[floor]{3.4}{x}---%
    myrepeat[ceil]{3.4}{x}---myrepeat[nearest]{3.4}{x}

    myrepeat{3.5}{x}---myrepeat[floor]{3.5}{x}---%
    myrepeat[ceil]{3.5}{x}---myrepeat[nearest]{3.5}{x}

    myrepeat{3.6}{x}---myrepeat[floor]{3.6}{x}---%
    myrepeat[ceil]{3.6}{x}---myrepeat[nearest]{3.6}{x}

    end{document}


    enter image description here



    Both round and nearest integer are implemented to go upward in case of a tie (the 3.5 case).






    share|improve this answer




























      3














      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.



      documentclass{article}
      usepackage{xfp}

      ExplSyntaxOn
      NewDocumentCommand{generalrepeat}
      {
      O{round} % the mode
      m % the starting point
      O{1} % the step
      m % the final point
      +m % the code to repeat (can contain par)
      }
      {
      klinke_repeat_general:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
      }

      NewDocumentCommand{myrepeat}
      {
      O{round} % 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

      begin{document}

      generalrepeat{1}{3.4}{#1 }---
      generalrepeat{1}{3.5}{#1 }---
      generalrepeat{1}{3.6}{#1 }

      generalrepeat[ceil]{1}{3.4}{#1 }---
      generalrepeat[ceil]{1}{3.5}{#1 }---
      generalrepeat[ceil]{1}{3.6}{#1 }

      generalrepeat[floor]{1}{3.4}{#1 }---
      generalrepeat[floor]{1}{3.5}{#1 }---
      generalrepeat[floor]{1}{3.6}{#1 }

      generalrepeat[nearest]{1}{3.4}{#1 }---
      generalrepeat[nearest]{1}{3.5}{#1 }---
      generalrepeat[nearest]{1}{3.6}{#1 }

      myrepeat{3.4}{x}---myrepeat[floor]{3.4}{x}---%
      myrepeat[ceil]{3.4}{x}---myrepeat[nearest]{3.4}{x}

      myrepeat{3.5}{x}---myrepeat[floor]{3.5}{x}---%
      myrepeat[ceil]{3.5}{x}---myrepeat[nearest]{3.5}{x}

      myrepeat{3.6}{x}---myrepeat[floor]{3.6}{x}---%
      myrepeat[ceil]{3.6}{x}---myrepeat[nearest]{3.6}{x}

      end{document}


      enter image description here



      Both round and nearest integer are implemented to go upward in case of a tie (the 3.5 case).






      share|improve this answer


























        3












        3








        3







        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.



        documentclass{article}
        usepackage{xfp}

        ExplSyntaxOn
        NewDocumentCommand{generalrepeat}
        {
        O{round} % the mode
        m % the starting point
        O{1} % the step
        m % the final point
        +m % the code to repeat (can contain par)
        }
        {
        klinke_repeat_general:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
        }

        NewDocumentCommand{myrepeat}
        {
        O{round} % 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

        begin{document}

        generalrepeat{1}{3.4}{#1 }---
        generalrepeat{1}{3.5}{#1 }---
        generalrepeat{1}{3.6}{#1 }

        generalrepeat[ceil]{1}{3.4}{#1 }---
        generalrepeat[ceil]{1}{3.5}{#1 }---
        generalrepeat[ceil]{1}{3.6}{#1 }

        generalrepeat[floor]{1}{3.4}{#1 }---
        generalrepeat[floor]{1}{3.5}{#1 }---
        generalrepeat[floor]{1}{3.6}{#1 }

        generalrepeat[nearest]{1}{3.4}{#1 }---
        generalrepeat[nearest]{1}{3.5}{#1 }---
        generalrepeat[nearest]{1}{3.6}{#1 }

        myrepeat{3.4}{x}---myrepeat[floor]{3.4}{x}---%
        myrepeat[ceil]{3.4}{x}---myrepeat[nearest]{3.4}{x}

        myrepeat{3.5}{x}---myrepeat[floor]{3.5}{x}---%
        myrepeat[ceil]{3.5}{x}---myrepeat[nearest]{3.5}{x}

        myrepeat{3.6}{x}---myrepeat[floor]{3.6}{x}---%
        myrepeat[ceil]{3.6}{x}---myrepeat[nearest]{3.6}{x}

        end{document}


        enter image description here



        Both round and nearest integer are implemented to go upward in case of a tie (the 3.5 case).






        share|improve this answer













        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.



        documentclass{article}
        usepackage{xfp}

        ExplSyntaxOn
        NewDocumentCommand{generalrepeat}
        {
        O{round} % the mode
        m % the starting point
        O{1} % the step
        m % the final point
        +m % the code to repeat (can contain par)
        }
        {
        klinke_repeat_general:nnnnn { #1 } { #2 } { #3 } { #4 } { #5 }
        }

        NewDocumentCommand{myrepeat}
        {
        O{round} % 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

        begin{document}

        generalrepeat{1}{3.4}{#1 }---
        generalrepeat{1}{3.5}{#1 }---
        generalrepeat{1}{3.6}{#1 }

        generalrepeat[ceil]{1}{3.4}{#1 }---
        generalrepeat[ceil]{1}{3.5}{#1 }---
        generalrepeat[ceil]{1}{3.6}{#1 }

        generalrepeat[floor]{1}{3.4}{#1 }---
        generalrepeat[floor]{1}{3.5}{#1 }---
        generalrepeat[floor]{1}{3.6}{#1 }

        generalrepeat[nearest]{1}{3.4}{#1 }---
        generalrepeat[nearest]{1}{3.5}{#1 }---
        generalrepeat[nearest]{1}{3.6}{#1 }

        myrepeat{3.4}{x}---myrepeat[floor]{3.4}{x}---%
        myrepeat[ceil]{3.4}{x}---myrepeat[nearest]{3.4}{x}

        myrepeat{3.5}{x}---myrepeat[floor]{3.5}{x}---%
        myrepeat[ceil]{3.5}{x}---myrepeat[nearest]{3.5}{x}

        myrepeat{3.6}{x}---myrepeat[floor]{3.6}{x}---%
        myrepeat[ceil]{3.6}{x}---myrepeat[nearest]{3.6}{x}

        end{document}


        enter image description here



        Both round and nearest integer are implemented to go upward in case of a tie (the 3.5 case).







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 7 hours ago









        egregegreg

        756k90 gold badges1978 silver badges3324 bronze badges




        756k90 gold badges1978 silver badges3324 bronze badges






















            Addison Klinke is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            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.




            draft saved


            draft discarded














            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





















































            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

            Taj Mahal Inhaltsverzeichnis Aufbau | Geschichte | 350-Jahr-Feier | Heutige Bedeutung | Siehe auch |...

            Baia Sprie Cuprins Etimologie | Istorie | Demografie | Politică și administrație | Arii naturale...

            Ciclooctatetraenă Vezi și | Bibliografie | Meniu de navigare637866text4148569-500570979m