diff options
author | Karl Berry <karl@freefriends.org> | 2014-09-26 20:28:33 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2014-09-26 20:28:33 +0000 |
commit | 08e05930e962203678a26256bf476ae1282dd402 (patch) | |
tree | f1ae1a8b9f3f05f1e2e4e6ea4e2b503e5f4dee34 /Master/texmf-dist/tex/xelatex | |
parent | bf07457f5a27ec860ad159058da5a67e3033062d (diff) |
bidipresentation (26sep14)
git-svn-id: svn://tug.org/texlive/trunk@35267 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/bidipresentation/bidiprescolors.cfg | 354 | ||||
-rw-r--r-- | Master/texmf-dist/tex/xelatex/bidipresentation/bidipresentation.cls | 3450 |
2 files changed, 3804 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/bidipresentation/bidiprescolors.cfg b/Master/texmf-dist/tex/xelatex/bidipresentation/bidiprescolors.cfg new file mode 100644 index 00000000000..f10532c561e --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/bidipresentation/bidiprescolors.cfg @@ -0,0 +1,354 @@ +% File: bidiprescolors.cfg +% +% Color configuration for the bidipresentation class. +% +%======================================================================================================================= + +%======================================================================================================================= +% Standard colors. +% +% For every of the colors described in the "Defined colors for emphasis and highlighting elements" section of the +% documentation, there is one default value which is defined here. Further default colors are for background, panel and +% navigation elements. +% +% Note that this file is loaded _only_ if bidipresentation's color management is active. +% +% Redefine colors for individual taste. Please remember, however, that a document transferred into another configuration +% where a different bidiprescolors.cfg is present, will look different on compilation. So for a `stable' color configuration, +% it might be better to put the respective \definebidiprescolor commands into the preamble of the document or into a style +% file. + +% Color definitions for white background. + +\definebidiprescolor[whitebg]{pagecolor}{rgb}{1,1,1}% Page background (for background style `plain'). + +\definebidiprescolor[whitebg]{bgndstartcolor}{rgb}{1,1,0.9}% Start color for gradient background. +\definebidiprescolor[whitebg]{bgndendcolor}{rgb}{1,1,1}% End color for gradient background. +\definebidiprescolor[whitebg]{bgndmidcolor}{rgb}{0.9,1,0.9}% Middle color for gradient background (`double' gradient). + +\definebidiprescolor[whitebg]{textcolor}{rgb}{0,0,0.5}% Normal text. + +\definebidiprescolor[whitebg]{emcolor}{rgb}{0,0,0.8}% Emphasised text (if coloremph option is given). +\definebidiprescolor[whitebg]{altemcolor}{rgb}{0,0.5,0.8}% Double emphasised text (if coloremph option is given). + +\definebidiprescolor[whitebg]{mathcolor}{rgb}{0,0.5,0}% Math (if colormath option is given). + +\definebidiprescolor[whitebg]{codecolor}{rgb}{0,0.5,0}% \code (additional emphasising command). +\definebidiprescolor[whitebg]{underlcolor}{rgb}{0.7,0,0.3}% \underl (additional emphasising command). +\definebidiprescolor[whitebg]{conceptcolor}{rgb}{0.6,0,0}% \concept (additional emphasising command). +\definebidiprescolor[whitebg]{inactivecolor}{rgb}{0.7,0.7,0.7}% \inactive (additional emphasising command). +\definebidiprescolor[whitebg]{presentcolor}{rgb}{1,1,0.8}% Background color for \present (emphasising command). +\definebidiprescolor[whitebg]{highlightcolor}{rgb}{1,1,0.7}% Background color for \highlight (emphasising command). + +\definebidiprescolor[whitebg]{buttoncolor}{rgb}{0.8,0.8,0.9}% Background color for buttons. +\definebidiprescolor[whitebg]{buttonshadowcolor}{rgb}{.001,0,.502}% Button shadow. +\definebidiprescolor[whitebg]{buttonframecolor}{gray}{0}% Button frame. +\definebidiprescolor[whitebg]{buttontextcolor}{gray}{0}% Button text. + +\definebidiprescolor[whitebg]{toppanelcolor}{gray}{0.9}% Top panel background. +\definebidiprescolor[whitebg]{bottompanelcolor}{gray}{0.9}% Bottom panel background. +\definebidiprescolor[whitebg]{leftpanelcolor}{gray}{0.9}% Left panel background. +\definebidiprescolor[whitebg]{rightpanelcolor}{gray}{0.9}% Right panel background. +\definebidiprescolor[whitebg]{toppaneltextcolor}{gray}{0}% Top panel text. +\definebidiprescolor[whitebg]{bottompaneltextcolor}{gray}{0}% Bottom panel text. +\definebidiprescolor[whitebg]{leftpaneltextcolor}{gray}{0}% Left panel text. +\definebidiprescolor[whitebg]{rightpaneltextcolor}{gray}{0}% Right panel text. + + +% Color definitions for `light' background. + +\definebidiprescolor[lightbg]{pagecolor}{rgb}{1,1,0.9}% Page background (for background style `plain'). + +\definebidiprescolor[lightbg]{bgndstartcolor}{rgb}{1,1,0.8}% Start color for gradient background. +\definebidiprescolor[lightbg]{bgndendcolor}{rgb}{1,1,1}% End color for gradient background. +\definebidiprescolor[lightbg]{bgndmidcolor}{rgb}{0.8,1,0.8}% Middle color for gradient background (`double' gradient). + +\definebidiprescolor[lightbg]{textcolor}{rgb}{0,0,0.5}% Normal text. + +\definebidiprescolor[lightbg]{emcolor}{rgb}{0,0,0.8}% Emphasised text (if coloremph option is given). +\definebidiprescolor[lightbg]{altemcolor}{rgb}{0,0.5,0.8}% Double emphasised text (if coloremph option is given). + +\definebidiprescolor[lightbg]{mathcolor}{rgb}{0,0.4,0}% Math (if colormath option is given). + +\definebidiprescolor[lightbg]{codecolor}{rgb}{0,0.5,0}% \code (additional emphasising command). +\definebidiprescolor[lightbg]{underlcolor}{rgb}{0.7,0,0.3}% \underl (additional emphasising command). +\definebidiprescolor[lightbg]{conceptcolor}{rgb}{0.6,0,0}% \concept (additional emphasising command). +\definebidiprescolor[lightbg]{inactivecolor}{rgb}{0.7,0.7,0.7}% \inactive (additional emphasising command). +\definebidiprescolor[lightbg]{presentcolor}{rgb}{1,1,1}% Background color for \present (emphasising command). +\definebidiprescolor[lightbg]{highlightcolor}{rgb}{1,1,0.6}% Background color for \highlight (emphasising command). + +\definebidiprescolor[lightbg]{buttoncolor}{rgb}{0.8,0.8,0.9}% Background color for buttons. +\definebidiprescolor[lightbg]{buttonshadowcolor}{rgb}{.001,0,.502}% Button shadow. +\definebidiprescolor[lightbg]{buttonframecolor}{gray}{0}% Button frame. +\definebidiprescolor[lightbg]{buttontextcolor}{gray}{0}% Button text. + +\definebidiprescolor[lightbg]{toppanelcolor}{gray}{0.9}% Top panel background. +\definebidiprescolor[lightbg]{bottompanelcolor}{gray}{0.9}% Bottom panel background. +\definebidiprescolor[lightbg]{leftpanelcolor}{gray}{0.9}% Left panel background. +\definebidiprescolor[lightbg]{rightpanelcolor}{gray}{0.9}% Right panel background. +\definebidiprescolor[lightbg]{toppaneltextcolor}{gray}{0}% Top panel text. +\definebidiprescolor[lightbg]{bottompaneltextcolor}{gray}{0}% Bottom panel text. +\definebidiprescolor[lightbg]{leftpaneltextcolor}{gray}{0}% Left panel text. +\definebidiprescolor[lightbg]{rightpaneltextcolor}{gray}{0}% Right panel text. + + +% Color definitions for `dark' background. + +\definebidiprescolor[darkbg]{pagecolor}{rgb}{0,0,0.4}% Page background (for background style `plain'). + +\definebidiprescolor[darkbg]{bgndstartcolor}{rgb}{0,0,0.2}% Start color for gradient background. +\definebidiprescolor[darkbg]{bgndendcolor}{rgb}{0,0,0.6}% End color for gradient background. +\definebidiprescolor[darkbg]{bgndmidcolor}{rgb}{0,0.3,0.4}% Middle color for gradient background (`double' gradient). + +\definebidiprescolor[darkbg]{textcolor}{rgb}{1,1,0.6}% Normal text. + +\definebidiprescolor[darkbg]{emcolor}{rgb}{1,1,0}% Emphasised text (if coloremph option is given). +\definebidiprescolor[darkbg]{altemcolor}{rgb}{1,0.6,0}% Double emphasised text (if coloremph option is given). + +\definebidiprescolor[darkbg]{mathcolor}{rgb}{1,0.5,1}% Math (if colormath option is given). + +\definebidiprescolor[darkbg]{codecolor}{rgb}{0,0.7,0}% \code (additional emphasising command). +\definebidiprescolor[darkbg]{underlcolor}{rgb}{0.3,1,0.7}% \underl (additional emphasising command). +\definebidiprescolor[darkbg]{conceptcolor}{rgb}{0.4,1,1}% \concept (additional emphasising command). +\definebidiprescolor[darkbg]{inactivecolor}{rgb}{0.4,0.4,0.4}% \inactive (additional emphasising command). +\definebidiprescolor[darkbg]{presentcolor}{rgb}{0,0,0}% Background color for \present (emphasising command). +\definebidiprescolor[darkbg]{highlightcolor}{rgb}{0,0,0.1}% Background color for \highlight (emphasising command). + +\definebidiprescolor[darkbg]{buttoncolor}{rgb}{0.4,0.4,0.6}% Background color for buttons. +\definebidiprescolor[darkbg]{buttonshadowcolor}{gray}{0}% Button shadow. +\definebidiprescolor[darkbg]{buttonframecolor}{gray}{0}% Button frame. +\definebidiprescolor[darkbg]{buttontextcolor}{gray}{0}% Button text. + +\definebidiprescolor[darkbg]{toppanelcolor}{gray}{0.4}% Top panel background. +\definebidiprescolor[darkbg]{bottompanelcolor}{gray}{0.4}% Bottom panel background. +\definebidiprescolor[darkbg]{leftpanelcolor}{gray}{0.4}% Left panel background. +\definebidiprescolor[darkbg]{rightpanelcolor}{gray}{0.4}% Right panel background. +\definebidiprescolor[darkbg]{toppaneltextcolor}{gray}{1}% Top panel text. +\definebidiprescolor[darkbg]{bottompaneltextcolor}{gray}{1}% Bottom panel text. +\definebidiprescolor[darkbg]{leftpaneltextcolor}{gray}{1}% Left panel text. +\definebidiprescolor[darkbg]{rightpaneltextcolor}{gray}{1}% Right panel text. + + +% Color definitions for black background. + +\definebidiprescolor[blackbg]{pagecolor}{rgb}{0,0,0}% Page background (for background style `plain'). + +\definebidiprescolor[blackbg]{bgndstartcolor}{rgb}{0,0,0}% Start color for gradient background. +\definebidiprescolor[blackbg]{bgndendcolor}{rgb}{0,0,0.2}% End color for gradient background. +\definebidiprescolor[blackbg]{bgndmidcolor}{rgb}{0,0.2,0.2}% Middle color for gradient background (`double' gradient). + +\definebidiprescolor[blackbg]{textcolor}{rgb}{1,1,0.6}% Normal text. + +\definebidiprescolor[blackbg]{emcolor}{rgb}{1,1,0}% Emphasised text (if coloremph option is given). +\definebidiprescolor[blackbg]{altemcolor}{rgb}{1,0.5,0}% Double emphasised text (if coloremph option is given). + +\definebidiprescolor[blackbg]{mathcolor}{rgb}{1,0.5,1}% Math (if colormath option is given). + +\definebidiprescolor[blackbg]{codecolor}{rgb}{0,0.7,0}% \code (additional emphasising command). +\definebidiprescolor[blackbg]{underlcolor}{rgb}{0.3,1,0.7}% \underl (additional emphasising command). +\definebidiprescolor[blackbg]{conceptcolor}{rgb}{0.4,1,1}% \concept (additional emphasising command). +\definebidiprescolor[blackbg]{inactivecolor}{rgb}{0.4,0.4,0.4}% \inactive (additional emphasising command). +\definebidiprescolor[blackbg]{presentcolor}{rgb}{0,0,0.3}% Background color for \present (emphasising command). +\definebidiprescolor[blackbg]{highlightcolor}{rgb}{0,0,0.4}% Background color for \highlight (emphasising command). + +\definebidiprescolor[blackbg]{buttoncolor}{rgb}{0.4,0.4,0.6}% Background color for buttons. +\definebidiprescolor[blackbg]{buttonshadowcolor}{gray}{0}% Button shadow. +\definebidiprescolor[blackbg]{buttonframecolor}{gray}{0}% Button frame. +\definebidiprescolor[blackbg]{buttontextcolor}{gray}{0}% Button text. + +\definebidiprescolor[blackbg]{toppanelcolor}{gray}{0.4}% Top panel background. +\definebidiprescolor[blackbg]{bottompanelcolor}{gray}{0.4}% Bottom panel background. +\definebidiprescolor[blackbg]{leftpanelcolor}{gray}{0.4}% Left panel background. +\definebidiprescolor[blackbg]{rightpanelcolor}{gray}{0.4}% Right panel background. +\definebidiprescolor[blackbg]{toppaneltextcolor}{gray}{1}% Top panel text. +\definebidiprescolor[blackbg]{bottompaneltextcolor}{gray}{1}% Bottom panel text. +\definebidiprescolor[blackbg]{leftpaneltextcolor}{gray}{1}% Left panel text. +\definebidiprescolor[blackbg]{rightpaneltextcolor}{gray}{1}% Right panel text. + + +% The default definitions of bidipresentation's standard colors do not include dimmed and enhanced variants, leaving the +% variants to be calculated automatically. This works quite well for the dimmed variant, but the automatically +% calculated enhanced variant might not be to everybody's taste. The following example (if uncommented) will define +% custom enhanced versions of all standard `text body' colors in all color sets which look slightly better than the +% automatically calculated ones. Note that background and panels are not affected by dimming and enhancing. + +%% Enhanced color variants for white background. + +% \definebidiprescolor[whitebg]{etextcolor}{rgb}{0,0,0.7}% Normal text. + +% \definebidiprescolor[whitebg]{eemcolor}{rgb}{0,0,1}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[whitebg]{ealtemcolor}{rgb}{0,0.6,0.9}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[whitebg]{emathcolor}{rgb}{0,0.6,0}% Math (if colormath option is given). + +% \definebidiprescolor[whitebg]{ecodecolor}{rgb}{0,0.6,0}% \code (additional emphasising command). +% \definebidiprescolor[whitebg]{eunderlcolor}{rgb}{0.8,0,0.4}% \underl (additional emphasising command). +% \definebidiprescolor[whitebg]{econceptcolor}{rgb}{0.8,0,0}% \concept (additional emphasising command). +% \definebidiprescolor[whitebg]{einactivecolor}{rgb}{0.6,0.6,0.6}% \inactive (additional emphasising command). +% \definebidiprescolor[whitebg]{epresentcolor}{rgb}{1,1,0.8}% Background color for \present (emphasising command). +% \definebidiprescolor[whitebg]{ehighlightcolor}{rgb}{1,1,0.7}% Background color for \highlight (emphasising command). + + +%% Enhanced color variants for `light' background. + +% \definebidiprescolor[lightbg]{etextcolor}{rgb}{0,0,0.7}% Normal text. + +% \definebidiprescolor[lightbg]{eemcolor}{rgb}{0,0,1}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[lightbg]{ealtemcolor}{rgb}{0,0.6,0.9}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[lightbg]{emathcolor}{rgb}{0,0.6,0}% Math (if colormath option is given). + +% \definebidiprescolor[lightbg]{ecodecolor}{rgb}{0,0.65,0}% \code (additional emphasising command). +% \definebidiprescolor[lightbg]{eunderlcolor}{rgb}{0.8,0,0.4}% \underl (additional emphasising command). +% \definebidiprescolor[lightbg]{econceptcolor}{rgb}{0.8,0,0}% \concept (additional emphasising command). +% \definebidiprescolor[lightbg]{einactivecolor}{rgb}{0.6,0.6,0.6}% \inactive (additional emphasising command). +% \definebidiprescolor[lightbg]{epresentcolor}{rgb}{.95,1,.95}% Background color for \present (emphasising command). +% \definebidiprescolor[lightbg]{ehighlightcolor}{rgb}{1,1,0.4}% Background color for \highlight (emphasising command). + + +%% Enhanced color variants for `dark' background. + +% \definebidiprescolor[darkbg]{etextcolor}{rgb}{1,1,0.8}% Normal text. + +% \definebidiprescolor[darkbg]{eemcolor}{rgb}{1,1,0.3}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[darkbg]{ealtemcolor}{rgb}{1,0.8,0}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[darkbg]{emathcolor}{rgb}{1,0.6,1}% Math (if colormath option is given). + +% \definebidiprescolor[darkbg]{ecodecolor}{rgb}{0,0.9,0}% \code (additional emphasising command). +% \definebidiprescolor[darkbg]{eunderlcolor}{rgb}{0.4,1,0.8}% \underl (additional emphasising command). +% \definebidiprescolor[darkbg]{econceptcolor}{rgb}{0.7,1,1}% \concept (additional emphasising command). +% \definebidiprescolor[darkbg]{einactivecolor}{rgb}{0.5,0.5,0.5}% \inactive (additional emphasising command). +% \definebidiprescolor[darkbg]{epresentcolor}{rgb}{0.1,0,0}% Background color for \present (emphasising command). +% \definebidiprescolor[darkbg]{ehighlightcolor}{rgb}{0,0,0}% Background color for \highlight (emphasising command). + + +%% Enhanced color variants for black background. + +% \definebidiprescolor[blackbg]{etextcolor}{rgb}{1,1,0.8}% Normal text. + +% \definebidiprescolor[blackbg]{eemcolor}{rgb}{1,1,0.3}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[blackbg]{ealtemcolor}{rgb}{1,0.4,0}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[blackbg]{emathcolor}{rgb}{1,0.6,1}% Math (if colormath option is given). + +% \definebidiprescolor[blackbg]{ecodecolor}{rgb}{0,0.9,0}% \code (additional emphasising command). +% \definebidiprescolor[blackbg]{eunderlcolor}{rgb}{0.4,1,0.8}% \underl (additional emphasising command). +% \definebidiprescolor[blackbg]{econceptcolor}{rgb}{0.7,1,1}% \concept (additional emphasising command). +% \definebidiprescolor[blackbg]{einactivecolor}{rgb}{0.5,0.5,0.5}% \inactive (additional emphasising command). +% \definebidiprescolor[blackbg]{epresentcolor}{rgb}{0,0,0.4}% Background color for \present (emphasising command). +% \definebidiprescolor[blackbg]{ehighlightcolor}{rgb}{0,0,0.5}% Background color for \highlight (emphasising command). + + + +% Remember that the color definitions above only represent _one_ example for a possible color configuration. +% The following example (if uncommented) completely redefines the standard colors for the darkbackground option. This +% works for one or all colors of this or other background options by analogy. (Comment out the definition of the +% darkbackground colors above if convenient.) + +%% Color definitions for `dark' background. + +% \definebidiprescolor[darkbg]{pagecolor}{rgb}{0,0.1,0}% Page background (for background style `plain'). + +% \definebidiprescolor[darkbg]{bgndstartcolor}{rgb}{0,0.05,0}% Start color for gradient background. +% \definebidiprescolor[darkbg]{bgndendcolor}{rgb}{0,0.4,0}% End color for gradient background. +% \definebidiprescolor[darkbg]{bgndmidcolor}{rgb}{0,0.2,0.5}% Middle color for gradient background (`double' gradient). + +% \definebidiprescolor[darkbg]{textcolor}{rgb}{1,0.6,1}% Normal text. + +% \definebidiprescolor[darkbg]{emcolor}{rgb}{1,0,1}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[darkbg]{altemcolor}{rgb}{1,0,0.5}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[darkbg]{mathcolor}{rgb}{0.5,1,1}% Math (if colormath option is given). + +% \definebidiprescolor[darkbg]{codecolor}{rgb}{0.8,0,0}% \code (additional emphasising command). +% \definebidiprescolor[darkbg]{underlcolor}{rgb}{1,0.7,0.3}% \underl (additional emphasising command). +% \definebidiprescolor[darkbg]{conceptcolor}{rgb}{1,1,0.4}% \concept (additional emphasising command). +% \definebidiprescolor[darkbg]{inactivecolor}{rgb}{0.4,0.4,0.4}% \inactive (additional emphasising command). +% \definebidiprescolor[darkbg]{presentcolor}{rgb}{0,0,0}% Background color for \present (emphasising command). +% \definebidiprescolor[darkbg]{highlightcolor}{rgb}{0,0.3,0}% Background color for \highlight (emphasising command). + +% \definebidiprescolor[darkbg]{buttoncolor}{rgb}{0.4,0.4,0.6}% Background color for buttons. +% \definebidiprescolor[darkbg]{buttonshadowcolor}{gray}{0}% Button shadow. +% \definebidiprescolor[darkbg]{buttonframecolor}{gray}{0}% Button frame. +% \definebidiprescolor[darkbg]{buttontextcolor}{gray}{0}% Button text. + +% \definebidiprescolor[darkbg]{toppanelcolor}{gray}{0.4}% Top panel background. +% \definebidiprescolor[darkbg]{bottompanelcolor}{gray}{0.4}% Bottom panel background. +% \definebidiprescolor[darkbg]{leftpanelcolor}{gray}{0.4}% Left panel background. +% \definebidiprescolor[darkbg]{rightpanelcolor}{gray}{0.4}% Right panel background. +% \definebidiprescolor[darkbg]{toppaneltextcolor}{gray}{1}% Top panel text. +% \definebidiprescolor[darkbg]{bottompaneltextcolor}{gray}{1}% Bottom panel text. +% \definebidiprescolor[darkbg]{leftpaneltextcolor}{gray}{1}% Left panel text. +% \definebidiprescolor[darkbg]{rightpaneltextcolor}{gray}{1}% Right panel text. + + +% In the usual standard defaults given above, no dimmed or enhanced variants are included, to demonstrate bidipresentation's +% automatic dimming and enhancing capabilities. It is possible, however, to provide `hand-tuned' dimmed and enhanced +% variants for nicer results. This is done by prefixing "d" or "e" to the color name. In the following, custom dimmed +% and enhanced variants of some of the colors defined above are specified. Note that background and panels are not +% affected by dimming and enhancing, so only the `text body' colors are specified. + +%% Dimmed color variants for `dark' background. + +% \definebidiprescolor[darkbg]{dtextcolor}{rgb}{0.5,0.4,0.5}% Normal text. + +% \definebidiprescolor[darkbg]{demcolor}{rgb}{0.5,0,0.5}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[darkbg]{daltemcolor}{rgb}{0.5,0,0.2}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[darkbg]{dmathcolor}{rgb}{0.2,0.5,0.5}% Math (if colormath option is given). + +% \definebidiprescolor[darkbg]{dcodecolor}{rgb}{0.5,0,0}% \code (additional emphasising command). +% \definebidiprescolor[darkbg]{dunderlcolor}{rgb}{0.5,0.3,0.1}% \underl (additional emphasising command). +% \definebidiprescolor[darkbg]{dconceptcolor}{rgb}{0.5,0.5,0.2}% \concept (additional emphasising command). +% \definebidiprescolor[darkbg]{dinactivecolor}{rgb}{0.2,0.2,0.2}% \inactive (additional emphasising command). +% \definebidiprescolor[darkbg]{dpresentcolor}{rgb}{0,0.05,0}% Background color for \present (emphasising command). +% \definebidiprescolor[darkbg]{dhighlightcolor}{rgb}{0,0.15,0}% Background color for \highlight (emphasising command). + + +%% Enhanced color variants for `dark' background. + +% \definebidiprescolor[darkbg]{etextcolor}{rgb}{1,0.8,1}% Normal text. + +% \definebidiprescolor[darkbg]{eemcolor}{rgb}{1,0.2,1}% Emphasised text (if coloremph option is given). +% \definebidiprescolor[darkbg]{ealtemcolor}{rgb}{1,0.2,0.7}% Double emphasised text (if coloremph option is given). + +% \definebidiprescolor[darkbg]{emathcolor}{rgb}{0.7,1,1}% Math (if colormath option is given). + +% \definebidiprescolor[darkbg]{ecodecolor}{rgb}{1,0,0}% \code (additional emphasising command). +% \definebidiprescolor[darkbg]{eunderlcolor}{rgb}{1,0.9,0.5}% \underl (additional emphasising command). +% \definebidiprescolor[darkbg]{econceptcolor}{rgb}{1,1,0.6}% \concept (additional emphasising command). +% \definebidiprescolor[darkbg]{einactivecolor}{rgb}{0.5,0.5,0.5}% \inactive (additional emphasising command). +% \definebidiprescolor[darkbg]{epresentcolor}{rgb}{0.2,0,0}% Background color for \present (emphasising command). +% \definebidiprescolor[darkbg]{ehighlightcolor}{rgb}{0,0.4,0}% Background color for \highlight (emphasising command). + + + +% The following example (if uncommented) shows what is neccessary for defining a completely new standard color which is +% recognized by bidipresentation commands like \dimcolors, \enhancecolors (and display commands using those) as well as the +% commands \whitebackground, \lightbackground, \darkbackground, and \blackbackground. +% +% If you don't want to give different definitions of your color for different backgrounds, you can define it just in the +% current color set (leaving out the optional argument to \definebidiprescolor), but then it will stay the same on all +% backgrounds and not be adapted when the background color changes. +% +% You don't have to define dimmed and enhanced variants of your color (with prefix d and e, respectively). If you just +% leave them out, bidipresentation will calculate appropriate variants automatically. + +% \definebidiprescolor[whitebg]{mycolor}{rgb}{1,0.5,0}% Variants of mycolor for white backgrounds. +% \definebidiprescolor[whitebg]{dmycolor}{rgb}{0.9,0.8,0.6}% +% \definebidiprescolor[whitebg]{emycolor}{rgb}{1,0.7,0}% +% % +% \definebidiprescolor[lightbg]{mycolor}{rgb}{1,0.5,0}% Variants of mycolor for light backgrounds. +% \definebidiprescolor[lightbg]{dmycolor}{rgb}{0.9,0.8,0.6}% +% \definebidiprescolor[lightbg]{emycolor}{rgb}{1,0.7,0}% +% % +% \definebidiprescolor[darkbg]{mycolor}{rgb}{0,0.5,1}% Variants of mycolor for dark backgrounds. +% \definebidiprescolor[darkbg]{dmycolor}{rgb}{0.1,0.2,0.4}% +% \definebidiprescolor[darkbg]{emycolor}{rgb}{0,0.3,1}% +% % +% \definebidiprescolor[blackbg]{mycolor}{rgb}{0,0.5,1}% Variants of mycolor for black backgrounds. +% \definebidiprescolor[blackbg]{dmycolor}{rgb}{0.1,0.2,0.4}% +% \definebidiprescolor[blackbg]{emycolor}{rgb}{0,0.3,1}% + +\endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/xelatex/bidipresentation/bidipresentation.cls b/Master/texmf-dist/tex/xelatex/bidipresentation/bidipresentation.cls new file mode 100644 index 00000000000..3b106894d34 --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/bidipresentation/bidipresentation.cls @@ -0,0 +1,3450 @@ +%% +%% This is file `bidipresentation.cls', +%% +%% __________________________________________________ +%% Copyright © 2009–2014 Vafa Khalighi <persian-tex@tug.org> +%% +%% A great portion of the code is brorrowd from texpower bundle: +%% +%% ------------------------------------------------------------------------------------- +%% TeXPower bundle - dynamic online presentations with LaTeX +%% Copyright (C) 1999-2004 Stephan Lehmke +%% Copyright (C) 2003-2005 Hans Fredrik Nordhaug +%% ------------------------------------------------------------------------------------- +%% +%% with modifications to get things working properly in both right to +%% left and left to right modes. +%% +%% It may be distributed and/or modified under the LaTeX Project Public License, +%% version 1.3c or higher (your choice). The latest version of +%% this license is at: http://www.latex-project.org/lppl.txt +%% +%% This work is “author-maintained” (as per LPPL maintenance status) +%% by Vafa Khalighi. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesClass{bidipresentation}[2014/09/26 v0.3 Experimental bidi presentation] +\RequirePackage{scrlfile} +\RequirePackage{fancyhdr} +\RequirePackage{ifthen} +\RequirePackage{calc} +\RequirePackage{keyval} +\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} +\newboolean{verbose@bidipres} +\DeclareOption{verbose}{\setboolean{verbose@bidipres}{true}} +\provideboolean{display} +\DeclareOption{display}{\setboolean{display}{true}} +\DeclareOption{printout}{\setboolean{display}{false}} +\newboolean{fixcolorstack@bidipres} +\DeclareOption{fixcolorstack}{\setboolean{fixcolorstack@bidipres}{true}} +\newboolean{strongfiltering@bidipres} +\DeclareOption{strongfiltering}{\setboolean{strongfiltering@bidipres}{true}} +\newcommand{\strongfilteringon}{\setboolean{strongfiltering@bidipres}{true}} +\newcommand{\strongfilteringoff}{\setboolean{strongfiltering@bidipres}{false}} +\newboolean{nineminutes@bidipres} +\DeclareOption{nineminutes}{\setboolean{nineminutes@bidipres}{true}} +\newboolean{bidiprescolor} +\newboolean{coloremph@bidipres} +\DeclareOption{coloremph} +{\setboolean{bidiprescolor}{true}\setboolean{coloremph@bidipres}{true}} +\newboolean{colormath@bidipres} +\DeclareOption{colormath} +{\setboolean{bidiprescolor}{true}\setboolean{colormath@bidipres}{true}} +\newboolean{colorhighlight@bidipres} +\DeclareOption{colorhighlight} +{\setboolean{bidiprescolor}{true}\setboolean{colorhighlight@bidipres}{true}} +\newboolean{whitebackground@bidipres} +\setboolean{whitebackground@bidipres}{true}% This is the default. +\DeclareOption{whitebackground} +{\setboolean{bidiprescolor}{true}\setboolean{whitebackground@bidipres}{true}} +\newboolean{lightbackground@bidipres} +\DeclareOption{lightbackground} +{\setboolean{bidiprescolor}{true}\setboolean{lightbackground@bidipres}{true}} +\newboolean{blackbackground@bidipres} +\DeclareOption{blackbackground} +{\setboolean{bidiprescolor}{true}\setboolean{blackbackground@bidipres}{true}} +\newboolean{darkbackground@bidipres} +\DeclareOption{darkbackground} +{\setboolean{bidiprescolor}{true}\setboolean{darkbackground@bidipres}{true}} +\ExecuteOptions{display} +\ProcessOptions\relax +\LoadClass{article} + +\RequirePackage[foot=10.2pt,head=0pt,paperwidth=128mm,paperheight=96mm,left=5mm,top=5mm,right=7mm,bottom=8mm]{geometry} + +\renewcommand{\headrulewidth}{0mm} + +\renewcommand{\maketitle}% + {\ClassError{bidipresentation}{Caution: ``maketitle'' command not supported}% + {Please use ``titlepage'' environment instead}% +} + +\RequirePackage{hyperref} + +\fancypagestyle{pres}{% +\lhead{}% +\chead{}% +\rhead{}% +\ifthenelse{\boolean{bidiprescolor}}{% +\lfoot{\xecolor{textcolor}\footnotesize \thepage}}{% +\lfoot{\footnotesize \thepage}} +\cfoot{}% +\rfoot{}% +} + +\pagestyle{pres} + +\newcommand{\distance}[1]{\vspace*{\stretch{#1}}} +\newcommand{\abstand}[1]{\vspace*{\stretch{#1}}} + +\setlength{\parskip}{0.6ex} +\setlength{\parindent}{0mm} + +\newenvironment{plainslide}[1][]% + {{\raggedleft \large\bfseries #1\par}\par\vspace*{\stretch{1}}}% + {\par\vspace*{\stretch{1}}\newpage} + +\newenvironment{rawslide}{}{\newpage}% + +\def\itemize{% + \ifnum \@itemdepth >\thr@@\@toodeep\else + \advance\@itemdepth\@ne + \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}% + \expandafter + \list + \csname\@itemitem\endcsname + {\def\makelabel##1{\hss\llap{##1}}}% + \fi + \setlength{\itemsep}{0ex}% + \setlength{\parskip}{0.1ex}% + \setlength{\parsep}{0ex}% + }% +\let\enditemize =\endlist + +\def\enumerate{% + \ifnum \@enumdepth >\thr@@\@toodeep\else + \advance\@enumdepth\@ne + \edef\@enumctr{enum\romannumeral\the\@enumdepth}% + \expandafter + \list + \csname label\@enumctr\endcsname + {\usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}% + \fi + \setlength{\itemsep}{0ex}% + \setlength{\parskip}{0.1ex}% + \setlength{\parsep}{0ex}% + }% +\let\endenumerate =\endlist + +\renewenvironment{description} + {\list{}{\labelwidth\z@ \itemindent-\leftmargin + \let\makelabel\descriptionlabel} + \setlength{\itemsep}{0ex}% + \setlength{\parskip}{0.1ex}% + \setlength{\parsep}{0ex}} + {\endlist} + +\ifthenelse{\boolean{display}} +{\ClassInfo{bidipresentation}{Producing display version. Dynamic features activated.}} +{\ClassInfo{bidipresentation}{Producing printout version. Dynamic features inactive.}} +\ifthenelse{\boolean{verbose@bidipres}}{\setcounter{errorcontextlines}{10000}}{} + +\newcounter{tmpcnta@bidipres} +\newcounter{tmpcntb@bidipres} + +\newlength{\tempdima@bidipres} +\newlength{\tempdimb@bidipres} + +\newbox\tempbox@bidipres + +\newboolean{carryon@bidipres} +\newcommand{\bidiprespagewidth}{\strip@pt\paperwidth truept} +\newcommand{\bidiprespageheight}{\strip@pt\paperheight truept} +\newcommand{\mkfactor}[2]% +{\setlength{\tempdima@bidipres}{1pt*#2}\edef#1{\strip@pt\tempdima@bidipres}} +\newcommand{\mklength@bidipres}[2] +{\setlength{\tempdima@bidipres}{#2}\edef#1{\the\tempdima@bidipres}} + +\newcommand{\mklength}{} +\let\mklength\mklength@bidipres + + + + +\ifthenelse{\boolean{bidiprescolor}}{% +\RequirePackage{color}% +\RequirePackage{xecolor}% +}{}% +\ifthenelse{\boolean{bidiprescolor}}{% Yes. + \let\setcolor@bidipres=\color% + \let\o@definecolor@bidipres=\definecolor% + \def\definecolor#1#2#3% + {% + \o@definecolor@bidipres{#1}{#2}{#3}% + \expandafter\edef\csname colordef@bidipres@#1\endcsname% + {\csname processcolor@bidipres@#2\endcsname{#3}}% + }% + \@ifundefined{c@lor@namefile}{}{\input{\c@lor@namefile}} + + \ifx\color@gray\@undefined + \ifx\color@rgb\@undefined + \else + \definecolor{black}{rgb}{0,0,0} + \definecolor{white}{rgb}{1,1,1} + \fi + \else + \definecolor{black}{gray}{0} + \definecolor{white}{gray}{1} + \fi + \ifx\color@rgb\@undefined\else + \definecolor{red}{rgb}{1,0,0} + \definecolor{green}{rgb}{0,1,0} + \definecolor{blue}{rgb}{0,0,1} + \fi + \ifx\color@cmyk\@undefined\else + \definecolor{cyan}{cmyk}{1,0,0,0} + \definecolor{magenta}{cmyk}{0,1,0,0} + \definecolor{yellow}{cmyk}{0,0,1,0} + \fi + \newcommand{\interpolate@bidipres}[3]% + {% + \setlength{\tempdima@bidipres}{1pt-#1pt}% Calculate the second factor for the weighted average. + \edef\secondfactor@bidipres{\strip@pt\tempdima@bidipres}% + \setlength{\tempdima@bidipres}{#2pt*\real{#1}+#3pt*\real{\secondfactor@bidipres}}% Calculate the weighted average. + \ifthenelse{\lengthtest{\tempdima@bidipres<0pt}}% Bound the result to the interval [0,1] (just in case the first + {\setlength{\tempdima@bidipres}{0pt}}% factor was not from [0,1]). + {\ifthenelse{\lengthtest{\tempdima@bidipres>1pt}}{\setlength{\tempdima@bidipres}{1pt}}{}}% + \edef\result@bidipres{\strip@pt\tempdima@bidipres}% + } + \def\interpolate@three@bidipres#1,#2,#3;#4,#5,#6;#7% + {% + \interpolate@bidipres{#7}{#1}{#4}% First intermediary value. + \edef\newcolordef@bidipres{\result@bidipres,}% Store first value. + \interpolate@bidipres{#7}{#2}{#5}% Second intermediary value. + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres,}% Store second value. + \interpolate@bidipres{#7}{#3}{#6}% Third intermediary value. + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres}% Store third value. + } + \def\interpolate@four@bidipres#1,#2,#3,#4;#5,#6,#7,#8;#9% + {% + \interpolate@bidipres{#9}{#1}{#5}% First intermediary value. + \edef\newcolordef@bidipres{\result@bidipres,}% Store first value. + \interpolate@bidipres{#9}{#2}{#6}% Second intermediary value. + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres,}% Store second value. + \interpolate@bidipres{#9}{#3}{#7}% Third intermediary value. + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres,}% Store third value. + \interpolate@bidipres{#9}{#4}{#8}% Fourth intermediary value. + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres}% Store fourth value. + } + \def\convert@cmykvalue@rgbvalue@bidipres#1#2% + {% + \setlength{\tempdima@bidipres}{1pt-#1pt-#2pt}% + \ifthenelse{\lengthtest{\tempdima@bidipres<0pt}}{\setlength{\tempdima@bidipres}{0pt}}{}% + \edef\result@bidipres{\strip@pt\tempdima@bidipres}% + }% + \def\convert@cmyk@rgb@bidipres#1,#2,#3,#4;% + {% + \convert@cmykvalue@rgbvalue@bidipres{#1}{#4}% + \edef\newcolordef@bidipres{\result@bidipres,}% Store first value. + \convert@cmykvalue@rgbvalue@bidipres{#2}{#4}% + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres,}% Store second value. + \convert@cmykvalue@rgbvalue@bidipres{#3}{#4}% + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres}% Store third value. + } + \def\convert@RGBvalue@rgbvalue@bidipres#1% + {% + \setlength{\tempdima@bidipres}{#1pt/255}% + \edef\result@bidipres{\strip@pt\tempdima@bidipres}% + }% + \def\convert@RGB@rgb@bidipres#1,#2,#3;% + {% + \convert@RGBvalue@rgbvalue@bidipres{#1}% + \edef\newcolordef@bidipres{\result@bidipres,}% Store first value. + \convert@RGBvalue@rgbvalue@bidipres{#2}% + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres,}% Store second value. + \convert@RGBvalue@rgbvalue@bidipres{#3}% + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres}% Store third value. + } + \newcommand{\colorbetween}[4][.5]% + {% + \begingroup% Make the definition of \processcolor... local. + \newcommand{\processcolor@bidipres@rgb}[3]% What if the first color is an rgb color? + {% + \ifx##2\processcolor@bidipres@rgb% Are both colors rgb colors? + \interpolate@three@bidipres##1;##3;{#1}% Calculate interpolated values. + \else + \ifx##2\processcolor@bidipres@gray% Is the second color from the gray model? + \interpolate@three@bidipres##1;##3,##3,##3;{#1}% Calculate interpolated values. + \else + \ifx##2\processcolor@bidipres@cmyk% Is the second color from the cmyk model? + \convert@cmyk@rgb@bidipres##3;% Convert to rgb. + \edef\newcolordef@bidipres{\noexpand\interpolate@three@bidipres##1;\newcolordef@bidipres;{#1}}% + \newcolordef@bidipres + \else + \ifx##2\processcolor@bidipres@RGB% Is the second color from the RGB model? + \convert@RGB@rgb@bidipres##3;% Convert to rgb. + \edef\newcolordef@bidipres{\noexpand\interpolate@three@bidipres##1;\newcolordef@bidipres;{#1}}% + \newcolordef@bidipres + \else + \ifx##2\processcolor@bidipres@hsb% Is the second color from the hsb model? + \ClassError{bidipresentation}{Don't know how to convert an hsb color!} + \fi + \fi + \fi + \fi + \fi + \edef\newcolordef@bidipres{{rgb}{\newcolordef@bidipres}}% Store the result + }% + \newcommand{\processcolor@bidipres@gray}[3]% What if the first color is a gray color? + {% + \ifx##2\processcolor@bidipres@gray% Are both colors gray colors? + \interpolate@bidipres{#1}{##1}{##3}% Calculate interpolated value. + \edef\newcolordef@bidipres{{gray}{\result@bidipres}}% Store the result + \else + \processcolor@bidipres@rgb{##1,##1,##1}{##2}{##3}% Otherwise, convert first color to rgb and continue. + \fi + }% + \newcommand{\processcolor@bidipres@cmyk}[3]% What if the first color is a cmyk color? + {% + \ifx##2\processcolor@bidipres@cmyk% Are both colors cmyk colors? + \interpolate@four@bidipres##1;##3;{#1}% Calculate interpolated values. + \edef\newcolordef@bidipres{{cmyk}{\newcolordef@bidipres}}% Store the result + \else + \convert@cmyk@rgb@bidipres##1;% Otherwise, convert first color to rgb ... + \expandafter\processcolor@bidipres@rgb\expandafter{\newcolordef@bidipres}{##2}{##3}% ... and continue. + \fi + }% + \newcommand{\processcolor@bidipres@RGB}[3]% What if the first color is an RGB color? + {% + \convert@RGB@rgb@bidipres##1;% Convert to rgb ... + \expandafter\processcolor@bidipres@rgb\expandafter{\newcolordef@bidipres}{##2}{##3}% ... and continue. + }% + \newcommand{\processcolor@bidipres@hsb}[3]% What if the first color is an hsb color? + {% + \ifx##2\processcolor@bidipres@hsb% Are both colors hsb colors? + \interpolate@three@bidipres##1;##3;{#1}% Calculate interpolated values. + \edef\newcolordef@bidipres{{hsb}{\newcolordef@bidipres}}% Store the result + \else + \ClassError{bidipresentation}{Don't know how to convert an hsb color!} + \fi + }% + \expandafter\let\expandafter + \firstcol@bidipres\csname colordef@bidipres@#3\endcsname % Retrieve definition of color <source1>... + \expandafter\expandafter\expandafter\firstcol@bidipres% and apply (remember \processcolor... is part of the definition) + \csname colordef@bidipres@#4\endcsname% to definition of color <source2>. + \edef\end@bidipres% Define color <target> (outside the enclosing group). + {\endgroup\noexpand\definecolor{#2}\newcolordef@bidipres}% + \end@bidipres + }% matches \newcommand{\colorbetween} + \newcommand{\complement@bidipres}[1]% + {% + \setlength{\tempdima@bidipres}{1pt-#1pt}% + \edef\result@bidipres{\strip@pt\tempdima@bidipres}% + } + \def\complement@three@bidipres#1,#2,#3;% + {% + \complement@bidipres{#1}% + \edef\newcolordef@bidipres{\result@bidipres,}% Store first value. + \complement@bidipres{#2}% + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres,}% Store second value. + \complement@bidipres{#3}% + \edef\newcolordef@bidipres{\newcolordef@bidipres\result@bidipres}% Store third value. + } + \def\grabfourth@bidipres#1,#2,#3,#4;% + {% + \def\mem@bidipres{#4}% Store fourth element. + \def\result@bidipres{#1,#2,#3;}% Store first three elements. + } + \newcommand{\complementcolor}[2]% + {% + \begingroup% Make the definition of \processcolor... local. + \newcommand{\processcolor@bidipres@rgb}[1]% What if the color is an rgb color? + {% + \complement@three@bidipres##1;% Calculate complemented values. + \edef\newcolordef@bidipres{{rgb}{\newcolordef@bidipres}}% Store the result + }% + \newcommand{\processcolor@bidipres@gray}[1]% What if the color is a gray color? + {% + \complement@bidipres{##1}% Calculate complemented value. + \edef\newcolordef@bidipres{{gray}{\result@bidipres}}% Store the result + }% + \newcommand{\processcolor@bidipres@cmyk}[1]% What if the color is a cmyk color? + {% + \grabfourth@bidipres##1;% Remember fourth element. + \expandafter\complement@three@bidipres\result@bidipres% Calculate complemented values of first three elements. + \edef\newcolordef@bidipres{{cmyk}{\newcolordef@bidipres,\mem@bidipres}}% Store the result, putting back the fourth element. + }% + \newcommand{\processcolor@bidipres@RGB}[1]% What if the color is an RGB color? + {% + \convert@RGB@rgb@bidipres##1;% Convert to rgb ... + \expandafter\processcolor@bidipres@rgb\expandafter{\newcolordef@bidipres}% ... and continue. + }% + \newcommand{\processcolor@bidipres@hsb}[1]% What if the color is an hsb color? + {% + \complement@three@bidipres##1;% Calculate complemented values. + \edef\newcolordef@bidipres{{hsb}{\newcolordef@bidipres}}% Store the result + }% + \csname colordef@bidipres@#2\endcsname% Execute definition of color <source> (which contains \processcolor...) + \edef\end@bidipres% Define color <target> (outside the enclosing group). + {\endgroup\noexpand\definecolor{#1}\newcolordef@bidipres}% + \end@bidipres + }% matches \newcommand{\complementcolor} + }% matches \ifthenelse{\boolean{bidiprescolor}}{% Yes. +{% No. Do nothing. + } +\newcommand{\replacecolor} +{% + \let\replacecolor@hook@bidipres=\@gobble% This hook can be used for variant checking (see below). + \replacecolor@bidipres% Pick up arguments. + } + +\newcommand{\replacecolor@bidipres}[2][]% Pick up the first two arguments of \replacecolor. +{% + \ifthenelse{\equal{#1}{}}{\edef\tcolname@bidipres{#2}}{\edef\tcolname@bidipres{#2@#1}}% Construct `real' target color name. + \@replacecolor@bidipres% Read second argument. + }% +\ifthenelse{\boolean{bidiprescolor}}% Only if bidipresentation's color management is active. +{% Yes. + \newcommand{\undefinecolor@bidipres}[1]% Make a color undefined. + {\expandafter\let\csname\string\color @#1\endcsname=\@undefined}% + + \newcommand{\ifcolorexists@bidipres}[3]% Conditional for testing whether a color is defined. + {\@ifundefined{\string\color @#1}{#3}{#2}}% Test whether a given color is defined. + + \newcommand{\@replacecolor@bidipres}[2][]% Second part of \replacecolor. + {% + \ifthenelse{\equal{#1}{}}{\edef\scolname@bidipres{#2}}{\edef\scolname@bidipres{#2@#1}}% Construct `real' source color name. + \ifcolorexists@bidipres{\scolname@bidipres}% Does the source color exist at all? + {% Yes. + \replacecolor@hook@bidipres{\tcolname@bidipres}% Execute hook. + \expandafter\let\csname\string\color @\tcolname@bidipres\expandafter\endcsname% Make value of target color + \csname\string\color @\scolname@bidipres\endcsname% identical with source color. + \expandafter\let\csname colordef@bidipres@\tcolname@bidipres\expandafter\endcsname% Make definition of target color + \csname colordef@bidipres@\scolname@bidipres\endcsname% identical with source color. + }% + {% No. Do nothing. + }% + }% + \newcommand{\colors@bidipres}{} + \newcommand{\removecolor@bidipres}[1]% + {% + \def\processme@bidipres##1% This macro does the real work. + {% + \ifthenelse{\equal{#1}{##1}}% Is this the color to be removed? + {% Yes. Do nothing, so it vanishes. + } + {% No. Re-insert. + \expandafter\def\expandafter\colors@bidipres\expandafter{\colors@bidipres\processme@bidipres{##1}}% + }% + }% + \expandafter\let\expandafter\colors@bidipres\expandafter\empty% Initialize \colors@bidipres. + \colors@bidipres% Execute \processme@bidipres for every color on the list. + } + \newcommand{\addbidiprescolor}[1]% + {% + \removecolor@bidipres{#1}% Remove this color from the list (to avoid duplicates). + \expandafter\def\expandafter\colors@bidipres\expandafter{\colors@bidipres\processme@bidipres{#1}}% ... and insert. + \register@normalvariant@bidipres{#1}% Register the normal variant for this color. + } + \newcommand{\definebidiprescolor}[4][] + {% + \addbidiprescolor{#2}% Add color to the list. + \ifthenelse{\equal{#1}{}}% Color from the current color set? + {\definecolor{#2}{#3}{#4}}% Yep. Just define the color. + {\definecolor{#2@#1}{#3}{#4}}% No. Add color set identifyer. + } + \newcommand{\replacecolors@bidipres}% + {% + \@ifstar% The starred version will put the color set into normal variant. + {\let\replacecolor@hook@bidipres=\register@normalvariant@bidipres\@replacecolors@bidipres} + {\let\replacecolor@hook@bidipres=\@gobble\@replacecolors@bidipres}% + } + + \newcommand{\@replacecolors@bidipres}[4]% This part does the real work. + {% + \def\processme@bidipres##1{\replacecolor@bidipres[#1]{#2##1}[#3]{#4##1}}% + \colors@bidipres + } + \newcommand{\usecolorset}[1]% + {% + \replacecolors@bidipres*{}{}{#1}{}% Replace normal variant (registering variants). + \replacecolors@bidipres{}{d}{#1}{d}% Replace dimmed variant. + \replacecolors@bidipres{}{e}{#1}{e}% Replace enhanced variant. + \xecolor{textcolor}% Activate textcolor. + \pagecolor{pagecolor}% Activate pagecolor. + }% + \newcommand{\dumpcolorset}[1]% + {% + \nonnormalwarnings@bidipres{Dumping color set #1}% Output a warning for every color not in the normal variant. + \replacecolors@bidipres{#1}{}{}{}% Dump normal variant (hopefully). + \replacecolors@bidipres{#1}{d}{}{d}% Dump dimmed variant. + \replacecolors@bidipres{#1}{e}{}{e}% Dump enhanced variant. + }% + \newcommand{\registervariant@bidipres}[2]% Remember which variant a color is currently in. + {\expandafter\def\csname cvar@#1@bidipres\endcsname{#2}} + + \newcommand{\register@normalvariant@bidipres}[1]% Register that a color is now in the normal variant. + {\registervariant@bidipres{#1}{}} + + \newcommand{\currentvariant@bidipres}[1]% Return the current variant of a color. + {\csname cvar@#1@bidipres\endcsname} + + \newcommand{\ifnormalvariant@bidipres}[3]% Conditional for checking whether a color is in the normal variant. + {\ifthenelse{\equal{\currentvariant@bidipres{#1}}{}}{#2}{#3}} + + \newcommand{\nonnormalwarnings@bidipres}[1]% Checks the current variant for every standard color and gives a warning + {% if it's not the normal one. + \def\processme@bidipres##1% + {% + \ifnormalvariant@bidipres{##1}{} + {% + \ClassWarning{bidipresentation} + {#1\MessageBreak when color ##1 is in \currentvariant@bidipres{##1} variant}% + }% + }% + \colors@bidipres + } + \newcommand{\dimlevel}{.7} + \newcommand{\dimcolor}[2][\dimlevel] + {% + \ifnormalvariant@bidipres{#2}% Color in the normal variant? + {% Yes. + \registervariant@bidipres{#2}{d}% Register dimmed variant. + \ifcolorexists@bidipres{d#2}% Dedicated dimmed color found? + {\replacecolor{#2}{d#2}}% Yes. use that one. + {\colorbetween[#1]{#2}{pagecolor}{#2}}% No. Dim numerically using \colorbetween. + }% + {}% No. Do nothing. + } + \newcommand{\dimcolors}[1][\dimlevel] + {% + \def\processme@bidipres##1{\dimcolor[#1]{##1}}% + \colors@bidipres + }% + \newcommand{\enhancelevel}{.5} + \newcommand{\enhancecolor}[2][\enhancelevel] + {% + \ifnormalvariant@bidipres{#2}% Color in the normal variant? + {% + \registervariant@bidipres{#2}{e}% Register enhanced variant. + \ifcolorexists@bidipres{e#2}% Dedicated enhanced color found? + {\replacecolor{#2}{e#2}}% Yes. use that one. + {\colorbetween[-#1]{#2}{pagecolor}{#2}}% No. Enhance numerically using \colorbetween. + }% + {}% + }% + \newcommand{\enhancecolors}[1][\enhancelevel] + {% + \def\processme@bidipres##1{\enhancecolor[#1]{##1}}% + \colors@bidipres + }% + \newcommand{\replacecolorsbyone@bidipres}[2]% + {% + \def\processme@bidipres##1{\replacecolor{#1##1}{#2}}% + \colors@bidipres + } + \newcommand{\vanishcolor}{pagecolor} + \newcommand{\vanishcolors}[1][\vanishcolor]{\replacecolorsbyone@bidipres{}{#1}} + \input{bidiprescolors.cfg} + \newcommand{\whitebackground}% + {% + \usecolorset{whitebg}% + } + \ifthenelse{\boolean{whitebackground@bidipres}} + {\AtEndOfClass{\whitebackground}} + {} + \newcommand{\lightbackground}% + {% + \usecolorset{lightbg}% + } + \ifthenelse{\boolean{lightbackground@bidipres}}{\AtEndOfClass{\lightbackground}}{} + \newcommand{\darkbackground}% + {% + \usecolorset{darkbg}% + } + \ifthenelse{\boolean{darkbackground@bidipres}}{\AtEndOfClass{\darkbackground}}{} + \newcommand{\blackbackground}% + {% + \usecolorset{blackbg}% + } + \ifthenelse{\boolean{blackbackground@bidipres}}{\AtEndOfClass{\blackbackground}}{} + \ifthenelse{\boolean{bidiprescolor}} + {% + \renewcommand{\normalcolor}{\xecolor{textcolor}}% \normalcolor should produce textcolor. + + \let\o@textnormal@bidipres=\textnormal% \textnormal should also set text color. + \def\textnormal#1{\o@textnormal@bidipres{\normalcolor#1}} + \AtEndOfClass{\xecolor{textcolor}\let\default@color\current@color} + \AtBeginDocument% + {% + \pagecolor{pagecolor}\xecolor{textcolor}% + }% + } + {} + \ifthenelse{\boolean{bidiprescolor}}{\AtBeginDocument{\pagecolor{pagecolor}\xecolor{textcolor}}}{} + }% matches \ifthenelse{\boolean{bidiprescolor}}{% Yes. +{% No; provide dummies. + \let\setcolor@bidipres=\@gobble% + \newcommand{\@replacecolor@bidipres}[2][]{}% + \let\addbidiprescolor=\@gobble + \newcommand{\definebidiprescolor}[4][]{}% + \let\usecolorset=\@gobble + \let\dumpcolorset=\@gobble + \newcommand{\dimcolor}[2][]{} + \newcommand{\dimcolors}[1][]{} + \newcommand{\enhancecolor}[2][]{} + \newcommand{\enhancecolors}[1][]{} + \newcommand{\vanishcolors}[1][]{} + } +\ifthenelse{\boolean{coloremph@bidipres}}% Should \emph use color? +{% Yes; + \DeclareRobustCommand{\em}% Redefine \em. + {% + \@nomath\em \xecolor{emcolor}% Change color. + \replacecolor{tmp@bidipres}{emcolor}% Exchange emcolor and altemcolor. + \replacecolor{emcolor}{altemcolor}% + \replacecolor{altemcolor}{tmp@bidipres}% + }% + }% +{}% No; keep original definition. + +\ifthenelse{\boolean{colorhighlight@bidipres}}% Color highlighting enabled? +{% Yes; code is displayed typewriter-style, bold and in a special color. + \DeclareRobustCommand{\code}[1]{\textxecolor{codecolor}{\textbf{\texttt{#1}}}}% + \DeclareRobustCommand{\codeswitch}{\xecolor{codecolor}\bfseries\ttfamily}% + } +{% No; code is displayed just in typewriter-style and bold. + \DeclareRobustCommand{\code}[1]{\textbf{\texttt{#1}}}% + \DeclareRobustCommand{\codeswitch}{\bfseries\ttfamily}% + } +\newcommand{\macroname}[1]{\code{\textbackslash#1}} +\newcommand{\commandapp}[3][]{\code{\macroname{#2}\ifthenelse{\equal{#1}{}}{}{[#1]}\{#3\}}} +\newcommand{\carg}[1]{\code{\origmath{\left<\code{#1}\right>}}} +\ifthenelse{\boolean{colorhighlight@bidipres}}% Color highlighting enabled? +{% Yes; + \DeclareRobustCommand{\underl}{\textxecolor{underlcolor}}% Use color to highlight. + } +{% No; + \DeclareRobustCommand{\underl}{\textbf}% Use bold face. + } +\ifthenelse{\boolean{colorhighlight@bidipres}}% Color highlighting enabled? +{% Yes; + \DeclareRobustCommand{\concept}{\textxecolor{conceptcolor}}% Use color to highlight. + } +{% No; + \DeclareRobustCommand{\concept}{\textbf}% Use bold face. + } +\ifthenelse{\boolean{colorhighlight@bidipres}}% Color highlighting enabled? +{% Yes; + \DeclareRobustCommand{\inactive}{\textxecolor{inactivecolor}}% Use color to highlight. + } +{% No; + \DeclareRobustCommand{\inactive}{\monochromeinactive}% Use monochrome default. + } + +\providecommand{\monochromeinactive}{}% What should \inactive do if colors can't be used? We provide a hook for + % user definitions. +\ifthenelse{\boolean{colorhighlight@bidipres}}% Color highlighting enabled? +{% Yes; use a colored box. + \newcommand{\present}[2][]{\leavevmode\llap{\textbf{\footnotesize#1}\,}\fcolorbox{textcolor}{presentcolor}{#2}}% + \newcommand{\mkpbox@bidipres}[1]{\fcolorbox{presentcolor}{presentcolor}{#1}}% Internal macro for use by \presentbox. + } +{% No; use an \fbox. + \newcommand{\present}[2][]{\leavevmode\llap{\textbf{\footnotesize#1}\,}\fbox{#2}}% + \newcommand{\mkpbox@bidipres}[1]{\fbox{#1}}% + } +\newsavebox{\pbox@bidipres}% Container for the minipage to be boxed. +\newenvironment{presentbox}% +{% + \par\smallskip% First a small space to separate the area from preceding text. + \begin{lrbox}{\pbox@bidipres}% Save the contents in a minipage inside \pbox@bidipres. + \noindent + \begin{minipage}{\linewidth-2\fboxsep-2\fboxrule}% Reduce the width of the minipage to leave space for the frame. + \replacecolor{presentcolor}{pagecolor}% If \present is used inside the colored area... + }% + {% + \end{minipage} + \end{lrbox}% + \noindent\mkpbox@bidipres{\usebox{\pbox@bidipres}}% This typesets the saved minipage inside the coloured area. + \smallskip% A small space to separate the area from succeding text. + \par + } +\newcommand{\rulestripes}{10} +\newcommand{\stripeoverlap}{.15pt} +\newcommand{\rulefirstgradprogression}{1} +\newcommand{\rulesecondgradprogression}{1} +\newcommand{\rulegradmidpoint}{.5} +\newcounter{stripe@bidipres} + +\newcounter{stripes@bidipres} + +\newcommand{\firstgradprogression@bidipres}{1} + +\newcommand{\secondgradprogression@bidipres}{1} + +\newcounter{gradprogression@bidipres} + +\newcommand{\gradmidpoint@bidipres}{.5} +\newcommand{\mkgradfirstfactor@bidipres}{\mkgradfactor@bidipres\firstgradprogression@bidipres} + +\newcommand{\mkgradsecondfactor@bidipres}{\mkgradfactor@bidipres\secondgradprogression@bidipres} + +\newcommand{\mkgradfactor@bidipres}[3]% Calculate a factor modified by a `progression' parameter. +{% + \mkfactor{#2}{#3}% Calculate the unmodified factor. + \setcounter{gradprogression@bidipres}{#1}% Factor definition may contain a calc-expression. + \ifthenelse{\value{gradprogression@bidipres}=1}{}% Progression value 1 is neutral. + {% + \ifthenelse{\value{gradprogression@bidipres}<0}% `Negative' progression? + {% Yes. + \@tempcnta-\value{gradprogression@bidipres}\relax% Complement progression wrt 0. + \mkfactor{#2}{1-1pt*\real{#2}}% Complement factor definition wrt 1pt. + } + {\@tempcnta\value{gradprogression@bidipres}\relax}% No; Use progression as given. + \whiledo{\the\@tempcnta>1}% Calculate (factor definition)^(progression). + {\advance\@tempcnta by -1\relax\mkfactor{#2}{\real{#2}*\real{#2}}}% + \ifthenelse{\value{gradprogression@bidipres}<0}% `Negative' progression? + {% Yes. + \mkfactor{#2}{1-1pt*\real{#2}}% Complement result wrt 1pt. + } + {}% + }% +} +\newcommand{\vgradrule}[1][]% Pick up first optional argument: [<stripes>] +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression% Use progression parameter for rules. + \ifthenelse{\equal{#1}{}}% First optional argument given? + {\setcounter{stripes@bidipres}{\rulestripes}}% No; use default value. + {\setcounter{stripes@bidipres}{#1}}% Yes. + \vgradrule@bidipres% Pick up [<startmodel>]{<startcolor>}. +} + +\newcommand{\vgradrule@bidipres}[2][]% Pick up next pair of arguments: [<startmodel>]{<startcolor>}. +{% + \ifthenelse{\equal{#1}{}}% <startmodel> given? + {\replacecolor{startcolor@bidipres}{#2}}% No; <startcolor> is a color name. + {\definecolor{startcolor@bidipres}{#1}{#2}}% Yes; {<startmodel>}{<startcolor>} is a color definition. + \@vgradrule@bidipres% Pick up [<endmodel>]{<endcolor>}. +} + +\newcommand{\@vgradrule@bidipres}[2][]% Pick up next pair of arguments: [<endmodel>]{<endcolor>}. +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{endcolor@bidipres}{#2}} + {\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@vgradrule@bidipres% Pick up rule arguments and proceed. +} +\newcommand{\hstripe@bidipres}[4]% +{\hbox{{\setcolor@bidipres{stripecolor@bidipres}\rule{#2}{#3}}}#4} +\newcommand{\@@vgradrule@bidipres}[3][0pt]% +{% + \ifthenelse{\value{stripes@bidipres}<2}% A `pathological case' which can happen in animations: If 0 or 1 stripes are + % requested, a division by zero error would be produced by the gradient code. + {\mbox{{\setcolor@bidipres{startcolor@bidipres}\rule[#1]{#2}{#3}}}}% In this case, just produce a colored rule. + {% + \raisebox{#1}% Evaluate the <raise> argument of the rule. + {% + \vbox% A vbox with \offinterlineskip allows to align the stripes vertically. + {% + \offinterlineskip + \setcounter{stripe@bidipres}{0}% Initialize the number of the current stripe. + \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}} + {% + \mkgradfirstfactor@bidipres{\tmp@bidipres}% Make the weight for \colorbetween, based on the number of the current stripe + {\value{stripe@bidipres}/(\value{stripes@bidipres}-1)}% and the first gradient progression. + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{endcolor@bidipres}{startcolor@bidipres}% Calculate stripe color. + \stepcounter{stripe@bidipres}% + \ifthenelse{\value{stripe@bidipres}=\value{stripes@bidipres}}% Last stripe? + {\hstripe@bidipres{\tmp@bidipres}{#2}{(#3)/\value{stripes@bidipres}}{}}% Yes; make stripe w/o overlap. + {% No; add a kern to make stripes overlap. + \hstripe@bidipres{\tmp@bidipres}{#2}{(#3)/\value{stripes@bidipres}+\stripeoverlap}{\kern-\stripeoverlap}% + }% + }% matches \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}}{% + }% matches \vbox{% + }% matches \raisebox{#1}{% + }% matches second argument of \ifthenelse{\value{stripes@bidipres}<2} + }% matches \newcommand{\@@vgradrule@bidipres}[3][0pt]{% +\newcommand{\dblvgradrule}[1][]% Pick up first optional argument: [<midpoint>] +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression% Use progression parameters for rules. + \let\secondgradprogression@bidipres=\rulesecondgradprogression + \ifthenelse{\equal{#1}{}}% First optional argument given? + {\let\gradmidpoint@bidipres=\rulegradmidpoint}% No; use default value. + {\def\gradmidpoint@bidipres{#1}}% Yes. + \dblvgradrule@bidipres% Pick up second optional argument. +} + +\newcommand{\dblvgradrule@bidipres}[1][]% Pick up second optional argument: [<stripes>] +{% + \ifthenelse{\equal{#1}{}} + {\setcounter{stripes@bidipres}{\rulestripes}} + {\setcounter{stripes@bidipres}{#1}}% + \@dblvgradrule@bidipres +} + +\newcommand{\@dblvgradrule@bidipres}[2][]% Pick up next pair of arguments: [<startmodel>]{<startcolor>}. +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{startcolor@bidipres}{#2}} + {\definecolor{startcolor@bidipres}{#1}{#2}}% + \@@dblvgradrule@bidipres +} + +\newcommand{\@@dblvgradrule@bidipres}[2][]% Pick up next pair of arguments: [<midmodel>]{<midcolor>}. +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{midcolor@bidipres}{#2}} + {\definecolor{midcolor@bidipres}{#1}{#2}}% + \@@@dblvgradrule@bidipres +} + +\newcommand{\@@@dblvgradrule@bidipres}[2][]% Pick up next pair of arguments: [<endmodel>]{<endcolor>}. +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{endcolor@bidipres}{#2}} + {\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@@@dblvgradrule@bidipres% Pick up rule arguments and proceed. +} + +\newcommand{\@@@@dblvgradrule@bidipres}[3][0pt]% Main part of \dblvgradrule. +{% + \ifthenelse{\value{stripes@bidipres}<2}% The gradient code is not equipped for making less than 2 stripes. + {\mbox{{\setcolor@bidipres{midcolor@bidipres}\rule[#1]{#2}{#3}}}}% In this case, just produce a rule colored with the middle color. + {% + \raisebox{#1}% Evaluate the <raise> argument of the rule. + {% + \vbox% A vbox with \offinterlineskip allows to align the stripes + {% vertically. + \offinterlineskip + \setcounter{stripe@bidipres}{0}% Initialize the number of the current stripe. + \setcounter{tmpcnta@bidipres}% Number of the `middle' stripe. + {\value{stripes@bidipres}*\real{\gradmidpoint@bidipres}}% + \whiledo{\value{stripe@bidipres}<\value{tmpcnta@bidipres}}% Produce the upper part of the gradient. + {% + \mkgradfirstfactor@bidipres{\tmp@bidipres}% Make the weight for \colorbetween, based on the number of the + {\value{stripe@bidipres}/\value{tmpcnta@bidipres}}% current stripe and the first gradient progression. + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{midcolor@bidipres}{startcolor@bidipres}% Calculate stripe color. + \hstripe@bidipres{\tmp@bidipres}% Make stripe with overlap. + {#2}{(#3)/\value{stripes@bidipres}+\stripeoverlap}{\kern-\stripeoverlap}% This is the upper part, remember? + \stepcounter{stripe@bidipres}% + }% + \stepcounter{tmpcnta@bidipres}% + \ifthenelse{\value{stripes@bidipres}=\value{tmpcnta@bidipres}}% Only one stripe left to produce? + {\hstripe@bidipres{1}{#2}{(#3)/\value{stripes@bidipres}}{}}% Just produce one stripe colored with the end color. + {% + \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}}% Produce the lower part of the gradient. + {% + \mkgradsecondfactor@bidipres{\tmp@bidipres}% Make the weight for \colorbetween. + {(\value{stripe@bidipres}-\value{tmpcnta@bidipres}+1)/(\value{stripes@bidipres}-\value{tmpcnta@bidipres})}% + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{endcolor@bidipres}{midcolor@bidipres}% Calculate stripe color. + \stepcounter{stripe@bidipres}% + \ifthenelse{\value{stripe@bidipres}=\value{stripes@bidipres}}% Last stripe? + {\hstripe@bidipres{\tmp@bidipres}{#2}{(#3)/\value{stripes@bidipres}}{}}% Yes; make stripe w/o overlap. + {% No; add kern to make stripes overlap. + \hstripe@bidipres{\tmp@bidipres}{#2}{(#3)/\value{stripes@bidipres}+\stripeoverlap}{\kern-\stripeoverlap}% + }% + }% matches \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}}% + }% matches second argument of \ifthenelse{\value{stripes@bidipres}=\value{tmpcnta@bidipres}}% + }% matches \vbox{% + }% matches \raisebox{#1}{% + }% matches second argument of \ifthenelse{\value{stripes@bidipres}<2}% + }% matches \newcommand{\@@@@dblvgradrule@bidipres}[3][0pt]% +\newcommand{\hgradrule}[1][]% Pick up first optional argument: [<stripes>]. +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression% Use progression parameter for rules. + \ifthenelse{\equal{#1}{}}% First optional argument given? + {\setcounter{stripes@bidipres}{\rulestripes}}% No; use default value. + {\setcounter{stripes@bidipres}{#1}}% Yes. + \hgradrule@bidipres% Pick up [<startmodel>]{<startcolor>}. +} + +\newcommand{\hgradrule@bidipres}[2][]% Pick up next pair of arguments: [<startmodel>]{<startcolor>}. +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{startcolor@bidipres}{#2}} + {\definecolor{startcolor@bidipres}{#1}{#2}}% + \@hgradrule@bidipres +} + +\newcommand{\@hgradrule@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{endcolor@bidipres}{#2}} + {\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@hgradrule@bidipres% Pick up rule arguments and proceed. +} + +\newcommand{\vstripe@bidipres}[4]% Helper command for making _one_ stripe. Can be overladed for making historams. +{{\setcolor@bidipres{stripecolor@bidipres}\rule{#2}{#3}#4}} + +\newcommand{\@@hgradrule@bidipres}[3][0pt]% Main part of \hgradrule. +{% + \ifthenelse{\value{stripes@bidipres}<2}% A `pathological case' which can happen in animations: If 0 or 1 stripes are + % requested, a division by zero error would be produced by the gradient code. + {\mbox{{\setcolor@bidipres{startcolor@bidipres}\rule[#1]{#2}{#3}}}}% In this case, just produce a colored rule. + {% + \raisebox{#1}% Evaluate the <raise> argument of the rule. + {% + \setcounter{stripe@bidipres}{0}% Initialize the number of the current stripe. + \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}} + {% + \mkgradfirstfactor@bidipres{\tmp@bidipres}% Make the weight for \colorbetween, based on the number of the current stripe + {\value{stripe@bidipres}/(\value{stripes@bidipres}-1)}% and the first gradient progression. + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{endcolor@bidipres}{startcolor@bidipres}% Calculate stripe color. + \stepcounter{stripe@bidipres}% + \ifthenelse{\value{stripe@bidipres}=\value{stripes@bidipres}}% Last stripe? + {\vstripe@bidipres{\tmp@bidipres}{(#2)/\value{stripes@bidipres}}{#3}{}}% Yes; make stripe w/o overlap. + {% No; add a kern to make stripes overlap. + \vstripe@bidipres{\tmp@bidipres}{(#2)/\value{stripes@bidipres}+\stripeoverlap}{#3}{\kern-\stripeoverlap}% + }% + }% matches \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}}{% + }% matches \raisebox{#1}{% + }% matches second argument of \ifthenelse{\value{stripes@bidipres}<2}% + }% matches \newcommand{\@@hgradrule@bidipres}[3][0pt]{% + +\newcommand{\dblhgradrule}[1][]% Pick up first optional argument: [<midpoint>]. +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression% Use progression parameters for rules. + \let\secondgradprogression@bidipres=\rulesecondgradprogression + \ifthenelse{\equal{#1}{}}{\let\gradmidpoint@bidipres=\rulegradmidpoint}{\def\gradmidpoint@bidipres{#1}}% + \dblhgradrule@bidipres +} + +\newcommand{\dblhgradrule@bidipres}[1][]% Pick up second optional argument: [<stripes>]. +{% + \ifthenelse{\equal{#1}{}}{\setcounter{stripes@bidipres}{\rulestripes}}{\setcounter{stripes@bidipres}{#1}}% + \@dblhgradrule@bidipres +} + +\newcommand{\@dblhgradrule@bidipres}[2][]% Pick up next pair of arguments: [<startmodel>]{<startcolor>}. +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{startcolor@bidipres}{#2}}{\definecolor{startcolor@bidipres}{#1}{#2}}% + \@@dblhgradrule@bidipres +} + +\newcommand{\@@dblhgradrule@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{midcolor@bidipres}{#2}}{\definecolor{midcolor@bidipres}{#1}{#2}}% + \@@@dblhgradrule@bidipres +} + +\newcommand{\@@@dblhgradrule@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}} + {\replacecolor{endcolor@bidipres}{#2}} + {\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@@@dblhgradrule@bidipres% Pick up rule arguments and proceed. +} + +\newcommand{\@@@@dblhgradrule@bidipres}[3][0pt]% Main part of \dblhgradrule. +{% + \ifthenelse{\value{stripes@bidipres}<2}% The gradient code is not equipped for making less than 2 stripes. + {\mbox{{\setcolor@bidipres{midcolor@bidipres}\rule[#1]{#2}{#3}}}}% In this case, just produce a rule colored with the middle color. + {% + \raisebox{#1}% Evaluate the <raise> argument of the rule. + {% + \setcounter{stripe@bidipres}{0}% Initialize the number of the current stripe. + \setcounter{tmpcnta@bidipres}% Number of the `middle' stripe. + {\value{stripes@bidipres}*\real{\gradmidpoint@bidipres}}% + \whiledo{\value{stripe@bidipres}<\value{tmpcnta@bidipres}}% Produce the left part of the gradient. + {% + \mkgradfirstfactor@bidipres{\tmp@bidipres}% Make the weight for \colorbetween, based on the number of the + {\value{stripe@bidipres}/\value{tmpcnta@bidipres}}% current stripe and the first gradient progression. + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{midcolor@bidipres}{startcolor@bidipres}% Calculate stripe color. + \vstripe@bidipres{\tmp@bidipres}% Make stripe with overlap. + {(#2)/\value{stripes@bidipres}+\stripeoverlap}{#3}{\kern-\stripeoverlap}% This is the left part, remember? + \stepcounter{stripe@bidipres}% + }% + \stepcounter{tmpcnta@bidipres}% + \ifthenelse{\value{stripes@bidipres}=\value{tmpcnta@bidipres}}% Only one stripe left to produce? + {\vstripe@bidipres{1}{(#2)/\value{stripes@bidipres}}{#3}{}}% Just produce one stripe colored with the end color. + {% + \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}}% Produce the right part of the gradient. + {% + \mkgradsecondfactor@bidipres{\tmp@bidipres}% Make the weight for \colorbetween. + {(\value{stripe@bidipres}-\value{tmpcnta@bidipres})/(\value{stripes@bidipres}-\value{tmpcnta@bidipres}-1)}% + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{endcolor@bidipres}{midcolor@bidipres}% Calculate stripe color. + \stepcounter{stripe@bidipres}% + \ifthenelse{\value{stripe@bidipres}=\value{stripes@bidipres}}% Last stripe? + {\vstripe@bidipres{\tmp@bidipres}{(#2)/\value{stripes@bidipres}}{#3}{}}% Yes; make stripe w/o overlap. + {% Add kern to make stripes overlap. + \vstripe@bidipres{\tmp@bidipres}{(#2)/\value{stripes@bidipres}+\stripeoverlap}{#3}{\kern-\stripeoverlap}% + }% + }% matches \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}}{% + }% matches second argument of \ifthenelse{\value{stripes@bidipres}=\value{tmpcnta@bidipres}}% + }% matches \raisebox{#1}{% + }% matches second argument of \ifthenelse{\value{stripes@bidipres}<2}% + }% matches \newcommand{\@@@@dblhgradrule@bidipres}[3][0pt]{% + + +\providecommand{\clipbox}[2][\z@]{\leavevmode\hbox{#2}} + +\newcommand{\dgradslope}{1,1} + +\newcounter{dgradhslope@bidipres} + +\newcounter{dgradvslope@bidipres} + +\def\setdgradslope(#1,#2){\setcounter{dgradhslope@bidipres}{#1}\setcounter{dgradvslope@bidipres}{#2}} +\newcommand{\dgradrule}[1][] +{% + \ifthenelse{\equal{#1}{}}{\expandafter\setdgradslope\expandafter(\dgradslope)}{\setdgradslope(#1)}% + \dgradrule@bidipres +} + +\newcommand{\dgradrule@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{startcolor@bidipres}{#2}}{\definecolor{startcolor@bidipres}{#1}{#2}}% + \@dgradrule@bidipres +} + +\newcommand{\@dgradrule@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{endcolor@bidipres}{#2}}{\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@dgradrule@bidipres +} + +\newcommand{\dstripewd@bidipres}{.7pt} + +\newcommand{\@@dgradrule@bidipres}[3][0pt] +{% + \raisebox{#1} + {% + \thicklines + \setcounter{stripe@bidipres}{0}% + \setcounter{tmpcnta@bidipres}{1*\ratio{#3}{\dstripewd@bidipres}}% + \setcounter{stripes@bidipres}{1*\ratio{#3}{\dstripewd@bidipres}+1*\ratio{#2}{\dstripewd@bidipres}}% + \@xarg\c@dgradhslope@bidipres\@yarg\c@dgradvslope@bidipres + \makebox[\dstripewd@bidipres] + {% + \whiledo{\value{stripe@bidipres}<\value{tmpcnta@bidipres}} + {% + \mkfactor{\tmp@bidipres}{\value{stripe@bidipres}/(\value{stripes@bidipres}-1)}% + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{endcolor@bidipres}{startcolor@bidipres}% + \setlength{\@linelen}{\dstripewd@bidipres*\value{stripe@bidipres}}% + \raisebox{\dstripewd@bidipres*(\value{tmpcnta@bidipres}-\value{stripe@bidipres})} + {\makebox[0pt]{{\setcolor@bidipres{stripecolor@bidipres}\hbox to 0pt{\@sline\hss}}}}% + \stepcounter{stripe@bidipres}% + }% + }% + \whiledo{\value{stripe@bidipres}<\value{stripes@bidipres}} + {% + \mkfactor{\tmp@bidipres}{\value{stripe@bidipres}/(\value{stripes@bidipres}-1)}% + \colorbetween[\tmp@bidipres]{stripecolor@bidipres}{endcolor@bidipres}{startcolor@bidipres}% + \makebox[\dstripewd@bidipres]{{\setcolor@bidipres{stripecolor@bidipres}.}}% + \stepcounter{stripe@bidipres}% + }% + }% + }% +\newcommand{\vgradbox}[1][]% Pick up first optional argument: [<stripes>]. +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression% Use progression parameter for rules. + \ifthenelse{\equal{#1}{}}% First optional argument given? + {\setcounter{stripes@bidipres}{\rulestripes}}% No; use default value. + {\setcounter{stripes@bidipres}{#1}}% Yes. + \vgradbox@bidipres% Pick up remaining optional arguments. +} + +\newcommand{\vgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{startcolor@bidipres}{#2}}{\definecolor{startcolor@bidipres}{#1}{#2}}% + \@vgradbox@bidipres +} + +\newcommand{\@vgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{endcolor@bidipres}{#2}}{\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@gradbox@bidipres\@@vgradrule@bidipres% Make a generic background box with vertical gradient background. +} + +\newcommand{\@@gradbox@bidipres}[2]% Generic background box. +{% + \leavevmode% Make box behave like \mbox. + \setbox\tempbox@bidipres + \hbox{\kern\fboxsep{\set@color#2}\kern\fboxsep}% An \hbox containing <contents> plus additional white space. + \rlap% Underlay box background with rule command passed as #1. + {% + #1[-\fboxsep-\dp\tempbox@bidipres]% Box depth augmented by `white' space. + {\wd\tempbox@bidipres}% Space on the sides has already been added. + {\ht\tempbox@bidipres+\dp\tempbox@bidipres+2\fboxsep}}% Total height. + \box\tempbox@bidipres% Overlay box contents. + }% +\newcommand{\hgradbox}[1][] +{% + \let\secondgradprogression@bidipres=\rulesecondgradprogression + \ifthenelse{\equal{#1}{}}{\setcounter{stripes@bidipres}{\rulestripes}}{\setcounter{stripes@bidipres}{#1}}% + \hgradbox@bidipres +} + +\newcommand{\hgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{startcolor@bidipres}{#2}}{\definecolor{startcolor@bidipres}{#1}{#2}}% + \@hgradbox@bidipres +} + +\newcommand{\@hgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{endcolor@bidipres}{#2}}{\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@gradbox@bidipres\@@hgradrule@bidipres +} +\newcommand{\dblvgradbox}[1][] +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression% Use progression parameters for rules. + \let\secondgradprogression@bidipres=\rulesecondgradprogression + \ifthenelse{\equal{#1}{}}{\let\gradmidpoint@bidipres=\rulegradmidpoint}{\def\gradmidpoint@bidipres{#1}}% + \dblvgradbox@bidipres +} + +\newcommand{\dblvgradbox@bidipres}[1][] +{% + \ifthenelse{\equal{#1}{}}{\setcounter{stripes@bidipres}{\rulestripes}}{\setcounter{stripes@bidipres}{#1}}% + \@dblvgradbox@bidipres +} + +\newcommand{\@dblvgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{startcolor@bidipres}{#2}}{\definecolor{startcolor@bidipres}{#1}{#2}}% + \@@dblvgradbox@bidipres +} + +\newcommand{\@@dblvgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{midcolor@bidipres}{#2}}{\definecolor{midcolor@bidipres}{#1}{#2}}% + \@@@dblvgradbox@bidipres +} + +\newcommand{\@@@dblvgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{endcolor@bidipres}{#2}}{\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@gradbox@bidipres\@@@@dblvgradrule@bidipres +} +\newcommand{\dblhgradbox}[1][] +{% + \let\firstgradprogression@bidipres=\rulefirstgradprogression + \let\secondgradprogression@bidipres=\rulesecondgradprogression + \ifthenelse{\equal{#1}{}}{\let\gradmidpoint@bidipres=\rulegradmidpoint}{\def\gradmidpoint@bidipres{#1}}% + \dblhgradbox@bidipres +} + +\newcommand{\dblhgradbox@bidipres}[1][] +{% + \ifthenelse{\equal{#1}{}}{\setcounter{stripes@bidipres}{\rulestripes}}{\setcounter{stripes@bidipres}{#1}}% + \@dblhgradbox@bidipres +} + +\newcommand{\@dblhgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{startcolor@bidipres}{#2}}{\definecolor{startcolor@bidipres}{#1}{#2}}% + \@@dblhgradbox@bidipres +} + +\newcommand{\@@dblhgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{midcolor@bidipres}{#2}}{\definecolor{midcolor@bidipres}{#1}{#2}}% + \@@@dblhgradbox@bidipres +} + +\newcommand{\@@@dblhgradbox@bidipres}[2][] +{% + \ifthenelse{\equal{#1}{}}{\replacecolor{endcolor@bidipres}{#2}}{\definecolor{endcolor@bidipres}{#1}{#2}}% + \@@gradbox@bidipres\@@@@dblhgradrule@bidipres +} +\newcommand{\backgroundstyle}[2][] +{% + \replacecolor{startcolor@bidipres}{bgndstartcolor}% Initialize the internal counterparts + \replacecolor{midcolor@bidipres}{bgndmidcolor}% of parameters to their default values. + \replacecolor{endcolor@bidipres}{bgndendcolor}% + \replacecolor{bgndtoppanelcolor@bidipres}{toppanelcolor}% + \replacecolor{bgndbottompanelcolor@bidipres}{bottompanelcolor}% + \replacecolor{bgndleftpanelcolor@bidipres}{leftpanelcolor}% + \replacecolor{bgndrightpanelcolor@bidipres}{rightpanelcolor}% + \let\firstgradprogression@bidipres=\bgndfirstgradprogression + \let\secondgradprogression@bidipres=\bgndsecondgradprogression% + \setcounter{stripes@bidipres}{\bgndstripes}% + \let\gradmidpoint@bidipres=\bgndgradmidpoint + \let\bgndtoppanelheight@bidipres=\empty% The panel dimensions depend on other parameters. If they are not + \let\bgndbottompanelheight@bidipres=\empty% set directly, defaults are calculated after setting keyval + \let\bgndleftpanelwidth@bidipres=\empty% parameters. + \let\bgndrightpanelwidth@bidipres=\empty + \let\hpanelsvalue@bidipres=\empty + \setboolean{autopanels@bidipres}{true}% + \csname set#2bgnd@bidipres\endcsname{#1}% Execute the style-specific command which defines the background box. + } +\newcommand{\bgndstripes}{10} +\newcommand{\bgndgradmidpoint}{.5} +\newcommand{\bgndfirstgradprogression}{1} +\newcommand{\bgndsecondgradprogression}{1} +\newcommand{\bgndtoppanelheight}{0pt} + +\newcommand{\bgndbottompanelheight}{0pt} + +\newcommand{\bgndleftpanelwidth}{0pt} + +\newcommand{\bgndrightpanelwidth}{0pt} +\newcommand{\bgndtoppanelheight@bidipres}{0pt} + +\newcommand{\bgndtoppanelwidth@bidipres}{0pt} + +\newcommand{\bgndbottompanelheight@bidipres}{0pt} + +\newcommand{\bgndbottompanelwidth@bidipres}{0pt} + +\newcommand{\bgndleftpanelheight@bidipres}{0pt} + +\newcommand{\bgndleftpanelwidth@bidipres}{0pt} + +\newcommand{\bgndrightpanelheight@bidipres}{0pt} + +\newcommand{\bgndrightpanelwidth@bidipres}{0pt} + +\newboolean{hpanels@bidipres} + +\newboolean{autopanels@bidipres} +\define@key{bgnd@bidipres}{stripes}{\setcounter{stripes@bidipres}{#1}} + +\define@key{bgnd@bidipres}{startcolor}{\replacecolor{startcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{startcolordef}{\definecolor{startcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{midcolor}{\replacecolor{midcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{midcolordef}{\definecolor{midcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{endcolor}{\replacecolor{endcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{endcolordef}{\definecolor{endcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{gradmidpoint}{\edef\gradmidpoint@bidipres{#1}} + +\define@key{bgnd@bidipres}{firstgradprogression}{\def\firstgradprogression@bidipres{#1}} + +\define@key{bgnd@bidipres}{secondgradprogression}{\def\secondgradprogression@bidipres{#1}} + +\define@key{bgnd@bidipres}{hpanels}[true]{\def\hpanelsvalue@bidipres{#1}} + +\define@key{bgnd@bidipres}{autopanels}[true]{\setboolean{autopanels@bidipres}{#1}} + +\define@key{bgnd@bidipres}{toppanelcolor}{\replacecolor{bgndtoppanelcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{toppanelcolordef}{\definecolor{bgndtoppanelcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{bottompanelcolor}{\replacecolor{bgndbottompanelcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{bottompanelcolordef}{\definecolor{bgndbottompanelcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{leftpanelcolor}{\replacecolor{bgndleftpanelcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{leftpanelcolordef}{\definecolor{bgndleftpanelcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{rightpanelcolor}{\replacecolor{bgndrightpanelcolor@bidipres}{#1}} + +\define@key{bgnd@bidipres}{rightpanelcolordef}{\definecolor{bgndrightpanelcolor@bidipres}#1} + +\define@key{bgnd@bidipres}{toppanelheight}{\mklength@bidipres{\bgndtoppanelheight@bidipres}{#1}} + +\define@key{bgnd@bidipres}{bottompanelheight}{\mklength@bidipres{\bgndbottompanelheight@bidipres}{#1}} + +\define@key{bgnd@bidipres}{leftpanelwidth}{\mklength@bidipres{\bgndleftpanelwidth@bidipres}{#1}} + +\define@key{bgnd@bidipres}{rightpanelwidth}{\mklength@bidipres{\bgndrightpanelwidth@bidipres}{#1}} +\newbox\bgndbox@bidipres +\setbox\bgndbox@bidipres\null% Default: Empty. +\newcommand{\mkpanels@bidipres}[1]% +{% + \ifthenelse{\boolean{hpanels@bidipres}}% `horizontal' panels? + {% Yes. Vertically align top panel, center area with left and right panels, and bottom panel. + \vbox% A vbox with \offinterlineskip allows to align the + {% horizontal panels with the `background center'. + \offinterlineskip + \ifthenelse{\lengthtest{\bgndtoppanelheight@bidipres=0pt}}% Should top panel be created? + {}% No. + {% + \hbox{{% + \setcolor@bidipres{bgndtoppanelcolor@bidipres}% + \rule{\bgndtoppanelwidth@bidipres}{\bgndtoppanelheight@bidipres}% Make horizontal colored area. + }}% + }% + \hbox% Make `background center'. + {% + \ifthenelse{\lengthtest{\bgndleftpanelwidth@bidipres=0pt}}% Should left panel be created? + {}% No. + {{% + \setcolor@bidipres{bgndleftpanelcolor@bidipres}% + \rule{\bgndleftpanelwidth@bidipres}{\bgndleftpanelheight@bidipres}% Make vertical colored area. + }}% + #1% Make main background object. + {\bgndtoppanelwidth@bidipres-\bgndleftpanelwidth@bidipres-\bgndrightpanelwidth@bidipres}% Calculate remaining space in the center. + {\bgndleftpanelheight@bidipres}% + \ifthenelse{\lengthtest{\bgndrightpanelwidth@bidipres=0pt}}% Should right panel be created? + {}% No. + {{% + \setcolor@bidipres{bgndrightpanelcolor@bidipres}% + \rule{\bgndrightpanelwidth@bidipres}{\bgndrightpanelheight@bidipres}% Make vertical colored area. + }}% + }% matches \hbox{% + \ifthenelse{\lengthtest{\bgndbottompanelheight@bidipres=0pt}}% Should bottom panel be created? + {}% No. + {% + \hbox + {{% + \setcolor@bidipres{bgndbottompanelcolor@bidipres}% + \rule{\bgndbottompanelwidth@bidipres}{\bgndbottompanelheight@bidipres}% Make horizontal colored area. + }}% + }% + }% matches \vbox{% + }% matches \ifthenelse{\boolean{hpanels@bidipres}}{% + {% No. Horizontally align left panel, center area with top and bottom panels, and right panel. + \ifthenelse{\lengthtest{\bgndleftpanelwidth@bidipres=0pt}}% Should left panel be created? + {}% No. + {{% + \setcolor@bidipres{bgndleftpanelcolor@bidipres}% + \rule{\bgndleftpanelwidth@bidipres}{\bgndleftpanelheight@bidipres}% Make vertical colored area. + }}% + \vbox% A vbox with \offinterlineskip allows to align + {% the horizontal panels with the center object. + \offinterlineskip + \ifthenelse{\lengthtest{\bgndtoppanelheight@bidipres=0pt}}% Should top panel be created? + {}% No. + {% + \hbox% + {{% + \setcolor@bidipres{bgndtoppanelcolor@bidipres}% + \rule{\bgndtoppanelwidth@bidipres}{\bgndtoppanelheight@bidipres}% Make horizontal colored area. + }}% + }% + \hbox% Make main background object. + {% + #1% + {\bgndtoppanelwidth@bidipres}% + {\bgndleftpanelheight@bidipres-\bgndtoppanelheight@bidipres-\bgndbottompanelheight@bidipres}% Calculate space in the center. + }% + \ifthenelse{\lengthtest{\bgndbottompanelheight@bidipres=0pt}}% Should bottom panel be created? + {}% No. + {% + \hbox% + {{% + \setcolor@bidipres{bgndbottompanelcolor@bidipres}% + \rule{\bgndbottompanelwidth@bidipres}{\bgndbottompanelheight@bidipres}% Make horizontal colored area. + }}% + }% + }% matches \vbox{% + \ifthenelse{\lengthtest{\bgndrightpanelwidth@bidipres=0pt}}% Should right panel be created? + {}% No. + {{% + \setcolor@bidipres{bgndrightpanelcolor@bidipres}% + \rule{\bgndrightpanelwidth@bidipres}{\bgndrightpanelheight@bidipres}% Make vertical colored area. + }}% + }% matches second argument of \ifthenelse{\boolean{hpanels@bidipres}} + }% matches \newcommand{\mkpanels@bidipres}[1]{% +\newcommand{\initpanels@bidipres}[1]% +{% + \ifx\hpanelsvalue@bidipres\empty% Has the hpanels parameter been given? + \setboolean{hpanels@bidipres}{#1}% No; use default. + \else + \setboolean{hpanels@bidipres}{\hpanelsvalue@bidipres}% Yes; use parameter setting. + \fi + \ifthenelse{\boolean{hpanels@bidipres}}% `horizontal' panel direction? + {% Yes. Horizontal panels are `outer', vertical panels are `inner'. + \let\bgndtoppanelwidth@bidipres=\bidiprespagewidth% Full width for horizontal panels. + \let\bgndbottompanelwidth@bidipres=\bidiprespagewidth% + \ifthenelse{\equal{\bgndtoppanelheight@bidipres}{}}% Has the top panel height been set? + {% No. Guess default. + \ifx\toppanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndtoppanelheight@bidipres}{\bgndtoppanelheight}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calcvdimen@bidipres{\bgndtoppanelheight@bidipres}{\bgndtoppanelwidth@bidipres}% Measure the height of panel contents. + {\toppanelcontents@bidipres}% + \let\toppanelheight=\bgndtoppanelheight@bidipres% Overwrite panel settings. + \let\toppanelwidth=\bgndtoppanelwidth@bidipres% + \def\toppanelshift{0pt}% Top panel spans the whole upper screen. + } + {% No + \mklength@bidipres{\bgndtoppanelheight@bidipres}{\toppanelheight}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndtoppanelheight@bidipres}{}} + {% Yes. + \let\toppanelheight=\bgndtoppanelheight@bidipres% Overwrite panel settings - use user-supplied value. + } + \ifthenelse{\equal{\bgndbottompanelheight@bidipres}{}}% Has the bottom panel height been set? + {% No. Guess default. + \ifx\bottompanelcontents@bidipres\empty% Is the bottom panel defined? + \mklength@bidipres{\bgndbottompanelheight@bidipres}{\bgndbottompanelheight}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calcvdimen@bidipres{\bgndbottompanelheight@bidipres}{\bgndbottompanelwidth@bidipres}% Measure the height of panel contents. + {\bottompanelcontents@bidipres}% + \let\bottompanelheight=\bgndbottompanelheight@bidipres% Overwrite panel settings. + \let\bottompanelwidth=\bgndbottompanelwidth@bidipres% + \def\bottompanelshift{0pt}% Bottom panel spans the whole upper screen. + } + {% No + \mklength@bidipres{\bgndbottompanelheight@bidipres}{\bottompanelheight}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndbottompanelheight@bidipres}{}} + {% Yes. + \let\bottompanelheight=\bgndbottompanelheight@bidipres% Overwrite panel settings - use user-supplied value. + } + \mklength@bidipres{\bgndleftpanelheight@bidipres}% Calculate remaining space in the center. + {\bidiprespageheight-\bgndtoppanelheight@bidipres-\bgndbottompanelheight@bidipres}% + \let\bgndrightpanelheight@bidipres=\bgndleftpanelheight@bidipres% Height of left and right panels is equal. + \ifthenelse{\equal{\bgndleftpanelwidth@bidipres}{}}% Has the left panel width been set? + {% No. Guess default. + \ifx\leftpanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndleftpanelwidth@bidipres}{\bgndleftpanelwidth}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calchdimen@bidipres{\bgndleftpanelwidth@bidipres}{\bgndleftpanelheight@bidipres}% Measure the `optimal' width of panel contents. + {\leftpanelcontents@bidipres}% + \let\leftpanelheight=\bgndleftpanelheight@bidipres% Overwrite panel settings. + \let\leftpanelwidth=\bgndleftpanelwidth@bidipres% + \let\leftpanelraise=\bgndbottompanelheight@bidipres% Left panel is raised above bottom panel. + } + {% No + \mklength@bidipres{\bgndleftpanelwidth@bidipres}{\leftpanelwidth}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndleftpanelwidth@bidipres}{}} + {% Yes. + \let\leftpanelwidth=\bgndleftpanelwidth@bidipres% Overwrite panel settings - use user-supplied value. + } + \ifthenelse{\equal{\bgndrightpanelwidth@bidipres}{}}% Has the right panel width been set? + {% No. Guess default. + \ifx\rightpanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndrightpanelwidth@bidipres}{\bgndrightpanelwidth}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calchdimen@bidipres{\bgndrightpanelwidth@bidipres}{\bgndrightpanelheight@bidipres}% Measure `optimal' width of panel contents. + {\rightpanelcontents@bidipres}% + \let\rightpanelheight=\bgndrightpanelheight@bidipres% Overwrite panel settings. + \let\rightpanelwidth=\bgndrightpanelwidth@bidipres% + \let\rightpanelraise=\bgndbottompanelheight@bidipres% Right panel is raised above bottom panel. + } + {% No + \mklength@bidipres{\bgndrightpanelwidth@bidipres}{\rightpanelwidth}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndrightpanelwidth@bidipres}{}} + {% Yes. + \let\rightpanelwidth=\bgndrightpanelwidth@bidipres% Overwrite panel settings - use user-supplied value. + } + }% matches \ifthenelse{\boolean{hpanels@bidipres}} + {% No. Vertical panels are `outer', horizontal panels are `inner'. + \let\bgndleftpanelheight@bidipres=\bidiprespageheight% Full height for vertical panels. + \let\bgndrightpanelheight@bidipres=\bidiprespageheight% + \ifthenelse{\equal{\bgndleftpanelwidth@bidipres}{}}% Has the left panel width been set? + {% No. Guess default. + \ifx\leftpanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndleftpanelwidth@bidipres}{\bgndleftpanelwidth}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calchdimen@bidipres{\bgndleftpanelwidth@bidipres}{\bgndleftpanelheight@bidipres}% Measure the `optimal' width of panel contents. + {\leftpanelcontents@bidipres}% + \let\leftpanelheight=\bgndleftpanelheight@bidipres% Overwrite panel settings. + \let\leftpanelwidth=\bgndleftpanelwidth@bidipres% + \def\leftpanelraise{0pt}% Left panel spans the whole left part of the screen. + } + {% No + \mklength@bidipres{\bgndleftpanelwidth@bidipres}{\leftpanelwidth}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndleftpanelwidth@bidipres}{}} + {% Yes. + \let\leftpanelwidth=\bgndleftpanelwidth@bidipres% Overwrite panel settings - use user-supplied value. + } + \ifthenelse{\equal{\bgndrightpanelwidth@bidipres}{}}% Has the right panel width been set? + {% No. Guess default. + \ifx\rightpanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndrightpanelwidth@bidipres}{\bgndrightpanelwidth}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calchdimen@bidipres{\bgndrightpanelwidth@bidipres}{\bgndrightpanelheight@bidipres}% Measure `optimal' width of panel contents. + {\rightpanelcontents@bidipres}% + \let\rightpanelheight=\bgndrightpanelheight@bidipres% Overwrite panel settings. + \let\rightpanelwidth=\bgndrightpanelwidth@bidipres% + \def\rightpanelraise{0pt}% Right panel spans the whole left part of the screen. + } + {% No + \mklength@bidipres{\bgndrightpanelwidth@bidipres}{\rightpanelwidth}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndrightpanelwidth@bidipres}{}} + {% Yes. + \let\rightpanelwidth=\bgndrightpanelwidth@bidipres% Overwrite panel settings - use user-supplied value. + } + \mklength@bidipres{\bgndtoppanelwidth@bidipres}% Calculate remaining space in the center. + {\bidiprespagewidth-\bgndleftpanelwidth@bidipres-\bgndrightpanelwidth@bidipres}% + \let\bgndbottompanelwidth@bidipres=\bgndtoppanelwidth@bidipres% Width of top and bottom panels is equal. + \ifthenelse{\equal{\bgndtoppanelheight@bidipres}{}}% Has the top panel height been set? + {% No. Guess default. + \ifx\toppanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndtoppanelheight@bidipres}{\bgndtoppanelheight}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calcvdimen@bidipres{\bgndtoppanelheight@bidipres}{\bgndtoppanelwidth@bidipres}% Measure the height of panel contents. + {\toppanelcontents@bidipres}% + \let\toppanelheight=\bgndtoppanelheight@bidipres% Overwrite panel settings. + \let\toppanelwidth=\bgndtoppanelwidth@bidipres% + \let\toppanelshift=\bgndleftpanelwidth@bidipres% Shift top panel to the right of left panel. + } + {% No + \mklength@bidipres{\bgndtoppanelheight@bidipres}{\toppanelheight}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndtoppanelheight@bidipres}{}} + {% Yes. + \let\toppanelheight=\bgndtoppanelheight@bidipres% Overwrite panel settings - use user-supplied value. + } + \ifthenelse{\equal{\bgndbottompanelheight@bidipres}{}}% Has the bottom panel height been set? + {% No. Guess default. + \ifx\bottompanelcontents@bidipres\empty% Is the panel defined? + \mklength@bidipres{\bgndbottompanelheight@bidipres}{\bgndbottompanelheight}% Use background-specific default. + \else + \ifthenelse{\boolean{autopanels@bidipres}}% Calculate panel dimensions? + {% Yes. + \calcvdimen@bidipres{\bgndbottompanelheight@bidipres}{\bgndbottompanelwidth@bidipres}% Measure the height of panel contents. + {\bottompanelcontents@bidipres}% + \let\bottompanelheight=\bgndbottompanelheight@bidipres% Overwrite panel settings. + \let\bottompanelwidth=\bgndbottompanelwidth@bidipres% + \let\bottompanelshift=\bgndleftpanelwidth@bidipres% Shift bottom panel to the right of left panel. + } + {% No + \mklength@bidipres{\bgndbottompanelheight@bidipres}{\bottompanelheight}% Use panel-specific default. + }% + \fi + }% matches \ifthenelse{\equal{\bgndbottompanelheight@bidipres}{}} + {% Yes. + \let\bottompanelheight=\bgndbottompanelheight@bidipres% Overwrite panel settings - use user-supplied value. + } + }% matches second argument of \ifthenelse{\boolean{hpanels@bidipres}} + }% matches \newcommand{\initpanels@bidipres}[1]{ +\newcommand{\phantomrule@bidipres}[2]{\rule{0pt}{#2}\rule{#1}{0pt}} +\newcommand{\setnonebgnd@bidipres}[1]% Implementation of the background style ``none''. +{\global\setbox\bgndbox@bidipres=\null}% Just produce an empty box. + +\newcommand{\setplainbgnd@bidipres}[1]% Implementation of the background style ``plain''. +{% + \setkeys{bgnd@bidipres}{#1}% Evaluate parameters. + \initpanels@bidipres{true}% Initialize panel parameters. + \global\setbox\bgndbox@bidipres=\hbox{\mkpanels@bidipres{\phantomrule@bidipres}}% Make panels only. + }% + +\newcommand{\setvgradientbgnd@bidipres}[1]% Implementation of the background style ``vgradient''. +{% + \setkeys{bgnd@bidipres}{#1}% Evaluate parameters. + \initpanels@bidipres{false}% Initialize panel parameters. + \global\setbox\bgndbox@bidipres=\hbox{\mkpanels@bidipres{\@@vgradrule@bidipres}}% Make background box. + } + +\newcommand{\sethgradientbgnd@bidipres}[1]% Implementation of the background style ``hgradient''. +{% + \setkeys{bgnd@bidipres}{#1}% Evaluate parameters. + \initpanels@bidipres{true}% Initialize panel parameters. + \global\setbox\bgndbox@bidipres=\hbox{\mkpanels@bidipres{\@@hgradrule@bidipres}}% Make background box. + } + +\newcommand{\setdoublevgradientbgnd@bidipres}[1]% Implementation of the background style ``doublevgradient''. +{% + \setkeys{bgnd@bidipres}{#1}% Evaluate parameters. + \initpanels@bidipres{false}% Initialize panel parameters. + \global\setbox\bgndbox@bidipres=\hbox{\mkpanels@bidipres{\@@@@dblvgradrule@bidipres}}% Make background box. + } + +\newcommand{\setdoublehgradientbgnd@bidipres}[1]% Implementation of the background style ``doublehgradient''. +{% + \setkeys{bgnd@bidipres}{#1}% Evaluate parameters. + \initpanels@bidipres{true}% Initialize panel parameters. + \global\setbox\bgndbox@bidipres=\hbox{\mkpanels@bidipres{\@@@@dblhgradrule@bidipres}}% Make background box. + } +\providecommand{\hpagecolor}[2][] +{% + \ifthenelse{\equal{#1}{}} + {\colorbetween{ppendcolor}{#2}{white}\backgroundstyle[startcolor=#2,endcolor=ppendcolor]{hgradient}} + {\backgroundstyle[startcolor=#1,endcolor=#2]{hgradient}}% + } +\providecommand{\vpagecolor}[2][] +{% + \ifthenelse{\equal{#1}{}} + {\colorbetween{ppendcolor}{#2}{white}\backgroundstyle[startcolor=#2,endcolor=ppendcolor]{vgradient}} + {\backgroundstyle[startcolor=#1,endcolor=#2]{vgradient}}% + } +\mklength@bidipres{\panelmargin}{\fboxsep} +\newcommand{\toppanelwidth}{\bidiprespagewidth}% Width. +\newcommand{\toppanelheight}{\bidiprespageheight/5}% Height. +\newcommand{\toppanelshift}{0pt}% Space between left screen edge and left edge of top panel. +\newcommand{\bottompanelwidth}{\bidiprespagewidth}% Width. +\newcommand{\bottompanelheight}{\bidiprespageheight/5}% Height. +\newcommand{\bottompanelshift}{0pt}% Space between left screen edge and left edge of bottom panel. +\newcommand{\leftpanelwidth}{\bidiprespagewidth/5}% Width. +\newcommand{\leftpanelheight}{\bidiprespageheight}% Height. +\newcommand{\leftpanelraise}{0pt}% Space between bottom screen edge and bottom edge of left panel. +\newcommand{\rightpanelwidth}{\bidiprespagewidth/5}% Width. +\newcommand{\rightpanelheight}{\bidiprespageheight}% Height. +\newcommand{\rightpanelraise}{0pt}% Space between bottom screen edge and bottom edge of left panel. +\newcommand*{\toppanelcontents@bidipres}{} +\newcommand*{\bottompanelcontents@bidipres}{} +\newcommand*{\leftpanelcontents@bidipres}{} +\newcommand*{\rightpanelcontents@bidipres}{} +\newcommand{\DeclarePanel}{\@ifstar\auto@declarepanel@bidipres\declarepanel@bidipres} + +\newcommand{\declarepanel@bidipres}[3][]% Non-starred version of \DeclarePanel. +{% + \expandafter\gdef\csname #2panelcontents@bidipres\endcsname{#3}% Just store panel contents. + \ifthenelse{\equal{#1}{}}{}{\csname store#2panel@bidipres\endcsname{#1}}% If <name> was given, store panel parameters away. + }% + +\newcommand{\storetoppanel@bidipres}[1] +{% + \expandafter\global\expandafter\let\csname toppanelcontents@bidipres@#1\endcsname\toppanelcontents@bidipres% Contents. + \expandafter\global\expandafter\let\csname toppanelwidth@bidipres@#1\endcsname\toppanelwidth@bidipres% Width. + \expandafter\global\expandafter\let\csname toppanelheight@bidipres@#1\endcsname\toppanelheight@bidipres% Height. + \expandafter\global\expandafter\let\csname toppanelshift@bidipres@#1\endcsname\toppanelshift@bidipres% Raise. +} + +\newcommand{\storebottompanel@bidipres}[1] +{% + \expandafter\global\expandafter\let\csname bottompanelcontents@bidipres@#1\endcsname\bottompanelcontents@bidipres% + \expandafter\global\expandafter\let\csname bottompanelwidth@bidipres@#1\endcsname\bottompanelwidth@bidipres% + \expandafter\global\expandafter\let\csname bottompanelheight@bidipres@#1\endcsname\bottompanelheight@bidipres% + \expandafter\global\expandafter\let\csname bottompanelshift@bidipres@#1\endcsname\bottompanelshift@bidipres% +} + +\newcommand{\storeleftpanel@bidipres}[1] +{% + \expandafter\global\expandafter\let\csname leftpanelcontents@bidipres@#1\endcsname\leftpanelcontents@bidipres% + \expandafter\global\expandafter\let\csname leftpanelwidth@bidipres@#1\endcsname\leftpanelwidth@bidipres% + \expandafter\global\expandafter\let\csname leftpanelheight@bidipres@#1\endcsname\leftpanelheight@bidipres% + \expandafter\global\expandafter\let\csname leftpanelraise@bidipres@#1\endcsname\leftpanelraise@bidipres% +} + +\newcommand{\storerightpanel@bidipres}[1] +{% + \expandafter\global\expandafter\let\csname rightpanelcontents@bidipres@#1\endcsname\rightpanelcontents@bidipres% + \expandafter\global\expandafter\let\csname rightpanelwidth@bidipres@#1\endcsname\rightpanelwidth@bidipres% + \expandafter\global\expandafter\let\csname rightpanelheight@bidipres@#1\endcsname\rightpanelheight@bidipres% + \expandafter\global\expandafter\let\csname rightpanelraise@bidipres@#1\endcsname\rightpanelraise@bidipres% +} + +\newcommand{\auto@declarepanel@bidipres}[2]% Starred version of \DeclarePanel. +{\csname calc#1dimen@bidipres\endcsname{#2}\declarepanel@bidipres{#1}{#2}} % Calculate `optimal' dimension and store contents. + +\newcommand{\restorepanels}[1] +{% + \@ifundefined{toppanelcontents@bidipres@#1}{\global\let\toppanelcontents@bidipres\empty} + {% + \expandafter\global\expandafter\let\expandafter\toppanelcontents@bidipres\csname toppanelcontents@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\toppanelwidth@bidipres\csname toppanelwidth@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\toppanelheight@bidipres\csname toppanelheight@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\toppanelshift@bidipres\csname toppanelshift@bidipres@#1\endcsname + }% + \@ifundefined{bottompanelcontents@bidipres@#1}{\global\let\bottompanelcontents@bidipres\empty} + {% + \expandafter\global\expandafter\let\expandafter\bottompanelcontents@bidipres\csname bottompanelcontents@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\bottompanelwidth@bidipres\csname bottompanelwidth@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\bottompanelheight@bidipres\csname bottompanelheight@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\bottompanelshift@bidipres\csname bottompanelshift@bidipres@#1\endcsname + }% + \@ifundefined{leftpanelcontents@bidipres@#1}{\global\let\leftpanelcontents@bidipres\empty} + {% + \expandafter\global\expandafter\let\expandafter\leftpanelcontents@bidipres\csname leftpanelcontents@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\leftpanelwidth@bidipres\csname leftpanelwidth@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\leftpanelheight@bidipres\csname leftpanelheight@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\leftpanelraise@bidipres\csname leftpanelraise@bidipres@#1\endcsname + }% + \@ifundefined{rightpanelcontents@bidipres@#1}{\global\let\rightpanelcontents@bidipres\empty} + {% + \expandafter\global\expandafter\let\expandafter\rightpanelcontents@bidipres\csname rightpanelcontents@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\rightpanelwidth@bidipres\csname rightpanelwidth@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\rightpanelheight@bidipres\csname rightpanelheight@bidipres@#1\endcsname + \expandafter\global\expandafter\let\expandafter\rightpanelraise@bidipres\csname rightpanelraise@bidipres@#1\endcsname + }% +} +\newcommand{\calctopdimen@bidipres}[1]{\calcvdimen@bidipres{\toppanelheight}{\toppanelwidth}{#1}} +\newcommand{\calcbottomdimen@bidipres}[1]{\calcvdimen@bidipres{\bottompanelheight}{\bottompanelwidth}{#1}} +\newcommand{\calcleftdimen@bidipres}[1]{\calchdimen@bidipres{\leftpanelwidth}{\leftpanelheight}{#1}}% +\newcommand{\calcrightdimen@bidipres}[1]{\calchdimen@bidipres{\rightpanelwidth}{\rightpanelheight}{#1}}% +\newcommand{\panel@sanitize@bidipres} +{% + \let\hyperlink=\@secondoftwo + \let\Acrobatmenu=\@secondoftwo +} +\newcommand{\calcvdimen@bidipres}[3] +{% + \setbox\tempbox@bidipres=\hbox{\panel@sanitize@bidipres\@@mk@panel@bidipres{#2}{}{toppaneltextcolor}{#3}}% Set panel into a dummy box. + \mklength@bidipres{#1}{\ht\tempbox@bidipres+\dp\tempbox@bidipres}% % Measure total height. +} +\newcommand{\calchdimen@bidipres}[3] +{% + \optwidth@bidipres{#1}{#2-\panelmargin*2}% Calculate `optimal' width of a parbox. Panel margins are respected. + {.5\textwidth-\panelmargin*2}{\panelalignment#3}% .5\textwidth is the hardcoded absolute maximum width. + \mklength@bidipres{#1}{#1+\panelmargin*2}% + } +\newcommand{\optwidthsteps}{100} +\newcommand{\optwidthlinetolerance}{200} +\let\maxbadness@bidipres=\@tempcnta +\def\optwidthdisablecommands@bidipres +{% + \let\Hy@colorlink\@firstofone + \let\Hy@endcolorlink\relax + } +\newcommand{\optwidth@bidipres}[4] +{% + \setcounter{tmpcnta@bidipres}{0}% Initialize `probe counter' for box width. + \let\best@cnt@bidipres=\empty% Initialize number of best `probe' so far. + \def\bestbadness@bidipres{1000000}% Initialize badness of best `probe'. + \setboolean{carryon@bidipres}{true}% Flag for breaking out of loop. + \setlength{\tempdimb@bidipres}{#2}% Store maximal box height. + \whiledo + {\value{tmpcnta@bidipres}<\optwidthsteps\and\boolean{carryon@bidipres}}% Probes done or break of loop? + {% + \stepcounter{tmpcnta@bidipres}% Start next probe. + \setbox\@tempboxa=\hbox% The trick with vbox/lastbox is to get the vbox + {% produced by \parbox `immediately' into a box register. + \optwidthdisablecommands@bidipres% Turn off some nasties not needed when measuring. + \parbox[b]{(#3)/\optwidthsteps*\value{tmpcnta@bidipres}}% Make the next parbox. + {\hfuzz\maxdimen\hbadness\@M\relax#4}% + \global\setbox\tempbox@bidipres=\lastbox% ... and assign \tempbox@bidipres to it. + }% + \setlength{\tempdima@bidipres}{\ht\tempbox@bidipres+\dp\tempbox@bidipres}% Measure total height. + \ifthenelse{\lengthtest{\tempdima@bidipres>\tempdimb@bidipres}}% If it exceeds the maximum height given, the box isn't + {}% acceptable anyway. + {% + \calcmaxbadness@bidipres{\maxbadness@bidipres}{\tempbox@bidipres}% Calculate `worst badness' of any hbox appearing in parbox. + \ifthenelse{\not\maxbadness@bidipres>\optwidthlinetolerance}% Below Threshold? + {% Yes. Accept this width. + \edef\best@cnt@bidipres{\thetmpcnta@bidipres}% Store this probe number. + \setboolean{carryon@bidipres}{false}% Break loop. + } + {% No. Carry on. + \ifthenelse{\maxbadness@bidipres<\bestbadness@bidipres}% Below lowest badness found so far? + {% Yes. Store probe number. + \edef\bestbadness@bidipres{\number\maxbadness@bidipres}% Store badness value. + \edef\best@cnt@bidipres{\thetmpcnta@bidipres}% Store probe number. + } + {}% No. Try next probe. + }% matches second argument of \ifthenelse{\not\maxbadness@bidipres>\optwidthlinetolerance}% + }% matches second argument of \ifthenelse{\lengthtest{\tempdima@bidipres>\tempdimb@bidipres}}% + }% matches \whiledo{\value{tmpcnta@bidipres}<\optwidthsteps\and\boolean{carryon@bidipres}}{% + \ifx\best@cnt@bidipres\empty% Was _any_ badness below the initialization value found? + \mklength@bidipres{#1}{#3}% No; return max width. + \else + \mklength@bidipres{#1}{(#3)/\optwidthsteps*\best@cnt@bidipres}% Yes; return width of best probe. + \fi + }% matches \newcommand{\optwidth@bidipres}[4]{% +\newcommand{\calcmaxbadness@bidipres}[2] +{% + \let\@resultcnt@bidipres=#1% Here we store the result. + \global\@resultcnt@bidipres=\z@\relax% Just in case no hbox occurs... + \setlength{\@tempdima}{\wd#2}% This is the width to which every hbox is stretched for finding its badness. + \setbox\@tempboxa=\vbox% A dummy vbox for recursively analysing the vbox contents using \lastbox + {% + \hfuzz\maxdimen\hbadness\@M + \unvbox#2% `free' the contents of the vbox. + \measureboxes@bidipres% Analyse `tail to head' using \lastbox. + }% + } +\newcommand{\measureboxes@bidipres}% +{% + \unskip\unpenalty\unkern% This is a kluge for TeX, because there is no certain way of finding out whether there's a + \unskip\unpenalty\unkern% penalty, glue or kern on the vertical list. \lastpenalty will give its value, but a + \unskip\unpenalty\unkern% value of 0 might mean there was none or there was one of value 0. + \unskip\unpenalty\unkern% This is different in eTeX. I might make a switch to a smarter solution. + \unskip\unpenalty\unkern + \unskip\unpenalty\unkern + \unskip\unpenalty\unkern + \unskip\unpenalty\unkern + \unskip\unpenalty\unkern + \unskip\unpenalty\unkern + \setbox\@tempboxa=\lastbox% Grab last box. + \ifhbox\@tempboxa% Was this an hbox? + \setbox0=\hb@xt@\@tempdima{\unhbox\@tempboxa}% Yes. Reformat with given width. + \ifnum\badness>\@resultcnt@bidipres% Badness larger than largest recorded badness? + \global\@resultcnt@bidipres=\badness% Yes. Memorize. + \fi + \expandafter\measureboxes@bidipres% Recursive call. + \else + \ifvbox\@tempboxa% Was this a vbox? + \expandafter\expandafter\expandafter\measureboxes@bidipres% Ignore, but execute recursive call. + \fi + \fi + } +\newcommand{\mk@toppanel@bidipres}% top panel +{% + \ifx\toppanelcontents@bidipres\empty% top panel specified? + \else% Yes; create box with appropriate dimensions, background color and contents. + \@mk@panel@bidipres{\toppanelwidth}{\toppanelheight}{toppaneltextcolor}{\toppanelcontents@bidipres}% + \fi + } + +\newcommand{\mk@bottompanel@bidipres}% bottom panel +{% + \ifx\bottompanelcontents@bidipres\empty% bottom panel specified? + \else% Yes; create box with appropriate dimensions, background color and contents. + \@mk@panel@bidipres{\bottompanelwidth}{\bottompanelheight}{bottompaneltextcolor}{\bottompanelcontents@bidipres}% + \fi + } + +\newcommand{\mk@leftpanel@bidipres}% left panel +{% + \ifx\leftpanelcontents@bidipres\empty% left panel specified? + \else% Yes; create box with appropriate dimensions, background color and contents. + \@mk@panel@bidipres{\leftpanelwidth}{\leftpanelheight}{leftpaneltextcolor}{\leftpanelcontents@bidipres}% + \fi + } + +\newcommand{\mk@rightpanel@bidipres}% right panel +{% + \ifx\rightpanelcontents@bidipres\empty% right panel specified? + \else% Yes; create box with appropriate dimensions, text color and contents. + \@mk@panel@bidipres{\rightpanelwidth}{\rightpanelheight}{rightpaneltextcolor}{\rightpanelcontents@bidipres}% + \fi + } + +\newcommand{\@mk@panel@bidipres}[2]% Generate `standard' parbox parameters for panels. +{% + \@@mk@panel@bidipres{#1}{[#2-\panelmargin*2][s]}% + } + +\@ifclassloaded{powersem} +{% + \newcommand{\panelalignment}{\sem@ptsize{\slide@ptsize}\large\normalsize}% +} +{% + \newcommand{\panelalignment}% Justification for panels. This setting allows a certain amount of + {\setlength{\rightskip}{0pt plus 20pt}}% `right-raggedness'. Leave empty for standard parbox formatting. +} + +\newcommand{\@@mk@panel@bidipres}[4] +{% + \vbox + {% + \offinterlineskip + \kern\panelmargin% Top margin. + \hbox + {{% + \ifthenelse{\boolean{instepwise@bidipres}}% Inside \stepwise, colors mat have been dimmed, leaking out to panels. + {\usecolorset{stwcolors}}{}% Restore them, just in case. + \xecolor{#3}% Set panel text color. + \kern\panelmargin% Left margin. + \parbox[b]#2{#1-\panelmargin*2}% The parbox with the main panel contents. + {% + \normalfont + \panelalignment#4% + \hrule\@height\z@% The hrule makes sure the total height of this box can be measured appropriately. + }% + \kern\panelmargin% Right margin. + }}% + \kern\panelmargin% Bottom margin. + }% + } +\newcommand{\buttonsep}{\fboxsep} +\newcommand{\buttonrule}{0pt} +\newcommand{\buttonshadowhshift}{.3\fboxsep} +\newcommand{\buttonshadowvshift}{-.3\fboxsep} +\newcommand{\button}[1][0pt]% Collect first optional parameter. +{% + \mklength@bidipres\bt@width@bidipres{#1}% Store optional argument. + \button@bidipres +} + +\newcommand{\button@bidipres}[1][0pt]% Collect second optional parameter. +{% + \mklength@bidipres\bt@height@bidipres{#1}% Store optional argument. + \@button@bidipres +} + +\newcommand{\@button@bidipres}[1][0pt]% Collect third optional parameter. +{% + \mklength@bidipres\bt@depth@bidipres{#1}% Store optional argument. + \@@button@bidipres +} + +\newcommand{\@@button@bidipres}[3][c]% Collect fourth optional and two mandatory parameters and proceed. +{% + \ifthenelse{\lengthtest{\bt@width@bidipres=0pt}}% <width> given? + {\mklength@bidipres{\bt@width@bidipres}{\widthof{#3}}}% No. Calculate width of <text>. + {\mklength@bidipres{\bt@width@bidipres}{\bt@width@bidipres-\buttonsep*2-\buttonrule*2}}% Yes. Calculate area left for <text>. + \ifthenelse{\lengthtest{\bt@height@bidipres=0pt}}% <height> given? + {\mklength@bidipres{\bt@height@bidipres}{\heightof{#3}}}% No. Calculate height of <text>. + {\mklength@bidipres{\bt@height@bidipres}{\bt@height@bidipres-\buttonsep-\buttonrule}}% Yes. Calculate area left for <text>. + \ifthenelse{\lengthtest{\bt@depth@bidipres=0pt}}% <depth> given? + {\mklength@bidipres{\bt@depth@bidipres}{\depthof{#3}}}% No. Calculate depth of <text>. + {\mklength@bidipres{\bt@depth@bidipres}{\bt@depth@bidipres-\buttonsep-\buttonrule}}% Yes. Calculate area left for <text>. + \leavevmode% \rlap creates a `raw' hbox. So we get into horizontal mode. + \rlap% Make shadow. + {% + \hspace*{\buttonshadowhshift}% Horizontal displacement. + \raisebox{\buttonshadowvshift}% Vertical displacement. + {% + {% Inner group for correct color handling. + \setcolor@bidipres{buttonshadowcolor}% Button shadow color. + \rule% Create colored rectangular patch of appropriate dimensions. + [-\bt@depth@bidipres-\buttonsep-\buttonrule] + {\bt@width@bidipres+\buttonsep*2+\buttonrule*2} + {\bt@height@bidipres+\bt@depth@bidipres+\buttonsep*2+\buttonrule*2}% + }% matches inner group + }% matches \raisebox{\buttonshadowvshift}{% + }% matches \rlap{% + \edef\o@fboxrule@bidipres{\the\fboxrule}% Preserve original definitions of \fbox parameters. + \edef\o@fboxsep@bidipres{\the\fboxsep}% + #2% Execute <navcommand>. + {% + \setlength{\fboxrule}{\buttonrule}% Set \fbox parameters for button frame. + \setlength{\fboxsep}{\buttonsep}% + \fcolorbox{buttonframecolor}{buttoncolor}% Create button frame with the right colors. + {% + \makebox[\bt@width@bidipres][#1]% Create box of correct width to contain <text>. + {% + \raisebox{0pt}[\bt@height@bidipres][\bt@depth@bidipres]% Create box of correct height and depth. + {% + \setlength{\fboxrule}{\o@fboxrule@bidipres}\setlength{\fboxsep}{\o@fboxsep@bidipres}% Restore fbox parameters. + \setcolor@bidipres{buttontextcolor}#3% Produce <text>. + }% matches \raisebox{0pt}[\bt@height@bidipres][\bt@depth@bidipres]{% + }% matches \makebox[\bt@width@bidipres][#1]{% + }% matches \fcolorbox{buttonframecolor}{buttoncolor}{% + }% matches argument of <navcommand>. + }% matches \newcommand{\@@button@bidipres}[3][c]{% +\newcommand{\buttonsymbolsize}{\footnotesize} +\@ifpackageloaded{amssymb}% AMS symbols available? +{% Yes. Use `black' symbols. + \newcommand{\buttonleftarrowsymbol}{{\buttonsymbolsize\boldmath\origmath{\blacktriangleleft}}}% `left' arrow. + \newcommand{\buttonrightarrowsymbol}{{\buttonsymbolsize\boldmath\origmath{\blacktriangleright}}}% `right' arrow. + \newcommand{\buttonbackarrowsymbol}{{\buttonsymbolsize\boldmath\origmath{\vartriangleleft}}}% `back' arrow. +} +{% No. Use replacements from standard set. + \newcommand{\buttonleftarrowsymbol}{{\buttonsymbolsize\boldmath\origmath{\lhd}}}% `left' arrow. + \newcommand{\buttonrightarrowsymbol}{{\buttonsymbolsize\boldmath\origmath{\rhd}}}% `right' arrow. + \newcommand{\buttonbackarrowsymbol}{{\buttonsymbolsize\boldmath\origmath{\leftarrow}}}% `back' arrow. +} +\newcommand{\stdbuttonwidth}{\widthof{\buttonrightarrowsymbol\buttonrightarrowsymbol\buttonrightarrowsymbol}+4pt} +\newcommand{\currentpagevalue}{\value{page}} +\newcommand{\backpagebutton}[1][\stdbuttonwidth] +{% + \button[#1]{\setcounter{tmpcnta@bidipres}{\currentpagevalue-1}\hyperlink{page.\thetmpcnta@bidipres}} + {\buttonleftarrowsymbol\buttonleftarrowsymbol}% + } +\newcommand{\backstepbutton}[1][\stdbuttonwidth] +{% + \button[#1]{\Acrobatmenu{PrevPage}} + {\buttonleftarrowsymbol}% + } +\newcommand{\gobackbutton}[1][\stdbuttonwidth] +{% + \button[#1]{\Acrobatmenu{GoBack}} + {\buttonbackarrowsymbol}% + } +\newcommand{\nextstepbutton}[1][\stdbuttonwidth] +{% + \button[#1]{\Acrobatmenu{NextPage}} + {\buttonrightarrowsymbol}% + } +\newcommand{\nextpagebutton}[1][\stdbuttonwidth] +{% + \button[#1]{\setcounter{tmpcnta@bidipres}{\currentpagevalue+1}\hyperlink{firstpage.\thetmpcnta@bidipres}} + {\buttonrightarrowsymbol\buttonrightarrowsymbol}% + } +\newcommand{\nextfullpagebutton}[1][\stdbuttonwidth] +{% + \button[#1]{\setcounter{tmpcnta@bidipres}{\currentpagevalue+1}\hyperlink{page.\thetmpcnta@bidipres}} + {\buttonrightarrowsymbol\buttonrightarrowsymbol\buttonrightarrowsymbol}% + } +\newcommand{\fullscreenbutton}[1][\stdbuttonwidth] +{% + \button[#1]{\Acrobatmenu{FullScreen}} + {\buttonrightarrowsymbol\buttonleftarrowsymbol}% + } +\ifthenelse{\boolean{display}}% Are dynamic features enabled? +{% Yes. + \newcommand{\pagetransition}[1]% Definition for preamble. + {% + \@ifpackageloaded{hyperref}% Can we use \hypersetup? + {% Yes. + \hypersetup{pdfpagetransition={#1}}% Set page transition with \hypersetup. + } + {% No. In this case, we can't set the page transition. + \ClassWarning{bidipresentation} + {Package hyperref not loaded.\MessageBreak Page transition not set}% + }% + }% matches \newcommand{\pagetransition}[1]{% + \AtBeginDocument% Definition for document body. + {% + \@ifpackageloaded{hyperref}% Can we use \hypersetup? + {% Yes. + \hypersetup{pdfpagetransition={}}% Make pagetransition setting (consistently) local to groups. + \renewcommand{\pagetransition}[1]{\hypersetup{pdfpagetransition={#1}}}% + } + {% No. Disable page transitions. + \ClassWarning{bidipresentation} + {Package hyperref not loaded.\MessageBreak Page transitions disabled}% + \let\pagetransition=\@gobble + }% + }% matches \AtBeginDocument{% + }% matches \ifthenelse{\boolean{display}}{% +{\let\pagetransition=\@gobble}% No. Disable page transitions. +\newcommand{\pageTransitionSplitHO}{\pagetransition{Split /Dm /H /M /O}}% Split Horizontally to the outside. + +\newcommand{\pageTransitionSplitHI}{\pagetransition{Split /Dm /H /M /I}}% Split Horizontally to the inside. + +\newcommand{\pageTransitionSplitVO}{\pagetransition{Split /Dm /V /M /O}}% Split Vertically to the outside. + +\newcommand{\pageTransitionSplitVI}{\pagetransition{Split /Dm /V /M /I}}% Split Vertically to the inside. + +\newcommand{\pageTransitionBlindsH}{\pagetransition{Blinds /Dm /H}}% Horizontal Blinds. + +\newcommand{\pageTransitionBlindsV}{\pagetransition{Blinds /Dm /V}}% Vertical Blinds. + +\newcommand{\pageTransitionBoxO}{\pagetransition{Box /M /O}}% Growing Box. + +\newcommand{\pageTransitionBoxI}{\pagetransition{Box /M /I}}% Shrinking Box. + +\newcommand{\pageTransitionWipe}[1]{\pagetransition{Wipe /Di #1}}% Wipe from one edge of the page to the facing edge. + +\newcommand{\pageTransitionDissolve}{\pagetransition{Dissolve}}% Dissolve. + +\newcommand{\pageTransitionGlitter}[1]{\pagetransition{Glitter /Di #1}}% Glitter from one edge to the facing edge. + +\newcommand{\pageTransitionReplace}{\pagetransition{Replace}}% Simple Replace (the default). +\newcommand{\infinitepageduration}{}% Default: No page duration setting on every page. + +\ifthenelse{\boolean{nineminutes@bidipres}}% If the option nineminutes is given, every page without explicit setting +{\renewcommand{\infinitepageduration}{546}}{}% gets a setting of 546 seconds (9.1 minutes). +\ifthenelse{\boolean{display}}% Are dynamic features enabled? +{% Yes. + \newcommand{\pageDuration}[1]% Definition for preamble. + {% + \@ifpackageloaded{hyperref}% Can we use \hypersetup? + {% Yes. + \hypersetup{pdfpageduration={#1}}% Set page duration with \hypersetup. + }% + {% No. In this case, we can't set the page duration. + \ClassWarning{bidipresentation} + {Package hyperref not loaded.\MessageBreak Page duration not set}% + }% + }% matches \newcommand{\pageDuration}[1]{% + \AtBeginDocument% Make sure this also works if bidipresentation is loaded before hyperref. + {% + \@ifpackageloaded{hyperref}% Can we use \hypersetup? + {% Yes. + \edef\next{\noexpand\hypersetup{pdfpageduration={\infinitepageduration}}}% + \next% Set default page duration. + \renewcommand{\pageDuration}[1]{\hypersetup{pdfpageduration={#1}}}% Set page duration with \hypersetup. + }% + {% No. In this case, we can't set the page duration. + \ClassWarning{bidipresentation} + {Package hyperref not loaded.\MessageBreak Page duration disabled}% + \let\pageDuration=\@gobble + }% + }% matches \AtBeginDocument{% + }% matches \ifthenelse{\boolean{display}}{% +{\let\pageDuration=\@gobble}% No. Disable page duration. +\newcommand{\stopAdvancing} +{\edef\next{\noexpand\pageDuration{\infinitepageduration}}\next}% Reset to default page duration. +\AtBeginDocument{\shipoutinit@bidipres}% +\newcommand*{\shipoutinit@bidipres} +{% + \let\o@shipout@bidipres=\shipout% Memorize previous definition. + \let\shipout\shipout@bidipres% Replace by own one. + }% +\newcommand{\shipout@bidipres} +{% + \afterassignment\shipout@test@bidipres + \global\setbox\@cclv= % + }% +\newcommand{\shipout@test@bidipres} +{% + \ifvoid\@cclv\relax% Is the box assigned yet? + \aftergroup\shipout@output@bidipres% No; defer execution of \shipout@output@bidipres. + \else + \shipout@output@bidipres% Yes; execute \shipout@output@bidipres immediately. + \fi% + }% +\newcommand{\shipout@output@bidipres} +{% + \shipout@hook@bidipres% Here, our own stuff is executed, manipulating \@cclv. + \o@shipout@bidipres\box\@cclv% Execute original shipout routine. + }% +\newcommand{\AtShipout}[1] +{\expandafter\gdef\expandafter\at@shipout@once@bidipres\expandafter{\at@shipout@once@bidipres#1}}% Add argument to container. +\newcommand{\at@shipout@once@bidipres}{} +\AtBeginDocument{\global\let\o@hyper@@anchor\hyper@@anchor} +\@ifpackageloaded{hyperref}% Is hyperref loaded? +{% Yes. Prepare hook. + \newcommand{\do@insert@firstanchor@bidipres}% This is executed on the first subpage of every page. + {\hypertarget{firstpage.\number\currentpagevalue}{}}% Create target. + } +{\newcommand{\do@insert@firstanchor@bidipres}{}}% No. Leave hook empty. +\newcommand{\dont@insert@firstanchor@bidipres}{}% +\newcommand{\insert@firstanchor@bidipres}{\do@insert@firstanchor@bidipres}% +\newcommand{\shipout@hook@bidipres} +{% + \filterpage@bidipres% Filter out whatsits on duplicate pages. + \setbox\@cclv=% Create `real' page box (which is later shipped out). + \hbox{% + \set@typeset@protect + \raise\ht\@cclv\rlap% Place background box. + {% + \vtop to \bidiprespageheight + {% + \offinterlineskip + \hrule\@height\z@\relax + \kern -1truein\relax + \kern -\voffset\relax + \moveleft 1truein\hbox{\kern-\hoffset\copy\bgndbox@bidipres}% + \vss + \kern 1truein\relax + \kern\voffset\relax + }% + }% + \raise\ht\@cclv\rlap% Place `vertical' panels. + {% + \vtop to \bidiprespageheight + {% + \offinterlineskip + \hrule\@height\z@\relax + \kern -1truein\relax + \kern -\voffset\relax + \moveleft 1truein\hb@xt@\bidiprespagewidth + {% + \kern-\hoffset\raise\leftpanelraise\hbox{\mk@leftpanel@bidipres}% + \hfill + \raise\rightpanelraise\hbox{\mk@rightpanel@bidipres}% + \kern\hoffset + }% + \vss + \kern 1truein\relax + \kern\voffset\relax + }% + }% + \raise\ht\@cclv\rlap% Place `horizontal' panels. + {% + \vtop to \bidiprespageheight + {% + \offinterlineskip + \hrule\@height\z@\relax + \kern -1truein\relax + \kern -\voffset\relax + \moveleft 1truein\hbox{\kern-\hoffset\kern\toppanelshift\mk@toppanel@bidipres}% + \vfill + \moveleft 1truein\hbox{\kern-\hoffset\kern\bottompanelshift\mk@bottompanel@bidipres}% + \kern 1truein\relax + \kern\voffset\relax + }% + }% + \raise\ht\@cclv\rlap + {% + \let\hyper@@anchor\o@hyper@@anchor% Reactivate hyper anchors. + \insert@firstanchor@bidipres% Execute hook for creating target firstpage.<n> + \ifshippingduplicate% Will further subpages follow? + \global\let\insert@firstanchor@bidipres=\dont@insert@firstanchor@bidipres% Deactivate hook for next page. + \else + \global\let\insert@firstanchor@bidipres=\do@insert@firstanchor@bidipres% Reactivate hook for next page. + \fi + \at@shipout@once@bidipres% Execute code stored away by \AtShipout. + }% + \global\let\at@shipout@once@bidipres=\empty% Clear \AtShipout container. + \box\@cclv + }% + } +\def\colorcorrections@bidipres{\relax}% The `counter stack' of color correction codes, reset at every \shipout. + +\AtBeginDocument% Make sure to catch color.sty even if it's loaded after bidipresentation. +{% + \ifthenelse{\boolean{fixcolorstack@bidipres}}% Was the fixcolorstack option given? + {% + \@ifundefined{VTeXversion}% Using vtex? + {% No. Go on. + \ifthenelse{\boolean{pdf}}% Producing pdf with pdftex? + {% Yes. Color stack fixing unnecessary. + \ClassWarning{bidipresentation} + {pdftex doesn't need color stack correction.\MessageBreak Option fixcolorstack disabled.}% + } + {% No. We need to add corrections for the color stack... + \@ifpackageloaded{color}% ... but only if color.sty is loaded at all. + {% + \expandafter\def\expandafter\shipout@hook@bidipres\expandafter% Extend \shipout hook ... + {\shipout@hook@bidipres\clearcolorcorrections@bidipres}% ... by a command to clear counter stack. + % + \newcommand{\clearcolorcorrections@bidipres}% The counter stack is cleared... + {% ... on all `final' shipouts. + \ifshippingduplicate + \else + \gdef\colorcorrections@bidipres{\relax}% + \fi + } + \expandafter\def\expandafter\o@set@color@bidipres\expandafter% + {% + \set@color% This is the `real' original definition. + \expandafter\aftergroup\csname\current@color\endcsname% Add definition of \current@color. + }% + + \let\o@reset@color@bidipres=\reset@color% Save original definition of \reset@color. + \def\remove@resetcolor@bidipres#1\aftergroup\reset@color% + {\def\pushcolor@bidipres##1{{\def\current@color{##1}#1}}}% + % + \expandafter\remove@resetcolor@bidipres\set@color + \def\pushcolorname@bidipres#1% + {% + \begingroup \escapechar\m@ne\xdef\@gtempa{\string#1}\endgroup% Get the coded tokens back (without \ ). + \expandafter\pushcolor@bidipres\expandafter{\@gtempa}% ... and execute push. + }% + \def\set@color% + {% + \o@set@color@bidipres% `Original' definition of \set@color. + \expandafter\@temptokena\expandafter{\colorcorrections@bidipres}% Add \o@reset@color@bidipres command at the front + \xdef\colorcorrections@bidipres{\noexpand\o@reset@color@bidipres\the\@temptokena}% ... of \colorcorrections@bidipres. + } + + \def\reset@color#1% \reset@color now receives the name of the color. + {% + \expandafter\addpushtoccor@bidipres\colorcorrections@bidipres\@nil{#1}% Add a push command for this color to the front + % of \colorcorrections@bidipres. + \o@reset@color@bidipres% `Original' definition of \reset@color. + }% + + \def\addpushtoccor@bidipres#1#2\@nil#3% Add a push command for some color to the front of \colorcorrections@bidipres. + {% + \ifx\o@reset@color@bidipres#1% For efficiency, a push immediately followed by a reset cancel out. + \gdef\colorcorrections@bidipres{#2}% + \else + \gdef\colorcorrections@bidipres{\pushcolorname@bidipres{#3}#1#2}% Otherwise, add the push to \colorcorrections@bidipres. + \fi + }% + }% matches \@ifpackageloaded{color} + {}% No changes needed if color.sty is not loaded. + }% matches second argument of \ifthenelse{\boolean{pdf}} + }% matches \@ifundefined{VTeXversion} + {% Yes. Color stack fixing unnecessary. + \ClassWarning{bidipresentation} + {vtex doesn't need color stack correction.\MessageBreak Option fixcolorstack disabled.}% + }% + }% matches \ifthenelse{\boolean{fixcolorstack@bidipres}} + {}% + }% matches \AtBeginDocument +\newif\ifshippingduplicate +\providecommand{\bidipreseject}{\newpage} +\newbox\mempageconts@bidipres +\newinsert\memfootins@bidipres +\newtoks\memoutput@bidipres +\def\cl@@ckptpause@bidipres{\@elt{page}} +\def\savepausecounters@bidipres{% + \begingroup + \def\@elt##1{\global\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \xdef\restorepausecounters@bidipres{\cl@@ckptpause@bidipres}% + \endgroup + } +\newcommand{\pausesafecounter}[1]% +{\expandafter\def\expandafter\cl@@ckptpause@bidipres\expandafter{\cl@@ckptpause@bidipres\@elt{#1}}} +\@ifclassloaded{seminar}{\pausesafecounter{slide}}{} +\ifthenelse{\boolean{display}}{% + \AtBeginDocument{\@ifpackageloaded{hyperref}{% + \let\hyper@anchor@bidipres=\hyper@anchor + \long\def\hyper@@anchor#1#2{% + %%% \ifthenelse{\boolean{instepwise@bidipres}}% + \ifthenelse{\boolean{instepwise@bidipres} \AND \NOT \boolean{strongfiltering@bidipres}}% + {\ifthenelse{\NOT \boolean{instep@bidipres}}% + {\ifthenelse{\value{step}=\value{firststep}}{\@hyper@@anchor#1\relax#2\relax}{}}% + {\ifthenelse{\boolean{active} \AND \boolean{firstactivation}}% + {\@hyper@@anchor#1\relax#2\relax}{}}% End \ifthenelse{\boolean{active} ... + }% End \ifthenelse{\NOT \boolean{instep@bidipres}} + {\@hyper@@anchor#1\relax#2\relax}% End \ifthenelse{\boolean{instepwise@bidipres}} + } + \let\hyper@anchorstart@bidipres=\hyper@anchorstart + \def\hyper@anchorstart#1{% + \ifthenelse{\boolean{instepwise@bidipres} \AND \NOT \boolean{strongfiltering@bidipres}}% + {\ifthenelse{\NOT \boolean{instep@bidipres}}% + {\ifthenelse{\value{step}=\value{firststep}}{\hyper@anchorstart@bidipres{#1}}{}}% + {\ifthenelse{\boolean{active} \AND \boolean{firstactivation}}% + {\hyper@anchorstart@bidipres{#1}}{}}% End \ifthenelse{\boolean{active} ... + }% End \ifthenelse{\NOT \boolean{instep@bidipres}} + {\hyper@anchorstart@bidipres{#1}}% End \ifthenelse{\boolean{instepwise@bidipres}} + } + }{}}% End \AtBeginDocument{\@ifpackageloaded{hyperref}{ + % Changing \protected@write to avoid duplicates in aux-file + \let\protected@write@bidipres=\protected@write + \long\def\protected@write#1#2#3{% + \ifthenelse{\boolean{instepwise@bidipres} \AND \NOT \boolean{strongfiltering@bidipres}}% + {\ifthenelse{\NOT \boolean{instep@bidipres}}% + {\ifthenelse{\value{step}=\value{firststep}}{\protected@write@bidipres{#1}{#2}{#3}}{}}% + {\ifthenelse{\boolean{active} \AND \boolean{firstactivation}}% + {\protected@write@bidipres{#1}{#2}{#3}}{}}% End \ifthenelse{\boolean{active} ... + }% End \ifthenelse{\NOT \boolean{instep@bidipres}} + {\protected@write@bidipres{#1}{#2}{#3}}% End \ifthenelse{\boolean{instepwise@bidipres}} + }% +}{}% End \ifthenelse{\boolean{display}} +\def\save@bidipres +{% + \par% Always end current paragraph. + \global\setbox\mempageconts@bidipres=\copy\voidb@x% Initialise \mempageconts@bidipres (suggested by Ross Moore). + \savepausecounters@bidipres% Save counters. + \memoutput@bidipres=\output% Make backup copy of output routine. + \output={\global\setbox\mempageconts@bidipres=\box\@cclv}% Copy current page contents. + \eject% Trigger now. + \global\setbox\memfootins@bidipres=\copy\footins% Save footnotes. + \global\skip\memfootins@bidipres=\skip\footins + \global\count\memfootins@bidipres=\count\footins + \global\dimen\memfootins@bidipres=\dimen\footins + \output=\memoutput@bidipres% Restore output routine. + } +\let\filterpage@bidipres\relax +\newcommand{\filterwhatsits@bidipres}{% + \ifthenelse{\boolean{strongfiltering@bidipres}}% + {\global\setbox\@cclv=\hbox{\leaders\copy\@cclv\hskip\wd\@cclv}}% Old aggressive/robust filtering + {}% No filtering - handled by \insertfilterwhatsits@bidipres and stepwise aware commands. +} +\newcommand{\insertfilterwhatsits@bidipres}{% + \global\setbox\tempbox@bidipres=\hbox{\leaders\copy\tempbox@bidipres\hskip\wd\tempbox@bidipres}% +} +\newcommand{\insertfirstduplicate@bidipres} +{\unvcopy\mempageconts@bidipres}% Just output the vbox's contents. +\newcommand{\do@colorcorrections@bidipres} +{% + {% + \colorcorrections@bidipres% Execute color correction stack. + \gdef\colorcorrections@bidipres{\relax}% Re-initialize for next round. + }% + } +\newcommand{\insertsecondduplicate@bidipres} +{% + \do@colorcorrections@bidipres% Execute color correction stack. + \global\setbox\footins=\copy\memfootins@bidipres% Restore footnotes. + \global\skip\footins=\skip\memfootins@bidipres + \global\count\footins=\count\memfootins@bidipres + \global\dimen\footins=\dimen\memfootins@bidipres + \ifthenelse{\boolean{strongfiltering@bidipres}}% + {\unvcopy\mempageconts@bidipres}% + {\setbox\tempbox@bidipres=\vbox{\unvcopy\mempageconts@bidipres}% + \insertfilterwhatsits@bidipres + \copy\tempbox@bidipres% + } + } +\newcommand{\outputduplicate@bidipres} +{% + \shippingduplicatetrue% This switch can be evaluated in panels or headers/footers. + \global\let\filterpage@bidipres\filterwhatsits@bidipres% Filter out file whatsits when shipping out. + \global\let\o@hyper@@anchor@bidipres\hyper@@anchor% Save definition of hyperref command for hyper anchors. + \global\let\hyper@@anchor\@gobble% Disable hyper anchors on duplicate pages to avoid duplicate page anchors. + \bidipreseject% Shipout page. + \global\let\hyper@@anchor\o@hyper@@anchor@bidipres% Restore definition of hyperref command for hyper anchors. + \global\let\filterpage@bidipres\relax% Disable whatsit filtering. + \shippingduplicatefalse% Unset switch. + }% +\providecommand\pause% If pause.sty is loaded, the existing definition of \pause is not overwritten. +{% + \save@bidipres% Save contents of the page... + \insertfirstduplicate@bidipres% ... and insert again. + \ifthenelse{\boolean{display}}% Are dynamic features enabled? + {% Yes. + \outputduplicate@bidipres% Output page. + \restorepausecounters@bidipres% Restore counters (page number). + \insertsecondduplicate@bidipres% Reinsert saved contents. + } + {}% + }% +\newcommand{\@onlyinstepwise@bidipres}[1] +{% + \providecommand#1% + {% + \ClassError{bidipresentation}% + {Command \string#1 can be used only inside \string\stepwise} + {% + Commands like \string\step, \string\switch, + \string\multistep\space or \string\overlays\MessageBreak + can be used only inside the argument of a \string\stepwise\space variant. + }% + }% +} +\newcounter{totalsteps} +\newcounter{firststep} +\newcounter{step} +\newcounter{stepcommand} +\newcounter{stepsperformed} +\newboolean{firstactivation} +\newboolean{active} +\newcommand{\displayboxed} +{% + \ifmmode % We need to distinguish between math and text mode. + \expandafter\mathpalette\expandafter\math@db@bidipres % In math mode, the style has to be respected. + \else + \expandafter\text@db@bidipres + \fi +} +\newcommand{\text@db@bidipres}[1]{\mbox{#1}} % In text mode, we just use an \mbox. +\newcommand{\math@db@bidipres}[2]{\mbox{$\m@th#1{#2}$}} % In math mode, the style (#1) is inserted by \mathpalette. +\let\displayidentical=\@iden +\newcommand{\hidephantom}[1] +{% + {% a group makes redefinitions local + \leavevmode\phantom{#1}% + }% + } +\newcommand{\hideignore}[1]{} +\newcommand{\hidesmartignore}[1]{\setbox\tempbox@bidipres=\vbox{#1}} + +\ifthenelse{\boolean{colormath@bidipres}}{% + \newcommand{\commitcolor@bidipres} + {\textxecolor{\ifmmode mathcolor\else textcolor\fi}} +}{ + \newcommand{\commitcolor@bidipres}{\textxecolor{textcolor}} +} +\ifthenelse{\boolean{bidiprescolor}}{ + \newcommand{\hidedimmed}[1]{% + { + \ifthenelse{\boolean{instepwise@bidipres}}{\usecolorset{stwcolors}}{}% + \dimcolors + \commitcolor@bidipres{#1} + } + } +}{ + \let\hidedimmed=\displayidentical +} +\ifthenelse{\boolean{bidiprescolor}}{ + \newcommand{\hidevanish}[1]{\textxecolor{\vanishcolor}{\vanishcolors#1}} +}{ + \let\hidevanish=\hidephantom +} +\newcommand{\boxedsteps} % Use boxed versions. +{\let\displaystepcontents=\displayboxed\let\hidestepcontents=\hidephantom} + +\newcommand{\nonboxedsteps} % Use nonboxed versions. +{\let\displaystepcontents=\displayidentical\let\hidestepcontents=\hideignore} +\nonboxedsteps +\let\activatestep=\displayidentical +\newlength{\highlightboxsep} +\setlength{\highlightboxsep}{.5\fboxsep} +\DeclareRobustCommand{\highlightboxed} +{% + \ifmmode% Check for math mode. + \expandafter\mathpalette\expandafter\math@hb@bidipres% Math mode version needs to respect current style. + \else + \expandafter\text@hb@bidipres% Text mode version. + \fi +} +\newcommand{\math@hb@bidipres}[2]{\text@hb@bidipres{$\m@th#1{#2}$}} +\ifthenelse{\boolean{colorhighlight@bidipres}}% Color highlighting enabled? +{% Yes; use a box with colored background. + \newcommand{\text@hb@bidipres}[1] + {% + \makebox[\width-2\highlightboxsep]% Make the frame stick out at the sides. + {% + \setlength{\fboxsep}{\highlightboxsep}% Set frame size. + \raisebox{0pt}[\height-\fboxsep][\depth-\fboxsep]% Make the frame stick out above and below. + {\colorbox{highlightcolor}{#1}}% Make colored box containing <text>. + }% + }% + }% matches \ifthenelse{\boolean{colorhighlight@bidipres}} +{% No; use an \fbox. + \newcommand{\text@hb@bidipres}[1] + {% + \makebox[\width-2\highlightboxsep-2\fboxrule]% Make the frame stick out at the sides. + {% + \setlength{\fboxsep}{\highlightboxsep}% Set frame size. + \raisebox{0pt}[\height-\fboxsep-\fboxrule][\depth-\fboxsep-\fboxrule]% Make the frame stick out above and below. + {\fbox{#1}}%% Make an fbox containing <text>. + }% + }% + }% matches second argument of \ifthenelse{\boolean{colorhighlight@bidipres}} + +\ifthenelse{\boolean{bidiprescolor}}% Can we use colors at all? +{% Yes. + \newcommand{\highlightenhanced}[1]% Make argument appear in `enhanced' colors. + {% + {% A group makes the color changes local. + \ifthenelse{\boolean{instepwise@bidipres}}{\usecolorset{stwcolors}}{}% Just in case we currently are in enhanced mode... + \enhancecolors% Enhance colors. + \commitcolor@bidipres{#1}% Switch on enhanced color. + }% + }% + } +{\let\highlightenhanced=\displayidentical}% No. Disable this command. +\newcommand{\pickup@s@optargs@bidipres} +{% + \@ifnextchar[%] Check for first optional argument in [...] syntax. + {\f@brackstep@bidipres}% + {% + \@ifnextchar(%) Check for first optional argument in (...) syntax. + {\f@parenstep@bidipres} + {\f@brackstep@bidipres[]}% No optional argument given; call with empty argument in [...] syntax (default). + }% +} + +\def\f@brackstep@bidipres[#1]% First optional argument was given in [...] syntax. +{% + \def\tmp@bidipres{#1}% + \ifx\tmp@bidipres\empty% Optional argument empty? + \def\f@step@bidiprescheck{\ifthenelse{\value{step}=\value{stepcommand}}}% Yes; use default. + \else + \def\f@step@bidiprescheck{\ifthenelse{#1}}% No; condition is defined via \ifthenelse. + \fi + \f@step@bidipres% Go on and check for second optional argument. +} + +\def\f@parenstep@bidipres(#1)% First optional argument was given in (...) syntax. +{% + \def\f@step@bidiprescheck{#1}% Save condition (given as argument). + \f@step@bidipres% Go on and check for second optional argument. + } + +\newcommand{\f@step@bidipres}% Pick up the second optional argument. +{% + \@ifnextchar[%] Check for second optional argument in [...] syntax. + {\s@brackstep@bidipres} + {% + \@ifnextchar(%) Check for second optional argument in (...) syntax. + {\s@parenstep@bidipres} + {\s@parenstep@bidipres(\if@first@bidipres@true)}% No second optional argument given; + }% call with \if@first@bidipres@true in (...) syntax (default). +} + +\def\s@brackstep@bidipres[#1]% Second optional argument was given in [...] syntax. +{% + \def\s@step@bidiprescheck{\ifthenelse{#1}}% Condition is defined via \ifthenelse. + \@do@s@bidipres% Go on. + } + +\def\s@parenstep@bidipres(#1)% Second optional argument was given in (...) syntax. +{% + \def\s@step@bidiprescheck{#1}% Save condition (given as argument). + \@do@s@bidipres% Go on. + } +\newcommand{\deactivate@inner@bidipres}% \switch behaviour. +{% + \let\inner@display@bidipres=\displayidentical% + \let\inner@hide@bidipres=\displayidentical% + } + +\newcommand{\activate@inner@bidipres}% \step behaviour. +{% + \let\inner@display@bidipres=\displaystepcontents% + \let\inner@hide@bidipres=\hidestepcontents% + } +\@onlyinstepwise@bidipres\step +\newcommand{\proper@step@bidipres}{\let\@do@s@bidipres=\@step@bidipres\pickup@s@optargs@bidipres} +\newcommand{\@step@bidipres}[1]{\activate@inner@bidipres\@@switch@bidipres{#1}{#1}} +\@onlyinstepwise@bidipres\switch +\newcommand{\proper@switch@bidipres}{\deactivate@inner@bidipres\let\@do@s@bidipres=\@@switch@bidipres\pickup@s@optargs@bidipres} +\newcommand{\if@first@bidipres@true}[2]% +{% + \expandafter % \first@bidipres@<n> is set to \@undefined if \switch command number <n> has not yet been + \ifx\csname first@bidipres@\the\c@stepcommand\endcsname\empty% activated and \empty otherwise. + #1% + \else + #2% + \fi + } +\@ifundefined{ifmeasuring@}{\newif\ifmeasuring@}{} +\newcommand{\@switch@bidipres}[2] +{% + \global\advance\c@stepcommand by 1\relax% This execution of \switch is counted. + \setboolean{instep@bidipres}{true}% Set indicator. + % + % If the verbose option is set, type out some accounting information which can be used for debugging. + \ifthenelse{\boolean{verbose@bidipres}} + {% + \ClassInfo{bidipresentation} + {Step: \the\c@step, Stepcommand: \the\c@stepcommand,\MessageBreak Stepsperformed: \the\c@stepsperformed}% + } + {}% + % + \f@step@bidiprescheck% Is this step to be activated? \f@step@bidiprescheck is defined by the first optional argument of \switch. + {% Yes. + \if@first@bidipres@true{}% For non-unique conditions given as optional argument or when \reswitch is used, it might happen + {% that \first@bidipres@\value{stepcommand} is already set. In this case, don't advance the counter stepsperformed. + \ifmeasuring@\else% Do nothing in AMSLaTeX's measuring pass for aligned equations. + \global\expandafter\let\csname first@bidipres@\the\c@stepcommand\endcsname=\empty% Set \first@bidipres@\value{stepcommand} + \fi + \global\advance\c@stepsperformed by 1\relax% Advance the counter for `real' first activations. + \gdef\current@step@bidipres{#2}% + }% + \setboolean{firstactivation}{true}% This switch can be tested in <stepcontents>, but also in <whenactive>. + } + {% No. + \setboolean{firstactivation}{false}% This switch can be tested in <stepcontents>, but also in <whenactive>. + }% End of \f@step@bidiprescheck + % + \let\o@afterstep@bidipres=\afterstep% We need to save the current definition of \afterstep. + % + \s@step@bidiprescheck% Is this step active? \s@step@bidiprescheck is defined by the second optional argument of \switch. + {% Yes. + \setboolean{active}{true}% Make this fact known to the user. + \ifthenelse{\boolean{firstactivation}} + {\inner@display@bidipres{\activatestep{#2}}}% `First' display of <stepcontents>. + {\inner@display@bidipres{#2}}% Display <stepcontents>. + } + {% No. + \setboolean{active}{false}% Make this fact known to the user. + \let\afterstep=\@gobble% Don't execute \afterstep here. + \ifthenelse{\boolean{firstactivation}} + {\inner@hide@bidipres{\activatestep{#1}}}% Hide <stepcontents>, but with `first activation'. + {\inner@hide@bidipres{#1}}% Hide <stepcontents>. + }% End of \s@step@bidiprescheck + % + \let\afterstep=\o@afterstep@bidipres% Restore the definition of \afterstep. + \setboolean{instep@bidipres}{false}% Set indicator. + }% End of the definition of \@switch@bidipres. +\@onlyinstepwise@bidipres\restep + +\newcommand{\proper@restep@bidipres} +{% + \global\advance\c@stepcommand by -1% This is done by simply counting \value{stepcommand} backwards. + \proper@step@bidipres% Go on with \step. + } +\@onlyinstepwise@bidipres\reswitch + +\newcommand{\proper@reswitch@bidipres} +{% + \global\advance\c@stepcommand by -1% This is done by simply counting \value{stepcommand} backwards. + \proper@switch@bidipres% Go on with \switch. + } +\@onlyinstepwise@bidipres\bstep + +\newcommand{\proper@bstep@bidipres}{\let\@do@s@bidipres=\@bstep@bidipres\pickup@s@optargs@bidipres} +\newcommand{\@bstep@bidipres}[1]{{\boxedsteps\@step@bidipres{#1}}} +\@onlyinstepwise@bidipres\rebstep + +\newcommand{\proper@rebstep@bidipres} +{% + \global\advance\c@stepcommand by -1% This is done by simply counting \value{stepcommand} backwards. + \proper@bstep@bidipres% Go on with \bstep. + } +\ifthenelse{\boolean{colormath@bidipres}}% Should we color math? +{% Yes. + \newcommand{\commitcolors@bidipres} + {\xecolor{\ifmmode mathcolor\else textcolor\fi}}% Switch to mathcolor if in math mode, to textcolor otherwise. + } +{% No. + \newcommand{\commitcolors@bidipres}{\xecolor{textcolor}}% Switch to textcolor. +} + +\@onlyinstepwise@bidipres\dstep + +\newcommand{\proper@dstep@bidipres}{\deactivate@inner@bidipres\let\@do@s@bidipres=\@dstep@bidipres\pickup@s@optargs@bidipres} + +\ifthenelse{\boolean{bidiprescolor}}% Can we use colors at all? +{% Yes. + \newcommand{\@dstep@bidipres}{\@@switch@bidipres{\dimcolors\commitcolors@bidipres}{\set@color}} + } +{\newcommand{\@dstep@bidipres}{\@@switch@bidipres{}{}}}% No. Disable this command. +\@onlyinstepwise@bidipres\redstep + +\newcommand{\proper@redstep@bidipres} +{% + \global\advance\c@stepcommand by -1% This is done by simply counting \value{stepcommand} backwards. + \proper@dstep@bidipres% Go on with \dstep. + } +\@onlyinstepwise@bidipres\vstep + +\newcommand{\proper@vstep@bidipres}{\deactivate@inner@bidipres\let\@do@s@bidipres=\@vstep@bidipres\pickup@s@optargs@bidipres} + +\ifthenelse{\boolean{bidiprescolor}}% Can we use colors at all? +{% Yes. + \newcommand{\@vstep@bidipres}{\@@switch@bidipres{\vanishcolors\xecolor{textcolor}}{\set@color}} + } +{\newcommand{\@vstep@bidipres}{\@@switch@bidipres{}{}}}% No. Disable this command. +\@onlyinstepwise@bidipres\revstep + +\newcommand{\proper@revstep@bidipres} +{% + \global\advance\c@stepcommand by -1% This is done by simply counting \value{stepcommand} backwards. + \proper@vstep@bidipres% Go on with \vstep. + } +\@onlyinstepwise@bidipres\steponce + +\newcommand{\proper@steponce@bidipres} +{\@ifnextchar[{\brack@steponce@bidipres}{\@steponce@bidipres}}% Optional argument in square brackets? + +\newcommand{\@steponce@bidipres} +{% + \@ifnextchar(%% Optional argument in parentheses? + {\paren@steponce@bidipres}% + {\brack@steponce@bidipres[]}% [] is the default if no optional argument is given. + } + +\def\brack@steponce@bidipres[#1]% +{% + \def\optarg@so@bidipres{[#1]}% Store optional argument for later re-insertion. + \@@steponce@bidipres% Proceed. + }% + +\def\paren@steponce@bidipres(#1){\def\optarg@so@bidipres{(#1)}\@@steponce@bidipres} +\newcommand{\@@steponce@bidipres}[1]{\expandafter\step\optarg@so@bidipres[\boolean{firstactivation}]{#1}} +\newcounter{substep} +\@onlyinstepwise@bidipres\multistep + +\newcommand{\proper@multistep@bidipres} +{% + \let\ns@ms@bidipres=\normalstep@ms@bidipres% Placeholder for `every step but the last one'. + \let\nshook@ms@bidipres=\relax% These hooks are used by \movie. + \let\lshook@ms@bidipres=\relax + \@ifstar% Starred version? + {% + \let\ls@ms@bidipres=\laststep@ms@bidipres% Last step acts differently. + \multistep@bidipres% Collect optional argument and proceed. + } + {% + \let\ls@ms@bidipres=\normalstep@ms@bidipres% Last step acts like all other steps. + \multistep@bidipres% Collect optional argument and proceed. + }% + } + +\newcommand{\multistep@bidipres}% Collect optional argument. +{\@ifnextchar[{\brack@multistep@bidipres}{\@multistep@bidipres}}% Optional argument in square brackets? + +\newcommand{\@multistep@bidipres} +{% + \@ifnextchar(%% Optional argument in parentheses? + {\paren@multistep@bidipres}% + {\brack@multistep@bidipres[]}% [] is the default if no optional argument is given. + } + +\def\brack@multistep@bidipres[#1]% +{% + \def\optarg@ms@bidipres{[#1]}% Store optional argument for later re-insertion. + \@@multistep@bidipres% Proceed. + }% + +\def\paren@multistep@bidipres(#1){\def\optarg@ms@bidipres{(#1)}\@@multistep@bidipres} + +\newcommand{\normalstep@ms@bidipres}[1] +{% + \expandafter\switch\optarg@ms@bidipres% Re-insert optional argument. + [\boolean{firstactivation}]{}{#1}% `normal' steps appear only once. + } + +\newcommand{\laststep@ms@bidipres}[1] +{\expandafter\switch\optarg@ms@bidipres{}{#1}}% In the starred version, the last step doesn't disappear. +\newcommand{\@@multistep@bidipres}[2] +{% + \setcounter{substep}{0}% Initialize substep counter. + \whiledo{\value{substep}<#1}% Iterate <n> times. + {% + \stepcounter{substep}% + \ifthenelse{\value{substep}=#1}% Last step? + {\ls@ms@bidipres{\lshook@ms@bidipres#2}}% Execute single step (together with \movie hooks). + {\ns@ms@bidipres{\nshook@ms@bidipres#2}}% + }% + } +\@onlyinstepwise@bidipres\movie + +\newcommand{\proper@movie@bidipres} +{% + \let\ns@ms@bidipres=\normalstep@ms@bidipres% Placeholder for `every step but the last one'. + \def\nshook@ms@bidipres{\afterstep{\pageDuration{\dur@ms@bidipres}}}% Page duration to be used between steps. + \def\lshook@ms@bidipres{\afterstep{\end@ms@bidipres}}% Page duration setting after last step. + \@ifstar% Starred version? + {% + \let\ls@ms@bidipres=\laststep@ms@bidipres% Last step acts differently. + \movie@bidipres% Collect optional argument and proceed. + } + {% + \let\ls@ms@bidipres=\normalstep@ms@bidipres% Last step acts like all other steps. + \movie@bidipres% Collect optional argument and proceed. + }% + } + +\newcommand{\movie@bidipres}% Collect optional argument. +{\@ifnextchar[{\brack@movie@bidipres}{\@movie@bidipres}}% Optional argument in square brackets? + +\newcommand{\@movie@bidipres} +{\@ifnextchar({\paren@movie@bidipres}{\brack@movie@bidipres[]}}% Optional argument in parentheses? + +\def\brack@movie@bidipres[#1]{\def\optarg@ms@bidipres{[#1]}\@@movie@bidipres}% Store optional argument and proceed. +\def\paren@movie@bidipres(#1){\def\optarg@ms@bidipres{(#1)}\@@movie@bidipres} + +\newcommand{\@@movie@bidipres}[2]% Collect <n> and <dur> arguments. +{\gdef\dur@ms@bidipres{#2}\gdef\nosteps@ms@bidipres{#1}\@@@movie@bidipres} + +\newcommand{\@@@movie@bidipres}[1][\stopAdvancing]% Collect second optional argument and call body of \multistep. +{\gdef\end@ms@bidipres{#1}\@@multistep@bidipres{\nosteps@ms@bidipres}} +\@onlyinstepwise@bidipres\overlays + +\providecommand{\proper@overlays@bidipres} +{\@ifnextchar[{\brack@overlays@bidipres}{\@overlays@bidipres}}% Optional argument in square brackets? + +\newcommand{\@overlays@bidipres} +{% + \@ifnextchar(%% Optional argument in parentheses? + {\paren@overlays@bidipres}% + {\brack@overlays@bidipres[]}% [] is the default if no optional argument is given. + } + +\def\brack@overlays@bidipres[#1]% +{% + \def\optarg@ov@bidipres{[#1]}% Store optional argument for later re-insertion. + \@@overlays@bidipres% Proceed. + }% + +\def\paren@overlays@bidipres(#1){\def\optarg@ov@bidipres{(#1)}\@@overlays@bidipres} +\newcommand{\@@overlays@bidipres}[2] +{% + \setcounter{substep}{1}% Initialize substep counter. + \leavevmode% Make sure that \rlap doesn't insert anything in the vertical list. + \whiledo{\value{substep}<#1}% Iterate <n-1> times (since we start at 1). + {% + \expandafter\switch\optarg@ov@bidipres{}{\ifthenelse{\boolean{firstactivation}}{\mbox{#2}}{\rlap{#2}}}% + \stepcounter{substep}% + }% + \expandafter\switch\optarg@ov@bidipres{}{\mbox{#2}}% Always using \mbox for last overlay. +} +\newenvironment{stepcapsule}{}{} +\newcommand{\afterstep}[1] +{% + \gdef\@afterstep@bidipres{#1}% The argument is simply stored in \@afterstep@bidipres, which is executed in \stepwise. + } +\newcounter{o@fs@bidipres} +\newcommand{\stepwise} +{% + \global\c@o@fs@bidipres=\c@firststep\relax% Save the default value of counter firststep. + \@ifstar% Using the starred version? + {% Yes. + \c@firststep=1\relax% Start with counter step at number 1. + \@stepwise@bidipres% Collect optional argument and proceed. + } + {% No. + \@stepwise@bidipres% Use the default. + }% End of \@ifstar. + }% +\newcommand{\list@stepcapsule} +{% + \renewenvironment{stepcapsule}% stepcapsule is to put an invisible rule on the vertical list. + {\vspace*{\parskip}\hrule \@height\z@\relax}{} + }% + +\let\par@stepcapsule=\list@stepcapsule% Identical for \parstepwise. +\newcommand{\liststepwise} +{% + \@ifstar% Starred version? + {\def\star@bidipres{*}\@liststepwise@bidipres}% Save star in \star@bidipres, collect optional argument and proceed. + {\def\star@bidipres{}\@liststepwise@bidipres}% Collect optional argument and proceed (non-starred version). + } + +\newcommand{\@liststepwise@bidipres}[1][]% Collect optional argument. +{% + \expandafter\stepwise\star@bidipres% Re-insert the star (if given). + [% + \list@stepcapsule% Activate special stepcapsule. + #1% Insert optional argument of \liststepwise. + ]% + } +\newcommand{\parstepwise} +{% + \@ifstar% Starred version? + {\def\star@bidipres{*}\@parstepwise@bidipres}% Save star in \star@bidipres, collect optional argument and proceed. + {\def\star@bidipres{}\@parstepwise@bidipres}% Collect optional argument and proceed (non-starred version). + } + +\newcommand{\@parstepwise@bidipres}[1][]% Collect optional argument. +{% + \expandafter\stepwise\star@bidipres% Re-insert the star (if given). + [% + \boxedsteps% Activate \boxedsteps. + \par@stepcapsule% Activate special stepcapsule. + #1% Insert optional argument of \parstepwise. + ]% + } +\newcommand{\count@em@bidipres}[2] +{% + \global\advance\c@stepcommand by 1\relax% We simply advance the number of \step commands... + #2% ... and execute the second argument (to find nested uses of \step). +} +\def\@nb@bidipresfalse{\global\let\if@nb@bidipres\iffalse} +\def\@nb@bidiprestrue{\global\let\if@nb@bidipres\iftrue} +\newtoks\ep@bidipres +\def\savecounters@bidipres{% + \begingroup + \def\@elt##1{\global\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \xdef\restorecounters@bidipres{\cl@@ckpt}% + \endgroup + \if@nobreak\@nb@bidiprestrue\else\@nb@bidipresfalse\fi + \global\ep@bidipres\everypar + } +\def\savebidiprescounters@bidipres{% + \begingroup + \def\@elt##1{\global\csname c@##1\endcsname\the\csname c@##1\endcsname}% + \xdef\restorebidiprescounters@bidipres{\cl@@ckpt@bidipres}% + \endgroup + } +\def\cl@@ckpt@bidipres{\@elt{totalsteps}\@elt{firststep}\@elt{step}\@elt{stepcommand}\@elt{stepsperformed}\@elt{o@fs@bidipres}} +\newcommand{\releasecounter}[1]% +{\expandafter\def\expandafter\cl@@ckpt@bidipres\expandafter{\cl@@ckpt@bidipres\@elt{#1}}} +\newcommand{\disable@counting@bidipres} +{% + \let\afterstep=\@gobble + \renewcommand{\backgroundstyle}[2][]{}% + \renewcommand{\@@vgradrule@bidipres}[3][0pt]{}% + \renewcommand{\@@@@dblvgradrule@bidipres}[3][0pt]{}% + \renewcommand{\@@hgradrule@bidipres}[3][0pt]{}% + \renewcommand{\@@@@dblhgradrule@bidipres}[3][0pt]{}% +} +\newboolean{instepwise@bidipres} +\newboolean{instep@bidipres} +\newcommand{\@stepwise@bidipres}[2][] +{% + \save@bidipres% Save the current contents of the page. + \savecounters@bidipres% Save the values of all counters. + \dumpcolorset{stwcolors}% Make a copy of all color definitions. + \begingroup% A group makes redefinitions local. + \setboolean{instepwise@bidipres}{true}% Set indicatior. + \let\step\proper@step@bidipres% By default, \step executes \proper@step@bidipres. + \let\restep\proper@restep@bidipres% + \let\bstep\proper@bstep@bidipres% + \let\rebstep\proper@rebstep@bidipres% + \let\dstep\proper@dstep@bidipres% + \let\redstep\proper@redstep@bidipres% + \let\vstep\proper@vstep@bidipres% + \let\revstep\proper@revstep@bidipres% + \let\steponce\proper@steponce@bidipres% + \let\multistep\proper@multistep@bidipres% + \let\movie\proper@movie@bidipres% + \let\overlays\proper@overlays@bidipres% + \let\switch\proper@switch@bidipres% By default, \switch executes \proper@switch@bidipres. + \let\reswitch\proper@reswitch@bidipres% + \let\orig@mathchoice@bidipres=\mathchoice% Save the current definition of \mathchoice... + \def\mathchoice##1##2##3##4% ... and redefine. + {% + \orig@mathchoice@bidipres% The original definition of \mathchoice is called... + {##1}% ... with the first argument untouched and in all other arguments, \step ... + {\let\step\restep\let\bstep\rebstep\let\dstep\redstep\let\vstep\revstep\let\switch\reswitch##2}% ... redefined ... + {\let\step\restep\let\bstep\rebstep\let\dstep\redstep\let\vstep\revstep\let\switch\reswitch##3}% ... to execute ... + {\let\step\restep\let\bstep\rebstep\let\dstep\redstep\let\vstep\revstep\let\switch\reswitch##4}% ... \restep. + }% + % + \c@stepcommand=0\relax% Initialize the counter for \step commands. + \let\@@switch@bidipres=\count@em@bidipres% Next, we count the \step commands in <contents>... + \setbox\tempbox@bidipres% ... by putting <contents> into a \vbox (which is then discarded). + =\vbox + {% + \hfuzz\maxdimen\hbadness\@M\relax% No bogus `overfull \hbox' warnings. + \disable@counting@bidipres#2% Inside the \vbox, some commands are redefined for safety and efficiency. + }% + \c@totalsteps=\c@stepcommand% Now, we know the total number of \step commands. + % + % Next, we have to reset \first@bidipres@<n> for <n>=0...\value{totalsteps}. + \c@step=0\relax + \loop + \ifnum\c@step<\c@totalsteps + \advance\c@step by 1\relax + \expandafter\let\csname first@bidipres@\the\c@step\endcsname=\@undefined% \first@bidipres@<n>=\@undefined means step <n> + % hasn't yet been activated. + \repeat + #1% + % + \c@step=\c@firststep% Set the counter for the current step to its starting value... + \c@stepsperformed=0\relax% ... and also the counter for the \step commands which are already activated. + \let\@@switch@bidipres=\@switch@bidipres% \step will now act normally. + \ifthenelse{\boolean{verbose@bidipres}}% Some accounting info (if verbose option is set). + {\ClassInfo{bidipresentation}{Total number of step commands: \the\c@totalsteps}} + {}% + % + \ifthenelse{\boolean{display}}% Are dynamic features enabled? + {}% Yes. + {% No. Do only one loop. + \c@stepsperformed=\c@totalsteps% Set everything up for the last loop. + \c@step=0\relax% Set \first@bidipres@<n> for <n>=0...\value{totalsteps}. + \loop + \ifnum\c@step<\c@totalsteps + \advance\c@step by 1\relax + \expandafter\let\csname first@bidipres@\the\c@step\endcsname=\@empty% \first@bidipres@<n>=\@empty means step <n> + % has already been activated. + \repeat + \advance\c@step by 1\relax% This way, the last step won't think it's `first activated'. + }% + \let\insertdup@bidipres=\insertfirstduplicate@bidipres% Setup command to restore page contents for the first time. + \loop% This is the central loop. + \c@stepcommand=0\relax% Initialize the counter for the current \step command. + \savebidiprescounters@bidipres% Save the `stepwise-specific' counters. + \restorecounters@bidipres% Restore the `original' values of all counters... + \restorebidiprescounters@bidipres% ... and the current values of the `stepwise-specific' counters. + \let\@afterstep@bidipres=\relax% Reset the container for \afterstep. + % + \insertdup@bidipres% Insert saved page contents. + \begin{stepcapsule}% This is usually empty, but may start a minipage (or whatever). + \usecolorset{stwcolors}% Restore colors to state at the beginning of \stepwise. + \if@nb@bidipres\@nobreaktrue\else\@nobreakfalse\fi + \global\everypar\ep@bidipres + #2% Execute <contents> + \end{stepcapsule}% + % + \@afterstep@bidipres% Whatever has been saved with \afterstep is now executed. + \ifnum\c@stepsperformed<\c@totalsteps% Doing one more round? + \outputduplicate@bidipres% Shipout this page and round we go again. + \let\insertdup@bidipres=\insertsecondduplicate@bidipres% Setup command to restore page contents for subsequent times. + \advance\c@step by 1\relax% Round we go again + \repeat + \endgroup + \global\c@firststep=\c@o@fs@bidipres\relax% Restore default value of counter firststep. +} +\newenvironment{fragilesteps}{% + \def\bidipresentation@verbatimfilename{\jobname-bidipresentation.vrb}% + \immediate\openout\bidipresentation@verbatimfileout=\bidipresentation@verbatimfilename% + \bidipresentation@verbatimreadframe% +} +{% + \immediate\closeout\bidipresentation@verbatimfileout% + \stepwise{\input{\bidipresentation@verbatimfilename}}% +} +\newwrite\bidipresentation@verbatimfileout + +\def\bidipresentation@verbatimreadframe{% + \begingroup% + \let\do\@makeother\dospecials% + \count@=127% + \@whilenum\count@<255 \do{% + \advance\count@ by 1% + \catcode\count@=11% + }% + \@makeother\^^L% and whatever other special cases + \endlinechar`\^^M \catcode`\^^M=12 \bidipresentation@processframefirstline} + +{\catcode`\^^M=12\endlinechar=-1% + \long\gdef\bidipresentation@processframefirstline#1^^M{% + \def\bidipresentation@test{#1}% + \ifx\bidipresentation@test\bidipresentation@stopframefirst% + \let\next=\bidipresentation@endfragilesteps% + \else + \ifx\bidipresentation@test\@empty% + \else% + \@temptokena={#1}% + \immediate\write\bidipresentation@verbatimfileout{\the\@temptokena}% + \fi% + \let\next=\bidipresentation@processframeline% + \fi% + \next% + } + \long\gdef\bidipresentation@processframeline#1^^M{% + \def\bidipresentation@test{#1}% + \ifx\bidipresentation@test\bidipresentation@stopframe% + \let\next=\bidipresentation@endfragilesteps% + \else + \immediate\write\bidipresentation@verbatimfileout{#1}% + \fi% + \next% + } +} + +{ + \escapechar=-1\relax% + \xdef\bidipresentation@stopframe{\string\\end\string\{fragilesteps\string\}} + \xdef\bidipresentation@stopframefirst{\noexpand\end\string\{fragilesteps\string\}} +} + +\def\bidipresentation@endfragilesteps{\endgroup\end{fragilesteps}} + +\newboolean{bidipresl@paralist} +\@ifpackageloaded{paralist}{\setboolean{bidipresl@paralist}{true}}{} +\newboolean{bidipresl@eqlist} +\@ifpackageloaded{eqlist}{\setboolean{bidipresl@eqlist}{true}}{} +\newboolean{bidipresl@pausestep} +\DeclareOption{pausestep}{\setboolean{bidipresl@pausestep}{true}} +\newboolean{bidipresl@noflipendstep} +\DeclareOption{noflipendstep}{\setboolean{bidipresl@noflipendstep}{true}} + +\ProcessOptions +\define@key{bidipresl}{pausestep}[true]{% + \setboolean{bidipresl@pausestep}{#1} +} +\define@key{bidipresl}{noflipendstep}[true]{% + \setboolean{bidipresl@noflipendstep}{#1} +} +\newcommand*{\bidipreslsetup}{\setkeys{bidipresl}} +\newif\ifbidipresl@instepenv \bidipresl@instepenvfalse +\newif\ifbidipresl@inpausestepenv \bidipresl@inpausestepenvfalse +\newif\ifbidipresl@indimenv \bidipresl@indimenvfalse +\newif\ifbidipresl@inflipenv \bidipresl@inflipenvfalse +\let\oldenumerate=\enumerate +\let\olditemize=\itemize +\let\olddescription=\description +\let\endoldenumerate=\endenumerate +\let\endolditemize=\enditemize +\let\endolddescription=\enddescription +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\let\oldeqlist=\eqlist +\let\endoldeqlist=\endeqlist +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\let\oldcompactenum=\compactenum +\let\oldcompactitem=\compactitem +\let\endoldcompactenum=\endcompactenum +\let\endoldcompactitem=\endcompactitem +}{} +\let\bidipresl@nx\noexpand +\let\bidipresl@xp\expandafter +\newtoks\bidipresl@emptytoks +\newtoks\bidipresl@envbody +\long\def\bidipresl@addto@envbody#1{\global\bidipresl@envbody\bidipresl@xp{\the\bidipresl@envbody#1}} +\def\bidipresl@collect@body#1{% + \bidipresl@envbody{\bidipresl@xp#1\bidipresl@xp{\the\bidipresl@envbody}}% + \edef\bidipresl@process@envbody{\the\bidipresl@envbody\bidipresl@nx\end{\@currenvir}}% + \bidipresl@envbody\bidipresl@emptytoks \def\begin@stack{b}% + \begingroup + \bidipresl@xp\let\csname\@currenvir\endcsname\bidipresl@collect@@body + \edef\bidipresl@process@envbody{\bidipresl@xp\bidipresl@nx\csname\@currenvir\endcsname}% + \bidipresl@process@envbody +} +\long\def\bidipresl@push@begins#1\begin#2{% + \ifx\end#2\else b\bidipresl@xp\bidipresl@push@begins\fi +} +\long\def\bidipresl@collect@@body#1\end#2{% + \edef\begin@stack{\bidipresl@push@begins#1\begin\end \bidipresl@xp\@gobble\begin@stack}% + \ifx\@empty\begin@stack + \endgroup + \@checkend{#2}% + \bidipresl@addto@envbody{#1}% + \else + \bidipresl@addto@envbody{#1\end{#2}}% + \fi + \bidipresl@process@envbody +} +\def\bidipresl@addmargin#1{% + \advance\@listdepth 1 + \addtolength{\csname leftmargin\romannumeral\@listdepth\endcsname}{#1} + \advance\@listdepth -1 +} + +\ifthenelse{\boolean{display}}{% +\ifthenelse{\boolean{bidiprescolor}}% Can we use colors? +{% Yes. In this case highlighting is implemented by switching color. + \def\bidipresl@flipstep{% + \step{\ifthenelse{\boolean{firstactivation}}% + {\xecolor{textcolor}}% + {\xecolor{inactivecolor}}% + }% + }% +} +{% No. In this case highlighting is implemented by putting the item in boldface. + \def\bidipresl@flipstep{% + \step{\ifthenelse{\boolean{firstactivation}}{\bfseries}{\mdseries}} + }% +} +\ifthenelse{\boolean{bidiprescolor}}% Can we use colors? +{% Yes. In this case highlighting is implemented by using \dstep + \def\bidipresl@dimstep{\dstep}% +} +{% No. In this case highlighting is implemented by putting the item in boldface. + \def\bidipresl@dimstep{% + \step{\bfseries}% + \ifthenelse{\boolean{active}}{}{\mdseries}% + }% +} +\ifthenelse{\boolean{bidiprescolor}}% Can we use colors? +{% Yes. In this case stepping is implemented by using \vstep + \def\bidipresl@step{\vstep}% +} +{% No. In this case stepping is implemented using \pause + \def\bidipresl@step{\pause}% +} +}{% \boolean{display} is false +\def\bidipresl@flipstep{\relax}% +\def\bidipresl@dimstep{\relax}% +\def\bidipresl@step{\relax}% +} +\newenvironment{flipitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@flipitem}% + {\global\@ignoretrue} +\newenvironment{flipdesc}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@flipdesc}% + {\global\@ignoretrue} +\newenvironment{flipenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@flipenum}% + {\global\@ignoretrue} +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\newenvironment{flipeqlist}[1][0cm]{% + \bidipresl@collect@body\@flipeqlist}% + {\global\@ignoretrue} +\newenvironment{flipcompacteqlist}[1][0cm]{% + \bidipresl@collect@body\@flipcompacteqlist}% + {\global\@ignoretrue} +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\newenvironment{flipcompactitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@flipcompactitem}% + {\global\@ignoretrue} +\newenvironment{flipcompactenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@flipcompactenum}% + {\global\@ignoretrue} +}{} + +\newcommand\@fliplist[2]{% + \ifbidipresl@indimenv + \ClassError{bidipresentation}{% + dim* and flip* environments do NOT nest}{% + Do not continue! Type 'q' to stop and fix the nested list. + } + \else\ifbidipresl@instepenv + \begin{#1} + \let\hidestepcontents=\displaystepcontents + \renewcommand{\item}{\bidipresl@flipstep\bidipresl@origitem}% + #2 + \end{#1}% + \else + \ifbidipresl@inpausestepenv\let\liststepwise=\stepwise\fi + \liststepwise[\let\hidestepcontents=\displaystepcontents]{% + \begin{#1} + \ifbidipresl@inpausestepenv\else + \ifbidipresl@instepenv\else\let\bidipresl@origitem=\item\fi + \fi + \bidipresl@instepenvtrue + \bidipresl@inflipenvtrue + \renewcommand{\item}{\bidipresl@flipstep\bidipresl@origitem}% + #2 + \ifthenelse{\boolean{bidipresl@noflipendstep}}{}{\step{}}% + \end{#1}} + \fi\fi +} + +\newcommand\@flipitem[1]{% + \@fliplist{olditemize}{#1}} +\newcommand\@flipdesc[1]{% + \@fliplist{olddescription}{#1}} +\newcommand\@flipenum[1]{% + \@fliplist{oldenumerate}{#1}} +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\newcommand\@flipeqlist[1]{% + \@fliplist{oldeqlist}{#1}} +\newcommand\@flipcompacteqlist[1]{% + \@fliplist{compacteqlist}{#1}} +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\newcommand\@flipcompactitem[1]{% + \@fliplist{oldcompactitem}{#1}} +\newcommand\@flipcompactenum[1]{% + \@fliplist{oldcompactenum}{#1}} +}{} +\newenvironment{dimitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@dimitem}% + {\global\@ignoretrue} +\newenvironment{dimdesc}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@dimdesc}% + {\global\@ignoretrue} +\newenvironment{dimenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@dimenum}% + {\global\@ignoretrue} +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\newenvironment{dimeqlist}[1][0cm]{% + \bidipresl@collect@body\@dimeqlist}% + {\global\@ignoretrue} +\newenvironment{dimcompacteqlist}[1][0cm]{% + \bidipresl@collect@body\@dimcompacteqlist}% + {\global\@ignoretrue} +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\newenvironment{dimcompactitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@dimcompactitem}% + {\global\@ignoretrue} +\newenvironment{dimcompactenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@dimcompactenum}% + {\global\@ignoretrue} +}{} + +\newcommand\@dimlist[2]{% + \ifbidipresl@inflipenv + \ClassError{bidipresentation}{% + dim* and flip* environments do NOT nest}{% + Do not continue! Type <q> to stop and fix the nested list. + } + \else\ifbidipresl@instepenv + \begin{#1} + \renewcommand{\item}{\bidipresl@dimstep\bidipresl@origitem}% + #2 + \end{#1}% + \else + \ifbidipresl@inpausestepenv\let\liststepwise=\stepwise\fi + \liststepwise{% + \begin{#1} + \ifbidipresl@inpausestepenv\else + \ifbidipresl@instepenv\else\let\bidipresl@origitem=\item\fi + \fi + \bidipresl@instepenvtrue + \bidipresl@indimenvtrue + \renewcommand{\item}{\bidipresl@dimstep\bidipresl@origitem}% + #2 + \end{#1}} + \fi\fi +} + +\newcommand\@dimitem[1]{% + \@dimlist{olditemize}{#1}} +\newcommand\@dimdesc[1]{% + \@dimlist{olddescription}{#1}} +\newcommand\@dimenum[1]{% + \@dimlist{oldenumerate}{#1}} +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\newcommand\@dimeqlist[1]{% + \@dimlist{oldeqlist}{#1}} +\newcommand\@dimcompacteqlist[1]{% + \@dimlist{compacteqlist}{#1}} +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\newcommand\@dimcompactitem[1]{% + \@dimlist{oldcompactitem}{#1}} +\newcommand\@dimcompactenum[1]{% + \@dimlist{oldcompactenum}{#1}} +}{} +\newenvironment{stepitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@stepitem}% + {\global\@ignoretrue} +\newenvironment{stepdesc}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@stepdesc}% + {\global\@ignoretrue} +\newenvironment{stepenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@stepenum}% + {\global\@ignoretrue} +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\newenvironment{stepeqlist}[1][0cm]{% + \bidipresl@collect@body\@stepeqlist}% + {\global\@ignoretrue} +\newenvironment{stepcompacteqlist}[1][0cm]{% + \bidipresl@collect@body\@stepcompacteqlist}% + {\global\@ignoretrue} +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\newenvironment{stepcompactitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@stepcompactitem}% + {\global\@ignoretrue} +\newenvironment{stepcompactenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \bidipresl@collect@body\@stepcompactenum}% + {\global\@ignoretrue} +}{} +\newcommand\@steplist[2]{% +\ifthenelse{\boolean{bidipresl@pausestep}}{% + \ifbidipresl@inflipenv + \ClassError{bidipresentation}{% + flip* followed by step* environment does NOT work \MessageBreak + when the pausestep option is used}{% + Do not continue! Type <q> to stop and fix the nested list. + } + \else\ifbidipresl@indimenv + \ClassError{bidipresentation}{% + dim* followed by step* environment does NOT work \MessageBreak + when the pausestep option is used}{% + Do not continue! Type <q> to stop and fix the nested list. + } + \else + \begin{#1} + \ifbidipresl@inpausestepenv\else\let\bidipresl@origitem=\item\fi + \bidipresl@inpausestepenvtrue + \renewcommand{\item}{\pause\bidipresl@origitem}% + #2 + \end{#1} + \fi\fi +}{ + \ifbidipresl@inflipenv + \begin{#1} + \renewcommand{\item}{\bidipresl@flipstep\bidipresl@origitem} + #2 + \end{#1}% + \else\ifbidipresl@indimenv + \begin{#1} + \renewcommand{\item}{\dstep\bidipresl@origitem}% + #2 + \end{#1}% + \else\ifbidipresl@instepenv + \begin{#1} + \renewcommand{\item}{\bidipresl@step\bidipresl@origitem}% + #2 + \end{#1}% + \else + \liststepwise{% + \begin{#1} + \ifbidipresl@instepenv\else\let\bidipresl@origitem=\item\fi + \bidipresl@instepenvtrue + \renewcommand{\item}{\bidipresl@step\bidipresl@origitem}% + #2 + \end{#1}} + \fi\fi\fi +} +} + +\newcommand\@stepitem[1]{% + \@steplist{olditemize}{#1}} +\newcommand\@stepdesc[1]{% + \@steplist{olddescription}{#1}} +\newcommand\@stepenum[1]{% + \@steplist{oldenumerate}{#1}} +\ifthenelse{\boolean{bidipresl@eqlist}}{% +\newcommand\@stepeqlist[1]{% + \@steplist{oldeqlist}{#1}} +\newcommand\@stepcompacteqlist[1]{% + \@steplist{compacteqlist}{#1}} +}{} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\newcommand\@stepcompactitem[1]{% + \@steplist{oldcompactitem}{#1}} +\newcommand\@stepcompactenum[1]{% + \@steplist{oldcompactenum}{#1}} +}{} +\newenvironment{compacteqlist}[1][0cm]{% + % \bidipresl@addmargin{#1} + \begin{eqlist}[\parsep0pt\itemsep0pt]}% + {\end{eqlist}} +\renewenvironment{enumerate}[1][0cm]{% + \bidipresl@addmargin{#1} + \begin{oldenumerate} + \ifbidipresl@instepenv + \renewcommand{\item}{\bidipresl@origitem}% + \fi + }% + {\end{oldenumerate}} + +\renewenvironment{itemize}[1][0cm]{% + \bidipresl@addmargin{#1} + \begin{olditemize} + \ifbidipresl@instepenv + \renewcommand{\item}{\bidipresl@origitem}% + \fi + }% + {\end{olditemize}} + +\renewenvironment{description}[1][0cm]{% + % \bidipresl@addmargin{#1} % Has no effect - FIXME + \begin{olddescription} + \ifbidipresl@instepenv + \renewcommand{\item}{\bidipresl@origitem}% + \fi + }% + {\end{olddescription}} +\ifthenelse{\boolean{bidipresl@paralist}}{% +\renewenvironment{compactenum}[1][0cm]{% + \bidipresl@addmargin{#1} + \begin{oldcompactenum} + \ifbidipresl@instepenv + \renewcommand{\item}{\bidipresl@origitem}% + \fi + }% + {\end{oldcompactenum}} + +\renewenvironment{compactitem}[1][0cm]{% + \bidipresl@addmargin{#1} + \begin{oldcompactitem} + \ifbidipresl@instepenv + \renewcommand{\item}{\bidipresl@origitem}% + \fi + }% + {\end{oldcompactitem}} +}{} +\endinput +%% +%% End of file `bidipresentation.cls'. |