* [NTG-context] using an end of line as parameter @ 2024-02-19 12:49 Miguel Diaz 2024-02-19 22:36 ` [NTG-context] " Hans Hagen 0 siblings, 1 reply; 9+ messages in thread From: Miguel Diaz @ 2024-02-19 12:49 UTC (permalink / raw) To: mailing list for ConTeXt users [-- Attachment #1.1: Type: text/plain, Size: 1213 bytes --] Dear list, I want to format some language tests that different people are preparing. Each one uses different software and there are always problems in format that i want to solve. for a a/b/c questions I receive text that I will format to a list (comments are mine) In den Büchereien gibt es auch … %the question … Kuchen. %option a … Theater. %option b … Workshops. %option c I need to detect \par or whatever sign marks the newline character as an argument delimiter so that I dont have to paste hundreds of times braces for each argument. For the example, I use this macro definition (which does no work!) \long\def\prueba #1\par#2\par#3\par#4ñ{\framed[frame=off,width=0.8\textwidth,corner=round,offset=1em,align=flushleft]% {{\bf Beispiel}: #1\\ \qquad a) #2\\ \qquad b) {\bf #3}\\ \qquad c) #4 } I get: tex error on line 493 in file ./prueba.tex: The file ended when scanning an argument. the macro seems to read to the end of file not detecting \par; I know its the \par that causes the problem; I used ^^M also which I read is a sinonym for return but it also does not work. Help would be appreciated (my computer keyboard would appreciate it too...) [-- Attachment #1.2: Type: text/html, Size: 1334 bytes --] [-- Attachment #2: Type: text/plain, Size: 511 bytes --] ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-19 12:49 [NTG-context] using an end of line as parameter Miguel Diaz @ 2024-02-19 22:36 ` Hans Hagen 2024-02-20 11:26 ` madiazm.eoicc 0 siblings, 1 reply; 9+ messages in thread From: Hans Hagen @ 2024-02-19 22:36 UTC (permalink / raw) To: ntg-context On 2/19/2024 1:49 PM, Miguel Diaz wrote: > Dear list, > I want to format some language tests that different people are > preparing. Each one uses different software and there are always > problems in format that i want to solve. > > for a a/b/c questions I receive text that I will format to a list > (comments are mine) > > In den Büchereien gibt es auch … %the question > … Kuchen. %option a > … Theater. %option b > … Workshops. %option c > > I need to detect \par or whatever sign marks the newline character as an > argument delimiter so that I dont have to paste hundreds of times braces > for each argument. > For the example, I use this macro definition (which does no work!) > > \long\def\prueba > #1\par#2\par#3\par#4ñ{\framed[frame=off,width=0.8\textwidth,corner=round,offset=1em,align=flushleft]% > {{\bf Beispiel}: #1\\ > \qquad a) #2\\ > \qquad b) {\bf #3}\\ > \qquad c) #4 > } > > I get: tex error on line 493 in file ./prueba.tex: The file ended when > scanning an argument. > > the macro seems to read to the end of file not detecting \par; I know > its the \par that causes the problem; I used ^^M also which I read is a > sinonym for return but it also does not work. > > Help would be appreciated (my computer keyboard would appreciate it too...) better start thinking something: \starttext \def\foo#1{<<<#1>>>>\par} \startluacode local s = [[ line 1 line 2 line 3 line 4 ]] -- local s - io.loaddata("yourfile.txt") local lines = string.splitlines(s) for i=1,#lines do if lines[i] ~= "" then context.foo(lines[i]) end end \stopluacode \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 ----------------------------------------------------------------- ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-19 22:36 ` [NTG-context] " Hans Hagen @ 2024-02-20 11:26 ` madiazm.eoicc 2024-02-20 12:13 ` Hans Hagen 0 siblings, 1 reply; 9+ messages in thread From: madiazm.eoicc @ 2024-02-20 11:26 UTC (permalink / raw) To: ntg-context Thanks Hans, I supposed that lua would be more suitable, but unfortunately I still did not learn it (I hope in summer I have time to read the manual) The problem arises from the fact that for each line i will perform a different action and for \def\foo I need four arguments so that I can correctly format the lines. How can i get the result of string.splitlines (s) separated into four arguments to pass to the macro? then \foo would be \def\foo#1SEPARATOR#2SEPARATOR#3SEPARATOR#4 I now use: \starttext %now I use the dirty trick of writing an ñ at the end of line so that the macro detects each argument; but for each question I have to manually add it, which is tedious; therefore I look for a solution to detect lines automatically %the definition \def\tareaAbc #1ñ#2ñ#3ñ#4ñ{\item #1 \startitemgroup[lista1a] \item #2 \item #3 \item #4 \stopitemgroup} %in the document /startitemgropu[lista1a] %I manually open the first level of the list so the first argument -the question- gets numbered \tareaAbc In den Büchereien gibt es auch …ñ %the question; an item of first level … Kuchen.ñ %option a gets a new list of second level opened and argument 2 is the first item … Theater.ñ %option b another item … Workshops.ñ %option c last item and closes the second level list %some more macros with more questions and options /stopitemgroup %I manually close the first level list \stoptext ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-20 11:26 ` madiazm.eoicc @ 2024-02-20 12:13 ` Hans Hagen 2024-02-20 12:59 ` madiazm.eoicc 0 siblings, 1 reply; 9+ messages in thread From: Hans Hagen @ 2024-02-20 12:13 UTC (permalink / raw) To: madiazm.eoicc, mailing list for ConTeXt users On 2/20/2024 12:26 PM, madiazm.eoicc@gmail.com wrote: > Thanks Hans, > I supposed that lua would be more suitable, but unfortunately I still did not learn it (I hope in summer I have time to read the manual) > > The problem arises from the fact that for each line i will perform a different action and for \def\foo I need four arguments so that I can correctly format the lines. How can i get the result of string.splitlines (s) separated into four arguments to pass to the macro? then \foo would be \def\foo#1SEPARATOR#2SEPARATOR#3SEPARATOR#4 > > I now use: > > > \starttext > %now I use the dirty trick of writing an ñ at the end of line so that the macro detects each argument; but for each question I have to manually add it, which is tedious; therefore I look for a solution to detect lines automatically > > %the definition > \def\tareaAbc #1ñ#2ñ#3ñ#4ñ{\item #1 > \startitemgroup[lista1a] > \item #2 > \item #3 > \item #4 > \stopitemgroup} > > %in the document > /startitemgropu[lista1a] %I manually open the first level of the list so the first argument -the question- gets numbered > > \tareaAbc In den Büchereien gibt es auch …ñ %the question; an item of first level > … Kuchen.ñ %option a gets a new list of second level opened and argument 2 is the first item > … Theater.ñ %option b another item > … Workshops.ñ %option c last item and closes the second level list > > %some more macros with more questions and options > > /stopitemgroup %I manually close the first level list You have to provide more details about these lines. For instance, do you want to split on spaces? 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 / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-20 12:13 ` Hans Hagen @ 2024-02-20 12:59 ` madiazm.eoicc 2024-02-20 19:10 ` Bruce Horrocks 0 siblings, 1 reply; 9+ messages in thread From: madiazm.eoicc @ 2024-02-20 12:59 UTC (permalink / raw) To: ntg-context no, I just want to split at the end of each sentence to get the four arguments: now I pass this four lines to my macro \tareaAbc (with the dirty trick of ñ) In den Büchereien gibt es auch …ñ … Kuchen.ñ … Theater.ñ … Workshops.ñ and I wish your context.foo(lines[i]) iteration would become a single context.tareaAbc(the four arguments somehow separated so that I can manage each line with the corresponding context formatting) As you see my definition is: \def\tareaAbc #1ñ#2ñ#3ñ#4ñ{...context formating for each #)}; Its the clue to pass each sentence as an independent argument that I don't get to work. thanks again Miguel ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-20 12:59 ` madiazm.eoicc @ 2024-02-20 19:10 ` Bruce Horrocks 2024-02-21 8:17 ` madiazm.eoicc 0 siblings, 1 reply; 9+ messages in thread From: Bruce Horrocks @ 2024-02-20 19:10 UTC (permalink / raw) To: ntg-context mailing list [-- Attachment #1: Type: text/plain, Size: 2841 bytes --] > On 20 Feb 2024, at 12:59, madiazm.eoicc@gmail.com wrote: > > no, I just want to split at the end of each sentence to get the four arguments: now I pass this four lines to my macro \tareaAbc (with the dirty trick of ñ) > > In den Büchereien gibt es auch …ñ > … Kuchen.ñ > … Theater.ñ > … Workshops.ñ > > and I wish your context.foo(lines[i]) iteration would become a single context.tareaAbc(the four arguments somehow separated so that I can manage each line with the corresponding context formatting) > > As you see my definition is: \def\tareaAbc #1ñ#2ñ#3ñ#4ñ{...context formating for each #)}; Its the clue to pass each sentence as an independent argument that I don't get to work. > thanks again > A variation on Hans original suggestion is to use a buffer instead of a separate text file, combined with Lua. \startluacode userdata = userdata or {} function userdata.formatTestQuestions() local the_buffer = buffers.getlines("TestQuestions") local tracker = 0 local the_question = {} local letters = {"-", "a", "b", "c"} -- Go through the buffer of questions one line at a time for i = 1,#the_buffer do -- Skip blank lines but 'collect' non-blank lines until we have four -- (which is assumed to be a whole question) if string.strip(the_buffer[i]) == "" then tracker = 0 the_question = {} else tracker = tracker + 1 the_question[tracker] = the_buffer[i] end -- If tracker has got to 4 then we've read four lines if tracker == 4 then context.startlines() context("{\\bf Beispiel:} %s", the_question[1]) context(true) for answer = 2,4 do context("\\qquad %s) %s", letters[answer], the_question[answer]) context(true) end context.stoplines() -- Reset for the next question (in case no blank line) tracker = 0 the_question = {} end end end \stopluacode \def\startTestQuestions {\dostartbuffer[TestQuestions][startTestQuestions][stopTestQuestions]} \def\stopTestQuestions {\ctxlua{userdata.formatTestQuestions()}} \starttext Here are some questions: \startTestQuestions In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. \stopTestQuestions How do you think you did on that test? Here's another one. \startTestQuestions In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. \stopTestQuestions \stoptext — Bruce Horrocks Hampshire, UK [-- Attachment #2: tt.tex --] [-- Type: application/octet-stream, Size: 1925 bytes --] \startluacode userdata = userdata or {} function userdata.formatTestQuestions() local the_buffer = buffers.getlines("TestQuestions") local tracker = 0 local the_question = {} local letters = {"-", "a", "b", "c"} -- Go through the buffer of questions one line at a time for i = 1,#the_buffer do -- Skip blank lines but 'collect' non-blank lines until we have four -- (which is assumed to be a whole question) if string.strip(the_buffer[i]) == "" then tracker = 0 the_question = {} else tracker = tracker + 1 the_question[tracker] = the_buffer[i] end -- If tracker has got to 4 then we've read four lines if tracker == 4 then context.startlines() context("{\\bf Beispiel:} %s", the_question[1]) context(true) for answer = 2,4 do context("\\qquad %s) %s", letters[answer], the_question[answer]) context(true) end context.stoplines() -- Reset for the next question (in case no blank line) tracker = 0 the_question = {} end end end \stopluacode \def\startTestQuestions {\dostartbuffer[TestQuestions][startTestQuestions][stopTestQuestions]} \def\stopTestQuestions {\ctxlua{userdata.formatTestQuestions()}} \starttext Here are some questions: \startTestQuestions In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. \stopTestQuestions How do you think you did on that test? Here's another one. \startTestQuestions In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. \stopTestQuestions \stoptext [-- Attachment #3: Type: text/plain, Size: 1 bytes --] [-- Attachment #4: Type: text/plain, Size: 511 bytes --] ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-20 19:10 ` Bruce Horrocks @ 2024-02-21 8:17 ` madiazm.eoicc 2024-02-21 14:27 ` Bruce Horrocks 0 siblings, 1 reply; 9+ messages in thread From: madiazm.eoicc @ 2024-02-21 8:17 UTC (permalink / raw) To: ntg-context Thanks a lot Bruce, that did the trick! definitely I will have to learn a bit lua in summer. I just got an error on \qquad and found searching in internet that it was because escape character conflicts between tex and lua. For the time i removed it and since I will create itemizes I hope I dont get that error if I use \item instead of \qquad. Thanks again, I spent hours of trial and error, error, error... on this matter. ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-21 8:17 ` madiazm.eoicc @ 2024-02-21 14:27 ` Bruce Horrocks 2024-02-22 10:17 ` madiazm.eoicc 0 siblings, 1 reply; 9+ messages in thread From: Bruce Horrocks @ 2024-02-21 14:27 UTC (permalink / raw) To: ntg-context mailing list [-- Attachment #1: Type: text/plain, Size: 2590 bytes --] > On 21 Feb 2024, at 08:17, madiazm.eoicc@gmail.com wrote: > > Thanks a lot Bruce, that did the trick! definitely I will have to learn a bit lua in summer. > I just got an error on \qquad and found searching in internet that it was because escape character conflicts between tex and lua. For the time i removed it and since I will create itemizes I hope I dont get that error if I use \item instead of \qquad. > Thanks again, I spent hours of trial and error, error, error... on this matter. Yes, the \'s need to be escaped in Lua. And it's made me realise that the process of identifying the four lines of the question is separate from the typesetting of the question later. The amended version below uses your \tareaABC macro to format the question so you can more easily change the layout without having to understand ConTeXT Lua Documents in detail. \startluacode userdata = userdata or {} function userdata.formatTestQuestions() local the_buffer = buffers.getlines("TestQuestions") local tracker = 0 local the_question = {} -- Go through the buffer of questions one line at a time for i = 1,#the_buffer do -- Skip blank lines but 'collect' non-blank lines until we have four -- (which is assumed to be a whole question) if string.strip(the_buffer[i]) == "" then tracker = 0 the_question = {} else tracker = tracker + 1 the_question[tracker] = the_buffer[i] end -- If tracker has got to 4 then we've read four lines if tracker == 4 then context.tareaAbc( the_question[1], the_question[2], the_question[3], the_question[4]) -- Reset for the next question (in case no blank line) tracker = 0 the_question = {} end end end \stopluacode \def\startTestQuestions {\dostartbuffer[TestQuestions][startTestQuestions][stopTestQuestions]} \def\stopTestQuestions {\ctxlua{userdata.formatTestQuestions()}} \define[4]\tareaAbc{\item #1 \startitemgroup[itemize][a] \item #2 \item #3 \item #4 \stopitemgroup} \starttext Here are some questions: \startTestQuestions In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. \stopTestQuestions \stoptext — Bruce Horrocks Hampshire, UK [-- Attachment #2: tt2.tex --] [-- Type: application/octet-stream, Size: 1681 bytes --] \startluacode userdata = userdata or {} function userdata.formatTestQuestions() local the_buffer = buffers.getlines("TestQuestions") local tracker = 0 local the_question = {} -- Go through the buffer of questions one line at a time for i = 1,#the_buffer do -- Skip blank lines but 'collect' non-blank lines until we have four -- (which is assumed to be a whole question) if string.strip(the_buffer[i]) == "" then tracker = 0 the_question = {} else tracker = tracker + 1 the_question[tracker] = the_buffer[i] end -- If tracker has got to 4 then we've read four lines if tracker == 4 then context.tareaAbc( the_question[1], the_question[2], the_question[3], the_question[4]) -- Reset for the next question (in case no blank line) tracker = 0 the_question = {} end end end \stopluacode \def\startTestQuestions {\dostartbuffer[TestQuestions][startTestQuestions][stopTestQuestions]} \def\stopTestQuestions {\ctxlua{userdata.formatTestQuestions()}} \define[4]\tareaAbc{\item #1 \startitemgroup[itemize][a] \item #2 \item #3 \item #4 \stopitemgroup} \starttext Here are some questions: \startTestQuestions In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. In den Büchereien gibt es auch … … Kuchen. … Theater. … Workshops. \stopTestQuestions \stoptext [-- Attachment #3: Type: text/plain, Size: 511 bytes --] ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
* [NTG-context] Re: using an end of line as parameter 2024-02-21 14:27 ` Bruce Horrocks @ 2024-02-22 10:17 ` madiazm.eoicc 0 siblings, 0 replies; 9+ messages in thread From: madiazm.eoicc @ 2024-02-22 10:17 UTC (permalink / raw) To: ntg-context Thanks again Bruce. I will play with the code a bit. Miguel ___________________________________________________________________________________ If your question is of interest to others as well, please add an entry to the Wiki! maillist : ntg-context@ntg.nl / https://mailman.ntg.nl/mailman3/lists/ntg-context.ntg.nl webpage : https://www.pragma-ade.nl / https://context.aanhet.net (mirror) archive : https://github.com/contextgarden/context wiki : https://wiki.contextgarden.net ___________________________________________________________________________________ ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-02-22 10:21 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2024-02-19 12:49 [NTG-context] using an end of line as parameter Miguel Diaz 2024-02-19 22:36 ` [NTG-context] " Hans Hagen 2024-02-20 11:26 ` madiazm.eoicc 2024-02-20 12:13 ` Hans Hagen 2024-02-20 12:59 ` madiazm.eoicc 2024-02-20 19:10 ` Bruce Horrocks 2024-02-21 8:17 ` madiazm.eoicc 2024-02-21 14:27 ` Bruce Horrocks 2024-02-22 10:17 ` madiazm.eoicc
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).