Arithmetic with LuaLaTeXHow 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

How to regain access to running applications after accidentally zapping X.org?

Client team has low performances and low technical skills: we always fix their work and now they stop collaborate with us. How to solve?

What does it mean to describe someone as a butt steak?

Did Shadowfax go to Valinor?

What would happen to a modern skyscraper if it rains micro blackholes?

Watching something be written to a file live with tail

Was any UN Security Council vote triple-vetoed?

Convert two switches to a dual stack, and add outlet - possible here?

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

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

Can I make popcorn with any corn?

Accidentally leaked the solution to an assignment, what to do now? (I'm the prof)

Can you really stack all of this on an Opportunity Attack?

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

Why does Kotter return in Welcome Back Kotter?

Arrow those variables!

Why is 150k or 200k jobs considered good when there's 300k+ births a month?

Why can't we play rap on piano?

How is it possible to have an ability score that is less than 3?

Today is the Center

Two films in a tank, only one comes out with a development error – why?

A case of the sniffles

What does the "remote control" for a QF-4 look like?

Can a Cauchy sequence converge for one metric while not converging for another?



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













2















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

begindocument
directlua
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end


The product of 2 and 3: directluaprod(2,3).
enddocument


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
    38 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
    31 mins ago






  • 2





    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 directluadofile('test.lua') -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    24 mins ago











  • @ShreevatsaR Thanks for that option!

    – Levy
    1 min ago















2















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

begindocument
directlua
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end


The product of 2 and 3: directluaprod(2,3).
enddocument


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
    38 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
    31 mins ago






  • 2





    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 directluadofile('test.lua') -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    24 mins ago











  • @ShreevatsaR Thanks for that option!

    – Levy
    1 min ago













2












2








2








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

begindocument
directlua
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end


The product of 2 and 3: directluaprod(2,3).
enddocument


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

begindocument
directlua
function prod(a,b)
tex.print(a "$times$" b "$=$" a*c)
end


The product of 2 and 3: directluaprod(2,3).
enddocument


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 48 mins ago









LevyLevy

432312




432312







  • 3





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

    – moewe
    38 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
    31 mins ago






  • 2





    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 directluadofile('test.lua') -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    24 mins ago











  • @ShreevatsaR Thanks for that option!

    – Levy
    1 min ago












  • 3





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

    – moewe
    38 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
    31 mins ago






  • 2





    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 directluadofile('test.lua') -- here the [[ instead of " is to avoid needing to escape the backslash in times.

    – ShreevatsaR
    24 mins ago











  • @ShreevatsaR Thanks for that option!

    – Levy
    1 min ago







3




3





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

– moewe
38 mins ago





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

– moewe
38 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
31 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
31 mins ago




2




2





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 directluadofile('test.lua') -- here the [[ instead of " is to avoid needing to escape the backslash in times.

– ShreevatsaR
24 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 directluadofile('test.lua') -- here the [[ instead of " is to avoid needing to escape the backslash in times.

– ShreevatsaR
24 mins ago













@ShreevatsaR Thanks for that option!

– Levy
1 min ago





@ShreevatsaR Thanks for that option!

– Levy
1 min 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


begindocument
The product of 2 and 3: directluaprod(2,3).
enddocument


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. (Thanks to Mico for the suggestion.)






share|improve this answer

























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

    – Levy
    30 mins ago











  • And the explanation was really helpful!

    – Levy
    30 mins ago











  • @Mico Done. Thanks for the idea.

    – moewe
    6 mins ago


















4














documentclass[12pt,a4paper]article

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


The product of 2 and 3: directluaprod(2,3).
enddocument


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


    begindocument
    The product of 2 and 3: directluaprod(2,3).
    enddocument


    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. (Thanks to Mico for the suggestion.)






    share|improve this answer

























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

      – Levy
      30 mins ago











    • And the explanation was really helpful!

      – Levy
      30 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      6 mins ago















    5














    documentclass[12pt,a4paper]article

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


    begindocument
    The product of 2 and 3: directluaprod(2,3).
    enddocument


    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. (Thanks to Mico for the suggestion.)






    share|improve this answer

























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

      – Levy
      30 mins ago











    • And the explanation was really helpful!

      – Levy
      30 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      6 mins ago













    5












    5








    5







    documentclass[12pt,a4paper]article

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


    begindocument
    The product of 2 and 3: directluaprod(2,3).
    enddocument


    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. (Thanks to Mico for the suggestion.)






    share|improve this answer















    documentclass[12pt,a4paper]article

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


    begindocument
    The product of 2 and 3: directluaprod(2,3).
    enddocument


    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. (Thanks to Mico for the suggestion.)







    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 6 mins ago

























    answered 36 mins ago









    moewemoewe

    96.2k10117360




    96.2k10117360












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

      – Levy
      30 mins ago











    • And the explanation was really helpful!

      – Levy
      30 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      6 mins ago

















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

      – Levy
      30 mins ago











    • And the explanation was really helpful!

      – Levy
      30 mins ago











    • @Mico Done. Thanks for the idea.

      – moewe
      6 mins ago
















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

    – Levy
    30 mins ago





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

    – Levy
    30 mins ago













    And the explanation was really helpful!

    – Levy
    30 mins ago





    And the explanation was really helpful!

    – Levy
    30 mins ago













    @Mico Done. Thanks for the idea.

    – moewe
    6 mins ago





    @Mico Done. Thanks for the idea.

    – moewe
    6 mins ago











    4














    documentclass[12pt,a4paper]article

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


    The product of 2 and 3: directluaprod(2,3).
    enddocument


    enter image description here






    share|improve this answer



























      4














      documentclass[12pt,a4paper]article

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


      The product of 2 and 3: directluaprod(2,3).
      enddocument


      enter image description here






      share|improve this answer

























        4












        4








        4







        documentclass[12pt,a4paper]article

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


        The product of 2 and 3: directluaprod(2,3).
        enddocument


        enter image description here






        share|improve this answer













        documentclass[12pt,a4paper]article

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


        The product of 2 and 3: directluaprod(2,3).
        enddocument


        enter image description here







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 37 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

            名間水力發電廠 目录 沿革 設施 鄰近設施 註釋 外部連結 导航菜单23°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.7113923°50′10″N 120°42′41″E / 23.83611°N 120.71139°E / 23.83611; 120.71139計畫概要原始内容臺灣第一座BOT 模式開發的水力發電廠-名間水力電廠名間水力發電廠 水利署首件BOT案原始内容《小檔案》名間電廠 首座BOT水力發電廠原始内容名間電廠BOT - 經濟部水利署中區水資源局

            格濟夫卡 參考資料 导航菜单51°3′40″N 34°2′21″E / 51.06111°N 34.03917°E / 51.06111; 34.03917ГезівкаПогода в селі 编辑或修订