diff options
author | Karl Berry <karl@freefriends.org> | 2014-04-16 21:50:22 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-04-16 21:50:22 +0000 |
commit | 712e18adbc3a3747f8baa04df86593602cc032e6 (patch) | |
tree | ad001706d85bdc5a5f045e712cd6e6b31d6b7cfb /Master/texmf-dist/tex/lualatex/placeat | |
parent | f96c6f3b55f5a86a5f9dd5dbfe6422c72d1b4b8e (diff) |
placeat (16apr14)
git-svn-id: svn://tug.org/texlive/trunk@33467 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/lualatex/placeat')
-rw-r--r-- | Master/texmf-dist/tex/lualatex/placeat/placeat.sty | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/lualatex/placeat/placeat.sty b/Master/texmf-dist/tex/lualatex/placeat/placeat.sty new file mode 100644 index 00000000000..59ac22fa518 --- /dev/null +++ b/Master/texmf-dist/tex/lualatex/placeat/placeat.sty @@ -0,0 +1,201 @@ +%% +%% This is file `placeat.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% placeat.dtx (with options: `package') +%% +%% EXPERIMENTAL CODE +%% +%% This package is copyright © 2014 Arno L. Trautmann. It may be distributed and/or +%% modified under the conditions of the LaTeX Project Public License, either version 1.3c +%% of this license or (at your option) any later version. This work has the LPPL mainten- +%% ance status ‘maintained’. +\ProvidesPackage{placeat}% + [2014/04/15 v0.1 absolute content positioning] +\RequirePackage{luatexbase} +\RequirePackage{luacode} +\RequirePackage{atbegshi} +\RequirePackage{xparse} +\directlua{dofile(kpse.find_file("placeat.lua"))} +\NewDocumentCommand\placeat{ggd()d<>O{}mo}{ + \IfValueT{#1}{ %% two coordinates in { }{ } pair. + \IfValueT{#2}{ %% if second argument is not given, everything breaks. not nice. + \def\cox{#1} + \def\coy{#2} + } + } + \IfValueT{#3}{ %% one argument as ( , ) coordinate pair. + \def\cox{\firstof#3X} + \def\coy{\secondof#3X} + } + \IfValueT{#4}{ + \luadirect{ + y = string.byte('#4',1)-64 + x = string.byte('#4',2)-48 + x2 = string.byte('#4',3) + if x2 then x = x*10 + x2-48 end -- FIXME: what exactly happens here? … + } + \def\cox{\luadirect{tex.print(x)}} + \def\coy{\luadirect{tex.print(y)}} + } + \placeatthreenumbers{\cox}{\coy}{\llap{#5}#6} + + \IfValueT{#7}{ + \expandafter\gdef\csname #7x\endcsname{\firstof#3X} + \expandafter\gdef\csname #7y\endcsname{\secondof#3X} + } +} +\NewDocumentCommand\placerelto{oggd()d<>O{}mo}{ + \IfValueT{#2}{ %% two coordinates in { }{ } pair. + \IfValueT{#3}{ %% if second argument is not given, everything breaks. not nice. + \def\cox{#2} + \def\coy{#3} + } + } + \IfValueT{#4}{ %% one argument as ( , ) coordinate pair. + \def\cox{\firstof#4X} + \def\coy{\secondof#4X} + } + \IfValueT{#5}{ + \luaexec{ + y = string.byte('#5',1)-64 + x = string.byte('#5',2)-48 + x2 = string.byte('#5',3) + if x2 then x = x*10 + x2-48 end -- FIXME: what exactly happens here? … + tex.print("\\def\\cox{"..(x).."}\\def\\coy{"..(y).."}") + } + } + \placeatthreenumbers + {\cox + \csname #1x\endcsname} + {\coy + \csname #1y\endcsname} + {\llap{#6}#7} + \IfValueT{#8}{ + \expandafter\xdef\csname #8x\endcsname{\cox + \csname #1x\endcsname} + \expandafter\xdef\csname #8y\endcsname{\coy + \csname #1y\endcsname} + } +} +\NewDocumentCommand\placeminipageat{d()O{10cm}m}{ + \gdef\widthofplaceat{#2} + \placeat(#1) + {\begin{minipage}{\widthofplaceat}{#3}\end{minipage}} +} +\def\placeatthreenumbers#1#2#3{ + \luaexec{ + nr = nr+1 + dacoordtmp = ((#1-1+offsetx)*tex.pagewidth/65536/gridnrx*1.005)..","..(-(#2-1+offsety)*tex.pageheight/65536/gridnry) + dacoord[nr] = "\\put("..dacoordtmp..")" + tex.print("\\expandafter\\gdef\\csname command"..(nr).."\\endcsname")}% begin of command definition + {#3} %% this is what \command[nr] will contain +} +\def\firstof #1,#2X{#1} +\def\secondof #1,#2X{#2} +\let\ifdrawgrid\iftrue +\luaexec{ + drawgrid = false + nr = 0 + dacoord = {} + gridnr = 10 + gridnrx = 10 + gridnry = 10 + gridlinewidth = 0.01 + offsetx = 0 + offsety = 0 +} +\AtBeginDocument{ + \AtBeginShipout{% + \AtBeginShipoutUpperLeftForeground{% + \ifdrawgrid\drawgrid\fi + \luaexec{% + for i = 1,nr do + tex.print(dacoord[i].."{\\csname command"..(i).."\\endcsname}") + end + nr=0 + } + } + } +} +\def\drawgrid{ + \luatexlatelua{ + pdf_print("q") + linewidth(gridlinewidth) + for i = 1,math.max(gridnrx,gridnry) do + h = i*tex.pageheight/gridnry/65536 + w = i*tex.pagewidth/gridnrx/65536 + move(0,-h) line(tex.pagewidth,-h) stroke() + move(w,0) line(w,-tex.pageheight) stroke() + end + pdf_print("Q") + } + { %% extra grouping to keep font size change local. Going to normalfont seems to make sense. An explicit font for the grid might also be nice. Implementation only upon request. +%% would also be nice to maybe adapt the fontsize to the grid size + \normalfont\fontsize{8}{10}\selectfont + \luaexec{ + for i=1,math.max(gridnrx+offsetx,gridnry+offsety) do + hfac = tex.pageheight/gridnry/65536 %% another empirical factor + wfac = tex.pagewidth/gridnrx/65536*1.005 %% another empirical factor + h = (i-1)*hfac + w = (i-1)*wfac + tex.print("\\put("..(w)..",-7){\\rlap{"..(i-offsetx).."}}") + if alphanumgrid then + tex.print("\\put(0,"..(-h-0.05*hfac).."){\\char00"..(64+i-offsety).."}") %%-- for alphanumeric grid. + else + tex.print("\\put(0,"..(-h-0.05*hfac).."){"..(i-offsety).."}") + end + end + } + } +} +\NewDocumentCommand\placelineat{ou{(}u{,}u{)(}u{,}u{)}}{ + \placeat{#3}{#4}{\ignorespaces\IfValueT{#1}{\color{#1}}% + \luatexlatelua{placelineat(#3,-#4,#5,-#6)} + } +} +\NewDocumentCommand\placearrowat{ou{(}u{,}u{)(}u{,}u{)}}{ + \placeat{#3}{#4}{\ignorespaces\IfValueT{#1}{\color{#1}}% + \luatexlatelua{placearrowat(#3,-#4,#5,-#6)} + } +} +\NewDocumentCommand\placecircleat{ou{(}u{,}u{)}G{3}}{ + \placeat{#3}{#4}{\ignorespaces\IfValueT{#1}{\color{#1}}% + \luatexlatelua{placecircleat(#5)} + } +} +\NewDocumentCommand\placesquareat{ou{(}u{,}u{)}G{3}}{ + \placeat{#3}{#4}{\ignorespaces\IfValueT{#1}{\color{#1}}% + \luatexlatelua{placesquareat(#5)} + } +} +\NewDocumentCommand\placerectangleat{ou{(}u{,}u{)(}u{,}u{)}}{ + \placeat{#3}{#4}{\ignorespaces\IfValueT{#1}{\color{#1}}% + \luatexlatelua{placerectangleat(#3,-#4,#5,-#6)} + } +} +\NewDocumentCommand\placefilledrectangleat{ou{(}u{,}u{)(}u{,}u{)}}{ + \placeat{#3}{#4}{\ignorespaces\IfValueT{#1}{\color{#1}}% + \luatexlatelua{placefilledrectangleat(#3,-#4,#5,-#6)} + } +} +\ExplSyntaxOn +\keys_define:nn{placeat}{ + alphanumgrid.code:n = \directlua{alphanumgrid = true}, + final.code:n = \luaexec{placeat_final = true} \let\ifdrawgrid\iffalse, + drawgrid.code:n = \global\let\ifdrawgrid\iftrue, + gridnumber.code:n = \directlua{gridnr = #1 gridnrx = gridnr~gridnry = gridnr}, + gridnumberx.code:n = \directlua{gridnrx = #1}, + gridnumbery.code:n = \directlua{gridnry = #1}, + gridlinewidth.code:n = \directlua{gridlinewidth = #1}, + nogrid.code:n = \global\let\ifdrawgrid\iffalse, + numnumgrid.code:n = \directlua{alphanumgrid = false}, + offsetx.code:n = \directlua{offsetx = #1}, + offsety.code:n = \directlua{offsety = #1}, + startzero.code:n = \directlua{offsetx = 1 offsety = 1} +} +\DeclareDocumentCommand\placeatsetup{m}{ + \keys_set:nn{placeat}{#1} +} +\ExplSyntaxOff +%% +%% +%% End of file `placeat.sty'. |