/examples/slide/advi.sty
TeX | 416 lines | 290 code | 78 blank | 48 comment | 1 complexity | 6f60cd05f7a89cdc6177d6d6b924c839 MD5 | raw file
Possible License(s): GPL-3.0, GPL-2.0
- %%
- %% This is the original source file advi.sty
- %%
- %% Package `advi' to use with LaTeX 2e
- %% Copyright Roberto Di Cosmo, Jun Furuse, Didier Remy, and Pierre Weis
- %% All rights reserved.
- % Which name is ours
- \def \ActiveDVI {Active-DVI}
- \NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{advi}
- [2001/29/08 v0.40 Advi Package for advi Previewer]
- %%
- %% Identification
- %% Preliminary declarations
- \RequirePackage {keyval}
- %% Options
- \newif \ifadvi@ignore \advi@ignorefalse
- \DeclareOption {ignore}{\advi@ignoretrue}
- \ProcessOptions
- % \@ifundefined {AdviOptions}{}{\ExecuteOptions {\AdviOptions}}
- %% More declarations
- % Auxilliary macros
- \def \advi@empty{}
- \def \advi@ifempty #1{\def \@test {#1}\ifx \@test \advi@empty
- \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}
- \def \advi@error #1{\PackageError {Advi}{#1}{Type <RETURN> to proceed.}}
- \def \advi@warning #1{\PackageWarning {Advi}{#1}}
- \def \advi@undefinedenv {\advi@error {Environment \@currenvir\space undefined.
- Maybe you mean \@currenvir ing}}
- \def \advi@special@ {\advi@ifadvi{\special}{\advi@ignore}}
- \def \advi@special #1{\advi@special@ {advi: #1}}
- \def \advi@export #1#2{\@ifdefinable #1{\let #1#2}}
- \def \advi@exportenv #1#2{%
- \@ifundefined {#1}{\expandafter \let \csname #1\expandafter \endcsname
- \csname end#1\endcsname }\relax
- \expandafter \@ifdefinable \csname #1\endcsname
- {\expandafter \let \csname #1\expandafter \endcsname \csname #2\endcsname
- \expandafter \let \csname end#1\expandafter \endcsname
- \csname end#2\endcsname}}
- \def \advi@ignore #1{}
- \def \advi@id #1{#1}
- \def \advi@ifadvi {\ifadvi@ignore
- \expandafter \@secondoftwo \else \expandafter \@firstoftwo \fi}
- \advi@export \adviignore \advi@ignoretrue
- \advi@export \ifadvi \advi@ifadvi
- %%% Record and play
- \newif \ifadvi@recording
- \def \advi@ifrecording {\ifadvi@recording
- \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}
- \def \advi@ifrecordenv {\ifx \@currenvir \advi@recordenv
- \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}
- \def \advi@start {start}
- \def \advi@startplay {start play}
- \define@key{advi@record}{play}[]{\let \advi@do \advi@startplay}
- \def \advi@recordenv {advirecord}
- \newenvironment{advi@recording}[2][]%
- {\begingroup
- \let \advi@do \advi@start \setkeys{advi@record}{#1}%
- \advi@special {proc=#2 record=\advi@do}%
- \endgroup}
- {\advi@special {proc record=end}}
- \newcommand {\advi@record}[3][]{\advi@recording[#1]{#2}#3\endadvi@recording}
- \newcommand {\advi@play}[2][]%
- {\begingroup
- \advi@ifempty{#1}{}{\color {#1}}{\advi@special {proc=#2 play}}%
- \endgroup}
- \advi@exportenv {advirecording}{advi@recording}
- \advi@export \advirecord \advi@record
- \let \endadvirecord \advi@undefinedenv
- \advi@export \adviplay \advi@play
- %%% Embedded applications
- \def \advi@embed@name{anonymous}
- \def \advi@embed@mode{ephemeral}
- \def \advi@embed@width{0pt}
- \def \advi@embed@height{0pt}
- \define@key {advi@embed}{name}{\def \advi@embed@name {#1}}
- \define@key {advi@embed}{width}%
- {\@tempdima#1\relax \edef \advi@embed@width {\the\@tempdima}}
- \define@key {advi@embed}{height}%
- {\@tempdima#1\relax \edef \advi@embed@height {\the\@tempdima}}
- \def \advi@definemode #1{%
- \define@key {advi@embed}{#1}[anonymous]{%
- \def \advi@embed@mode {#1}\def\advi@embed@name {##1}%
- }}
- \advi@definemode{ephemeral}
- \advi@definemode{persistent}
- \advi@definemode{sticky}
- \def \advi@embed@ #1#2#3#4#5{%
- \mbox{\advi@special
- {embed name="#1" mode=#2 width=#3 height=#4 command="#5"}%
- {\vbox to #4{\hbox to #3{}}}}}
- \def \advi@length #1{\@tempdima #1\relax \the\@tempdima}
- \newcommand{\advi@embed}[2][]{%
- \mbox {\setkeys {advi@embed}{#1}%
- \advi@embed@ {\advi@embed@name}{\advi@embed@mode}
- {\advi@embed@width}{\advi@embed@height}{#2}}}
- \newcommand{\advi@killembed}[2][]{\advi@special {kill name="#2" signal="#1"}}
- \advi@export \adviembed \advi@embed
- \advi@export \advikillembed \advi@killembed
- %%% Background colors and images
- \def \do #1{\expandafter \def \csname advi@geom@#1@\endcsname {#1}}
- \do {center}
- \do {left}
- \do {right}
- \do {bottom}
- \do {top}
- \do {topleft}
- \do {topright}
- \do {bottomleft}
- \do {bottomright}
- \let \do \relax
- \def \advi@ifnine #1#2#3{\@ifundefined {advi@geom@#1@}{#3}{#2}}
- \let \advi@global \relax
- \def \advi@global@ {global}
- \newif \ifadvi@bgactive
- \def \advi@bg@do
- {\do\advi@bgcolor \do\advi@bgimage \do \advi@bgalpha \do\advi@bgblend}
- \def \advi@auto@ { fit=auto}
- \def \advi@bgreset
- {\def \do ##1{\expandafter \advi@global
- \expandafter \let \noexpand ##1\advi@empty}\advi@bg@do
- \advi@global \let \advi@bgfit \advi@auto@
- \advi@global \advi@bgactivefalse}
- \advi@bgreset
- \def \advi@none@ {none}
- \def \advi@ifnone #1{\def \@test{#1}\ifx \@test \advi@none@
- \let \@test \advi@empty \fi \ifx \@test \advi@empty
- \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}
- \def \advi@setbg #1#2#3{\advi@ifnone {#1}
- {\advi@global \expandafter \let \noexpand #1\advi@empty}
- {\advi@global \expandafter \def \noexpand #1{ #2=#3}%
- \advi@global \advi@bgactivetrue}}
- \define@key {advi@bg}{color}[]{\advi@setbg{\advi@bgcolor}{color}{#1}}
- \define@key {advi@bg}{image}[]{\advi@setbg{\advi@bgimage}{image}{#1}}
- \define@key {advi@bg}{alpha}[]{\advi@setbg{\advi@bgalpha}{alpha}{#1}}
- \define@key {advi@bg}{blend}[]{\advi@setbg{\advi@bgblend}{blend}{#1}}
- \define@key {advi@bg}{fit}[auto]{\def \advi@bgfit {#1}%
- \ifx \advi@bgfit \advi@auto@ \else
- \advi@ifnine {\advi@bgfit}
- {\advi@global \def \advi@bgfit{ fit=#1}}
- {\advi@error {Ill formed background fit=#1}}%
- \fi}
- \def \advi@bgset #1{\advi@ifnone {#1}{\advi@bgreset}{\setkeys {advi@bg}{#1}}}
- %\define@key {advi@bg}{inherit}[]{\advi@special{setbg inherit}}
- \def \advi@bgemit
- {\advi@special
- {setbg \advi@bgcolor \advi@bgimage \advi@bgalpha \advi@bgblend
- \advi@bgfit
- }}
- \newif \ifadvi@bglocal
- \newcommand{\advi@bg}[2][]{%
- \begingroup
- \def \@test {#1}\ifx \@test \advi@global@ \let \advi@global \global
- \advi@bgset {#2}\else
- \ifx \@test \advi@empty \else \advi@warning
- {Optional argument [#1] to \string \advibg ignored}\fi
- \global \advi@bglocaltrue
- \advi@bgset{#2}\advi@bgemit \fi
- \endgroup}
- \def \advi@bgpage
- {\ifadvi@bgactive \ifadvi@bglocal\else \advi@bgemit \fi\fi
- \global \advi@bglocalfalse}
- \advi@export \advibg \advi@bg
- %%% Pausing and waiting
- \def\advi@pause {\advi@special{pause}}
- \def\advi@wait#1{\advi@special{wait sec=#1}}
- %% export
- \newcommand {\adviwait}[1][]%
- {\advi@ifempty {#1}{\advi@pause}{\advi@wait {#1}}}
- %%% Transparency and alpha blending
- %%% To be revisited.
- \def\advi@epstransparent
- {\advi@special{epstransparent push true}%
- \aftergroup \advi@resetepstransparent}
- \def\advi@epswhite
- {\advi@special{epstransparent push false}%
- \aftergroup \advi@resetepstransparent}
- \def\advi@setalpha#1%
- {\advi@special{alpha push #1}%
- \aftergroup \advi@resetalpha}
- \def\advi@setblend#1%
- {\advi@special{blend push #1}%
- \aftergroup\advi@resetblend}
- \def\advi@resetepstransparent {\advi@special{epstransparent pop}}
- \def\advi@resetalpha {\advi@special{alpha pop}}
- \def\advi@resetblend {\advi@special{blend pop}}
- \advi@export \epstransparent \advi@epstransparent
- \advi@export \epswhite \advi@epswhite
- \advi@export \setalpha \advi@setalpha
- \advi@export \setblend \advi@setblend
- %%% Animated transitions
- \def \advi@transfrom{}
- \def \advi@transsteps{}
- \def \advi@settrans {\advi@global \def}
- \define@key {advi@trans}{none} []{\advi@settrans \advi@transmode {none}}
- \define@key {advi@trans}{slide}[]{\advi@settrans \advi@transmode {slide}}
- \define@key {advi@trans}{block}[]{\advi@settrans \advi@transmode {block}}
- \define@key {advi@trans}{wipe} []{\advi@settrans \advi@transmode {wipe}}
- \define@key {advi@trans}{from} {\advi@settrans \advi@transfrom { from=#1}}
- \define@key {advi@trans}{steps}{\advi@settrans \advi@transsteps { steps=#1}}
- \def \advi@transemit
- {\advi@special{trans \advi@transmode \advi@transfrom \advi@transsteps}}
- \newif \ifadvi@translocal
- \newcommand {\advi@transition}[2][]{%
- \begingroup
- \def \@test {#1}\ifx \@test \advi@global@ \let \advi@global \global
- \setkeys {advi@trans}{#2}\else
- \ifx \@test \advi@empty \else \advi@warning
- {Optional argument [#1] to \string \advitransition ignored}\fi
- \global \advi@translocaltrue
- \setkeys {advi@trans}{#2}\advi@transemit \fi
- \endgroup}
- \def \advi@transpage
- {\@ifundefined {advi@transmode}{}
- {\ifadvi@translocal\else \advi@transemit \fi}%
- \global \advi@translocalfalse}
- %% Hook \advi@setpagesetyle at \@begindvi that run at every page
- \def \advi@setpagestyle {\advi@bgpage \advi@transpage}
- \def \endpage@hook {}
- \def \AtEndPage {\g@addto@macro \endpage@hook}
- \AtEndPage {\advi@setpagestyle}
- % We must patch \@begindvi to put out hook.
- % However, hyperref may patch it as well. So we should do it at begin
- % document to have the control (no one after us).
- % Howver, one must be careful, because \@begindvi redefines itself at the
- % first call to its prerecorded final value.
- % So our first patch will be overridden with the value that it was
- % meant to have after the first page.
- % Hence, we patch it a second time to put our hook to this final value.
- % we can use \g@addto@macro which redefines #1 to so that it procedes as
- % before and then execute #2 at the end.
- \def \advi@begindvi@patch
- {\g@addto@macro \@begindvi
- {\endpage@hook \g@addto@macro \@begindvi {\endpage@hook}}}
- \AtBeginDocument {\advi@begindvi@patch}
- % {\let \advi@begindvi@save \@begindvi %% value at begindocument
- % \def \@begindvi %% our new value
- % {\advi@begindvi@save %% may redefine \@begindvi
- % \global\let \advi@begindvi@save %% so we this new value
- % \@begindvi
- % \gdef \@begindvi %% now and forever
- % {\advi@begindvi@save \endpage@hook}%
- % \endpage@hook %% our hook for the
- % }}
- %% Transitions
- \def\advi@transbox@save#1#2#3{\advi@special
- {transbox save width=#1 height=#2 depth=#3}}
- \def\advi@transbox@go#1{\advi@special{transbox go #1}}
- \def \advi@transslide {slide}
- \def \advi@transbox #1{%
- \def \advi@afterbox
- {\hbox {\advi@transbox@save{\the\wd0 }{\the\ht0 }{\the\dp0}%
- \unhbox0\setkeys {advi@trans}{#1}%
- \advi@transbox@go
- {\advi@transmode \advi@transfrom \advi@transsteps}}}%
- \def \advi@@afterbox {\aftergroup \advi@afterbox}
- \afterassignment \advi@@afterbox \setbox0 \hbox }
- \advi@export \advitransition \advi@transition
- \advi@export \advitransbox \advi@transbox
- %%% For PS Tricks
- \def \advi@moveto {\advi@special {moveto}}
- \def\advi@psput@special#1{%
- \hbox{%
- \pst@Verb{{ \pst@coor }
- dup exec 2 copy moveto advi@Dict begin printpos end
- \tx@PutCoor
- \tx@PutBegin}
- \hbox {\advi@moveto \box#1}%
- \pst@Verb{\tx@PutEnd}}}
- \def\advi@ncput@iii{%
- \leavevmode
- \hbox{%
- \pst@Verb{%
- \pst@nodedict
- /t \psk@npos def
- tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
- def } ifelse
- LPutCoor
- end
- \tx@PutBegin
- }%
- \hbox {\box\pst@hbox}%
- \pst@Verb{\tx@PutEnd}}}
- \def \advi@pstricks@patch
- {\@ifundefined {psput@special}{}
- {\let \psput@special \advi@psput@special
- %\@ifundefined {ncput@iii}{}{\let \ncput@iii \advi@ncput@iii}%
- \pstheader {advi.pro}}}
- \AtBeginDocument {\advi@pstricks@patch}
- %%% Active DVI
- \def \advi@over@ {over}
- \def \advi@click@ {click}
- \def \advi@null {\hbox {}}
- \newenvironment {advi@anchoring}[2][over]{%
- \begingroup
- \def \@test {#1}\ifx \@test \advi@over@
- \advi@special@ {html:<a advi="#2">}\else
- \ifx \@test \advi@click@
- \advi@special@ {html:<a hdvi="#2">}\else
- \advi@error {Incorect anchor mode #1}\fi \fi\endgroup}
- {\advi@special@ {html:</a>}}
- \newcommand {\advi@anchor}[3][over]%
- {\advi@anchoring[#1]{#2}#3\endadvi@anchoring}
- \def \advi@endanchor #1{#1\endadvi@anchor \endgroup}
- \advi@exportenv {advianchoring}{advi@anchoring}
- \advi@export \advianchor \advi@anchor
- \let \endadvianchor \advi@undefinedenv
- %%% Partial patch for overlays -- 0 will be shown > 0 will not be shown
- \def \advi@max {0}
- \def \advi@overlay #1{%
- \advi@ifadvi
- {%\advance \c@overlay by 1
- \ifnum \c@overlay>\advi@max \global \xdef \advi@max {\the \c@overlay}\fi
- \advi@recording {overlay@#1}\aftergroup \endadvi@recording}
- {\latex@overlay {#1}}}
- \def \advi@overlay@loop
- {\advi@ifadvi
- {\begingroup
- \c@overlay=0
- \@whilenum\c@overlay<\advi@max
- \do {\advance \c@overlay by 1%
- \adviwait \adviplay{overlay@\the\c@overlay}}%
- \endgroup
- \gdef \advi@max {0}}
- {\latex@overlay@loop}}
- \def \advi@end@slide
- {\advi@ifadvi {\overlay@loop}{}\latex@end@slide}
- \def \advi@overlay@patch {%
- \let \latex@overlay \@overlay
- \let \latex@end@slide \end@slide
- \let \latex@overlay@loop \overlay@loop
- \let \@overlay \advi@overlay
- \let \overlay@loop \advi@overlay@loop
- \let \end@slide \advi@end@slide
- }
- \@ifundefined {overlay}{}
- {\AtBeginDocument {\advi@overlay@patch}}
- \endinput