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
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
add a comment |
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
3
Trytex.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 likea bis a syntax error (assumingaandbare variables). Here,tex.printis a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms oftex.printtoo, 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 usestring.formatto build a string, e.g. in a filetest.luaputfunction prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) endand in your file dodirectluadofile('test.lua')-- here the[[instead of"is to avoid needing to escape the backslash intimes.
– ShreevatsaR
24 mins ago
@ShreevatsaR Thanks for that option!
– Levy
1 min ago
add a comment |
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
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
luatex
asked 48 mins ago
LevyLevy
432312
432312
3
Trytex.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 likea bis a syntax error (assumingaandbare variables). Here,tex.printis a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms oftex.printtoo, 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 usestring.formatto build a string, e.g. in a filetest.luaputfunction prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) endand in your file dodirectluadofile('test.lua')-- here the[[instead of"is to avoid needing to escape the backslash intimes.
– ShreevatsaR
24 mins ago
@ShreevatsaR Thanks for that option!
– Levy
1 min ago
add a comment |
3
Trytex.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 likea bis a syntax error (assumingaandbare variables). Here,tex.printis a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms oftex.printtoo, 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 usestring.formatto build a string, e.g. in a filetest.luaputfunction prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) endand in your file dodirectluadofile('test.lua')-- here the[[instead of"is to avoid needing to escape the backslash intimes.
– 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
add a comment |
2 Answers
2
active
oldest
votes
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

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.)
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
add a comment |
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

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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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%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
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

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.)
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
add a comment |
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

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.)
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
add a comment |
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

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

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.)
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
add a comment |
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
add a comment |
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

add a comment |
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

add a comment |
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

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

answered 37 mins ago
Ulrike FischerUlrike Fischer
198k9305692
198k9305692
add a comment |
add a comment |
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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%2f483416%2farithmetic-with-lualatex%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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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');
var $window = $(window),
onScroll = function(e)
var $elem = $('.new-login-left'),
docViewTop = $window.scrollTop(),
docViewBottom = docViewTop + $window.height(),
elemTop = $elem.offset().top,
elemBottom = elemTop + $elem.height();
if ((docViewTop elemBottom))
StackExchange.using('gps', function() StackExchange.gps.track('embedded_signup_form.view', location: 'question_page' ); );
$window.unbind('scroll', onScroll);
;
$window.on('scroll', onScroll);
);
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
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 bis a syntax error (assumingaandbare variables). Here,tex.printis a Lua function that takes a single string as input, so you need to give it a single string. (There are other forms oftex.printtoo, 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 usestring.formatto build a string, e.g. in a filetest.luaputfunction prod(a,b) tex.print(string.format([[$%d times %d = %d$]], a, b, a*b)) endand in your file dodirectluadofile('test.lua')-- here the[[instead of"is to avoid needing to escape the backslash intimes.– ShreevatsaR
24 mins ago
@ShreevatsaR Thanks for that option!
– Levy
1 min ago