ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* [NTG-context] You can't use '\prevdepth' in restricted horizontal mode
@ 2025-01-03 15:53 Jeong Dal via ntg-context
  2025-01-03 16:16 ` [NTG-context] " Florent Michel
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-03 15:53 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal


[-- Attachment #1.1: Type: text/plain, Size: 725 bytes --]

Dear all,

I got the error "You can't use '\prevdepth' in restricted horizontal mode” when I compile the following code.

If I remove “\starttabulete…  \stoptabulate”, then no errors, but the out put is not the form of table.

How can I fix this error?

Thank you.

Best regards,

Dalyoung

\starttext

\startluacode
  function makeHead(a)
    local n = #a 
    
    context.HL()
    for i = 1, n  do
      context.NC() context(a[i])
    end
    context.NC()context.AR()
    context.HL()
  end
\stopluacode

%\starttabulate[|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|]
  \startluacode
    local a = {"x","y","z","(x\\to y)"}
    makeHead(a)
  \stopluacode
%\stoptabulate

\stoptext



[-- Attachment #1.2: Type: text/html, Size: 4813 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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 15:53 [NTG-context] You can't use '\prevdepth' in restricted horizontal mode Jeong Dal via ntg-context
@ 2025-01-03 16:16 ` Florent Michel
  2025-01-03 16:23 ` Wolfgang Schuster
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 15+ messages in thread
From: Florent Michel @ 2025-01-03 16:16 UTC (permalink / raw)
  To: mailing list for ConTeXt users


[-- Attachment #1.1: Type: text/plain, Size: 1994 bytes --]

Dear Dalyoung,

I am not sure what the issue is; but as a workaround it seems that using
\ctxlua works:

___________________________________________________
\starttext

\startluacode
  function makeHead(a)
    local n = #a

    context.HL()
    for i = 1, n  do
      context.NC() context(a[i])
    end
    context.NC()context.AR()
    context.HL()
  end
\stopluacode

\starttabulate[|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|]
    \ctxlua{local a = {"x","y","z","(x\\to y)"}; makeHead(a)}
\stoptabulate

\stoptext
___________________________________________________

Cheers,
Florent

Le ven. 3 janv. 2025 à 15:58, Jeong Dal via ntg-context <ntg-context@ntg.nl>
a écrit :

> Dear all,
>
> I got the error "You can't use '\prevdepth' in restricted horizontal mode”
> when I compile the following code.
>
> If I remove “\starttabulete…  \stoptabulate”, then no errors, but the out
> put is not the form of table.
>
> How can I fix this error?
>
> Thank you.
>
> Best regards,
>
> Dalyoung
>
> \starttext
>
> \startluacode
> function makeHead(a)
> local n = #a
> context.HL()
> for i = 1, n do
> context.NC() context(a[i])
> end
> context.NC()context.AR()
> context.HL()
> end
> \stopluacode
>
> %\starttabulate[|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|]
> \startluacode
> local a = {"x","y","z","(x\\to y)"}
> makeHead(a)
> \stopluacode
> %\stoptabulate
>
> \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
>
> ___________________________________________________________________________________
>

[-- Attachment #1.2: Type: text/html, Size: 5673 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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 15:53 [NTG-context] You can't use '\prevdepth' in restricted horizontal mode Jeong Dal via ntg-context
  2025-01-03 16:16 ` [NTG-context] " Florent Michel
@ 2025-01-03 16:23 ` Wolfgang Schuster
  2025-01-03 16:24 ` Hans Hagen
  2025-01-03 16:29 ` Hans Hagen
  3 siblings, 0 replies; 15+ messages in thread
From: Wolfgang Schuster @ 2025-01-03 16:23 UTC (permalink / raw)
  To: ntg-context

Am 03.01.2025 um 16:53 schrieb Jeong Dal via ntg-context:
> Dear all,
> 
> I got the error "You can't use '\prevdepth' in restricted horizontal 
> mode” when I compile the following code.
> 
> If I remove “\starttabulete…  \stoptabulate”, then no errors, but the 
> out put is not the form of table.
> 
> How can I fix this error?
> 
> Thank you.
> 
> Best regards,
> 
> Dalyoung
> 
> \starttext
> 
> \startluacode
> function makeHead(a)
> local n = #a
> context.HL()
> for i = 1, n do
> context.NC() context(a[i])
> end
> context.NC()context.AR()
> context.HL()
> end
> \stopluacode
> 
> %\starttabulate[|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|]
> \startluacode
> local a = {"x","y","z","(x\\to y)"}
> makeHead(a)
> \stopluacode
> %\stoptabulate
> 
> \stoptext


Move the tabulate environment into the luacode environment.

\startluacode
context.starttabulate{ "|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|" }
local a = {"x","y","z","(x\\to y)"}
makeHead(a)
context.stoptabulate()
\stopluacode

Wolfgang

___________________________________________________________________________________
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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 15:53 [NTG-context] You can't use '\prevdepth' in restricted horizontal mode Jeong Dal via ntg-context
  2025-01-03 16:16 ` [NTG-context] " Florent Michel
  2025-01-03 16:23 ` Wolfgang Schuster
@ 2025-01-03 16:24 ` Hans Hagen
  2025-01-03 18:08   ` Jeong Dal via ntg-context
  2025-01-03 23:27   ` Jeong Dal via ntg-context
  2025-01-03 16:29 ` Hans Hagen
  3 siblings, 2 replies; 15+ messages in thread
From: Hans Hagen @ 2025-01-03 16:24 UTC (permalink / raw)
  To: ntg-context

On 1/3/2025 4:53 PM, Jeong Dal via ntg-context wrote:
> Dear all,
> 
> I got the error "You can't use '\prevdepth' in restricted horizontal 
> mode” when I compile the following code.
> 
> If I remove “\starttabulete…  \stoptabulate”, then no errors, but the 
> out put is not the form of table.
> 
> How can I fix this error?
> 
> Thank you.
> 
> Best regards,
> 
> Dalyoung
> 
> \starttext
> 
> \startluacode
> function makeHead(a)
> local n = #a
> context.HL()
> for i = 1, n do
> context.NC() context(a[i])
> end
> context.NC()context.AR()
> context.HL()
> end
> \stopluacode
> 
> %\starttabulate[|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|]
> \startluacode
> local a = {"x","y","z","(x\\to y)"}
> makeHead(a)
> \stopluacode
> %\stoptabulate
> 
> \stoptext

\starttext

\startluacode
   function makeHead(p,a)
     if p == "" then
         p = string.rep("|k.5",#a) .. "|"
     end
     context.starttabulate { p }
         context.FL()
         for i=1,#a do
             context.NC() context(a[i])
         end
         context.NC() context.NR()
         context.LL()
     context.stoptabulate()
   end
\stopluacode

\startluacode
     makeHead (
      -- "|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(2cm)|",
         "|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(2cm)|",
         { "x", "y", "z", "(x\\to y)" }
     )
\stopluacode

\startluacode
     makeHead (
         "",
         { "x", "y", "z", "(x\\to y)" }
     )
\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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 15:53 [NTG-context] You can't use '\prevdepth' in restricted horizontal mode Jeong Dal via ntg-context
                   ` (2 preceding siblings ...)
  2025-01-03 16:24 ` Hans Hagen
@ 2025-01-03 16:29 ` Hans Hagen
  3 siblings, 0 replies; 15+ messages in thread
From: Hans Hagen @ 2025-01-03 16:29 UTC (permalink / raw)
  To: ntg-context

On 1/3/2025 4:53 PM, Jeong Dal via ntg-context wrote:
> Dear all,
> 
> I got the error "You can't use '\prevdepth' in restricted horizontal 
> mode” when I compile the following code.
> 
> If I remove “\starttabulete…  \stoptabulate”, then no errors, but the 
> out put is not the form of table.
> 
> How can I fix this error?
> 
> Thank you.
> 
> Best regards,
> 
> Dalyoung
> 
> \starttext
> 
> \startluacode
> function makeHead(a)
> local n = #a
> context.HL()
> for i = 1, n do
> context.NC() context(a[i])
> end
> context.NC()context.AR()
> context.HL()
> end
> \stopluacode
> 
> %\starttabulate[|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(1cm)|]
> \startluacode
> local a = {"x","y","z","(x\\to y)"}
> makeHead(a)
> \stopluacode
> %\stoptabulate
> 
> \stoptext

or

\starttext

\startluacode
     function document.MakeHead(p,a)
         if not a then
             local t = p
             p = string.rep("|k.5",#p) .. "|"
             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()
         context.stoptabulate()
     end
\stopluacode

\startluacode
     document.MakeHead (
         "|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(2cm)|",
         { "x", "y", "z", "(x \\to y)" }
     )
\stopluacode

\startluacode
     document.MakeHead {
         "x", "y", "z", "(x \\to y)"
     }
\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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 16:24 ` Hans Hagen
@ 2025-01-03 18:08   ` Jeong Dal via ntg-context
  2025-01-03 23:27   ` Jeong Dal via ntg-context
  1 sibling, 0 replies; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-03 18:08 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal


[-- Attachment #1.1: Type: text/plain, Size: 1735 bytes --]

Dear Florent, Wolfgang, and Hans,

Thank you for the solutions.

All solutions are working well.

I add more rows for the last solution to show the truth table of a logical function.
I may modify it for 2-variable function.

Thanks again.

Best regards,

Dalyoung


\starttext
\startluacode
  function document.logicFa(p,q,r)
    local p,q,r
      if ((p or r) and (not q)) then
        return "1"
      else
        return "0"
      end
  end

  function document.logicFb(p,q)
    local p,q
      if ((not p) or q) then
        return "1"
      else
        return "0"
      end
  end

  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()
--    context.stoptabulate()
  end
\stopluacode

\startluacode
  a = { "x", "y","z", "\\overbar{y}(x+z)" }
  document.MakeHead (a)
--       "|mcw(1cm)|mcw(1cm)|mcw(1cm)|mcw(2cm)|”,

  for i,p in ipairs({true,false}) do
    for j,q in ipairs({true,false}) do
      for k,r in ipairs({true,false}) do
        context.NC()
        if p then val=1 else val=0 end
        context(val)
        context.NC()
        if q then val=1 else val=0 end
        context(val)
        context.NC()
        if r then val=1 else val=0 end
        context(val)          
        context.NC()
        con=document.logicFa(p,q,r)
        context(con)
        context.NC()
        context.AR() 
      end
    end
  end
  context.HL()
  context.stoptabulate()
\stopluacode
\stoptext


[-- Attachment #1.2: Type: text/html, Size: 23253 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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 16:24 ` Hans Hagen
  2025-01-03 18:08   ` Jeong Dal via ntg-context
@ 2025-01-03 23:27   ` Jeong Dal via ntg-context
  2025-01-05 10:42     ` Hans Hagen via ntg-context
  1 sibling, 1 reply; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-03 23:27 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal


[-- Attachment #1.1: Type: text/plain, Size: 1969 bytes --]

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

[-- Attachment #1.2: Type: text/html, Size: 17329 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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-03 23:27   ` Jeong Dal via ntg-context
@ 2025-01-05 10:42     ` Hans Hagen via ntg-context
  2025-01-06 13:33       ` Jeong Dal via ntg-context
  0 siblings, 1 reply; 15+ messages in thread
From: Hans Hagen via ntg-context @ 2025-01-05 10:42 UTC (permalink / raw)
  To: ntg-context; +Cc: Hans Hagen

On 1/4/2025 12:27 AM, Jeong Dal via ntg-context wrote:
> 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

Best use 'local' for val, con, a etc or do this:

\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.MakeFooter()
         context.HL()
         context.stoptabulate()
     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
                     context.NC()
                     context(s and "1" or "0")
                     context.NC()
                     context(t and "1" or "0")
                     context.NC()
                     if #a == 3 then
                         break
                     end
                     context(u and "1" or "0")
                     context.NC()
                     context(document.logicFa(s,t,u))
                     context.NC()
                     context.AR()
                 end
                 if #a == 3 then
                     context(document.logicF2(s,t))
                     context.NC()
                     context.AR()
                 end
             end
         end
         document.MakeFooter()
     end
\stopluacode

\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
     document.truthTable { "p", "q", "r","f(p,q,r)" }
\stopluacode
\stopplacetable

you don't need the intermediate variables

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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-05 10:42     ` Hans Hagen via ntg-context
@ 2025-01-06 13:33       ` Jeong Dal via ntg-context
  2025-01-07 12:53         ` Hans Hagen
  0 siblings, 1 reply; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-06 13:33 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal

Dear Hans,

Thank you for your suggestions.

I changed the code without the intermediate variables.

I works well.


Best regards,

Dalyoung


> 2025. 1. 5. 오후 7:42, Hans Hagen via ntg-context <ntg-context@ntg.nl> 작성:
> 
> On 1/4/2025 12:27 AM, Jeong Dal via ntg-context wrote:
>> 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
> 
> Best use 'local' for val, con, a etc or do this:
> 
> \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.MakeFooter()
>        context.HL()
>        context.stoptabulate()
>    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
>                    context.NC()
>                    context(s and "1" or "0")
>                    context.NC()
>                    context(t and "1" or "0")
>                    context.NC()
>                    if #a == 3 then
>                        break
>                    end
>                    context(u and "1" or "0")
>                    context.NC()
>                    context(document.logicFa(s,t,u))
>                    context.NC()
>                    context.AR()
>                end
>                if #a == 3 then
>                    context(document.logicF2(s,t))
>                    context.NC()
>                    context.AR()
>                end
>            end
>        end
>        document.MakeFooter()
>    end
> \stopluacode
> 
> \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
>    document.truthTable { "p", "q", "r","f(p,q,r)" }
> \stopluacode
> \stopplacetable
> 
> you don't need the intermediate variables
> 
> 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
> ___________________________________________________________________________________

___________________________________________________________________________________
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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-06 13:33       ` Jeong Dal via ntg-context
@ 2025-01-07 12:53         ` Hans Hagen
  2025-01-07 14:27           ` Jeong Dal via ntg-context
  0 siblings, 1 reply; 15+ messages in thread
From: Hans Hagen @ 2025-01-07 12:53 UTC (permalink / raw)
  To: ntg-context

On 1/6/2025 2:33 PM, Jeong Dal via ntg-context wrote:
> Dear Hans,
> 
> Thank you for your suggestions.
> 
> I changed the code without the intermediate variables.
> 
> I works well.

good, so now we're ready for a next improvement:

     local tf = { true, false }

     function document.truthTable(a)
         document.MakeHead(a)
         for i,s in ipairs(tf) do
             for j,t in ipairs(tf) do
                 for k,u in ipairs(tf) do
                     context.NC()
                     context(s and "1" or "0")
                     context.NC()
                     context(t and "1" or "0")
                     context.NC()
                     if #a == 3 then
                         break
                     end
                     context(u and "1" or "0")
                     context.NC()
                     context(document.logicFa(s,t,u))
                     context.NC()
                     context.AR()
                 end
                 if #a == 3 then
                     context(document.logicF2(s,t))
                     context.NC()
                     context.AR()
                 end
             end
         end
         document.MakeFooter()
     end

and after that

     local tf = { "1", "0" }

     function document.truthTable(a)
         document.MakeHead(a)
         for i,s in ipairs(tf) do
             for j,t in ipairs(tf) do
                 for k,u in ipairs(tf) do
                     context.NC()
                     context(s)
                     context.NC()
                     context(t)
                     context.NC()
                     if #a == 3 then
                         break
                     end
                     context(u)
                     context.NC()
                     context(document.logicFa(s,t,u))
                     context.NC()
                     context.AR()
                 end
                 if #a == 3 then
                     context(document.logicF2(s,t))
                     context.NC()
                     context.AR()
                 end
             end
         end
         document.MakeFooter()
     end

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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-07 12:53         ` Hans Hagen
@ 2025-01-07 14:27           ` Jeong Dal via ntg-context
  2025-01-07 14:54             ` Hans Hagen via ntg-context
  0 siblings, 1 reply; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-07 14:27 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal


[-- Attachment #1.1: Type: text/plain, Size: 1424 bytes --]

Dear Hans,

I tested your code.

>    local tf = { true, false }
> 
>    function document.truthTable(a)
>        document.MakeHead(a)
> …
>        end
>        document.MakeFooter()
>    end

This part produces the right logical value.
But, the next part doesn’t produce the correct value. 
While the value of each variable is printed correctly,
the values of outputs are  all 0.

>    local tf = { "1", "0" }
> 
>    function document.truthTable(a)
>        document.MakeHead(a)
>        for i,s in ipairs(tf) do
>            for j,t in ipairs(tf) do
>                for k,u in ipairs(tf) do
>                    context.NC()
>                    context(s)
>                    context.NC()
>                    context(t)
>                    context.NC()
> …
...
>               end
>            end
>        end
>        document.MakeFooter()
>    end

I think that the logical function “document.logicF()"is not working for the array tf={“1”,”0”}.
In python, 1 and 0 are treated as true and false. But, I read that only “false” and “nil” are treated as false in Lua, that is,  “0” is also treated as true! 
I checked it using the following simple code:

\starttext
\startluacode
  if 0 then context("True")
  else context("False")
  end
\stopluacode
\stoptext

The output
The output is “True”.

Best regards,

Dalyoung


[-- Attachment #1.2: Type: text/html, Size: 5957 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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-07 14:27           ` Jeong Dal via ntg-context
@ 2025-01-07 14:54             ` Hans Hagen via ntg-context
  2025-01-07 21:03               ` Jeong Dal via ntg-context
  0 siblings, 1 reply; 15+ messages in thread
From: Hans Hagen via ntg-context @ 2025-01-07 14:54 UTC (permalink / raw)
  To: ntg-context; +Cc: Hans Hagen

On 1/7/2025 3:27 PM, Jeong Dal via ntg-context wrote:
> Dear Hans,
> 
> I tested your code.
> 
>>    local tf = { true, false }
>>
>>    function document.truthTable(a)
>>        document.MakeHead(a)
>> …
> …
> 
>>        end
>>        document.MakeFooter()
>>    end
> 
> This part produces the right logical value.
> But, the next part doesn’t produce the correct value.
> While the value of each variable is printed correctly,
> the values of outputs are  all 0.
> 
>>    local tf = { "1", "0" }
>>
>>    function document.truthTable(a)
>>        document.MakeHead(a)
>>        for i,s in ipairs(tf) do
>>            for j,t in ipairs(tf) do
>>                for k,u in ipairs(tf) do
>>                    context.NC()
>>                    context(s)
>>                    context.NC()
>>                    context(t)
>>                    context.NC()
>> …
> ...
>>               end
>>            end
>>        end
>>        document.MakeFooter()
>>    end
> 
> I think that the logical function “document.logicF()"is not working for 
> the array tf={“1”,”0”}.
> In python, 1 and 0 are treated as true and false. But, I read that only 
> “false” and “nil” are treated as false in Lua, that is,  “0” is also 
> treated as true!
> I checked it using the following simple code:
> 
> \starttext
> \startluacode
> if 0 then context("True")
> else context("False")
> end
> \stopluacode
> \stoptext
> 
> The output
> The output is “True”.

Ah, i didn't check the function, so how about this:

    local tf = { true, false }
  --local tf = { "1", "0" }

    function document.truthTable(a,f3,f2)
        document.MakeHead(a)
        for i,s in ipairs(tf) do
            for j,t in ipairs(tf) do
                for k,u in ipairs(tf) do
                    context.NC()
                    context(s and "1" or "0")
                 -- context(s)
                    context.NC()
                    context(t and "1" or "0")
                 -- context(t)
                    context.NC()
                    if #a == 3 then
                        break
                    end
                    context(u and "1" or "0")
                 -- context(u)
                    context.NC()
                    context(f3(s,t,u) and "1" or "0")
                    context.NC()
                    context.AR()
                end
                if #a == 3 then
                    context(f2(s,t) and "1" or "0")
                    context.NC()
                    context.AR()
                end
            end
        end
        document.MakeFooter()
    end

and then you can do

\startluacode

    local function logicF3(p,q,r)
        return ((not p or not q) and r) or (p and (q or not r))
     -- return ((p == "0" or q == "0") and r == "1") or (p == "1" and (q 
== "1" or r == "0"))
    end

    local function logicF2(p,q) -- todo
        return true
    end

    document.truthTable (
       { "p", "q", "r", "f(p,q,r)" },
       logicF3, logicF2
    )
\stopluacode

so no need to store in document.logicXX and no need for that function to 
know about "0" and "1" being rendered,

(btw, logicF2 was not defined in the example)

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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-07 14:54             ` Hans Hagen via ntg-context
@ 2025-01-07 21:03               ` Jeong Dal via ntg-context
  2025-01-07 21:22                 ` Hans Hagen
  0 siblings, 1 reply; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-07 21:03 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal


[-- Attachment #1.1: Type: text/plain, Size: 2342 bytes --]

Dear Hans,

It is nice to input the function as an argument.
It is suffice to convey one function at each all.

But the definition of the function 
> 
>   local function logicF3(p,q,r)
>       return ((not p or not q) and r) or (p and (q or not r))
>    -- return ((p == "0" or q == "0") and r == "1") or (p == "1" and (q == "1" or r == "0"))
>   end
> 

Is not working. The outputs are blank(for false) and “?”(for true)

Here is a working example.

Thank you for enhancing the code.

Best regards,

Dalyoung

\startluacode
  function document.MakeHead(p,a)
    if not a then
      local t = p
      p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(2cm)|"
      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.MakeFooter()
    context.HL()
    context.stoptabulate()
  end

  local tf = { true, false }

   function document.truthTable(a,func)
       document.MakeHead(a)
       for i,s in ipairs(tf) do
           for j,t in ipairs(tf) do
               for k,u in ipairs(tf) do
                   context.NC()
                   context(s and "1" or "0")
                   context.NC()
                   context(t and "1" or "0")
                   context.NC()
                   if #a == 3 then
                       break
                   end
                   context(u and "1" or "0")
                   context.NC()
                   context(func(s,t,u))
                   context.NC()
                   context.AR()
               end
               if #a == 3 then
                   context(func(s,t))
                   context.NC()
                   context.AR()
               end
           end
       end
       document.MakeFooter()
   end
\stopluacode

—- We define a logic function before we call the main function.
—- by changing the function, we get the result for two variables.

\startluacode
--statistics.starttiming()
  local function logicF(p,q,r)
      if (not q) and (p or r) then
        return "1"
      else
        return "0"
      end
—- return (not q) and (p or r)
  end 

  document.truthTable({ "x", "y","z","f(x,y,x)"},logicF)
\stopluacode

\stoptext

[-- Attachment #1.2: Type: text/html, Size: 27494 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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-07 21:03               ` Jeong Dal via ntg-context
@ 2025-01-07 21:22                 ` Hans Hagen
  2025-01-08 10:17                   ` Jeong Dal via ntg-context
  0 siblings, 1 reply; 15+ messages in thread
From: Hans Hagen @ 2025-01-07 21:22 UTC (permalink / raw)
  To: ntg-context

On 1/7/2025 10:03 PM, Jeong Dal via ntg-context wrote:
> Dear Hans,
> 
> It is nice to input the function as an argument.
> It is suffice to convey one function at each all.
> 
> But the definition of the function
>>
>>   local function logicF3(p,q,r)
>>       return ((not p or not q) and r) or (p and (q or not r))
>>    -- return ((p == "0" or q == "0") and r == "1") or (p == "1" and (q 
>> == "1" or r == "0"))
>>   end
>>
> 
> Is not working. The outputs are blank(for false) and “?”(for true)
> 
> Here is a working example.
> 
> Thank you for enhancing the code.
> 
> Best regards,
> 
> Dalyoung
> 
> \startluacode
> function document.MakeHead(p,a)
> if not a then
> local t = p
> p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(2cm)|"
> 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.MakeFooter()
> context.HL()
> context.stoptabulate()
> end
> 
> local tf = { true, false }
> 
> function document.truthTable(a,func)
> document.MakeHead(a)
> for i,s in ipairs(tf) do
> for j,t in ipairs(tf) do
> for k,u in ipairs(tf) do
> context.NC()
> context(s and "1" or "0")
> context.NC()
> context(t and "1" or "0")
> context.NC()
> if #a == 3 then
> break
> end
> context(u and "1" or "0")
> context.NC()
> context(func(s,t,u))
> context.NC()
> context.AR()
> end
> if #a == 3 then
> context(func(s,t))
> context.NC()
> context.AR()
> end
> end
> end
> document.MakeFooter()
> end
> \stopluacode
> 
> —- We define a logic function before we call the main function.
> —- by changing the function, we get the result for two variables.
> 
> \startluacode
> --statistics.starttiming()
> local function logicF(p,q,r)
> if (not q) and (p or r) then
> return "1"
> else
> return "0"
> end
> —- return (not q) and (p or r)
> end
> 
> document.truthTable({ "x", "y","z","f(x,y,x)"},logicF)
> \stopluacode
> 
> \stoptext

the magic has to come from:

   context(func(s,t,u) and "1" or "0")

   context(func(s,t) and "1" or "0")

then

   local function logicF(p,q,r)
       return (not q) and (p or r)
   end

should work


\startluacode
   function document.MakeHead(p,a)
     if not a then
       local t = p
       p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(2cm)|"
       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.MakeFooter()
     context.HL()
     context.stoptabulate()
   end

    local tf = { true, false }

    function document.truthTable(a,func)
        document.MakeHead(a)
        for i,s in ipairs(tf) do
            for j,t in ipairs(tf) do
                for k,u in ipairs(tf) do
                    context.NC()
                    context(s and "1" or "0")
                    context.NC()
                    context(t and "1" or "0")
                    context.NC()
                    if #a == 3 then
                        break
                    end
                    context(u and "1" or "0")
                    context.NC()
                    context(func(s,t,u) and "1" or "0")
                    context.NC()
                    context.AR()
                end
                if #a == 3 then
                    context(func(s,t) and "1" or "0")
                    context.NC()
                    context.AR()
                end
            end
        end
        document.MakeFooter()
    end
\stopluacode

\startluacode

   local function logicF(p,q,r)
       return (not q) and (p or r)
   end

   document.truthTable({ "x", "y","z","f(x,y,x)"},logicF)
\stopluacode



-----------------------------------------------------------------
                                           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] 15+ messages in thread

* [NTG-context] Re: You can't use '\prevdepth' in restricted horizontal mode
  2025-01-07 21:22                 ` Hans Hagen
@ 2025-01-08 10:17                   ` Jeong Dal via ntg-context
  0 siblings, 0 replies; 15+ messages in thread
From: Jeong Dal via ntg-context @ 2025-01-08 10:17 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Jeong Dal


[-- Attachment #1.1: Type: text/plain, Size: 5065 bytes --]

Dear Hans,

I am sorry that I miss 
	“context(func(set,u) and “1” or “0”)
In your code.

Correcting it, it works perfectly.

By changing the logic function, we can draw truth tables upto 3 variables.

After making a truth table, I draw Karnaugh Map of that table.
I made a short MetaFun code for drawing Karnaugh map for the class material. 
In that code, it calculate the truth value using MetaFun function again.
 
Recently, I read about “How to bring the data made by Lua into MetaFun.”  
So, my next try is to  bring the truth value which is made in Lua.
Then I omit the truth-value-calculation part from the MetaFun code.

If there is a way to draw a diagonal in the \starttabulate ..., then we may use Lua code to do the job. 
In the wiki, there is an example of diagonal rule.

https://wiki.contextgarden.net/TABLE#Diagonal_rules

I tried it in \starttabulate … \stoptabulate, but it is not working.
And the shape drawn using MetaFun is much better.

Anyway, I’ll try it.

Thank you again.

Best wishes,

Dalyoung


PS: Here is my code which produces the truth table and its Karnaugh Map. The code for the truth table is cleaned up by Hans, but the MetaFun part will be changed.

\startMPdefinitions
numeric tVal[][],rlSkip[],rlNum[],uk, wd, ht;
string val[],code[],subcode;
uk := LineHeight;
    wd := 1.5uk;
    ht := uk+5pt;

vardef funcOr(expr a,b) =
    if a + b = 0:
      out := 0;
    else:
      out := 1;
    fi;
    out
  enddef;
  vardef funcAnd(expr a,b) =
    if a + b > 1:
      out := 1;
    else:
      out := 0;
    fi;
    out
  enddef;
  vardef funcNot(expr a) =
    if a = 0: out:=1; else: out:=0 fi;
    out
  enddef;

def KmapFrame(expr first,second) =
    val[0]:=first;
    val[1]:=second;
    for k=0,1:
      rlSkip[k] := length val[k];
      rlNum[k] := 2*rlSkip[k];
      if rlSkip[k] = 1:
        code[k] := "01";
      else:
        code[k] :="00011110"; 
      fi;
    endfor;
    label.top(textext("$" & first & "$"), (-.7wd,0));
    label.top(textext("$" & second & "$"), (-.3wd,.5ht));
  % drawing lines
  draw (-1.2wd,0) -- origin -- ((rlNum[1]+1)*wd,0);
  draw (0, 1.1ht) -- origin -- (0,-(rlNum[0]+.2)*ht);
  draw (-wd,ht) --origin;
  for i=0 upto rlNum[0]-1:
    subcode := substring (i*rlSkip[0],(i+1)*rlSkip[0]) of code[0];
    label.top(textext(subcode), ((-.7wd, -(i+1)*ht)));
  endfor;
  for i=0 upto rlNum[1]-1:
    subcode := substring (i*rlSkip[1],(i+1)*rlSkip[1]) of code[1];
    label.top(textext(subcode), ((i+1)*wd,.3ht));
  endfor;
  setbounds currentpicture to boundingbox currentpicture enlarged 2mm;
  draw boundingbox currentpicture;
enddef;
\stopMPdefinitions

\startbuffer[Kmap_xyz]
KmapFrame("x", "yz");

vardef logicFunc(expr a,b,c) = 
  result := funcAnd(funcNot(b), funcOr(a,c));
  result
enddef;

for i=0,1:
  for j=0 upto rlNum[1]-1:
    b := scantokens(substring (j*rlSkip[1],j*rlSkip[1]+1) of code[1]);
    c := scantokens(substring (j*rlSkip[1]+1,j*rlSkip[1]+2) of code[1]);

    tVal[i][j] := logicFunc(i,b,c);
    label.top(tVal[i][j], ((j+1)*wd,-(i+1)*ht));
  endfor;
endfor;
draw unitsquare xyscaled (1wd,2ht) shifted (1.5wd,-2.1ht) withpen pencircle scaled 2pt withcolor .625blue ;
draw unitsquare xyscaled (1.8wd,1ht) shifted (.6wd,-2.1ht) withpen pencircle scaled 2pt withcolor .625red ;
\stopbuffer

\starttext

\startluacode
  function document.MakeHead(p,a)
    if not a then
      local t = p
      p = string.rep("|mcw(1cm)",#p-1) .. "|mcw(2cm)|"
      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.MakeFooter()
    context.HL()
    context.stoptabulate()
  end

  local tf = { true, false }

   function document.truthTable(a,func)
       document.MakeHead(a)
       for i,s in ipairs(tf) do
           for j,t in ipairs(tf) do
               for k,u in ipairs(tf) do
                   context.NC()
                   context(s and "1" or "0")
                   context.NC()
                   context(t and "1" or "0")
                   context.NC()
                   if #a == 3 then
                       break
                   end
                   context(u and "1" or "0")
                   context.NC()
                   context(func(s,t,u) and "1" or "0")
                   context.NC()
                   context.AR()
               end
               if #a == 3 then
                   context(func(s,t) and "1" or "0")
                   context.NC()
                   context.AR()
               end
           end
       end
       document.MakeFooter()
   end
\stopluacode

\startluacode
--statistics.starttiming()
  local function logicF(p,q,r)
    return (p or r) and (not q)
  end 

  document.truthTable({ "x", "y","z","f(x,y,x)"},logicF)
\stopluacode

\processMPbuffer[Kmap_xyz]

\stoptext





[-- Attachment #1.2: Type: text/html, Size: 28287 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] 15+ messages in thread

end of thread, other threads:[~2025-01-08 10:18 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-01-03 15:53 [NTG-context] You can't use '\prevdepth' in restricted horizontal mode Jeong Dal via ntg-context
2025-01-03 16:16 ` [NTG-context] " Florent Michel
2025-01-03 16:23 ` Wolfgang Schuster
2025-01-03 16:24 ` Hans Hagen
2025-01-03 18:08   ` Jeong Dal via ntg-context
2025-01-03 23:27   ` Jeong Dal via ntg-context
2025-01-05 10:42     ` Hans Hagen via ntg-context
2025-01-06 13:33       ` Jeong Dal via ntg-context
2025-01-07 12:53         ` Hans Hagen
2025-01-07 14:27           ` Jeong Dal via ntg-context
2025-01-07 14:54             ` Hans Hagen via ntg-context
2025-01-07 21:03               ` Jeong Dal via ntg-context
2025-01-07 21:22                 ` Hans Hagen
2025-01-08 10:17                   ` Jeong Dal via ntg-context
2025-01-03 16:29 ` Hans Hagen

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).