From 9fd0a0bb2a40ac6581d2d04df1393e79f78f1db5 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 30 Sep 2010 21:54:38 +0000 Subject: ltr-* in runtime git-svn-id: svn://tug.org/texlive/trunk@19953 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/generic/lecturer/ltr-graphics.tex | 644 +++++++++++++++++++++ 1 file changed, 644 insertions(+) create mode 100644 Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex (limited to 'Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex') diff --git a/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex b/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex new file mode 100644 index 00000000000..c42ef9f1d26 --- /dev/null +++ b/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex @@ -0,0 +1,644 @@ +% This file is part of the Lecturer package. +% Paul Isambert -- July 2010. +% +% COLORS +% No attributes here. Cool. +% +\def\newcolor#1#2{% + \ifnextnospace[{\ltr@newcolor{#1}{#2}}{\ltr@newcolor{#1}{#2}[]}% + } +\def\ltr@newcolor#1#2[#3]#4{% + \ifcs{ltr@colormodel_#2} + {\xdefcs{ltr@color_user:#1}{% + \usecs{ltr@colormodel_#2}#4\ltr@color_end + \ifemptystring{#3}{/ltr@opacity_1 gs }{/ltr@opacity_#3 gs }}% + \reverse\iffemptystring{#3}{\ltr@create_opacity{#3}}% + \xdefcs{ltr@jscolor_user:#1}{\usecs{ltr@jscolormodel_#2}#4\ltr@color_end}% + }% + {\ltr@error{Unknown color model `#2'. Color `#1' won't be defined}}% + } +\def\ltr@create_opacity#1{% + \reverse\iffcs{ltr@opacity_#1} + {\immediate\pdfobj{<< /Type/ExtGState /CA #1 /ca #1 >>}% + \addgstate{ltr@opacity_#1}{\the\pdflastobj}% + \gdefcs{ltr@opacity_#1}{}}% + } + +\def\ltr@colormodel_grey#1\ltr@color_end{#1 g #1 G } +\let\ltr@colormodel_gray\ltr@colormodel_grey +\def\ltr@colormodel_rgb#1\ltr@color_end{#1 rg #1 RG } +\def\ltr@colormodel_cmyk#1\ltr@color_end{#1 k #1 K } +% +\def\ltr@color_use#1{% + \ifcs{ltr@color_user:#1} + {\usecs{ltr@color_user:#1}} + {\ltr@color_analyze#1 0 0 0 0 \ltr@color_end}% + } +\def\ltr@color_analyze#1 {% + \ifcs{ltr@color_usemodel:#1} + {\usecs{ltr@color_usemodel:#1}}% + {\ltr@use_defaultcolor}% + } +% +\defcs{ltr@color_usemodel:grey}#1 #2\ltr@color_end{#1 g #1 G } +\letcstocs{ltr@color_usemodel:gray}{ltr@color_usemodel:grey} +\defcs{ltr@color_usemodel:rgb}#1 #2 #3 #4\ltr@color_end{#1 #2 #3 rg #1 #2 #3 RG } +\defcs{ltr@color_usemodel:cmyk}#1 #2 #3 #4 #5\ltr@color_end{#1 #2 #3 #4 k #1 #2 #3 #4 K } +\def\ltr@use_defaultcolor#1\ltr@color_end{1 g 1 G } +% +% A simple macro for everybody. +% +\long\def\usecolor#1#2{% + \pdfcolorstack0 push {\ltr@color_use{#1}}% + #2% + \pdfcolorstack0 pop% + } +% +% And the same in JavaScript, just for the background in full screen. Ain't it nice? +% +\def\ltr@jscolormodel_grey#1\ltr@color_end{["G",#1]} +\let\ltr@jscolormodel_gray\ltr@jscolormodel_grey +\def\ltr@jscolormodel_rgb#1 #2 #3\ltr@color_end{["RGB",#1,#2,#3]} +\def\ltr@jscolormodel_cmyk#1 #2 #3 #4\ltr@color_end{["CMYK",#1,#2,#3,#4]} +% +\def\ltr@jscolor_use#1#2#3{% + \ltr@ifattribute #1:#2; + {\ifcs{ltr@jscolor_user:\ltr@usevalueor#1:#2;{ltr@novalue}} + {\usecs{ltr@jscolor_user:\ltr@usevalue#1:#2;}} + {\ltr@passvaluenobraces{\ltr@jscolor_analyze{#3}}#1:#2; \ltr@color_end}} + {["G",#3]}% + } +\def\ltr@jscolor_analyze#1#2 {% + \ifcs{ltr@jscolor_usemodel:#2} + {\usecs{ltr@jscolor_usemodel:#2}}% + {\ltr@jsuse_defaultcolor{#1}}% + } +\defcs{ltr@jscolor_usemodel:grey}#1 \ltr@color_end{["G",#1]} +\letcstocs{ltr@jscolor_usemodel:gray}{ltr@jscolor_usemodel:grey} +\defcs{ltr@jscolor_usemodel:rgb}#1 #2 #3 \ltr@color_end{["RGB",#1,#2,#3]} +\defcs{ltr@jscolor_usemodel:cmyk}#1 #2 #3 #4 \ltr@color_end{["CMYK",#1,#2,#3,#4]} +\def\ltr@jsuse_defaultcolor#1#2\ltr@color_end{["G",#1]} + +\ltr@create_opacity{1} +\newcolor{black}{grey}{0} +\newcolor{white}{grey}{1} +\newcolor{red}{rgb}{1 0 0} +\newcolor{green}{rgb}{0 1 0} +\newcolor{blue}{rgb}{0 0 1} +\newcolor{cyan}{cmyk}{1 0 0 0} +\newcolor{magenta}{cmyk}{0 1 0 0} +\newcolor{yellow}{cmyk}{0 0 1 0} + +% +% +% +% +% SHADES +% +\def\ltr@newshade_do#1#2#3{% + \immediate\pdfobj stream attr { + /FunctionType 4 + /Domain [0 1] + /Range [#1] + } + {{\ltr@usevalueor ltr@inner_shade:speed;1 mul dup #3}}% + \edef\ltr@temp{\the\pdflastobj\spacecs} + \immediate\pdfobj{ + << + /ShadingType 2 + /Coords[0 0 1 0] + /Extend [true true] + /ColorSpace /Device#2 + /Function \ltr@temp 0 R + >>} + \edef\ltr@temp{\the\pdflastobj\spacecs}% + \addshading{ltr@shade_\ltr@usevalue ltr@inner_shade:name;}{\ltr@temp} + } +\def\ltr@newshade_trig#1#2{% + \ltr@nopt{% + \dimexpr(\ltr@nopt{#1pt*71/4068}% + \dimexpr(#2\dimexpr(#2\dimexpr(#2\dimexpr(#2pt/72-1pt)\relax+42pt)\relax-840pt)\relax+5040pt)\relax/5040)\relax}% + } +\def\ltr@newshade_sin#1{% + \ltr@newshade_trig{#1}{\ltr@nopt{\ltr@nopt{#1pt*71/4068}\dimexpr(#1pt*71/4068)}}% + } +\def\ltr@newshade_cos#1{% + \ltr@newshade_trig{\ltr@nopt{90pt-#1pt}}{\ltr@nopt{\ltr@nopt{\ltr@nopt{90pt-#1pt}pt*71/4068}\dimexpr(\ltr@nopt{90pt-#1pt}pt*71/4068)}}% + } +\def\ltr@newshade_removepoint#1.#2#3#4#5\ltr@end{#1#2#3#4} +\def\ltr@newshade_removesign-{}% +\def\ltr@newshade_doscale#1{% + \xdefcs{ltr@shade_user:\ltr@usevalue ltr@inner_shade:name;_scale}{\ltr@nopt{1000pt/\expandafter\ltr@newshade_removepoint#1000\ltr@end}}% + } +\defactiveparameter ltr@inner_shade {% + \ltr@todim_loop{#1}{width height }% + \ifdim\ltr@usevalueor #1:angle;{90}pt>90pt + \ltr@error{A shade's angle can't be more than 90 [shade `\ltr@usevalue #1:name;']}% + \ltr@esetattribute #1:angle; = 90 + \else + \ifdim\ltr@usevalueor #1:angle;{90}pt<-90pt + \ltr@error{A shade's angle can't be less than -90 [shade `\ltr@usevalue #1:name;']}% + \ltr@esetattribute #1:angle; = -90 + \fi + \fi + \ifdim\ltr@usevalueor #1:angle;{90}pt<0pt + \ltr@esetattribute #1:angle; = \ltr@passvaluenobraces\ltr@newshade_removesign#1:angle; + \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;}{reversed}% + \else + \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;}{normal}% + \fi + \xdefcs{ltr@shade_user:\ltr@usevalue #1:name;_sin}{\ltr@newshade_sin{\ltr@usevalueor#1:angle;{90}}}% + \xdefcs{ltr@shade_user:\ltr@usevalue #1:name;_cos}{\ltr@newshade_cos{\ltr@usevalueor#1:angle;{90}}}% + \ifdim\ltr@usevalueor#1:angle;{90}pt<45pt + \passcs\ltr@newshade_doscale{ltr@shade_user:\ltr@usevalue #1:name;_cos}% + \else + \passcs\ltr@newshade_doscale{ltr@shade_user:\ltr@usevalue #1:name;_sin}% + \fi + \ltr@ifvalue #1:fixed; = true + {\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_fixed}{} +% +% This would force fixed shades to have at least the slide's dimension, +% so it would never take the area's dimensions. But after all why forbid +% an option simply because I can't see the point of it? +% +% \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_width}{\pdfpagewidth} +% \gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_height}{\pdfpageheight} + }{}% + \ltr@passvalue{\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_width}}#1:width;% + \ltr@passvalue{\gdefcs{ltr@shade_user:\ltr@usevalue #1:name;_height}}#1:height;% + \ltr@ifcasevalue#1:model; + \val grey + \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }% + \edef\ltr@to_grey{\ltr@usevalueor#1:to;1 }% + \ltr@newshade_do{0 1}{Gray}{% + \ltr@newshade_setcolor{grey}}% + \val gray + \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }% + \edef\ltr@to_grey {\ltr@usevalueor#1:to;0 }% + \ltr@newshade_do{0 1}{Gray}{% + \ltr@newshade_setcolor{grey}}% + \val rgb + \ltr@passvaluenobracesor{\ltr@newshade_getrgb{from}}#1:from; + {\def\ltr@from_red{0 }\def\ltr@from_green{0 }\def\ltr@from_black{0 }} % + \ltr@passvaluenobracesor{\ltr@newshade_getrgb{to}}#1:to; + {\def\ltr@to_red{1 }\def\ltr@to_green{1 }\def\ltr@to_blue{1 }} % + \ltr@newshade_do{0 1 0 1 0 1}{RGB}{% + \ltr@newshade_setcolor{red}% + exch dup \ltr@newshade_setcolor{green}% + exch \ltr@newshade_setcolor{blue}}% + \val cmyk + \ltr@passvaluenobracesor{\ltr@newshade_getcmyk{from}}#1:from; + {\def\ltr@from_cyan{0 }\def\ltr@from_magenta{0 }\def\ltr@from_yellow{ }\def\ltr@from_black{0 }} % + \ltr@passvaluenobraces{\ltr@newshade_getcmyk{to}}#1:to; + {\def\ltr@to_cyan{1 }\def\ltr@to_magenta{1 }\def\ltr@to_yellow{1 }\def\ltr@to_black{1 }} % + \ltr@newshade_do{0 1 0 1 0 1 0 1}{CMYK}{% + \ltr@newshade_setcolor{cyan}% + exch dup \ltr@newshade_setcolor{magenta}% + exch dup \ltr@newshade_setcolor{yellow}% + exch \ltr@newshade_setcolor{black}% + }% + \elseval + \edef\ltr@from_grey{\ltr@usevalueor#1:from;0 }% + \edef\ltr@to_grey{\ltr@usevalueor#1:to;1 }% + \ltr@newshade_do{0 1}{Gray}{% + \ltr@newshade_setcolor{grey}}% + \endval + \ltr@deleteattribute#1:name;% + \ltr@deleteattribute#1:width;% + \ltr@deleteattribute#1:height;% + \ltr@deleteattribute#1:fixed;% + \ltr@deleteattribute#1:model;% + \ltr@deleteattribute#1:from;% + \ltr@deleteattribute#1:to;% + \ltr@deleteattribute#1:angle;% + \ltr@deleteattribute#1:speed;% + } +\def\ltr@newshade_getrgb#1#2 #3 #4 {% + \defcs{ltr@#1_red}{#2 }\defcs{ltr@#1_green}{#3 }\defcs{ltr@#1_blue}{#4 }% + \skipspace{}% + } +\def\ltr@newshade_getcmyk#1#2 #3 #4 #5 {% + \defcs{ltr@#1_cyan}{#2 }\defcs{ltr@#1_magenta}{#3 }\defcs{ltr@#1_yellow}{#4 }\defcs{ltr@#1_black}{#5 }% + \skipspace{}% + } +\def\ltr@newshade_setcolor#1{% + \usecs{ltr@from_#1} \usecs{ltr@to_#1} sub mul \usecs{ltr@from_#1} exch sub + } +\restrictparameter ltr@inner_shade: name model from to angle speed width height fixed\par +\ltr@boolean_attr{ltr@inner_shade:fixed} +\ltr@restrictattribute ltr@inner_shade:model; grey gray rgb cmyk\par +\def\newshade#1{% + \setparameter ltr@inner_shade: + name = {#1} + } + +% +% +% +% +% PAINTING +% +\def\ltr@paint_area#1#2#3#4#5{% + \ifcs{ltr@shade_user:#1} + {\ltr@point_convert{#2-\pdfhorigin} + \ltr@point_convert{\pdfvorigin-#3} + \ltr@point_convert{#4} + \ltr@point_convert{-#5} re W* n + \ltr@paint_shade{#1}} + {\ltr@paint_color{f}{#1}} + {#2}{#3}{#4}{#5} + } +\def\ltr@paint_path#1#2#3#4#5{% + \ifcs{ltr@shade_user:\ltr@usevalueor#1:frame_color;{ltr@novalue}} + {\ltr@point_convert{#2-\dimexpr(\pdfhorigin+\ltr@usevalue #1:frame_width;)} + \ltr@point_convert{\dimexpr(\pdfvorigin+\ltr@usevalue #1:frame_width;)-#3} + \ltr@point_convert{#4+\dimexpr(\ltr@usevalue #1:frame_width;*2)} + \ltr@point_convert{-#5+\dimexpr(\ltr@usevalue #1:frame_width;*2)} re + \ltr@point_convert{#2-\pdfhorigin} + \ltr@point_convert{\pdfvorigin-#3} + \ltr@point_convert{#4} + \ltr@point_convert{-#5} re W* n + \ltr@passvalue\ltr@paint_shade #1:frame_color; + {\dimexpr(#2-\ltr@usevalue #1:frame_width;)\relax} + {\dimexpr(#3-\ltr@usevalue #1:frame_width;)\relax} + {#4+\dimexpr(\ltr@usevalue #1:frame_width;*2)} + {#5+\dimexpr(\ltr@usevalue #1:frame_width;*2)}} + {% + \ltr@point_convert{\ifdim\ltr@usevalue #1:frame_width;<0pt -\fi\ltr@usevalue #1:frame_width;} w + \ltr@ifcasevalue#1:frame_corner; + \val round 1 + \val bevel 2 + \elseval 0 + \endval\spacecs j + \ltr@ifattribute#1:frame_dash;{[\ltr@usevalue#1:frame_dash;] 0 d }{}% + \ltr@passvalue{\ltr@paint_color{S}}#1:frame_color; + {\dimexpr(#2-\ltr@usevalue #1:frame_width;/2)} + {\dimexpr(#3-\ltr@usevalue #1:frame_width;/2)} + {\dimexpr(#4+\ltr@usevalue #1:frame_width;)} + {\dimexpr(#5+\ltr@usevalue #1:frame_width;)}} + } +\def\ltr@paint_shade#1#2#3#4#5{% +% Translation, and reversal of vertical dimension. + 1 0 0 -1 + \passexpandedcs\ifstring{ltr@shade_user:#1}{reversed} + {\ifcs{ltr@shade_user:#1_fixed} + {\ltr@point_convert{\pdfpagewidth-\pdfhorigin}} + {\ltr@point_convert{\dimexpr(#4+#2)-\pdfhorigin}}} + {\ifcs{ltr@shade_user:#1_fixed} + {\ltr@point_convert{-\pdfhorigin}} + {\ltr@point_convert{#2-\pdfhorigin}}} + \ifcs{ltr@shade_user:#1_fixed}{\ltr@point_convert{\pdfvorigin}}{\ltr@point_convert{\pdfvorigin-#3}} cm +% Scaling. + \passexpandedcs\iffstring{ltr@shade_user:#1}{reversed}{-}% + \ifcs{ltr@shade_user:#1_width} + {\ltr@point_convert{\usecs{ltr@shade_user:#1_width}}} + {\ltr@point_convert{#4}}% + 0 0 + \ifcs{ltr@shade_user:#1_height} + {\ltr@point_convert{\usecs{ltr@shade_user:#1_height}}} + {\ltr@point_convert{#5}}% + 0 0 cm +% Rotation. + \usecs{ltr@shade_user:#1_cos} \usecs{ltr@shade_user:#1_sin} -\usecs{ltr@shade_user:#1_sin} + \usecs{ltr@shade_user:#1_cos} 0 0 cm +% Scaling of rotated material top accommodate the new length (diagonal, not side). + \usecs{ltr@shade_user:#1_scale} 0 0 1 0 0 cm + /ltr@shade_#1 sh + } +\def\ltr@paint_color#1#2#3#4#5#6{% + \ltr@color_use{#2}% + \ltr@point_convert{#3-\pdfhorigin} \ltr@point_convert{\pdfvorigin-#4} + \ltr@point_convert{#5} \ltr@point_convert{-#6} re #1 + } + +% +% +% +% +% SYMBOLS +% +\def\ltr@draw_dim#1{% + \ltr@nopt{#1pt}% + } +\newfornoempty\ltr@draw_loop{1}#2,{% + \passtrim{#2}{\ltr@draw_addspace{#1}}% + }[\ltr@draw_add{}{}{}{#1}] +\def\ltr@draw_addspace#1#2{% + \reverse\iffemptystring{#2}{\ltr@draw_decide{#1}#2 }% SPACE!!! + } +\def\ltr@draw_decide#1#2 {% + \ifcs{ltr@draw_#2} + {\usecs{ltr@draw_#2}{#1}} + {\ltr@draw_line{#1}#2 }% + } +\def\ltr@draw_line#1#2 #3 {% + \ifstring{#2}{+} + {\ltr@draw_relativeline#3 } + {\ltr@draw_add{}{#2}{#3}{l}% + \passarguments{S}}% + } +\def\ltr@draw_relativeline#1 #2 {% + \ltr@draw_add{}{\ltr@nopt{#1pt+\ltr@draw_x pt}}{\ltr@nopt{#2pt+\ltr@draw_y pt}}{l}% + \passarguments{S} + } +\def\ltr@draw_move#1#2 #3 {% + \ifstring{#2}{+} + {\ltr@draw_relativemove{#1}#3 } + {\ltr@draw_add{#1}{#2}{#3}{m}% + \passarguments{}}% + } +\def\ltr@draw_relativemove#1#2 #3 {% + \ltr@draw_add{#1}{\ltr@nopt{#2pt+\ltr@draw_x pt}}{\ltr@nopt{#3pt+\ltr@draw_y pt}}{m}% + \passarguments{} + } +\def\ltr@draw_stroke#1{% + \ltr@draw_add{S}{\ltr@draw_x}{\ltr@draw_y}{m}% + \passarguments{} + } +\def\ltr@draw_close#1{% + \ltr@draw_add{h}{\ltr@draw_x}{\ltr@draw_y}{m}% + \passarguments{S} + } +\def\ltr@draw_fill#1{% + \ltr@draw_add{f*}{\ltr@draw_x}{\ltr@draw_y}{m}% + \passarguments{} + } +\def\ltr@draw_paint#1{% + \ltr@draw_add{h B*}{\ltr@draw_x}{\ltr@draw_y}{m}% + \passarguments{} + } +\def\ltr@draw_pen#1#2 {% + \ltr@draw_add{}{}{}{#2 w }% + \passarguments{} + } +\def\ltr@draw_color#1#2 {% + \ifcs{ltr@color_user:#2} + {\ltr@draw_add{}{}{}{\usecs{ltr@color_user:#2}}} + {\usecs{ltr@draw_color#2}}% + } +\def\ltr@draw_colorrgb#1 #2 #3 {% + \ltr@draw_add{}{}{}{#1 #2 #3 rg #1 #2 #3 RG }% + } +\def\ltr@draw_colorcmyk#1 #2 #3 #4 {% + \ltr@draw_add{}{}{}{#1 #2 #3 #4 k #1 #2 #3 #4 K }% + } +\def\ltr@draw_colorgrey#1 {% + \ltr@draw_add{}{}{}{#1 g #1 G }% + } +\let\ltr@draw_colorgray\ltr@draw_colorgrey +\def\ltr@draw_add#1#2#3#4{% + \eaddright\ltr@draw_temp{% + \reverse\iffemptystring{#1}{#1 }% + \reverse\iffemptystring{#2}{\ltr@draw_dim{#2} }% + \reverse\iffemptystring{#3}{\ltr@draw_dim{#3} }% + #4 }% + \reverse\iffemptystring{#2} + {\edef\ltr@draw_x{#2}% + \ifdim\ltr@draw_x pt>\ltr@draw_xmax pt \edef\ltr@draw_xmax{\ltr@draw_x}\fi + \ifdim\ltr@draw_x pt<\ltr@draw_xmin pt \edef\ltr@draw_xmin{\ltr@draw_x}\fi}% + \reverse\iffemptystring{#3} + {\edef\ltr@draw_y{#3}% + \ifdim\ltr@draw_y pt>\ltr@draw_ymax pt \edef\ltr@draw_ymax{\ltr@draw_y}\fi + \ifdim\ltr@draw_y pt<\ltr@draw_ymin pt \edef\ltr@draw_ymin{\ltr@draw_y}\fi}% + } +\def\ltr@draw_circle#1#2 #3 {% + \usecs{ltr@draw_circle#2}{\ltr@draw_x}{\ltr@draw_y}{#3}% + \passarguments{S} + } +\def\ltr@draw_kappa{5522847} +\def\ltr@draw_circleur#1#2#3{% + \ltr@draw_addcircle{#1pt}{#2pt+.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt+#3pt} + {#1pt+#3pt}{#2pt+#3pt}{#3}{#3}% + } +\def\ltr@draw_circledr#1#2#3{% + \ltr@draw_addcircle{#1pt}{#2pt-.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt-#3pt} + {#1pt+#3pt}{#2pt-#3pt}{#3}{-#3}% + } +\def\ltr@draw_circleru#1#2#3{% + \ltr@draw_addcircle{#1pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt} + {#1pt+#3pt}{#2pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt+#3pt}{#2pt+#3pt}{#3}{#3}% + } +\def\ltr@draw_circlerd#1#2#3{% + \ltr@draw_addcircle{#1pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt} + {#1pt+#3pt}{#2pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt+#3pt}{#2pt-#3pt}{#3}{-#3}% + } +\def\ltr@draw_circleul#1#2#3{% + \ltr@draw_addcircle{#1pt}{#2pt+.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt+#3pt} + {#1pt-#3pt}{#2pt+#3pt}{-#3}{#3}% + } +\def\ltr@draw_circledl#1#2#3{% + \ltr@draw_addcircle{#1pt}{#2pt-.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt-#3pt} + {#1pt-#3pt}{#2pt-#3pt}{-#3}{-#3}% + } +\def\ltr@draw_circlelu#1#2#3{% + \ltr@draw_addcircle{#1pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt} + {#1pt-#3pt}{#2pt+#3pt-.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt-#3pt}{#2pt+#3pt}{-#3}{#3}% + } +\def\ltr@draw_circleld#1#2#3{% + \ltr@draw_addcircle{#1pt-.\ltr@draw_kappa\dimexpr(#3pt)}{#2pt} + {#1pt-#3pt}{#2pt-#3pt+.\ltr@draw_kappa\dimexpr(#3pt)} + {#1pt-#3pt}{#2pt-#3pt}{-#3}{-#3}% + } +\def\ltr@draw_addcircle#1#2#3#4#5#6#7#8{% + \eaddright\ltr@draw_temp{% + \ltr@nopt{#1} \ltr@nopt{#2} + \ltr@nopt{#3} \ltr@nopt{#4} + \ltr@nopt{#5} \ltr@nopt{#6} c + }% + \edef\ltr@draw_x{\ltr@nopt{\ltr@draw_x pt+#7pt}}% + \edef\ltr@draw_y{\ltr@nopt{\ltr@draw_y pt+#8pt}}% + \reverse\iffemptycommand\ltr@draw_x + {\ifdim\ltr@draw_x pt>\ltr@draw_xmax pt \edef\ltr@draw_xmax{\ltr@draw_x}\fi + \ifdim\ltr@draw_x pt<\ltr@draw_xmin pt \edef\ltr@draw_xmin{\ltr@draw_x}\fi}% + \reverse\iffemptycommand\ltr@draw_y + {\ifdim\ltr@draw_y pt>\ltr@draw_ymax pt \edef\ltr@draw_ymax{\ltr@draw_y}\fi + \ifdim\ltr@draw_y pt<\ltr@draw_ymin pt \edef\ltr@draw_ymin{\ltr@draw_y}\fi}% + } + +\def\newsymbol#1{% + \ifnextnospace[{\ltr@newsymbol{#1}}{\ltr@newsymbol{#1}[1pt]}% + } +\def\ltr@newsymbol#1[#2]#3{% + \def\ltr@draw_temp{}% + \def\ltr@draw_x{0}\def\ltr@draw_y{0}% + \def\ltr@draw_xmax{0}\def\ltr@draw_xmin{0}% + \def\ltr@draw_ymax{0}\def\ltr@draw_ymin{0}% + \def\ltr@draw_unit{1pt}% + \def\ltr@draw_leftpadding{1cm}\def\ltr@draw_rightpadding{1pt}% + \def\ltr@draw_toppadding{1pt}\def\ltr@draw_bottompadding{1pt}% + \ltr@option_launchloop{draw}{#2}% + \deftrim\ltr@temp{#3}% + \passexpanded{\ltr@draw_loop{}}{\ltr@temp,}% + \setbox\ltr@temp_box=\hbox{% Need the total width (not just positive) of the drawing. + % \ltr@draw_xmin is negative, hence the somewhat confusing signs. + \kern-\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax + \pdfliteral{q \ltr@point_convert{\ltr@draw_unit} 0 0 \ltr@point_convert{\ltr@draw_unit} 0 0 cm 1 w 0 0 m \ltr@draw_temp Q}}% + \wd\ltr@temp_box=\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmax pt-\ltr@draw_xmin pt)\relax+\ltr@draw_leftpadding+\ltr@draw_rightpadding)\relax + \ht\ltr@temp_box=\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_ymax pt)\relax+\ltr@draw_toppadding)\relax + \dp\ltr@temp_box=-\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_ymin pt)\relax-\ltr@draw_bottompadding)\relax + \pdfxform resources {/ExtGState << \ltr@page_extgstate >>} \ltr@temp_box + \setbox\ltr@temp_box=\hbox{% + \kern\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax + \pdfrefxform\the\pdflastxform}% + \xdefcs{ltr@\commandtoname#1@symbol_width}{\the\wd\ltr@temp_box}% + \xdefcs{ltr@\commandtoname#1@symbol_height}{\the\ht\ltr@temp_box}% + \xdefcs{ltr@\commandtoname#1@symbol_depth}{\the\dp\ltr@temp_box}% + \xdef#1{% + \hbox{% + \kern\dimexpr(\ltr@point_convert{\ltr@draw_unit}\dimexpr(\ltr@draw_xmin pt)\relax-\ltr@draw_leftpadding)\relax + \pdfrefxform\the\pdflastxform}% + }% + } +\def\ltr@draw_usepair#1#2{% + \ifstring{#1}{padding} + {\def\ltr@draw_leftpadding{#2}% + \def\ltr@draw_rightpadding{#2}% + \def\ltr@draw_toppadding{#2}% + \def\ltr@draw_bottompadding{#2}} + {\ifcs{ltr@draw_#1padding} + {\defcs{ltr@draw_#1padding}{#2}} + {\ltr@error{Unknown option `#1' in \string\newsymbol}}}% + } +\def\ltr@draw_useatom#1{% + \def\ltr@draw_unit{#1}% + } +\def\symbolwidth#1{% + \ltr@symbol_dimensions{#1}{width}% + } +\def\symbolheight#1{% + \ltr@symbol_dimensions{#1}{height}% + } +\def\symboldepth#1{% + \ltr@symbol_dimensions{#1}{depth}% + } +\def\ltr@symbol_dimensions#1#2{% + \ifcs{ltr@\commandtoname#1@symbol_#2} + {\usecs{ltr@\commandtoname#1@symbol_#2}} + {\ltr@error{\string#1 is not a symbol}}% + } +% +% +% IMAGES +% +\def\newimage#1{% + \ifnextnospace[{\ltr@newimage{#1}}{\ltr@newimage{#1}[,]}% + } +\def\ltr@newimage#1[#2,#3]#4{% + \pdfximage\reverse\iffemptystring{#2}{width \dimexpr(#2)\relax } + \reverse\iffemptystring{#3}{height \dimexpr(#3)\relax } + {#4}% + \xdefcs{ltr@image_user:#1}{% + \hbox{\pdfrefximage\the\pdflastximage}% + }% + \setbox\ltr@temp_box=\usecs{ltr@image_user:#1}% + \xdefcs{ltr@image_height:#1}{\the\ht\ltr@temp_box}% + } +\def\useimage#1{% + \ifcs{ltr@image_user:#1} + {\usecs{ltr@image_user:#1}} + {\ltr@error{Unkown image `#1'. Declare it with \string\useimage}}% + } +\def\ltr@image_use#1#2#3{% + \iffcs{ltr@image_user:#1} + {\kern\dimexpr(#3-\pdfvorigin)\relax + \moveright\dimexpr(#2-\pdfhorigin)\relax + \usecs{ltr@image_user:#1} + \kern-\dimexpr(#3+\usecs{ltr@image_height:#1}-\pdfvorigin)\relax + \prevdepth-1000pt}% + }% + +% +% TRANSITIONS +% Attributes : type, motion, direction, dimension, duration, scale. +% +\def\ltr@transition_restrictions{name type motion direction dimension duration scale} +\passexpandednobraces{\restrictparameter ltr@inner_transition:}\ltr@transition_restrictions\par +\ltr@restrictattribute ltr@inner_transition:type; + split Split blinds Blinds box Box wipe Wipe + dissolve Dissolve glitter Glitter fly Fly + push Push cover Cover uncover Uncover fade Fade\par +\ltr@restrictattribute ltr@inner_transition:motion; inward outward\par +\ltr@restrictattribute ltr@inner_transition:direction; lr bt rl tb dx\par +\ltr@restrictattribute ltr@inner_transition:dimension; horizontal vertical\par +\defactiveparameter ltr@inner_transition{% + \immediate\pdfobj{ + << /Type/Trans + /S/% + \ltr@ifcasevalue #1:type; + \val split Split + \val Split Split + \val blinds Blinds + \val Blinds Blinds + \val box Box + \val Box Box + \val wipe Wipe + \val Wipe Wipe + \val dissolve Dissolve + \val Dissolve Dissolve + \val glitter Glitter + \val Glitter Glitter + \val fly Fly + \val Fly Fly + \val push Push + \val Push Push + \val cover Cover + \val Cover Cover + \val uncover Uncover + \val Uncover Uncover + \val fade Fade + \val Fade Fade + \elseval R + \endval\spacecs + \ltr@ifcasevalue #1:motion; + \val inward /M/I + \val outward /M/O + \endval\spacecs + \ltr@ifcasevalue #1:direction; + \val lr /Di 0 + \val bt /Di 90 + \val rl /Di 180 + \val tb /Di 270 + \val dx /Di 315 + \endval\spacecs + \ltr@ifcasevalue #1:dimension; + \val horizontal /Dm/H + \val vertical /Dm/V + \endval\spacecs + \ltr@ifattribute #1:duration;{/D \ltr@usevalue #1:duration;}{} + \ltr@ifattribute #1:scale;{/SS \ltr@usevalue #1:scale;}{} + >>}% + \xdefcs{ltr@inner_transition:\ltr@usevalue #1:name;}{\the\pdflastobj\spacecs}% + \ltr@deleteattribute#1:name;% + \ltr@deleteattribute#1:type;% + \ltr@deleteattribute#1:motion;% + \ltr@deleteattribute#1:direction;% + \ltr@deleteattribute#1:dimension;% + \ltr@deleteattribute#1:duration;% + \ltr@deleteattribute#1:scale;% + } +\def\newtransition#1{% + \restrictallattributes transition #1\par + \setparameter ltr@inner_transition: + name = {#1} + } +\newtransition{split} type = split\par +\newtransition{blinds} type = blinds\par +\newtransition{box} type = box\par +\newtransition{wipe} type = wipe\par +\newtransition{dissolve} type = dissolve\par +\newtransition{glitter} type = glitter\par +\newtransition{fly} type = fly\par +\newtransition{push} type = push\par +\newtransition{cover} type = cover\par +\newtransition{uncover} type = uncover\par +\newtransition{fade} type = fade\par +\restrictallattributes transition none\par + +\endinput \ No newline at end of file -- cgit v1.2.3