summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/animate/animate.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/animate/animate.sty')
-rw-r--r--macros/latex/contrib/animate/animate.sty247
1 files changed, 70 insertions, 177 deletions
diff --git a/macros/latex/contrib/animate/animate.sty b/macros/latex/contrib/animate/animate.sty
index 47c4d19d6f..a5c45e8316 100644
--- a/macros/latex/contrib/animate/animate.sty
+++ b/macros/latex/contrib/animate/animate.sty
@@ -13,7 +13,7 @@
\NeedsTeXFormat{LaTeX2e}
-\def\@anim@version{2019/12/03}
+\def\@anim@version{2020/03/23}
\ProvidesPackage{animate}
[\@anim@version\space PDF & SVG animations from files and inline graphics]
@@ -144,177 +144,6 @@
\if@anim@dvisvgm
\setboolean{@anim@export}{false}
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \AtBeginDocument{%
- % Add PS and PDF file inclusion (PDF files as of dvisvgm-2.6.3) and
- % fix some scaling issues in the dvisvgm.def graphics driver
- \def\GPT@space{ }
- \def\Gin@extensions{.svg,.eps,.png,.jpg,.jpeg}
- \def\Ginclude@pdf#1{\Ginclude@psorpdf{#1}{pdffile}}
- \def\Ginclude@eps#1{\let\Gin@page\@empty\Ginclude@psorpdf{#1}{PSfile}}
- \def\Ginclude@psorpdf#1#2{%
- \message{<#1>}%
- \bgroup
- \def\@tempa{!}%
- \dimen@\Gin@req@width
- \dimen@ii.1bp%
- \divide\dimen@\dimen@ii
- \@tempdima\Gin@req@height
- \divide\@tempdima\dimen@ii
- \Gin@req@width0.99626\Gin@req@width%
- \Gin@req@height0.99626\Gin@req@height%
- \ifGin@clip\special{dvisvgm:raw
- <g><clipPath id="GinClip\Gin@clip@id">%
- <path d="M{?x},{?y}l\strip@pt\Gin@req@width,0l0,-\strip@pt\Gin@req@height
- l-\strip@pt\Gin@req@width,0Z"/>%
- </clipPath>%
- <g clip-path="url(\Gin@hash@tag GinClip\Gin@clip@id)">}%
- \fi%
- \special{#2="#1"\GPT@space
- \ifx\Gin@page\@empty\else page=\Gin@page\GPT@space\fi
- llx=\Gin@llx\GPT@space
- lly=\Gin@lly\GPT@space
- urx=\Gin@urx\GPT@space
- ury=\Gin@ury\GPT@space
- \ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\GPT@space\fi
- \ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\GPT@space\fi
- }%
- \ifGin@clip%
- \special{dvisvgm:raw </g></g>}%
- \begingroup%
- \count@\Gin@clip@id\advance\count@ by\@ne\xdef\Gin@clip@id{\the\count@}%
- \endgroup%
- \fi%
- \egroup}
- \@namedef{Gin@rule@.ps}#1{{eps}{.ps}{#1}}
- \@namedef{Gin@rule@.eps}#1{{eps}{.eps}{#1}}
- \@namedef{Gin@rule@.mps}#1{{eps}{.mps}{#1}}
- \@namedef{Gin@rule@.pdf}#1{{pdf}{.xbb}{#1}}
- \def\Gread@pdf#1{%
- \Gread@generic{#1}\Gread@extractbb@aux%
- }%
- \def\Gread@extractbb@aux#1{%
- \ifeof\@inputcheck%
- \immediate\openin\@inputcheck=%
- "|extractbb %
- \ifx\Gin@page\@empty\else -p \Gin@page\GPT@space\fi
- \ifx\Gin@pagebox\@empty\else -B \Gin@pagebox\GPT@space\fi
- -O \Gin@base\Gin@ext"%
- \fi%
- \Gread@true%
- \let\@tempb\Gread@false%
- \ifeof\@inputcheck%
- \@latex@error%
- {Cannot run pipe command. Try --shell-escape\MessageBreak%
- (--enable-pipes in MikTeX) option}%
- {Alternatively, execute\MessageBreak\space\space
- extractbb
- \ifx\Gin@page\@empty\else -p \Gin@page\GPT@space\fi
- \ifx\Gin@pagebox\@empty\else -B \Gin@pagebox\GPT@space\fi
- \Gin@base\Gin@ext\MessageBreak in a terminal.}%
- \else%
- \loop%
- \read\@inputcheck to\@tempa%
- \ifeof\@inputcheck%
- \Gread@false%
- \else%
- \expandafter\Gread@find@bb\@tempa:.\\%
- \fi%
- \ifGread@%
- \repeat%
- \immediate\closein\@inputcheck%
- \fi%
- }
- \def\Ginclude@bitmap#1{%
- \dimen@\Gin@urx pt%
- \advance\dimen@ by-\Gin@llx pt%
- \edef\Gin@svg@view@width{\strip@pt\dimen@}%
- \dimen@\Gin@ury pt%
- \advance\dimen@ by-\Gin@lly pt%
- \edef\Gin@svg@view@height{\strip@pt\dimen@}%
- \dimen@\Gin@svg@real@height@bp pt%
- \advance\dimen@ by-\Gin@ury pt%
- \edef\Gin@svg@view@base{\strip@pt\dimen@}%
- \Gin@req@width0.99626\Gin@req@width%
- \Gin@req@height0.99626\Gin@req@height%
- \raise\strip@pt\Gin@req@height bp\hbox{%
- \special{dvisvgm: raw
- <g transform="translate({?x},{?y})">
- <svg overflow="\ifGin@clip hidden\else visible\fi" width="\strip@pt\Gin@req@width" height="\strip@pt\Gin@req@height"
- viewBox="\Gin@llx\GPT@space\Gin@svg@view@base\GPT@space\Gin@svg@view@width\GPT@space\Gin@svg@view@height">
- <image width="\Gin@svg@real@width@bp" height="\Gin@svg@real@height@bp"
- xlink:href="#1"/>
- </svg>
- </g>}%
- }%
- }
- \@namedef{Gin@rule@.svg}#1{{svg}{.svg}{#1}}
- \let\Ginclude@svg\Ginclude@bitmap
- \def\Gread@svg#1{%
- \begingroup
- \catcode`\"12\relax%
- \immediate\openin\@inputcheck#1 %
- \ifeof\@inputcheck
- \@latex@error{File `#1' not found}\@ehc
- \else
- \let\Gin@urx\relax
- \let\Gin@ury\relax
- \Gread@true
- \let\@tempb\Gread@false
- \loop
- \read\@inputcheck to\@tempa
- \ifeof\@inputcheck
- \Gread@false
- \else
- \ifx\@tempa\Gin@partext\else
- \ifx\Gin@ury\relax\expandafter\Gread@svg@height\@tempa height=\relax\fi%
- \ifx\Gin@urx\relax\expandafter\Gread@svg@width\@tempa width=\relax\fi%
- \fi%
- \fi
- \ifx\Gin@urx\relax\else\ifx\Gin@ury\relax\else\Gread@false\fi\fi%
- \ifGread@
- \repeat
- \immediate\closein\@inputcheck
- \ifx\Gin@urx\relax
- \@latex@error{Cannot determine width of graphic in #1 (no BoundingBox)}\@ehc
- \def\Gin@urx{72}%
- \fi
- \ifx\Gin@ury\relax
- \@latex@error{Cannot determine height of graphic in #1 (no BoundingBox)}\@ehc
- \def\Gin@ury{72}%
- \fi
- \fi
- \edef\Gin@setter{\def\noexpand\Gin@urx{\Gin@urx}\def\noexpand\Gin@ury{\Gin@ury}}%
- \expandafter\endgroup\Gin@setter%
- \def\Gin@llx{0}%
- \def\Gin@lly{0}%
- \edef\Gin@svg@real@width@bp{\Gin@urx}%
- \edef\Gin@svg@real@height@bp{\Gin@ury}%
- }
- \def\Gin@partext{\par}
- \def\Gread@svg@height#1height={\@ifnextchar\relax{}{\@ifnextchar'\Gread@svg@height@apo\Gread@svg@height@double}}
- \def\Gread@svg@height@apo'#1'#2\relax{\afterassignment\Gin@gobble@till@relax\dimen@#1pt\relax\edef\Gin@ury{\strip@pt\dimen@}}
- \def\Gread@svg@height@double"#1"#2\relax{\afterassignment\Gin@gobble@till@relax\dimen@#1pt\relax\edef\Gin@ury{\strip@pt\dimen@}}
- \def\Gread@svg@width#1width={\@ifnextchar\relax{}{\@ifnextchar'\Gread@svg@width@apo\Gread@svg@width@double}}
- \def\Gread@svg@width@apo'#1'#2\relax{\afterassignment\Gin@gobble@till@relax\dimen@#1pt\relax\edef\Gin@urx{\strip@pt\dimen@}}
- \def\Gread@svg@width@double"#1"#2\relax{\afterassignment\Gin@gobble@till@relax\dimen@#1pt\relax\edef\Gin@urx{\strip@pt\dimen@}}
- \def\Gin@gobble@till@relax#1\relax{}
- \edef\Gin@hash@tag{\string#}
- \def\Gin@clip@id{0}
- \@namedef{Gin@rule@.jpg}#1{{bitmap}{.xbb}{#1}}
- \@namedef{Gin@rule@.jpeg}#1{{bitmap}{.xbb}{#1}}
- \@namedef{Gin@rule@.png}#1{{bitmap}{.xbb}{#1}}
- \def\Gread@bitmap#1{%
- \Gread@generic{#1}\Gread@extractbb@aux%
- \dimen@\Gin@urx pt%
- \advance\dimen@ by-\Gin@llx pt%
- \edef\Gin@svg@real@width@bp{\strip@pt\dimen@}%
- \dimen@\Gin@ury pt%
- \advance\dimen@ by-\Gin@lly pt%
- \edef\Gin@svg@real@height@bp{\strip@pt\dimen@}%
- }
- }
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fi
\if@anim@export
@@ -364,7 +193,7 @@
\if@anim@dvisvgm
\setboolean{@anim@export}{false}
- \def\@anim@updatebbox#1#2#3{\special{dvisvgm:bbox #1 #2 #3}}
+ \def\@anim@updatebbox#1#2#3{\special{dvisvgm:bbox #1 #2 #3 transform}}
%approach similar to OCGs, that is, putting the frame content in an svg group,
% <g id='...'>...</g>, whose visibility is then manipulated by JavaScript
@@ -1563,7 +1392,9 @@
\setlength{\@anim@tmpdimb}{\z@}%
\vskip 0.1\@anim@tmpdima%
\hbox to \@anim@animwidth {%
- \hss%
+ \if@anim@ctrlleft\hspace{\@anim@ctrlsindent}\fi%
+ \ifnum\if@anim@ctrlright\@ne\else%
+ \if@anim@ctrlcentre\@ne\else\z@\fi\fi=\@ne\hss\fi%
\setboolean{@anim@controls@firstgrp}{false}%
\if@anim@controls@stop%
\setboolean{@anim@controls@firstgrp}{true}%
@@ -1584,7 +1415,9 @@
\if@anim@controls@firstgrp\hskip 0.3\@anim@tmpdima\fi%
\frame{\phantom{\rule{3\@anim@tmpdima}{\@anim@tmpdima}}}%
\fi%
- \hss%
+ \ifnum\if@anim@ctrlleft\@ne\else%
+ \if@anim@ctrlcentre\@ne\else\z@\fi\fi=\@ne\hss\fi%
+ \if@anim@ctrlright\hspace{\@anim@ctrlsindent}\fi%
}%
\fi%
}%
@@ -1842,7 +1675,9 @@
\setlength{\@anim@tmpdima}{\@anim@btnsize}%
\vskip 0.1\@anim@tmpdima%
\hbox to \@anim@animwidth {%
- \hss%
+ \if@anim@ctrlleft\hspace{\@anim@ctrlsindent}\fi%
+ \ifnum\if@anim@ctrlright\@ne\else%
+ \if@anim@ctrlcentre\@ne\else\z@\fi\fi=\@ne\hss\fi%
\def\@anim@tooltip{}%
\setboolean{@anim@controls@firstgrp}{false}%
\if@anim@controls@stop%
@@ -1890,7 +1725,9 @@
\@anim@makebutton{Plus}{#2}%
\@anim@buttonwidget{#1}{Plus}{Plus:#2}%
\fi%
- \hss%
+ \ifnum\if@anim@ctrlleft\@ne\else%
+ \if@anim@ctrlcentre\@ne\else\z@\fi\fi=\@ne\hss\fi%
+ \if@anim@ctrlright\hspace{\@anim@ctrlsindent}\fi%
}%
\fi%
}%
@@ -3099,6 +2936,39 @@
\setboolean{@anim@controls@speed}{true}%
}
+\def\@anim@parse@ctrlsalignarg#1#2#3+#4\@nil{%
+ \ifthenelse{\equal{#3}{}}{}{\def#1{#3}}%
+ \ifthenelse{\equal{#4}{}}{#2=\z@}{\@anim@getalignindent#2#4\@nil}%
+}
+\def\@anim@getalignindent#1#2+\@nil{#1=#2}
+
+\newboolean{@anim@ctrlleft}
+\newboolean{@anim@ctrlright}
+\newboolean{@anim@ctrlcentre}
+\define@key{anim@user}{controlsaligned}{%
+ \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil%
+ \ifthenelse{\equal{\@anim@tmpvar}{left}}{%
+ \setboolean{@anim@ctrlleft}{true}%
+ \setboolean{@anim@ctrlright}{false}%
+ \setboolean{@anim@ctrlcentre}{false}%
+ \xdef\@anim@ctrlsindent{\the\@anim@tmpdima}%
+ }{%
+ \ifthenelse{\equal{\@anim@tmpvar}{right}}{%
+ \setboolean{@anim@ctrlleft}{false}%
+ \setboolean{@anim@ctrlright}{true}%
+ \setboolean{@anim@ctrlcentre}{false}%
+ \xdef\@anim@ctrlsindent{\the\@anim@tmpdima}%
+ }{%
+ \ifthenelse{\equal{\@anim@tmpvar}{center}}{%
+ \setboolean{@anim@ctrlleft}{false}%
+ \setboolean{@anim@ctrlright}{false}%
+ \setboolean{@anim@ctrlcentre}{true}%
+ \xdef\@anim@ctrlsindent{\z@}%
+ }{}%
+ }%
+ }%
+}
+
\newboolean{@anim@loop}
\define@key{anim@user}{loop}[true]{%
\setboolean{@anim@loop}{#1}%
@@ -3261,6 +3131,10 @@
\global\let\if@anim@controls@step=\if@anim@@controls@step%
\global\let\if@anim@controls@stop=\if@anim@@controls@stop%
\global\let\if@anim@controls@speed=\if@anim@@controls@speed%
+ \global\let\if@anim@ctrlleft=\if@anim@@ctrlleft%
+ \global\let\if@anim@ctrlright=\if@anim@@ctrlright%
+ \global\let\if@anim@ctrlcentre=\if@anim@@ctrlcentre%
+ \global\let\@anim@ctrlsindent\@anim@@ctrlsindent%
\global\let\if@anim@loop=\if@anim@@loop%
\global\let\if@anim@autoplay=\if@anim@@autoplay%
\global\let\if@anim@autoresume=\if@anim@@autoresume%
@@ -3509,6 +3383,25 @@
\setboolean{@anim@@controls@speed}{true}%
}
+\newboolean{@anim@@ctrlleft}
+\newboolean{@anim@@ctrlright}
+\newboolean{@anim@@ctrlcentre}
+\setboolean{@anim@@ctrlcentre}{true}
+\def\@anim@@ctrlsindent{\z@}
+\define@key{anim@pkg}{controlsaligned}{%
+ \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil%
+ \setboolean{@anim@@ctrlcentre}{false}%
+ \ifthenelse{\equal{#1}{left}}{%
+ \setboolean{@anim@@ctrlleft}{true}%
+ \edef\@anim@@ctrlsindent{\the\@anim@tmpdima}%
+ }{%
+ \ifthenelse{\equal{#1}{right}}{%
+ \setboolean{@anim@@ctrlright}{true}%
+ \edef\@anim@@ctrlsindent{\the\@anim@tmpdima}%
+ }{\setboolean{@anim@@ctrlcentre}{true}}%
+ }%
+}
+
\newboolean{@anim@@loop}
\setboolean{@anim@@loop}{false}%
\define@key{anim@pkg}{loop}[true]{%