Hi everybody Is there a way to have an automatic access to the current line number of a specific place inside a tex file ? To be more precise, here is what I would like to do. I am currently trying to have some automatic external compilation by g++ of some portion of my tex file as in the following example below. \startC \stopC defines a framed part of text written between lines 538 and 549. Of course, if I add something before or inbetween my framed code, 538 and/or 549 will change. Thus I would like to get these two numbers automatically. Thank you. Thierry \startC #include <iostream> using namespace std; int mysum(int,int); int a; int b; int main () { a=2; b=9; cout << mysum(a,b) << endl; return 0; } int mysum(int a, int b) { return a+b; } \stopC \startluacode myout = io.open("test.cpp", "w") myin = io.open(tex.jobname..".tex", "r") local n=0 for line in myin:lines() do n=n+1 if n>539 and n<550 then myout:write(line.."\n") end end myout:close() myin:close() os.execute("g++ -o test test.cpp") os.execute("./test > tmp") local file=assert(io.open("tmp","r")) local t = file:read("*all") tex.print(t) \stopluacode
On 9/3/2021 12:58 PM, Thierry Horsin via ntg-context wrote:
Hi everybody
Is there a way to have an automatic access to the current line number of a specific place inside a tex file ? To be more precise, here is what I would like to do.
I am currently trying to have some automatic external compilation by g++ of some portion of my tex file as in the following example below. \startC \stopC defines a framed part of text written between lines 538 and 549. Of course, if I add something before or inbetween my framed code, 538 and/or 549 will change. Thus I would like to get these two numbers automatically.
Thank you. Thierry
\startC #include <iostream>
using namespace std; int mysum(int,int); int a; int b; int main () { a=2; b=9; cout << mysum(a,b) << endl; return 0; } int mysum(int a, int b) { return a+b; } \stopC
\startluacode myout = io.open("test.cpp", "w") myin = io.open(tex.jobname..".tex", "r") local n=0 for line in myin:lines() do n=n+1 if n>539 and n<550 then myout:write(line.."\n") end end myout:close() myin:close() os.execute("g++ -o test test.cpp") os.execute("./test > tmp") local file=assert(io.open("tmp","r")) local t = file:read("*all") tex.print(t) \stopluacode in this case, thinking a bit different is easier ...
\starttext \startbuffer[MyBuffer] #include <iostream> using namespace std; int mysum(int,int); int a; int b; int main () { a=2; b=9; cout << mysum(a,b) << endl; return 0; } int mysum(int a, int b) { return a+b; } \stopbuffer We compile and run: \typebuffer[MyBuffer][option=C] \startluacode io.savedata("test.cpp",buffers.getcontent("MyBuffer")) --os.execute("g++ -o test test.cpp") --os.execute("./test > test.tmp") os.execute("echo done > test.tmp") buffers.assign("MyBuffer",io.loaddata("test.tmp")) \stopluacode And get: \typebuffer[MyBuffer] Or just: \typefile{test.tmp} \stoptext ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Many thanks Hans. Thierry Le Friday 03 Sep 2021 à 14:16:40 (+0200), Hans Hagen a écrit :
in this case, thinking a bit different is easier ...
\starttext
\startbuffer[MyBuffer] #include <iostream>
using namespace std; int mysum(int,int); int a; int b; int main () { a=2; b=9; cout << mysum(a,b) << endl; return 0; } int mysum(int a, int b) { return a+b; } \stopbuffer
We compile and run:
\typebuffer[MyBuffer][option=C]
\startluacode io.savedata("test.cpp",buffers.getcontent("MyBuffer")) --os.execute("g++ -o test test.cpp") --os.execute("./test > test.tmp") os.execute("echo done > test.tmp") buffers.assign("MyBuffer",io.loaddata("test.tmp")) \stopluacode
And get:
\typebuffer[MyBuffer]
Or just:
\typefile{test.tmp}
\stoptext
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
On Fri, 3 Sep 2021, Thierry Horsin via ntg-context wrote:
Hi everybody
Is there a way to have an automatic access to the current line number of a specific place inside a tex file ? To be more precise, here is what I would like to do.
Also look at the filter module. https://github.com/adityam/filter Behind the scenes, it works by saving the content in an external file and then running it through any external program. It also allows for caching the result, and has many options for customizing the behavior. Aditya
On Fri, 3 Sep 2021, Thierry Horsin via ntg-context wrote:
Hi everybody
Is there a way to have an automatic access to the current line number of a specific place inside a tex file ? To be more precise, here is what I would like to do.
Also look at the filter module.
https://github.com/adityam/filter
Behind the scenes, it works by saving the content in an external file and then running it through any external program. It also allows for caching the result, and has many options for customizing the behavior. you forgot to mention that it also makes sure that you only process when
On 9/3/2021 3:53 PM, Aditya Mahajan via ntg-context wrote: there has been a change (after all calling gcc comes at a price) Hans ----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
Hi, I am trying to test this file but without success. I just do context test.tex but I suspect that is not it. When you say
We compile and run:
Which command is it with ?
Thanks
Fabrice
Le ven. 3 sept. 2021 à 18:26, Hans Hagen via ntg-context
On Fri, 3 Sep 2021, Thierry Horsin via ntg-context wrote:
Hi everybody
Is there a way to have an automatic access to the current line number of a specific place inside a tex file ? To be more precise, here is what I would like to do.
Also look at the filter module.
https://github.com/adityam/filter
Behind the scenes, it works by saving the content in an external file and then running it through any external program. It also allows for caching the result, and has many options for customizing the behavior. you forgot to mention that it also makes sure that you only process when
On 9/3/2021 3:53 PM, Aditya Mahajan via ntg-context wrote: there has been a change (after all calling gcc comes at a price)
Hans
----------------------------------------------------------------- Hans Hagen | PRAGMA ADE Ridderstraat 27 | 8061 GH Hasselt | The Netherlands tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl -----------------------------------------------------------------
___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context webpage : http://www.pragma-ade.nl / http://context.aanhet.net archive : https://bitbucket.org/phg/context-mirror/commits/ wiki : http://contextgarden.net
___________________________________________________________________________________
participants (4)
-
Aditya Mahajan
-
Fabrice Couvreur
-
Hans Hagen
-
Thierry Horsin