Arithmetic with LuaLaTeXHow to do a 'printline' in LuaTeXLuaTeX: How to handle a Lua function that prints TeX...

Does detail obscure or enhance action?

Do infinite dimensional systems make sense?

Languages that we cannot (dis)prove to be Context-Free

Why does Kotter return in Welcome Back Kotter?

How much RAM could one put in a typical 80386 setup?

Roll the carpet

Get value of a counter

Can I ask the recruiters in my resume to put the reason why I am rejected?

Has there ever been an airliner design involving reducing generator load by installing solar panels?

How does one intimidate enemies without having the capacity for violence?

Maximum likelihood parameters deviate from posterior distributions

What's that red-plus icon near a text?

Mutually beneficial digestive system symbiotes

Why is consensus so controversial in Britain?

Which country benefited the most from UN Security Council vetoes?

Was any UN Security Council vote triple-vetoed?

Is it possible to do 50 km distance without any previous training?

What does "Puller Prush Person" mean?

Is it unprofessional to ask if a job posting on GlassDoor is real?

How to format long polynomial?

Why doesn't Newton's third law mean a person bounces back to where they started when they hit the ground?

I'm flying to France today and my passport expires in less than 2 months

Filter any system log file by date or date range

A case of the sniffles



Arithmetic with LuaLaTeX


How to do a 'printline' in LuaTeXLuaTeX: How to handle a Lua function that prints TeX macrosLuaLatex: Difference between `dofile` and `require` when loading lua filesLuaLaTeX issue with string (need to escape)Compilation error with LuaLaTeXCompilation error with LuaLaTeX (texnansi.enc)Compilation sequence with lualatexLuaLatex, includespread and libreoffice table with %Print Latex Code with LuaLatex in functionCompiling classicthesis with LuaLaTexDoes LuaLaTeX mess with pagetotal?Lualatex, deal with pictures in luaConTeXt passing current counter value to lua













1















The function I'm trying to create is one that takes two numbers and prints the result with some math. The following is my code:



documentclass[12pt,a4paper]{article}

begin{document}
directlua{
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end
}

The product of 2 and 3: directlua{prod(2,3)}.
end{document}


I can't make it print the whole statement correctly. How to solve it?










share|improve this question


















  • 3





    Try tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")

    – moewe
    32 mins ago






  • 1





    Unlike TeX, to which everything is (by default) a token to be typeset so you can simply write "hello world" and have those words appear in the typeset output, Lua is a general-purpose programming language in which something like a b is a syntax error (assuming a and b are variables). Here, tex.print is a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms of tex.print too, that you can read in the LuaTeX manual, but those are probably not what you want.) Lua uses .. to concatenate strings.

    – ShreevatsaR
    25 mins ago






  • 1





    BTW instead of concatenating different strings with .., you can also use string.format to build a string, e.g. in a file test.lua put function prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) end and in your file do directlua{dofile('test.lua')} -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    18 mins ago
















1















The function I'm trying to create is one that takes two numbers and prints the result with some math. The following is my code:



documentclass[12pt,a4paper]{article}

begin{document}
directlua{
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end
}

The product of 2 and 3: directlua{prod(2,3)}.
end{document}


I can't make it print the whole statement correctly. How to solve it?










share|improve this question


















  • 3





    Try tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")

    – moewe
    32 mins ago






  • 1





    Unlike TeX, to which everything is (by default) a token to be typeset so you can simply write "hello world" and have those words appear in the typeset output, Lua is a general-purpose programming language in which something like a b is a syntax error (assuming a and b are variables). Here, tex.print is a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms of tex.print too, that you can read in the LuaTeX manual, but those are probably not what you want.) Lua uses .. to concatenate strings.

    – ShreevatsaR
    25 mins ago






  • 1





    BTW instead of concatenating different strings with .., you can also use string.format to build a string, e.g. in a file test.lua put function prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) end and in your file do directlua{dofile('test.lua')} -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    18 mins ago














1












1








1








The function I'm trying to create is one that takes two numbers and prints the result with some math. The following is my code:



documentclass[12pt,a4paper]{article}

begin{document}
directlua{
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end
}

The product of 2 and 3: directlua{prod(2,3)}.
end{document}


I can't make it print the whole statement correctly. How to solve it?










share|improve this question














The function I'm trying to create is one that takes two numbers and prints the result with some math. The following is my code:



documentclass[12pt,a4paper]{article}

begin{document}
directlua{
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end
}

The product of 2 and 3: directlua{prod(2,3)}.
end{document}


I can't make it print the whole statement correctly. How to solve it?







luatex






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked 41 mins ago









LevyLevy

427312




427312








  • 3





    Try tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")

    – moewe
    32 mins ago






  • 1





    Unlike TeX, to which everything is (by default) a token to be typeset so you can simply write "hello world" and have those words appear in the typeset output, Lua is a general-purpose programming language in which something like a b is a syntax error (assuming a and b are variables). Here, tex.print is a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms of tex.print too, that you can read in the LuaTeX manual, but those are probably not what you want.) Lua uses .. to concatenate strings.

    – ShreevatsaR
    25 mins ago






  • 1





    BTW instead of concatenating different strings with .., you can also use string.format to build a string, e.g. in a file test.lua put function prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) end and in your file do directlua{dofile('test.lua')} -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    18 mins ago














  • 3





    Try tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")

    – moewe
    32 mins ago






  • 1





    Unlike TeX, to which everything is (by default) a token to be typeset so you can simply write "hello world" and have those words appear in the typeset output, Lua is a general-purpose programming language in which something like a b is a syntax error (assuming a and b are variables). Here, tex.print is a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms of tex.print too, that you can read in the LuaTeX manual, but those are probably not what you want.) Lua uses .. to concatenate strings.

    – ShreevatsaR
    25 mins ago






  • 1





    BTW instead of concatenating different strings with .., you can also use string.format to build a string, e.g. in a file test.lua put function prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) end and in your file do directlua{dofile('test.lua')} -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    18 mins ago








3




3





Try tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")

– moewe
32 mins ago





Try tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")

– moewe
32 mins ago




1




1





Unlike TeX, to which everything is (by default) a token to be typeset so you can simply write "hello world" and have those words appear in the typeset output, Lua is a general-purpose programming language in which something like a b is a syntax error (assuming a and b are variables). Here, tex.print is a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms of tex.print too, that you can read in the LuaTeX manual, but those are probably not what you want.) Lua uses .. to concatenate strings.

– ShreevatsaR
25 mins ago





Unlike TeX, to which everything is (by default) a token to be typeset so you can simply write "hello world" and have those words appear in the typeset output, Lua is a general-purpose programming language in which something like a b is a syntax error (assuming a and b are variables). Here, tex.print is a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms of tex.print too, that you can read in the LuaTeX manual, but those are probably not what you want.) Lua uses .. to concatenate strings.

– ShreevatsaR
25 mins ago




1




1





BTW instead of concatenating different strings with .., you can also use string.format to build a string, e.g. in a file test.lua put function prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) end and in your file do directlua{dofile('test.lua')} -- here the [[ instead of " is to avoid needing to escape the backslash in times.

– ShreevatsaR
18 mins ago





BTW instead of concatenating different strings with .., you can also use string.format to build a string, e.g. in a file test.lua put function prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) end and in your file do directlua{dofile('test.lua')} -- here the [[ instead of " is to avoid needing to escape the backslash in times.

– ShreevatsaR
18 mins ago










2 Answers
2






active

oldest

votes


















5














documentclass[12pt,a4paper]{article}

directlua{
function prod(a,b)
tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")
end
}

begin{document}
The product of 2 and 3: directlua{prod(2,3)}.
end{document}


The product of 2 and 3: 2 × 3 = 6.



One tricky thing is getting the backslash escaping game right: LuaTeX: How to handle a Lua function that prints TeX macros. directlua expands macros before passing them on to Lua, so times gets messed up. But something like stringtimes, which should stop that expansion does not quite work as intended because t is a special escape for the tab in Lua. Hence we need to escape the backslash there. In Lua you would have to type \times, but in TeX we need to stop the \ from being expanded, so we need string\times. That is one of the reasons why it is often recommended to use the luacode package or externalise Lua functions into their own .lua files and then load them with dofile or require (see for example How to do a 'printline' in LuaTeX, a bit on dofile and require can be found at LuaLatex: Difference between `dofile` and `require` when loading lua files).



Another thing is that you need .. to concatenate strings.



Finally, you probably want the entire expression in math mode and not just certain bits.



Also moved the directlua function definition into the preamble.






share|improve this answer


























  • That's what I was looking for. It worked here. Thank you!

    – Levy
    24 mins ago











  • And the explanation was really helpful!

    – Levy
    24 mins ago











  • +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

    – Mico
    2 mins ago











  • @Mico Done. Thanks for the idea.

    – moewe
    9 secs ago



















4














documentclass[12pt,a4paper]{article}

begin{document}
directlua{
function prod(a,b)
tex.print(a.. "$string\times$".. b.. "$=$".. a*b)
end
}

The product of 2 and 3: directlua{prod(2,3)}.
end{document}


enter image description here






share|improve this answer
























    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "85"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f483416%2farithmetic-with-lualatex%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









    5














    documentclass[12pt,a4paper]{article}

    directlua{
    function prod(a,b)
    tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")
    end
    }

    begin{document}
    The product of 2 and 3: directlua{prod(2,3)}.
    end{document}


    The product of 2 and 3: 2 × 3 = 6.



    One tricky thing is getting the backslash escaping game right: LuaTeX: How to handle a Lua function that prints TeX macros. directlua expands macros before passing them on to Lua, so times gets messed up. But something like stringtimes, which should stop that expansion does not quite work as intended because t is a special escape for the tab in Lua. Hence we need to escape the backslash there. In Lua you would have to type \times, but in TeX we need to stop the \ from being expanded, so we need string\times. That is one of the reasons why it is often recommended to use the luacode package or externalise Lua functions into their own .lua files and then load them with dofile or require (see for example How to do a 'printline' in LuaTeX, a bit on dofile and require can be found at LuaLatex: Difference between `dofile` and `require` when loading lua files).



    Another thing is that you need .. to concatenate strings.



    Finally, you probably want the entire expression in math mode and not just certain bits.



    Also moved the directlua function definition into the preamble.






    share|improve this answer


























    • That's what I was looking for. It worked here. Thank you!

      – Levy
      24 mins ago











    • And the explanation was really helpful!

      – Levy
      24 mins ago











    • +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

      – Mico
      2 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      9 secs ago
















    5














    documentclass[12pt,a4paper]{article}

    directlua{
    function prod(a,b)
    tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")
    end
    }

    begin{document}
    The product of 2 and 3: directlua{prod(2,3)}.
    end{document}


    The product of 2 and 3: 2 × 3 = 6.



    One tricky thing is getting the backslash escaping game right: LuaTeX: How to handle a Lua function that prints TeX macros. directlua expands macros before passing them on to Lua, so times gets messed up. But something like stringtimes, which should stop that expansion does not quite work as intended because t is a special escape for the tab in Lua. Hence we need to escape the backslash there. In Lua you would have to type \times, but in TeX we need to stop the \ from being expanded, so we need string\times. That is one of the reasons why it is often recommended to use the luacode package or externalise Lua functions into their own .lua files and then load them with dofile or require (see for example How to do a 'printline' in LuaTeX, a bit on dofile and require can be found at LuaLatex: Difference between `dofile` and `require` when loading lua files).



    Another thing is that you need .. to concatenate strings.



    Finally, you probably want the entire expression in math mode and not just certain bits.



    Also moved the directlua function definition into the preamble.






    share|improve this answer


























    • That's what I was looking for. It worked here. Thank you!

      – Levy
      24 mins ago











    • And the explanation was really helpful!

      – Levy
      24 mins ago











    • +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

      – Mico
      2 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      9 secs ago














    5












    5








    5







    documentclass[12pt,a4paper]{article}

    directlua{
    function prod(a,b)
    tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")
    end
    }

    begin{document}
    The product of 2 and 3: directlua{prod(2,3)}.
    end{document}


    The product of 2 and 3: 2 × 3 = 6.



    One tricky thing is getting the backslash escaping game right: LuaTeX: How to handle a Lua function that prints TeX macros. directlua expands macros before passing them on to Lua, so times gets messed up. But something like stringtimes, which should stop that expansion does not quite work as intended because t is a special escape for the tab in Lua. Hence we need to escape the backslash there. In Lua you would have to type \times, but in TeX we need to stop the \ from being expanded, so we need string\times. That is one of the reasons why it is often recommended to use the luacode package or externalise Lua functions into their own .lua files and then load them with dofile or require (see for example How to do a 'printline' in LuaTeX, a bit on dofile and require can be found at LuaLatex: Difference between `dofile` and `require` when loading lua files).



    Another thing is that you need .. to concatenate strings.



    Finally, you probably want the entire expression in math mode and not just certain bits.



    Also moved the directlua function definition into the preamble.






    share|improve this answer















    documentclass[12pt,a4paper]{article}

    directlua{
    function prod(a,b)
    tex.print("$" .. a .. "string\times" .. b .. "=" .. a*b .. "$")
    end
    }

    begin{document}
    The product of 2 and 3: directlua{prod(2,3)}.
    end{document}


    The product of 2 and 3: 2 × 3 = 6.



    One tricky thing is getting the backslash escaping game right: LuaTeX: How to handle a Lua function that prints TeX macros. directlua expands macros before passing them on to Lua, so times gets messed up. But something like stringtimes, which should stop that expansion does not quite work as intended because t is a special escape for the tab in Lua. Hence we need to escape the backslash there. In Lua you would have to type \times, but in TeX we need to stop the \ from being expanded, so we need string\times. That is one of the reasons why it is often recommended to use the luacode package or externalise Lua functions into their own .lua files and then load them with dofile or require (see for example How to do a 'printline' in LuaTeX, a bit on dofile and require can be found at LuaLatex: Difference between `dofile` and `require` when loading lua files).



    Another thing is that you need .. to concatenate strings.



    Finally, you probably want the entire expression in math mode and not just certain bits.



    Also moved the directlua function definition into the preamble.







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 24 secs ago

























    answered 30 mins ago









    moewemoewe

    96.2k10117360




    96.2k10117360













    • That's what I was looking for. It worked here. Thank you!

      – Levy
      24 mins ago











    • And the explanation was really helpful!

      – Levy
      24 mins ago











    • +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

      – Mico
      2 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      9 secs ago



















    • That's what I was looking for. It worked here. Thank you!

      – Levy
      24 mins ago











    • And the explanation was really helpful!

      – Levy
      24 mins ago











    • +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

      – Mico
      2 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      9 secs ago

















    That's what I was looking for. It worked here. Thank you!

    – Levy
    24 mins ago





    That's what I was looking for. It worked here. Thank you!

    – Levy
    24 mins ago













    And the explanation was really helpful!

    – Levy
    24 mins ago





    And the explanation was really helpful!

    – Levy
    24 mins ago













    +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

    – Mico
    2 mins ago





    +1. The only thing I'd change is place the directlua{...} chunk before rather than after begin{document}. That way, it's clearer to the casual reader of the code what's preamble material and what belongs to the body of the document.

    – Mico
    2 mins ago













    @Mico Done. Thanks for the idea.

    – moewe
    9 secs ago





    @Mico Done. Thanks for the idea.

    – moewe
    9 secs ago











    4














    documentclass[12pt,a4paper]{article}

    begin{document}
    directlua{
    function prod(a,b)
    tex.print(a.. "$string\times$".. b.. "$=$".. a*b)
    end
    }

    The product of 2 and 3: directlua{prod(2,3)}.
    end{document}


    enter image description here






    share|improve this answer




























      4














      documentclass[12pt,a4paper]{article}

      begin{document}
      directlua{
      function prod(a,b)
      tex.print(a.. "$string\times$".. b.. "$=$".. a*b)
      end
      }

      The product of 2 and 3: directlua{prod(2,3)}.
      end{document}


      enter image description here






      share|improve this answer


























        4












        4








        4







        documentclass[12pt,a4paper]{article}

        begin{document}
        directlua{
        function prod(a,b)
        tex.print(a.. "$string\times$".. b.. "$=$".. a*b)
        end
        }

        The product of 2 and 3: directlua{prod(2,3)}.
        end{document}


        enter image description here






        share|improve this answer













        documentclass[12pt,a4paper]{article}

        begin{document}
        directlua{
        function prod(a,b)
        tex.print(a.. "$string\times$".. b.. "$=$".. a*b)
        end
        }

        The product of 2 and 3: directlua{prod(2,3)}.
        end{document}


        enter image description here







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 30 mins ago









        Ulrike FischerUlrike Fischer

        198k9305692




        198k9305692






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to TeX - LaTeX Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f483416%2farithmetic-with-lualatex%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

            迭戈·戈丁...

            A phrase ”follow into" in a context The 2019 Stack Overflow Developer Survey Results Are...

            1960s short story making fun of James Bond-style spy fiction The 2019 Stack Overflow Developer...