[NTG-context] Some Lua Code solved

Eric Gerard eric.b.gerard at gmail.com
Mon Jan 26 19:18:41 CET 2015


Hello Hans,

many thanks for your help.

I tried to adapt the code you sent me and in case it can help someone I provide you what I wrote.

I don’t pretend to make something perfectly correct but…

The idea is to make a checklist with left and bottom tabs.

The line position of left and bottom tabs are defined in two variables and each time the lua function is called it computes the topspace position of the even page.

\definepapersize
	[normal]
	[width=14.85cm,
	height=21cm]

\definepapersize
	[upsidedown]
	[normal,
	180]

\setupbodyfont
 [10pt,ss]

\setupcolor
 [xwi]

\setuppapersize
 [normal][A4]

\setuppapersize
 [upsidedown][A4]

\setuplayout
 [backspace=16mm,
  leftmargin=15mm,
  leftmargindistance=1mm,
  topspace=10mm,
  header=0mm,
  footer=0mm,
  height=200mm,
  rightmargin=0mm,
  width=131mm,
  location=middle,
  marking=on]

\definelayer
 [OngletGauche]
 [x=0mm,
  y=0mm,
  width=\paperwidth,
  height=\paperheight]

\definelayer
 [OngletBas]
 [x=0mm,
  y=0mm,
  width=\paperwidth,
  height=\paperheight]

\definelayer
 [ACouper]
 [x=0mm,
  y=0mm,
  width=\paperwidth,
  height=\paperheight]

% variables
\newdimen\hauteuronglet 
\hauteuronglet=1cm
\setvariables[userdata][bottomligne=4]
\setvariables[userdata][leftligne=10]


\setupTABLE
 [r][1]
 [color=dodgerblue,
  align={middle,lohi},
  height=1cm,
  style=\bfx,
  framecolor=black]

\startluacode
	userdata = userdata or { }

	function userdata.onglets(pos, word, opt_2, arg_2)
	
		local ongletgauche = utilities.parsers.settings_to_hash(pos)
       		local labelongletgauche = word
	
		local ongletbas = utilities.parsers.settings_to_hash(opt_2)
		local labels  = utilities.parsers.settings_to_array(arg_2)
		
		local ho = tex.dimen.hauteuronglet

		local y_ongletgauche = ongletgauche["numligne"]
		
      		y_ongletgauche = tex.dimen.paperheight - y_ongletgauche * ho
				
           	local hauteurzoneacouper =  tex.dimen.paperheight - (y_ongletgauche + ho)
		
		local NumLigne       = ongletbas["numligne"]
		local NbTotalOnglets = ongletbas["nbcol"]
		local PremierOnglet  = ongletbas["startcol"]
   		local nbTabs = ongletbas["nbtabs"]

		local y_ongletbas 		= tex.dimen.paperheight - (ho * NumLigne)
		local largeurongletbas 	= (tex.dimen.paperwidth  - tex.dimen.leftmarginwidth) / NbTotalOnglets
		local x_ongletbas    		= tex.dimen.leftmarginwidth   + largeurongletbas * (PremierOnglet - 1)
		local acouper = NbTotalOnglets - (nbTabs + PremierOnglet)
		
		context.setupbackgrounds({"page"},{background = "OngletBas, OngletGauche, ACouper"})

		context.setlayer(
	            	{ "OngletBas" },
	            	{
  	            		hoffset = number.todimen(x_ongletbas),
       		        		voffset = number.todimen(y_ongletbas),
       	    		},
           		function()

			context.bTABLE({ width = number.todimen(largeurongletbas) })
			context.bTR()
				for i=1, nbTabs
					do
						context.bTD()
						context(labels[i])
						context.eTD()
					end
				for i=nbTabs + PremierOnglet, NbTotalOnglets
					do
						context.bTD({background = "color",backgroundcolor = "gray"})
						context("C U T")
						context.eTD()
					end
			context.eTR()
               		context.eTABLE()
		end
		)
			
       		context.setlayer(
                   	{ "OngletGauche" },
                   	{
                      		hoffset = number.todimen(0),
                       		voffset = number.todimen(y_ongletgauche),
                   	},
                   	function()

       			context.startframedtext(
       				{"left"},
       				{
       				align = "lohi, middle",
				width = "15mm",
       				height = "1cm",
       				offset = "0pt",
       				frameoffset = "0pt",
       				style = "bold",
       				})
       				context(labelongletgauche)
	        		context.stopframedtext()
       			end
       			)
       	
       		if (y_ongletgauche + ho) < tex.dimen.paperheight then
       			context.setlayer(
       				{ "ACouper" },
       				{
       					hoffset = number.todimen(0),
       					voffset = number.todimen(y_ongletgauche + ho),
       				},
       				function()

       				context.startframedtext(
       					{"left"},
       					{
       					align = "lohi, middle",
					width = "15mm",
       					height = number.todimen(hauteurzoneacouper),
       					offset = "0pt",
       					frameoffset = "0pt",
       					background = "color",
       					backgroundcolor = "gray",
       				})
       				context("C U T")
       				context.stopframedtext()
       				end
       			)
       		end
		
		local topspace_odd = string.todimen("10mm")
		local height_odd = tex.dimen.paperheight - NumLigne * ho - topspace_odd
		context.definelayout(
			{"odd"},
			{
				topspace = number.todimen(topspace_odd),
				height = number.todimen(height_odd),
			})
			
		local topspace_even = NumLigne * ho
		local height_even = tex.dimen.paperheight - topspace_even - topspace_odd
		context.definelayout(
			{"even"},
			{
				topspace = number.todimen(topspace_even),
				height = number.todimen(height_even),
			})
   	end
\stopluacode

\def\myTabs[#1][#2][#3][#4]{\ctxlua{userdata.onglets('#1', '#2', '#3', '#4')} }   

\starttext
	\setuppapersize[normal]

	\input{tufte}
	\myTabs[numligne=\getvariable{userdata}{leftligne}][BOLD FACE][numligne=\getvariable{userdata}{bottomligne}, nbcol=6, startcol=1, nbtabs=1][EVACUATION RAPIDE]
   	
	\page
	\setuppapersize[upsidedown]
	\input{tufte}

	\page
	\setuppapersize[normal]

	\input{tufte}
	\myTabs[numligne=\getvariable{userdata}{leftligne}][BOLD FACE][numligne=\getvariable{userdata}{bottomligne}, nbcol=6, startcol=2, nbtabs=2][PANNE AU DECOLLAGE, INTERRUP. D/L]
   	
	\page
	\setuppapersize[upsidedown]
	\input{tufte}

	\page
	\setuppapersize[normal]

	\input{tufte}
	\myTabs[numligne=\getvariable{userdata}{leftligne}][BOLD FACE][numligne=\getvariable{userdata}{bottomligne}, nbcol=6, startcol=4, nbtabs=2][FEU FUMEE CABINE, FEU MOTEUR]
   	
	\page
	\setuppapersize[upsidedown]
	\input{tufte}
	
	
	\page
	\setuppapersize[normal]

	\input{tufte}
	\myTabs[numligne=\getvariable{userdata}{leftligne}][BOLD FACE][numligne=\getvariable{userdata}{bottomligne}, nbcol=6, startcol=6, nbtabs=1][STICK INOP FEU AU SOL]
   	
	\page
	\setuppapersize[upsidedown]
	\input{tufte}
	
	\page
	\setvariables[userdata][bottomligne=3]
	\setuppapersize[normal]

	\input{tufte}
	\myTabs[numligne=\getvariable{userdata}{leftligne}][BOLD FACE][numligne=\getvariable{userdata}{bottomligne}, nbcol=6, startcol=1, nbtabs=2][FEU APU, DOUBLE EXTINCTION]
   	
	\page
	\setuppapersize[upsidedown]
	\input{tufte}
\stoptext

I’m sure there is a way to automate the setuppapersize for even and odd pages, so I will work on that.

I have a question I don’t see the cutting lines on my printing while defining marking on ?

Eric Gerard




More information about the ntg-context mailing list