Dear Florent, Wolfgang, and Hans, I modify the code given by Hans as following: 1. Place the function definition ab the beginning of the file. I use if function to check the number of element of a and apply it to the number of columns. 2. And call the functions in the text. It works! It draw the truth table of the given logic functions. Thanks a lot. Best regards, Dalyoung \startluacode function document.MakeHead(p,a) if not a then local t = p p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(1.5cm)|" a = t end context.starttabulate { p } context.FL() for i=1,#a do context.NC() context(a[i]) end context.NC() context.NR() context.LL() end function document.truthTable(a) document.MakeHead (a) for i,s in ipairs({true,false}) do for j,t in ipairs({true,false}) do for k,u in ipairs({true,false}) do if s then val=1 else val=0 end context.NC() context(val) context.NC() if t then val=1 else val=0 end context(val) context.NC() if #a == 3 then break end if u then val=1 else val=0 end context(val) context.NC() con=document.logicFa(s,t,u) context(con) context.NC() context.AR() end if #a == 3 then con=document.logicF2(s,t) context(con) context.NC() context.AR() end end end context.HL() context.stoptabulate() end \stopluacode In the text call the functions as following: \startplacetable[location=here,reference=tbl:Fxyz] \startluacode function document.logicFa(p,q,r) if ((not p or not q) and r) or (p and (q or not r)) then return "1" else return "0" end end a = { "p", "q", "r","f(p,q,r)"} document.truthTable(a) \stopluacode \stopplacetable