Lualatex code to select enclosed text from another file
I am trying to write a function that would select a text delimited by some symbols (*) from another file and print it. The following gives an error. What is the right way to pass 'text' to string.gsub?
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gsub(text,"*(.*)*","") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
luatex
add a comment |
I am trying to write a function that would select a text delimited by some symbols (*) from another file and print it. The following gives an error. What is the right way to pass 'text' to string.gsub?
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gsub(text,"*(.*)*","") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
luatex
Are you sure you want to use*(.*)*? This does not select the literal*which you seemingly want to use as delimiter…
– TeXnician
Jan 22 at 20:22
add a comment |
I am trying to write a function that would select a text delimited by some symbols (*) from another file and print it. The following gives an error. What is the right way to pass 'text' to string.gsub?
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gsub(text,"*(.*)*","") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
luatex
I am trying to write a function that would select a text delimited by some symbols (*) from another file and print it. The following gives an error. What is the right way to pass 'text' to string.gsub?
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gsub(text,"*(.*)*","") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
luatex
luatex
asked Jan 22 at 18:55
Dmitry StarostinDmitry Starostin
754
754
Are you sure you want to use*(.*)*? This does not select the literal*which you seemingly want to use as delimiter…
– TeXnician
Jan 22 at 20:22
add a comment |
Are you sure you want to use*(.*)*? This does not select the literal*which you seemingly want to use as delimiter…
– TeXnician
Jan 22 at 20:22
Are you sure you want to use
*(.*)*? This does not select the literal * which you seemingly want to use as delimiter…– TeXnician
Jan 22 at 20:22
Are you sure you want to use
*(.*)*? This does not select the literal * which you seemingly want to use as delimiter…– TeXnician
Jan 22 at 20:22
add a comment |
1 Answer
1
active
oldest
votes
You need to use gmatch instead of gsub. And probably non greedy regexp (.-) if there are more then one match:
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars *two*
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gmatch(text,"*(.-)*") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
tex.print(x .. "\par")
– Denys Potapov
Jan 23 at 6:37
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
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');
});
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%2f471350%2flualatex-code-to-select-enclosed-text-from-another-file%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You need to use gmatch instead of gsub. And probably non greedy regexp (.-) if there are more then one match:
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars *two*
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gmatch(text,"*(.-)*") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
tex.print(x .. "\par")
– Denys Potapov
Jan 23 at 6:37
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
add a comment |
You need to use gmatch instead of gsub. And probably non greedy regexp (.-) if there are more then one match:
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars *two*
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gmatch(text,"*(.-)*") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
tex.print(x .. "\par")
– Denys Potapov
Jan 23 at 6:37
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
add a comment |
You need to use gmatch instead of gsub. And probably non greedy regexp (.-) if there are more then one match:
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars *two*
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gmatch(text,"*(.-)*") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
You need to use gmatch instead of gsub. And probably non greedy regexp (.-) if there are more then one match:
documentclass{scrartcl}
usepackage{luatextra}
usepackage{filecontents}
begin{filecontents}{testdata.dat}
a *string enclosed in* stars *two*
end{filecontents}
begin{luacode*}
function readtxt()
file = io.open("testdata.dat", "r")
text = file:read("*all")
file:close()
for x in string.gmatch(text,"*(.-)*") do
tex.print(x)
end
end
end{luacode*}
begin{document}
directlua{readtxt()}
end{document}
answered Jan 22 at 21:01
Denys PotapovDenys Potapov
2067
2067
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
tex.print(x .. "\par")
– Denys Potapov
Jan 23 at 6:37
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
add a comment |
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
tex.print(x .. "\par")
– Denys Potapov
Jan 23 at 6:37
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
Thank you! To print in lines, how does one insert par or n so that Latex correctly transfer it to luacode? tex.print(x)\par?Obviously tex.print(x)n does not work since n = ^^J.
– Dmitry Starostin
Jan 23 at 6:34
tex.print(x .. "\par")– Denys Potapov
Jan 23 at 6:37
tex.print(x .. "\par")– Denys Potapov
Jan 23 at 6:37
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
If I want to include some commands like footnote into the text processed by lua (I cannot find the answers on this site right now), do I redefine catcode for within begin{luacode*} and then redefine it back within luacode or right after it ends? Is this the 'right' way (and the most direct way)?
– Dmitry Starostin
Jan 24 at 12:33
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');
});
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%2f471350%2flualatex-code-to-select-enclosed-text-from-another-file%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Are you sure you want to use
*(.*)*? This does not select the literal*which you seemingly want to use as delimiter…– TeXnician
Jan 22 at 20:22