conTeXt Mkiv: the number of parameters can not be more than 9?
hi, all For testing, I have a definition: \define[9]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9} context test can work fine, when I modify the above into: \define[10]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9,#10} I got a error: test.tex: ! Illegal parameter number in definition of \DEFINETEST
From StackExchange, I got a answer:
Since ConTeXt is based on TeX, the maximum number of 9 parameters is inherited So, in Context mkiv, what should I do for more than 9 parameters? Thanks! Best Regards Dillon
Hi Dillon, First of all, I'm against defining such a complex macro, since that can be very confusing when you use it. I personal prefer the key-value definition: \def\DEFINETEST[#1]{% \getXXXparameters [paraA=defaultValueForParameterA% ,paraB=% or just empty ,#1]% \doSomethingWith[\XXXparameter\paraA]% \doSomethingElse... } You might want to refer to the following link and other valuable materials on the wiki for more information: http://wiki.contextgarden.net/System_Macros/Key_Value_Assignments If you insist on that, I guess you can define a temporary macro inside your macro. That's very dirty, but can be a little more efficient? I'm not sure. I was given to understand that the ConTeXt MKVI now accepts parameters such as #position#color rather than meaningless #1#2. I GUESS that's lua-based, so maybe it'll break the TeX limitation. On 07/05/2015 09:55 AM, 土卜皿 wrote:
hi, all
For testing, I have a definition:
|\define[9]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9}|
|context test| can work fine, when I modify the above into:
|\define[10]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9,#10}|
I got a error:
|test.tex: ! Illegal parameter number in definition of\DEFINETEST|
From StackExchange, I got a answer:
Since ConTeXt is based on TeX, the maximum number of 9 parameters is inherited
So, in Context mkiv, what should I do for more than 9 parameters?
Thanks!
Best Regards
Dillon
___________________________________________________________________________________ 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://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- Best regards, ℤh𝕚chu ℂh𝕖n
hi,ℤh𝕚chu ℂh𝕖n
Thanks! I will check it later!
Best Regards
Dillon
2015-07-05 11:40 GMT+08:00 Zhichu Chen
Hi Dillon,
First of all, I'm against defining such a complex macro, since that can be very confusing when you use it. I personal prefer the key-value definition: \def\DEFINETEST[#1]{% \getXXXparameters [paraA=defaultValueForParameterA% ,paraB=% or just empty ,#1]% \doSomethingWith[\XXXparameter\paraA]% \doSomethingElse... } You might want to refer to the following link and other valuable materials on the wiki for more information: http://wiki.contextgarden.net/System_Macros/Key_Value_Assignments
If you insist on that, I guess you can define a temporary macro inside your macro. That's very dirty, but can be a little more efficient? I'm not sure.
I was given to understand that the ConTeXt MKVI now accepts parameters such as #position#color rather than meaningless #1#2. I GUESS that's lua-based, so maybe it'll break the TeX limitation.
On 07/05/2015 09:55 AM, 土卜皿 wrote:
hi, all
For testing, I have a definition:
\define[9]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9}
context test can work fine, when I modify the above into:
\define[10]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9,#10}
I got a error:
test.tex: ! Illegal parameter number in definition of \DEFINETEST
From StackExchange, I got a answer:
Since ConTeXt is based on TeX, the maximum number of 9 parameters is inherited
So, in Context mkiv, what should I do for more than 9 parameters?
Thanks!
Best Regards
Dillon
___________________________________________________________________________________ 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://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
-- Best regards, ℤh𝕚chu ℂh𝕖n
___________________________________________________________________________________ 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://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net
___________________________________________________________________________________
Hi Dillon There is also a purely plaintex solutions for example: % Here is Peter Olsak solution (see TBN: ftp://math.feld.cvut.cz/olsak/tbn/tbn.pdf - czech only) \def\terminator{*} \def\usethereadvalues{} \newcount\tempnum \def\readparameters{\tempnum=0\let\next=\readonlyone \next} \def\readonlyone #1, {\advance\tempnum by 1 \def\param{#1}% % \the\tempnum - \param\par% \ifx\param\terminator \let\next=\usethereadvalues \else\expandafter\def \csname param\the\tempnum\endcsname{#1}% \fi\next} \def\var#1{\csname #1\endcsname} \starttext % Read any number of parameters, terminator is * now \readparameters 471-44/2007, 474-44/2007, 464-44/2007, 465-44/2007, 461-44/2007, 472-44/2007, 473-44/2007, 475-44/2007, 469-44/2007, 455-44/2007, AA, BBB, 124, *, % Parameters are now in macros \type{\var{param1}}, \type{\var{param2}}, \type{\var{param3}}, \dots : \blank[big] \dorecurse{16}{parameter \recurselevel is : \var{param\recurselevel}\crlf} \blank[big] % OR % put parameters into macro: \def\parameters{A, B, XXL, QWE, 123, Hello, End, TeX, Solution, XSE, Flag, Prague, Paris, New York, last value, *, } % and now read parameters: \expandafter\readparameters\parameters \dorecurse{16}{parameter \recurselevel is : \var{param\recurselevel}\crlf} \stoptext Jaroslav Hajtmar Dne 5. 7. 2015 v 3:55 土卜皿 napsal(a):
hi, all
For testing, I have a definition:
|\define[9]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9}|
|context test| can work fine, when I modify the above into:
|\define[10]\DEFINETEST{#1,#2,#3,#4,#5,#6,#7,#8,#9,#10}|
I got a error:
|test.tex: ! Illegal parameter number in definition of\DEFINETEST|
From StackExchange, I got a answer:
Since ConTeXt is based on TeX, the maximum number of 9 parameters is inherited
So, in Context mkiv, what should I do for more than 9 parameters?
Thanks!
Best Regards
Dillon
___________________________________________________________________________________ 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://tex.aanhet.net archive : http://foundry.supelec.fr/projects/contextrev/ wiki : http://contextgarden.net ___________________________________________________________________________________
participants (3)
-
Jaroslav Hajtmar
-
Zhichu Chen
-
土卜皿