Am 23.12.2012 um 02:58 schrieb Roland Thiers <roland.thi...@gmail.com>:

Bonjour,
I am new in ConTeXt. I love its features. I need some (or a lot of) help.
I tried to get a macro which compute some values for a math function.



Le 23 déc. 12 à 18:43, Wolfgang Schuster a écrit :

\startluacode

userdata         = userdata       or {}
userdata.roland = userdata.roland or {}

local roland = userdata.roland

function roland.f(x)
        context(x*x*x)
end

function roland.table(min,max,step)
        local min  = tonumber(min)
        local max  = tonumber(max)
        local step = tonumber(step)
        context.starttable({string.format("|*{%d}{l|}",max-min+2)})
        context.HL()
        context.VL()
        context("x")
        for i=min,max do
                context.NC()
                context(min+(i-1)*step)
        end
        context.VL()
        context.FR()
        context.HL()
        context.VL()
        context("f(x)")
        for i=min,max do
                context.NC()
                roland.f(min+(i-1)*step)
        end
        context.VL()
        context.AR()
        context.HL()
        context.stoptable()
end

\stopluacode

\define[3]\TableFuntion
 {\ctxlua{userdata.roland.table("#1","#2","#3")}}

\starttext
\TableFuntion{1}{6}{1}
\TableFuntion{2}{7}{1}
\stoptext

Wolfgang


I read with care (maybe) your code above, Wolfgang (thanks again !) et had a look in "programming in lua" to get a better idea of the object table, new in lua too :-)
I have some more questions :
- when one create a table doing this : userdata=userdata or {}, is it only to be sure that "userdata" is not actually a variable which exists (with
a non nil value) ? Less safely we could write : userdata={} ?
- arguments for the user.data.table function are given as strings : " #1" and changed in numbers in the body of the function. I noticed that it was possible to give numbers directly. is there always better to do like this ? (enter strings et use tonumber) - I found the command \define in context garden and saw it's the same than \unexpanded\def , there is a link to the définitions of the TeX primitives but
I could'nt find \unexpanded\def  (\def was very instructive however).
- I changed slightly the code to obtain a range (x between min and max with a step) and to choose a round-way. I failed to find a context way to get rounded numbers, so I did a workaround (a another function) with help from "programming in lua". I would like a more straight (context) way.

Here is the code :

\startluacode
-- userdata = userdata or {} -- userdata["roland"] = userdata["roland"] or {} userdata=userdata or {}
userdata["roland"]=userdata["roland"] or {}
local roland = userdata["roland"]

function roland.f(x)
return math.log(x)
end

function roland.round (number, approx)
  local power = 10^(approx or 0)
context(math.floor(number * power + 0.5) / power)
end

function roland.table(min,max,step,approx)
        local min  = tonumber(min)
        local max  = tonumber(max)
        local step = tonumber(step)
        local nbrcol = tonumber((max-min)*(1/step)+2)
        local approx = tonumber(approx)
        context.starttable({string.format("|*{%d}{l|}",nbrcol)})
        context.HL()
        context.VL()
        context("x")
        for i=1,(nbrcol-1) do
                context.NC()
                context(min+(i-1)*step)
        end
        context.VL()
        context.FR()
        context.HL()
        context.VL()
        context("f(x)")
        for i=1,(nbrcol-1) do
                context.NC()

local result=roland.f(min+(i-1)*step)
roland.round(result,approx)
        end
        context.VL()
        context.AR()
        context.HL()
        context.stoptable()
end

\stopluacode
\define[4]\TableFuntion
 {\ctxlua{userdata.roland.table("#1","#2","#3","#4")}}

\starttext
\TableFuntion{2}{6}{0.5}{2}
\blank[2*big]
\TableFuntion{1}{16}{1}{}
\blank[2*big]
\TableFuntion{2}{4}{2}{5}
\blank[2*big]
\TableFuntion{0.2}{2}{0.2}{3}
\stoptext

 Best regards, Roland
Happy Christmas to all Context users !

___________________________________________________________________________________
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
___________________________________________________________________________________

___________________________________________________________________________________
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
___________________________________________________________________________________

Reply via email to