summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-09-30 21:54:38 +0000
committerKarl Berry <karl@freefriends.org>2010-09-30 21:54:38 +0000
commit9fd0a0bb2a40ac6581d2d04df1393e79f78f1db5 (patch)
treed9a58f1448783d2e480fa5efe17bb59ea94ebc0a /Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex
parent4e47383328db1a995e33650ec387e5526cdac809 (diff)
ltr-* in runtime
git-svn-id: svn://tug.org/texlive/trunk@19953 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex')
-rw-r--r--Master/texmf-dist/tex/generic/lecturer/ltr-graphics.tex644
1 files changed, 644 insertions, 0 deletions
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