% engine=luatex %D \module %D [ file=mtx-context-combine, %D version=2009.03.21, %D title=\CONTEXT\ Extra Trickry, %D subtitle=Combine Files, %D author=Hans Hagen, %D date=\currentdate, %D copyright=\PRAGMA] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. %D This is a \TEXEXEC\ features that has been moved to \MKIV. % begin help % % usage: context --extra=combine [options] list-of-files % % --sort : sort filenames first % --paperoffset=dimension : left-top-offset % --nobanner : no footer etc % --combination : h*v or hxv % --paperformat : paper*print or paperxprint % --nobanner : no footerlines % --bannerheight : height of banner % --bannerstring : height of bannerstring % % end help \doifdocumentargumentelse {paperoffset} { \setuplayout [topspace=\getdocumentargument{paperoffset}, backspace=\getdocumentargument{paperoffset}] } { \setuplayout [topspace=0pt, backspace=0pt] } \setuplayout [header=0pt, footer=0pt, width=middle, height=middle] \startluacode local combination = document.arguments['combination'] or '2*2' local nx, ny = string.match(combination,"^(%d+)%s*[%*x]%s*(%d+)$") if not nx then nx, ny = 2, 2 elseif not ny then nx = tonumber(combination) or 2 ny = nx else nx = tonumber(nx) or 2 ny = tonumber(ny) or nx or 2 end document.setargument("nx",nx) document.setargument("ny",ny) \stopluacode \startluacode local paperformat = document.arguments['paperformat'] or 'A4*A4' paperformat = string.upper(paperformat) local f, t = string.match(paperformat,"^(.-)%s*[%*xX]%s*(.-)$") if not f then f, t = "A4", "A4" elseif not t then t = f end document.setargument("from",f) document.setargument("to",t) \stopluacode \setuppapersize [\getdocumentargument{from}] [\getdocumentargument{to}] \doifnotdocumentargument {bannerheight} { \setuplayout [footer=1cm] } \doifdocumentargumentelse {nobanner} {yes} { \setuplayout [footer=0cm] \setupbackgrounds [page] [background=] } { \definelayer [page] [width=\paperwidth, height=\paperheight] \setupbackgrounds [page] [background=page] } \setupexternalfigures [directory=] \starttext \startluacode local format = string.format local fprint = function(...) tex.sprint(tex.ctxcatcodes,format(...)) end if #document.files > 0 then if document.arguments["sort"] then table.sort(document.files) end local dobanner = not document.arguments["nobanner"] local bannerheight = document.arguments["bannerheight"] local nx = document.arguments.nx or 2 local ny = document.arguments.ny or 2 for _, filename in ipairs(document.files) do if not string.find(filename,"^mtx%-context%-") then -- could be a macro local bannerstring = format("\\tttf\\detokenize{%s}\\quad\\quad\\currentdate\\quad\\quad\\pagenumber",file.basename(filename)) if dobanner then if bannerheight then fprint("\\setuptexttexts[{\\setlayerframed[page][preset=middlebottom][frame=off,height=%s]{%s}}]",bannerheight,bannerstring) else fprint("\\setupfootertexts[{%s}]",bannerstring) end end fprint("\\combinepages[%s][nx=%s,ny=%s]",filename,nx,ny) fprint("\\page") end end else fprint("no files given") end \stopluacode \stoptext