diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/animate/animate.sty | 1393 |
1 files changed, 682 insertions, 711 deletions
diff --git a/Master/texmf-dist/tex/latex/animate/animate.sty b/Master/texmf-dist/tex/latex/animate/animate.sty index 6964db89a13..408cf967f3c 100644 --- a/Master/texmf-dist/tex/latex/animate/animate.sty +++ b/Master/texmf-dist/tex/latex/animate/animate.sty @@ -11,13 +11,12 @@ % Supports LaTeX->dvips->ps2pdf, (Xe)LaTeX->(x)dvipdfmx, LuaLaTeX, % pdfLaTeX and LaTeX->dvisvgm workflows. -\NeedsTeXFormat{LaTeX2e}[2020-10-01] +\NeedsTeXFormat{LaTeX2e}[2022-06-01] -\def\@anim@version{2022/02/21} +\def\@anim@version{2022/08/04} \ProvidesPackage{animate} [\@anim@version\space PDF & SVG animations from files and inline graphics] -\RequirePackage{xkeyval} \RequirePackage{ifthen} \RequirePackage{iftex} \RequirePackage{ifdraft} @@ -25,60 +24,85 @@ %driver options (the only package options we process immediately) \newboolean{@anim@dvips} -\setboolean{@anim@dvips}{false} \newboolean{@anim@dvipdfmx} -\setboolean{@anim@dvipdfmx}{false} \newboolean{@anim@dvisvgm} -\setboolean{@anim@dvisvgm}{false} -\ifpdf\else - \setboolean{@anim@dvips}{true}% default dvi mode - \setboolean{@anim@dvipdfmx}{false} - \DeclareOptionX{dvips}{% - \setboolean{@anim@dvips}{true} - \setboolean{@anim@dvipdfmx}{false} - } - \DeclareOptionX{dvipdfmx}{% - \setboolean{@anim@dvipdfmx}{true} - \setboolean{@anim@dvips}{false} +\newboolean{@anim@xetex} +\newboolean{@anim@export}%exporting animation frames + +\ExplSyntaxOn +\DeclareKeys[anim@pkg]{ + pdftex.code:n = {}, + pdftex.value_forbidden:n = true, + + luatex.code:n = {}, + luatex.value_forbidden:n = true, + + xetex.code:n = {}, + xetex.value_forbidden:n = true, + + dvips.code:n = {}, + dvips.value_forbidden:n = true, + + dvipdfmx.code:n = { \PassOptionsToPackage{dvipdfmx}{pdfbase} + \PassOptionsToPackage{dvipdfmx}{ocgbase} \PassOptionsToPackage{dvipdfmx}{graphics} - } - \DeclareOptionX{xetex}{% - \setboolean{@anim@dvipdfmx}{true} - \setboolean{@anim@dvips}{false} - \PassOptionsToPackage{xetex}{pdfbase} - } - \DeclareOptionX{dvisvgm}{% - \setboolean{@anim@dvisvgm}{true} - \setboolean{@anim@dvips}{false} + }, + dvipdfmx.value_forbidden:n = true, + + dvisvgm.code:n = { \PassOptionsToPackage{dvisvgm}{pdfbase} \PassOptionsToPackage{dvisvgm}{graphics} - } + }, + dvisvgm.value_forbidden:n = true, + + export.legacy_if_gset:n = @anim@export, + export.default:n = true, +} +\ExplSyntaxOff +\DeclareUnknownKeyHandler[anim@pkg]{} + +\ProcessKeyOptions[anim@pkg] +% remaining package options to be processed near end of this file + +\RequirePackage{pdfbase} +\@ifpackagelater{pdfbase}{2022/08/04}{}{ + \PackageError{animate}{% + Support package `pdfbase.sty' too old.% + }{% + Please install an up to date version of `pdfbase.sty'.\MessageBreak% + Aborting.% + }% +} + +\ifpdf\else + \setboolean{@anim@dvips}{true}% default dvi mode \fi -\newboolean{@anim@xetex} -\setboolean{@anim@xetex}{false} -\ifxetex - \setboolean{@anim@xetex}{true} + +\ExplSyntaxOn +\bool_if:NT\g_pbs_dvipdfmx_bool{ \setboolean{@anim@dvipdfmx}{true} \setboolean{@anim@dvips}{false} -\fi -%exporting animation frames -\newboolean{@anim@export} -\setboolean{@anim@export}{false} +} +\bool_if:NT\g_pbs_dvisvgm_bool{ + \setboolean{@anim@dvisvgm}{true} + \setboolean{@anim@dvips}{false} +} +\sys_if_engine_xetex:T{ + \bool_if:NT\g_pbs_dvipdfmx_bool{\setboolean{@anim@xetex}{true}} + \setboolean{@anim@dvips}{false} +} +\ExplSyntaxOff + +\RequirePackage{graphics}%\scalebox, \resizebox, \rotatebox +\RequirePackage{zref-abspage} + \newboolean{@anim@insideexport} -\setboolean{@anim@insideexport}{false} \newenvironment{anim@export}{% \global\@anim@insideexporttrue% }{% \global\@anim@insideexportfalse% } -\DeclareOptionX{export}{\setboolean{@anim@export}{true}} - -\DeclareOptionX*{}\ProcessOptionsX*\relax %allow anything as an option -%(remaining package options will be processed near end of this file) - -\RequirePackage{graphics}%\scalebox, \resizebox, \rotatebox -\RequirePackage{zref-abspage} % get number of pages in file given as #1 (file basename); #2 extension; % store result into macro given as #3 @@ -148,7 +172,7 @@ \if@anim@export \@ifclassloaded{standalone}{}{ \PackageError{animate}{% - Option `export' requires `standalone' document class.\MessageBreak% + Option `export' requires the `standalone' document class.\MessageBreak% Replace current document class with `standalone'% }{% Put the line\MessageBreak% @@ -162,16 +186,6 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % low level PDF/SVG operations %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\RequirePackage{pdfbase} -\@ifpackagelater{pdfbase}{2017/09/29}{}{ - \PackageError{animate}{% - Support package `pdfbase.sty' too old.% - }{% - Please install an up to date version of `pdfbase.sty'.\MessageBreak% - Aborting.% - }% -} - \ExplSyntaxOn \let\@anim@literal\pbs_literal:nn @@ -193,8 +207,6 @@ \ExplSyntaxOff \if@anim@dvisvgm - \setboolean{@anim@export}{false} - \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, @@ -226,8 +238,6 @@ \pbs_pdfannot:nnnn{#1}{#2}{#3}{#4} \pbs_appendtofields:n{\pbs_pdflastann:} } - - \let\@anim@pdfcatalog\pbs_pdfcatalog:n \ExplSyntaxOff \RequirePackage{ocgbase} %OCG generating and configuration macros @@ -356,7 +366,7 @@ }% \edef\@anim@curxform{\@anim@getkeyval{xform:\@anim@fingerprint}}% \ifthenelse{\equal{\@anim@curxform}{}}{% - % new "<file chksum>.<page>.<graphicx opts>" + % new file \@anim@filebox{#3}{#4}{#5}{\@anim@box}% store file in a box \edef\@anim@natdims{{\the\wd\@anim@box}{\the\ht\@anim@box}{\the\dp\@anim@box}}% \@anim@xinline{#1}{#2}{\@anim@box}{newfile}% Form XObject creation @@ -415,7 +425,7 @@ \fi% \ifthenelse{\equal{#4}{newfile}\OR\equal{#4}{inline}}{% \@anim@xform{1}{1}{}{}{#3}% - %keep a record of XObject number, needed when timeline is built + %keep a record of XObject number \@anim@newkey{img@#2}{\@anim@lastxform}% }{% %known file @@ -496,11 +506,9 @@ \hss% }% % rotate content on lscape pages - \ifnum\@anim@method>\@ne\else% - \ifx\@anim@lscape\@anim@@lscape% + \ifnum\@anim@method>\@ne\else\ifx\@anim@lscape\@anim@@lscape% \setbox\@anim@box=\hbox{\rotatebox{90}{\box\@anim@box}}% - \fi% - \fi% + \fi\fi% \fi% \ifcase\@anim@method% icon based \if@anim@singleref\else% @@ -1577,7 +1585,7 @@ \ifcsname Ginput@path\endcsname% make use of graphic[xs] search path \let\input@path\Ginput@path% \fi% - \setkeys{anim@user}{#1}% + \SetKeys[anim@user]{#1}% \ifx\empty\@anim@bg\empty\xdef\@anim@alpha{}\fi% \xdef\@anim@btnsize{\the\dimexpr\@anim@btnsize\relax}% %correct wrong option combination; totalheight overrides height @@ -2108,7 +2116,7 @@ \ifcsname Ginput@path\endcsname% make use of graphic[xs] search path \let\input@path\Ginput@path% \fi% - \setkeys{anim@user}{#1}% + \SetKeys[anim@user]{#1}% \ifx\empty\@anim@bg\empty\xdef\@anim@alpha{}\fi% \xdef\@anim@btnsize{\the\dimexpr\@anim@btnsize\relax}% %correct wrong option combination; totalheight overrides height @@ -2848,171 +2856,27 @@ } %command options -\define@key{anim@user}{label}{% - \gdef\@anim@label{#1}% - \ifcsname @anim@#1\endcsname% - \PackageWarning{animate}{Label #1 multiply defined} - \ifdefined\@anim@multlabel\else - \gdef\@anim@multlabel{}% - \AtEndDocument{% - \PackageWarningNoLine{animate}{% - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak - @ There are multiply-defined labels! @\MessageBreak - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}% - }% - \fi% - \fi% - \expandafter\gdef\csname @anim@#1\endcsname{}% -} -%setting the widget size -\define@key{anim@user}{width}{% - \gdef\@anim@widtharg{#1}% - \ifdefined\@anim@usrwd\else% - \global\advance\@anim@resizeflags by 4% - \def\@anim@usrwd{}% - \fi% -} -\define@key{anim@user}{height}{% - \gdef\@anim@heightarg{#1}% - \ifdefined\@anim@usrht\else% - \global\advance\@anim@resizeflags by 2% - \def\@anim@usrht{}% - \fi% -} -\define@key{anim@user}{totalheight}{% - \gdef\@anim@totheightarg{#1}% - \ifdefined\@anim@usrtht\else% - \global\advance\@anim@resizeflags by \@ne% - \def\@anim@usrtht{}% - \fi% -} -\define@key{anim@user}{depth}{% - \PackageWarning{animate}{Ignoring obsolete `depth' option.}% -} \newboolean{@anim@iso} -\define@key{anim@user}{keepaspectratio}[true]{% - \setboolean{@anim@iso}{#1}% -} -\define@key{anim@user}{bb}{% - \xdef\@anim@bb{bb=#1}% -} -\define@key{anim@user}{viewport}{% - \xdef\@anim@viewport{viewport=#1}% -} -\define@key{anim@user}{trim}{% - \xdef\@anim@trim{trim=#1}% -} -\define@key{anim@user}{angle}{% - \xdef\@anim@angle{angle=#1}% -} -\define@key{anim@user}{clip}[true]{% - %no-op, as embedded graphics are always clipped to widget box -} \newboolean{@anim@hiresbb} -\define@key{anim@user}{hiresbb}[true]{% - \setboolean{@anim@hiresbb}{#1}% -} \newboolean{@anim@interpolate} -\define@key{anim@user}{interpolate}[true]{% - \setboolean{@anim@interpolate}{#1}% -} -\define@key{anim@user}{pagebox}{% - \xdef\@anim@pagebox{pagebox=#1}% -} -\define@key{anim@user}{scale}{% - \xdef\@anim@boxscale{#1}% -} -\define@key{anim@user}{buttonsize}{% - \gdef\@anim@btnsize{#1}% -} -\def\@anim@colours#1:#2\@nil{% helper macro to get number of colour components - \xdef\@anim@colour{\@anim@colour\space #1}% and to replace : by ` ' in the arg - \ifthenelse{\equal{#2}{}}{}{% - \global\advance\@anim@tmpcnt by \@ne% - \@anim@colours#2\@nil% - }% -} -\define@key{anim@user}{buttonbg}{%background colour of buttons - \global\@anim@tmpcnt=\@ne% - \gdef\@anim@colour{}% - \@anim@colours#1:\@nil% - \global\let\@anim@bgcolour\@anim@colour% - \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1% - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@bg{\@anim@colour\space setgray}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@bg{\@anim@colour\space setrgbcolor}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@bg{\@anim@colour\space setcmykcolor}% - \fi% - \fi% - \fi% - \else% pdftex and dvipdfmx - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@bg{\@anim@colour\space g}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@bg{\@anim@colour\space rg}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@bg{\@anim@colour\space k}% - \fi% - \fi% - \fi% - \fi% -} -\define@key{anim@user}{buttonfg}{%stroking colour of buttons - \global\@anim@tmpcnt=\@ne% - \gdef\@anim@colour{}% - \@anim@colours#1:\@nil% - \global\let\@anim@fgcolour\@anim@colour% - \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1% - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@fg{\@anim@colour\space setgray}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@fg{\@anim@colour\space setrgbcolor}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@fg{\@anim@colour\space setcmykcolor}% - \fi% - \fi% - \fi% - \else% pdftex and dvipdfmx - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@fg{\@anim@colour\space G}% - \xdef\@anim@@@fg{\@anim@colour\space g}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@fg{\@anim@colour\space RG}% - \xdef\@anim@@@fg{\@anim@colour\space rg}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@fg{\@anim@colour\space K}% - \xdef\@anim@@@fg{\@anim@colour\space k}% - \fi% - \fi% - \fi% - \fi% -} -\define@key{anim@user}{buttonalpha}{%button opacity - \xdef\@anim@alpha{#1}% -} -\define@key{anim@user}{alttext}{% - \ifthenelse{\equal{#1}{none}}{% - \gdef\@anim@alttext{}% - }{% - \xdef\@anim@alttext{/Contents (#1)}% - }% -} - \newboolean{@anim@controls} \newboolean{@anim@controls@play} \newboolean{@anim@controls@step} \newboolean{@anim@controls@stop} \newboolean{@anim@controls@speed} +\newboolean{@anim@ctrlleft} +\newboolean{@anim@ctrlright} +\newboolean{@anim@ctrlcentre} +\newboolean{@anim@loop} +\newboolean{@anim@autoplay} +\newboolean{@anim@autoresume} +\newboolean{@anim@autopause} +\newboolean{@anim@palindrome} +\newboolean{@anim@step} +\newboolean{@anim@meas} +\setboolean{@anim@nomouse}{false} +\newboolean{@anim@draft} +\def\@anim@mone{-1}\def\@anim@mtwo{-2} \def\@anim@user@controls@all{% \setboolean{@anim@controls}{true}% \setboolean{@anim@controls@play}{true}% @@ -3027,185 +2891,333 @@ \setboolean{@anim@controls@stop}{false}% \setboolean{@anim@controls@speed}{false}% } -\define@key{anim@user}{controls}[all]{% - \@anim@user@controls@none% - \setkeys{anim@user@controls}{#1}% -} -\define@key{anim@user@controls}{all}[]{\@anim@user@controls@all} -\define@key{anim@user@controls}{true}[]{\@anim@user@controls@all} -\define@key{anim@user@controls}{on}[]{\@anim@user@controls@all} -\define@key{anim@user@controls}{none}[]{\@anim@user@controls@none} -\define@key{anim@user@controls}{false}[]{\@anim@user@controls@none} -\define@key{anim@user@controls}{off}[]{\@anim@user@controls@none} -\define@key{anim@user@controls}{play}[]{% - \setboolean{@anim@controls}{true}% - \setboolean{@anim@controls@play}{true}% -} -\define@key{anim@user@controls}{step}[]{% - \setboolean{@anim@controls}{true}% - \setboolean{@anim@controls@step}{true}% -} -\define@key{anim@user@controls}{stop}[]{% - \setboolean{@anim@controls}{true}% - \setboolean{@anim@controls@stop}{true}% -} -\define@key{anim@user@controls}{speed}[]{% - \setboolean{@anim@controls}{true}% - \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@}% - }{}% - }% +% helper macro to get number of colour components +\def\@anim@colours#1{\@anim@@colours#1:\@nil} +\def\@anim@@colours#1:#2\@nil{% helper macro to get number of colour components + \xdef\@anim@colour{\@anim@colour\space #1}% and to replace : by ` ' in the arg + \ifthenelse{\equal{#2}{}}{}{% + \global\advance\@anim@tmpcnt by \@ne% + \@anim@@colours#2\@nil% }% } -\newboolean{@anim@loop} -\define@key{anim@user}{loop}[true]{% - \setboolean{@anim@loop}{#1}% -} -\newboolean{@anim@autoplay} -\define@key{anim@user}{autoplay}[true]{% - \setboolean{@anim@autoplay}{#1}% - \if@anim@autoplay% - \setboolean{@anim@autoresume}{false}% - \fi% -} -\newboolean{@anim@autoresume} -\define@key{anim@user}{autoresume}[true]{% - \setboolean{@anim@autoresume}{#1}% - \if@anim@autoresume% - \setboolean{@anim@autoplay}{false}% - \fi% -} -\newboolean{@anim@autopause} -\define@key{anim@user}{autopause}[true]{% - \setboolean{@anim@autopause}{#1}% -} -\newboolean{@anim@palindrome} -\define@key{anim@user}{palindrome}[true]{% - \setboolean{@anim@palindrome}{#1}% -} -\def\@anim@mone{-1}\def\@anim@mtwo{-2} -\define@key{anim@user}{poster}[first]{% <num> | first | last | none - \ifthenelse{% - \equal{#1}{first}% - }{% - \gdef\@anim@poster{0}% - }{% - \ifthenelse{% - \equal{#1}{last}% - }{% - \gdef\@anim@poster{-1}% - }{% - \ifthenelse{% - \equal{#1}{none}% - }{% - \gdef\@anim@poster{-2}% - }{% - \ifnum#1<\z@\relax% - \PackageError{animate}{% - Poster frame `#1' is out-of-bounds on\MessageBreak% - input line \the\inputlineno.\MessageBreak% - Try one of `poster=first' or `poster=none'% - }{}% - \fi% - \gdef\@anim@poster{#1}% - }% - }% - }% -} -\newboolean{@anim@step} -\define@key{anim@user}{step}[true]{% - \setboolean{@anim@step}{#1}% -} -\newboolean{@anim@draft} -\define@key{anim@user}{draft}[true]{% - \setboolean{@anim@draft}{#1}% -} -\define@key{anim@user}{final}[true]{% - \ifthenelse{\equal{#1}{true}}{% - \setboolean{@anim@draft}{false}% - }{% - \setboolean{@anim@draft}{true}% - }% -} -\setboolean{@anim@nomouse}{false} -\define@key{anim@user}{nomouse}[true]{% - \setboolean{@anim@nomouse}{#1}% -} -\define@key{anim@user}{timeline}{% - \IfFileExists{#1}{% - \xdef\@anim@tmlnfile{\expandafter\zap@finalspace\@filef@und\@nil}% - \setboolean{@anim@timeline}{true}% - }{% - \PackageError{animate}{timeline file `#1' cannot be opened for reading% - }{% - Make sure file `#1' exists and is readable!% - }% - }% -} -\define@key{anim@user}{begin}{% - \gdef\@anim@begin{#1}% -} -\define@key{anim@user}{end}{% - \gdef\@anim@end{#1}% -} -\define@key{anim@user}{every}{% embed every #1th frame - \ifnum#1<\@ne\relax\gdef\@anim@every{1}\else\gdef\@anim@every{#1}\fi% -} -\newboolean{@anim@meas} -\define@key{anim@user}{measure}[true]{% - \setboolean{@anim@meas}{#1}% -} -\define@key{anim@user}{method}{% - \ifthenelse{\equal{#1}{icon}}{% - \def\@anim@method{\z@}% - }{% - \ifthenelse{\equal{#1}{widget}}{% - \def\@anim@method{\@ne}% - }{% - \ifthenelse{\equal{#1}{ocg}}{% - \def\@anim@method{\tw@}% - }{}% - }% - }% -} -\define@key{anim@user}{useocg}[]{% - \PackageError{animate}{% - Option `useocg' has been removed.\MessageBreak% - Use `method=ocg' instead% - }{}% -} +\ExplSyntaxOn +\DeclareKeys[anim@user]{ + label.code:n = { + \gdef\@anim@label{#1} + \ifcsname @anim@#1\endcsname + \PackageWarning{animate}{Label~#1~multiply~defined} + \ifdefined\@anim@multlabel\else + \gdef\@anim@multlabel{} + \AtEndDocument{ + \PackageWarningNoLine{animate}{ + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak + @~There~are~multiply-defined~labels!~@\MessageBreak + @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@} + } + \fi + \fi + \expandafter\gdef\csname @anim@#1\endcsname{} + }, + label.value_required:n = true, + + width.code:n = { + \gdef\@anim@widtharg{#1} + \ifdefined\@anim@usrwd\else + \global\advance\@anim@resizeflags by 4 + \def\@anim@usrwd{} + \fi + }, + width.value_required:n = true, + + height.code:n = { + \gdef\@anim@heightarg{#1} + \ifdefined\@anim@usrht\else + \global\advance\@anim@resizeflags by 2 + \def\@anim@usrht{} + \fi + }, + height.value_required:n = true, + + totalheight.code:n = { + \gdef\@anim@totheightarg{#1} + \ifdefined\@anim@usrtht\else + \global\advance\@anim@resizeflags by \@ne + \def\@anim@usrtht{} + \fi + }, + totalheight.value_required:n = true, + + keepaspectratio.legacy_if_gset:n = @anim@iso, + keepaspectratio.default:n = true, + + bb.code:n = {\xdef\@anim@bb{bb=#1}}, + bb.value_required:n = true, + + viewport.code:n = {\xdef\@anim@viewport{viewport=#1}}, + viewport.value_required:n = true, -\define@key{anim@user}{type}{\gdef\@anim@ftype{#1}}% + trim.code:n = {\xdef\@anim@trim{trim=#1}}, + trim.value_required:n = true, + + angle.code:n = {\xdef\@anim@angle{angle=#1}}, + angle.value_required:n = true, + + pagebox.code:n = {\xdef\@anim@pagebox{pagebox=#1}}, + pagebox.value_required:n = true, + + clip.code:n = {}, % no-op, as embedded graphics are always + clip.default:n = true, % clipped to widget box + + hiresbb.legacy_if_gset:n = @anim@hiresbb, + hiresbb.default:n = true, + + interpolate.legacy_if_gset:n = @anim@interpolate, + interpolate.default:n = true, + + scale.tl_gset_x:N = \@anim@boxscale, + scale.value_required:n = true, + + buttonsize.tl_gset:N = \@anim@btnsize, + buttonsize.value_required:n = true, + + buttonbg.code:n = { + \global\@anim@tmpcnt=\@ne + \gdef\@anim@colour{} + \@anim@colours{#1} + \global\let\@anim@bgcolour\@anim@colour + \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1 + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@bg{\@anim@colour\space setgray} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@bg{\@anim@colour\space setrgbcolor} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@bg{\@anim@colour\space setcmykcolor} + \fi + \fi + \fi + \else% pdftex and dvipdfmx + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@bg{\@anim@colour\space g} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@bg{\@anim@colour\space rg} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@bg{\@anim@colour\space k} + \fi + \fi + \fi + \fi + }, + buttonbg.value_required:n = true, + + buttonfg.code:n = { + \global\@anim@tmpcnt=\@ne + \gdef\@anim@colour{} + \@anim@colours{#1} + \global\let\@anim@fgcolour\@anim@colour + \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1 + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@fg{\@anim@colour\space setgray} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@fg{\@anim@colour\space setrgbcolor} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@fg{\@anim@colour\space setcmykcolor} + \fi + \fi + \fi + \else% pdftex and dvipdfmx + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@fg{\@anim@colour\space G} + \xdef\@anim@@@fg{\@anim@colour\space g} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@fg{\@anim@colour\space RG} + \xdef\@anim@@@fg{\@anim@colour\space rg} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@fg{\@anim@colour\space K} + \xdef\@anim@@@fg{\@anim@colour\space k} + \fi + \fi + \fi + \fi + }, + buttonfg.value_required:n = true, + + buttonalpha.tl_gset_x:N = \@anim@alpha, + buttonalpha.value_required:n = true, + + alttext.code:n = { + \ifthenelse{\equal{#1}{none}}{ + \gdef\@anim@alttext{} + }{ + \xdef\@anim@alttext{/Contents~(#1)} + } + }, + alttext.value_required:n = true, + + controls.multichoice:, + controls / all.code:n = {\@anim@user@controls@all}, + controls / true.code:n = {\@anim@user@controls@all}, + controls / on.code:n = {\@anim@user@controls@all}, + controls / none.code:n = {\@anim@user@controls@none}, + controls / false.code:n = {\@anim@user@controls@none}, + controls / off.code:n = {\@anim@user@controls@none}, + controls / play.code:n = { + \setboolean{@anim@controls}{true} + \setboolean{@anim@controls@play}{true} + }, + controls / step.code:n = { + \setboolean{@anim@controls}{true} + \setboolean{@anim@controls@step}{true} + }, + controls / stop.code:n = { + \setboolean{@anim@controls}{true} + \setboolean{@anim@controls@stop}{true} + }, + controls / speed.code:n = { + \setboolean{@anim@controls}{true} + \setboolean{@anim@controls@speed}{true} + }, + controls.default:n = all, + + controlsaligned.code:n = { + \@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@} + }{} + } + } + }, + controlsaligned.value_required:n = true, + + loop.legacy_if_gset:n = @anim@loop, + loop.default:n = true, + + autoplay.code:n = { + \setboolean{@anim@autoplay}{#1} + \if@anim@autoplay\setboolean{@anim@autoresume}{false}\fi + }, + autoplay.default:n = true, + + autoresume.code:n = { + \setboolean{@anim@autoresume}{#1} + \if@anim@autoresume\setboolean{@anim@autoplay}{false}\fi + }, + autoresume.default:n = true, + + autopause.legacy_if_gset:n = @anim@autopause, + autopause.default:n = true, + + palindrome.legacy_if_gset:n = @anim@palindrome, + palindrome.default:n = true, + + poster.choice:, % <num> | first | last | none + poster / first.code:n = {\gdef\@anim@poster{0}}, + poster / last.code:n = {\gdef\@anim@poster{-1}}, + poster / none.code:n = {\gdef\@anim@poster{-2}}, + poster / unknown.code:n = {% frame <num> + \ifnum#1<\z@\relax + \PackageError{animate}{ + Poster~frame~`#1'~is~out-of-bounds~on\MessageBreak + input~line~\the\inputlineno.\MessageBreak + Try~one~of~`poster=first'~or~`poster=none' + }{} + \fi + \gdef\@anim@poster{#1} + }, + poster.default:n = first, + + step.legacy_if_gset:n = @anim@step, + step.default:n = true, + + draft.legacy_if_gset:n = @anim@draft, + draft.default:n = true, + + final.code:n = { + \ifthenelse{\equal{#1}{true}}{ + \setboolean{@anim@draft}{false} + }{ + \setboolean{@anim@draft}{true} + } + }, + final.default:n = true, + + nomouse.legacy_if_gset:n = @anim@nomouse, + nomouse.default:n = true, + + timeline.code:n = { + \IfFileExists{#1}{ + \xdef\@anim@tmlnfile{\expandafter\zap@finalspace\@filef@und\@nil} + \setboolean{@anim@timeline}{true} + }{ + \PackageError{animate}{timeline~file~`#1'~cannot~be~opened~for~reading + }{ + Make~sure~file~`#1'~exists~and~is~readable! + } + } + }, + timeline.value_required:n = true, + + begin.tl_gset:N = \@anim@begin, + begin.value_required:n = true, + + end.tl_gset:N = \@anim@end, + end.value_required:n = true, + + every.code:n = { + \ifnum#1<\@ne\relax\gdef\@anim@every{1}\else\gdef\@anim@every{#1}\fi + }, + every.value_required:n = true, + + measure.legacy_if_gset:n = @anim@meas, + measure.default:n = true, + + method.choices:nn = {icon,widget,ocg} { + \ifthenelse{\equal{#1}{icon}}{ + \def\@anim@method{\z@} + }{ + \ifthenelse{\equal{#1}{widget}}{ + \def\@anim@method{\@ne} + }{ + \ifthenelse{\equal{#1}{ocg}}{ + \def\@anim@method{\tw@} + }{} + } + } + }, + method.value_required:n = true, + + type.tl_gset_x:N = \@anim@ftype, + type.value_required:n = true, +} +\ExplSyntaxOff %macro to reset macros and booleans \def\@anim@reset{% @@ -3274,197 +3286,25 @@ } %package options -\define@key{anim@pkg}{dvips}[]{% - \ifthenelse{\equal{#1}{}}{}{% - \PackageError{animate}{% - Package option `dvips' does not accept arguments% - }{}% - }% -}% -\define@key{anim@pkg}{dvipdfmx}[]{ - \ifthenelse{\equal{#1}{}}{}{% - \PackageError{animate}{% - Package option `dvipdfmx' does not accept arguments% - }{}% - }% -}% -\define@key{anim@pkg}{dvisvgm}[]{ - \ifthenelse{\equal{#1}{}}{}{% - \PackageError{animate}{% - Package option `dvisvgm' does not accept arguments% - }{}% - }% -}% -\define@key{anim@pkg}{xetex}[]{ - \ifthenelse{\equal{#1}{}}{}{% - \PackageError{animate}{% - Package option `xetex' does not accept arguments% - }{}% - }% -}% -\define@key{anim@pkg}{export}[]{ - \ifthenelse{\equal{#1}{}}{}{% - \PackageError{animate}{% - Package option `export' does not accept arguments% - }{}% - }% -}% -\def\@anim@@bg{} -\def\@anim@@bgcolour{} -\define@key{anim@pkg}{buttonbg}{%background colour of buttons - \global\@anim@tmpcnt=\@ne% - \gdef\@anim@colour{}% - \@anim@colours#1:\@nil% - \global\let\@anim@@bgcolour\@anim@colour% - \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1% - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@@bg{\@anim@colour\space setgray}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@@bg{\@anim@colour\space setrgbcolor}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@@bg{\@anim@colour\space setcmykcolor}% - \fi% - \fi% - \fi% - \else% pdftex and dvipdfmx - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@@bg{\@anim@colour\space g}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@@bg{\@anim@colour\space rg}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@@bg{\@anim@colour\space k}% - \fi% - \fi% - \fi% - \fi% -} - -\ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1 - %dvips .OR. dvisvgm - \def\@anim@@fg{0 setgray}\def\@anim@@@@fg{} -\else% pdftex and dvipdfmx - \def\@anim@@fg{0 G}\def\@anim@@@@fg{0 g} -\fi -\def\@anim@@fgcolour{} -\define@key{anim@pkg}{buttonfg}{%stroking colour of buttons - \global\@anim@tmpcnt=\@ne% - \gdef\@anim@colour{}% - \@anim@colours#1:\@nil% - \global\let\@anim@@fgcolour\@anim@colour% - \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1% - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@@fg{\@anim@colour\space setgray}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@@fg{\@anim@colour\space setrgbcolor}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@@fg{\@anim@colour\space setcmykcolor}% - \fi% - \fi% - \fi% - \else% pdftex and dvipdfmx - \ifnum\@anim@tmpcnt=\@ne\relax% - \xdef\@anim@@fg{\@anim@colour\space G}% - \xdef\@anim@@@@fg{\@anim@colour\space g}% - \else% - \ifnum\@anim@tmpcnt=3\relax% - \xdef\@anim@@fg{\@anim@colour\space RG}% - \xdef\@anim@@@@fg{\@anim@colour\space rg}% - \else% - \ifnum\@anim@tmpcnt=4\relax% - \xdef\@anim@@fg{\@anim@colour\space K}% - \xdef\@anim@@@@fg{\@anim@colour\space k}% - \fi% - \fi% - \fi% - \fi% -} -\def\@anim@@alpha{} -\define@key{anim@pkg}{buttonalpha}{%button opacity - \xdef\@anim@@alpha{#1}% -} \newcount\@anim@@resizeflags -\def\@anim@@widtharg{\width}% -\define@key{anim@pkg}{width}{% - \def\@anim@@widtharg{#1}% - \ifdefined\@anim@pkgwd\else% - \advance\@anim@@resizeflags by 4% - \def\@anim@pkgwd{}% - \fi% -} -\def\@anim@@heightarg{\height}% -\define@key{anim@pkg}{height}{% - \def\@anim@@heightarg{#1}% - \ifdefined\@anim@pkght\else% - \advance\@anim@@resizeflags by 2% - \def\@anim@pkght{}% - \fi% -} -\def\@anim@@totheightarg{\totalheight}% -\define@key{anim@pkg}{totalheight}{% - \def\@anim@@totheightarg{#1}% - \ifdefined\@anim@pkgtht\else% - \advance\@anim@@resizeflags by \@ne% - \def\@anim@pkgtht{}% - \fi% -} +\def\@anim@@widtharg{\width} +\def\@anim@@heightarg{\height} +\def\@anim@@totheightarg{\totalheight} \newboolean{@anim@@iso} -\define@key{anim@pkg}{keepaspectratio}[true]{% - \setboolean{@anim@@iso}{#1}% -} \def\@anim@@bb{} -\define@key{anim@pkg}{bb}{% - \xdef\@anim@bb{bb=#1}% -} \def\@anim@@viewport{} -\define@key{anim@pkg}{viewport}{% - \xdef\@anim@@viewport{viewport=#1}% -} \def\@anim@@trim{} -\define@key{anim@pkg}{trim}{% - \xdef\@anim@@trim{trim=#1}% -} \def\@anim@@angle{} -\define@key{anim@pkg}{angle}{% - \xdef\@anim@@angle{angle=#1}% -} -\define@key{anim@pkg}{clip}[true]{% - %no-op, as embedded graphics are always clipped to widget box -} +\def\@anim@@pagebox{} \newboolean{@anim@@hiresbb} -\define@key{anim@pkg}{hiresbb}[true]{% - \setboolean{@anim@@hiresbb}{#1}% -} \newboolean{@anim@@interpolate} -\define@key{anim@pkg}{interpolate}[true]{% - \setboolean{@anim@@interpolate}{#1}% -} -\def\@anim@@pagebox{} -\define@key{anim@pkg}{pagebox}{% - \xdef\@anim@@pagebox{pagebox=#1}% -} -\def\@anim@@boxscale{1}% -\define@key{anim@pkg}{scale}{% - \def\@anim@@boxscale{#1}% -} -\def\@anim@@btnsize{1.44em}% -\define@key{anim@pkg}{buttonsize}{% - \gdef\@anim@@btnsize{#1}% -} +\def\@anim@@boxscale{1} +\def\@anim@@btnsize{1.44em} +\def\@anim@@bg{} +\def\@anim@@bgcolour{} +\def\@anim@@fgcolour{} +\def\@anim@@alpha{} \edef\@anim@@alttext{/Contents (animation by animate, v. \@anim@version)} -\define@key{anim@pkg}{alttext}{% - \ifthenelse{\equal{#1}{none}}{% - \gdef\@anim@@alttext{}% - }{% - \xdef\@anim@@alttext{/Contents (#1)}% - }% -} - \newboolean{@anim@@controls} \newboolean{@anim@@controls@play} \newboolean{@anim@@controls@step} @@ -3484,170 +3324,301 @@ \setboolean{@anim@@controls@stop}{false}% \setboolean{@anim@@controls@speed}{false}% } -\define@key{anim@pkg}{controls}[all]{% - \@anim@pkg@controls@none% - \setkeys{anim@pkg@controls}{#1}% -} -\define@key{anim@pkg@controls}{all}[]{\@anim@pkg@controls@all} -\define@key{anim@pkg@controls}{true}[]{\@anim@pkg@controls@all} -\define@key{anim@pkg@controls}{on}[]{\@anim@pkg@controls@all} -\define@key{anim@pkg@controls}{none}[]{\@anim@pkg@controls@none} -\define@key{anim@pkg@controls}{false}[]{\@anim@pkg@controls@none} -\define@key{anim@pkg@controls}{off}[]{\@anim@pkg@controls@none} -\define@key{anim@pkg@controls}{play}[]{% - \setboolean{@anim@@controls}{true}% - \setboolean{@anim@@controls@play}{true}% -} -\define@key{anim@pkg@controls}{step}[]{% - \setboolean{@anim@@controls}{true}% - \setboolean{@anim@@controls@step}{true}% -} -\define@key{anim@pkg@controls}{stop}[]{% - \setboolean{@anim@@controls}{true}% - \setboolean{@anim@@controls@stop}{true}% -} -\define@key{anim@pkg@controls}{speed}[]{% - \setboolean{@anim@@controls}{true}% - \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{\@anim@tmpvar}{left}}{% - \setboolean{@anim@@ctrlleft}{true}% - \edef\@anim@@ctrlsindent{\the\@anim@tmpdima}% - }{% - \ifthenelse{\equal{\@anim@tmpvar}{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]{% - \setboolean{@anim@@loop}{#1}% -} \newboolean{@anim@@autoplay} -\setboolean{@anim@@autoplay}{false} -\define@key{anim@pkg}{autoplay}[true]{% - \setboolean{@anim@@autoplay}{#1}% - \if@anim@@autoplay\setboolean{@anim@@autoresume}{false}\fi% -} \newboolean{@anim@@autoresume} -\setboolean{@anim@@autoresume}{false} -\define@key{anim@pkg}{autoresume}[true]{% - \setboolean{@anim@@autoresume}{#1}% - \if@anim@@autoresume\setboolean{@anim@@autoplay}{false}\fi% -} \newboolean{@anim@@autopause} -\setboolean{@anim@@autopause}{false} -\define@key{anim@pkg}{autopause}[true]{% - \setboolean{@anim@@autopause}{#1}% -} \newboolean{@anim@@palindrome} -\setboolean{@anim@@palindrome}{false} -\define@key{anim@pkg}{palindrome}[true]{% - \setboolean{@anim@@palindrome}{#1}% -} \gdef\@anim@@poster{0}% -\define@key{anim@pkg}{poster}[first]{% - \ifthenelse{% - \equal{#1}{first}% - }{% - \gdef\@anim@@poster{0}% - }{% - \ifthenelse{% - \equal{#1}{last}% - }{% - \gdef\@anim@@poster{-1}% - }{% - \ifthenelse{% - \equal{#1}{none}% - }{% - \gdef\@anim@@poster{-2}% - }{% - \ifnum#1<\z@\relax% - \PackageError{animate}{% - Poster frame `#1' is out-of-bounds on\MessageBreak% - input line \the\inputlineno.\MessageBreak% - Try one of `poster=first' or `poster=none'% - }{}% - \fi% - \gdef\@anim@@poster{#1}% - }% - }% - }% -} \newboolean{@anim@@step} -\setboolean{@anim@@step}{false} -\define@key{anim@pkg}{step}[true]{% - \setboolean{@anim@@step}{#1}% -} \newboolean{@anim@@draft} \ifdraft{%globally set by document class \setboolean{@anim@@draft}{true}% }{% \setboolean{@anim@@draft}{false}% -}% -\define@key{anim@pkg}{draft}[true]{% - \setboolean{@anim@@draft}{#1}% - \if@anim@export% - \setboolean{@anim@@draft}{false}% - \fi% -} -\define@key{anim@pkg}{final}[true]{% - \ifthenelse{\equal{#1}{true}}{% - \setboolean{@anim@@draft}{false}% - }{% - \setboolean{@anim@@draft}{true}% - }% } \newboolean{@anim@@nomouse} -\setboolean{@anim@@nomouse}{false} -\define@key{anim@pkg}{nomouse}[true]{% - \setboolean{@anim@@nomouse}{#1}% -} +\def\@anim@@method{\z@}%default animation method is `icon' +\def\@anim@@ftype{}% file type (extension) of graphics + +\ExplSyntaxOn +\DeclareKeys[anim@pkg]{ + width.code:n = { + \gdef\@anim@@widtharg{#1} + \ifdefined\@anim@pkgwd\else + \advance\@anim@@resizeflags by 4 + \def\@anim@pkgwd{}% + \fi% + }, + width.value_required:n = true, -%file type (extension) of graphics files to be embedded -\def\@anim@@ftype{}% -\define@key{anim@pkg}{type}{\def\@anim@@ftype{#1}}% + height.code:n = { + \gdef\@anim@@heightarg{#1} + \ifdefined\@anim@pkght\else + \advance\@anim@@resizeflags by 2 + \def\@anim@pkght{} + \fi + }, + height.value_required:n = true, -% animation method: icon vs. widget vs. ocg based -\define@key{anim@pkg}{method}{% - \ifthenelse{\equal{#1}{icon}}{% - \def\@anim@@method{\z@}% - }{% - \ifthenelse{\equal{#1}{widget}}{% - \def\@anim@@method{\@ne}% + totalheight.code:n = { + \gdef\@anim@@totheightarg{#1} + \ifdefined\@anim@pkgtht\else + \advance\@anim@@resizeflags by \@ne + \def\@anim@pkgtht{} + \fi + }, + totalheight.value_required:n = true, + + keepaspectratio.legacy_if_gset:n = @anim@@iso, + keepaspectratio.default:n = true, + + bb.code:n = {\xdef\@anim@@bb{bb=#1}}, + bb.value_required:n = true, + + viewport.code:n = {\xdef\@anim@@viewport{viewport=#1}}, + viewport.value_required:n = true, + + trim.code:n = {\xdef\@anim@@trim{trim=#1}}, + trim.value_required:n = true, + + angle.code:n = {\xdef\@anim@@angle{angle=#1}}, + angle.value_required:n = true, + + pagebox.code:n = {\xdef\@anim@@pagebox{pagebox=#1}}, + pagebox.value_required:n = true, + + clip.code:n = {}, % no-op, as embedded graphics are always + clip.default:n = true, % clipped to widget box + + hiresbb.legacy_if_gset:n = @anim@@hiresbb, + hiresbb.default:n = true, + + interpolate.legacy_if_gset:n = @anim@@interpolate, + interpolate.default:n = true, + + scale.tl_gset_x:N = \@anim@@boxscale, + scale.value_required:n = true, + + buttonsize.tl_gset:N = \@anim@@btnsize, + buttonsize.value_required:n = true, + + buttonbg.code:n = { + \global\@anim@tmpcnt=\@ne + \gdef\@anim@colour{} + \@anim@colours{#1} + \global\let\@anim@@bgcolour\@anim@colour + \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1 + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@@bg{\@anim@colour\space setgray} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@@bg{\@anim@colour\space setrgbcolor} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@@bg{\@anim@colour\space setcmykcolor} + \fi + \fi + \fi + \else% pdftex and dvipdfmx + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@@bg{\@anim@colour\space g} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@@bg{\@anim@colour\space rg} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@@bg{\@anim@colour\space k} + \fi + \fi + \fi + \fi + }, + buttonbg.value_required:n = true, + + buttonfg.code:n = { + \global\@anim@tmpcnt=\@ne + \gdef\@anim@colour{} + \@anim@@colours#1:\@nil + \global\let\@anim@@fgcolour\@anim@colour + \ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1 + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@@fg{\@anim@colour\space setgray} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@@fg{\@anim@colour\space setrgbcolor} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@@fg{\@anim@colour\space setcmykcolor} + \fi + \fi + \fi + \else% pdftex and dvipdfmx + \ifnum\@anim@tmpcnt=\@ne\relax + \xdef\@anim@@fg{\@anim@colour\space G} + \xdef\@anim@@@@fg{\@anim@colour\space g} + \else + \ifnum\@anim@tmpcnt=3\relax + \xdef\@anim@@fg{\@anim@colour\space RG} + \xdef\@anim@@@@fg{\@anim@colour\space rg} + \else + \ifnum\@anim@tmpcnt=4\relax + \xdef\@anim@@fg{\@anim@colour\space K} + \xdef\@anim@@@@fg{\@anim@colour\space k} + \fi + \fi + \fi + \fi + }, + buttonfg.value_required:n = true, + + buttonalpha.tl_gset_x:N = \@anim@@alpha, + buttonalpha.value_required:n = true, + + alttext.code:n = { + \ifthenelse{\equal{#1}{none}}{ + \gdef\@anim@@alttext{} + }{ + \xdef\@anim@@alttext{/Contents~(#1)} + } + }, + alttext.value_required:n = true, + + controls.multichoice:, + controls / all.code:n = {\@anim@pkg@controls@all}, + controls / true.code:n = {\@anim@pkg@controls@all}, + controls / on.code:n = {\@anim@pkg@controls@all}, + controls / none.code:n = {\@anim@pkg@controls@none}, + controls / false.code:n = {\@anim@pkg@controls@none}, + controls / off.code:n = {\@anim@pkg@controls@none}, + controls / play.code:n = { + \setboolean{@anim@@controls}{true} + \setboolean{@anim@@controls@play}{true} + }, + controls / step.code:n = { + \setboolean{@anim@@controls}{true} + \setboolean{@anim@@controls@step}{true} + }, + controls / stop.code:n = { + \setboolean{@anim@@controls}{true} + \setboolean{@anim@@controls@stop}{true} + }, + controls / speed.code:n = { + \setboolean{@anim@@controls}{true} + \setboolean{@anim@@controls@speed}{true} + }, + controls.default:n = all, + + controlsaligned.code:n = { + \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil + \setboolean{@anim@@ctrlcentre}{false} + \ifthenelse{\equal{\@anim@tmpvar}{left}}{ + \setboolean{@anim@@ctrlleft}{true} + \edef\@anim@@ctrlsindent{\the\@anim@tmpdima} + }{ + \ifthenelse{\equal{\@anim@tmpvar}{right}}{ + \setboolean{@anim@@ctrlright}{true} + \edef\@anim@@ctrlsindent{\the\@anim@tmpdima} + }{ + \setboolean{@anim@@ctrlcentre}{true} + \xdef\@anim@@ctrlsindent{\z@} + } + } + }, + controlsaligned.value_required:n = true, + + loop.legacy_if_gset:n = @anim@@loop, + loop.default:n = true, + + autoplay.code:n = { + \setboolean{@anim@@autoplay}{#1} + \if@anim@@autoplay\setboolean{@anim@@autoresume}{false}\fi + }, + autoplay.default:n = true, + + autoresume.code:n = { + \setboolean{@anim@@autoresume}{#1} + \if@anim@@autoresume\setboolean{@anim@@autoplay}{false}\fi + }, + autoresume.default:n = true, + + autopause.legacy_if_gset:n = @anim@@autopause, + autopause.default:n = true, + + palindrome.legacy_if_gset:n = @anim@@palindrome, + palindrome.default:n = true, + + poster.choice:, % <num> | first | last | none + poster / first.code:n = {\gdef\@anim@@poster{0}}, + poster / last.code:n = {\gdef\@anim@@poster{-1}}, + poster / none.code:n = {\gdef\@anim@@poster{-2}}, + poster / unknown.code:n = {% frame <num> + \ifnum#1<\z@\relax + \PackageError{animate}{ + Poster~frame~`#1'~is~out-of-bounds~on\MessageBreak + input~line~\the\inputlineno.\MessageBreak + Try~one~of~`poster=first'~or~`poster=none' + }{} + \fi + \gdef\@anim@@poster{#1} + }, + poster.default:n = first, + + step.legacy_if_gset:n = @anim@@step, + step.default:n = true, + + draft.code:n = { + \setboolean{@anim@@draft}{#1} + \if@anim@export\setboolean{@anim@@draft}{false}\fi + }, + draft.default:n = true, + + final.code:n = { + \ifthenelse{\equal{#1}{true}}{ + \setboolean{@anim@@draft}{false} }{% - \ifthenelse{\equal{#1}{ocg}}{% - \def\@anim@@method{\tw@}% - }{}% ignoring wrong input + \setboolean{@anim@@draft}{true} }% - }% -} -\define@key{anim@pkg}{useocg}[]{% - \PackageError{animate}{% - Package option `useocg' has been removed.\MessageBreak% - Use `method=ocg' instead% - }{}% + }, + final.default:n = true, + + nomouse.legacy_if_gset:n = @anim@@nomouse, + nomouse.default:n = true, + + method.choices:nn = {icon,widget,ocg} { + \ifthenelse{\equal{#1}{icon}}{ + \def\@anim@@method{\z@} + }{ + \ifthenelse{\equal{#1}{widget}}{ + \def\@anim@@method{\@ne} + }{ + \ifthenelse{\equal{#1}{ocg}}{ + \def\@anim@@method{\tw@} + }{}% ignoring wrong input + } + } + }, + method.value_required:n = true, + + type.tl_gset_x:N = \@anim@@ftype, + type.value_required:n = true, } +\ExplSyntaxOff -%default animation method is Icon based -\def\@anim@@method{\z@} +\ifnum\if@anim@dvips 1\else\if@anim@dvisvgm 1\else0\fi\fi=1 + %dvips .OR. dvisvgm + \def\@anim@@fg{0 setgray}\def\@anim@@@@fg{} +\else% pdftex and dvipdfmx + \def\@anim@@fg{0 G}\def\@anim@@@@fg{0 g} +\fi %process package options -\def\@anim@setpkgkeys#1{\setkeys{anim@pkg}{#1}} -\edef\@anim@pkgopts{{\@ptionlist{\@currname.\@currext}}} -\expandafter\@anim@setpkgkeys\@anim@pkgopts +\ProcessKeyOptions[anim@pkg] %%%%%%%%%%%%%%%%%%%%%%%% % JavaScript part |