diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/texpower/texpower-addons.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/texpower/texpower-addons.dtx | 1821 |
1 files changed, 1821 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/texpower/texpower-addons.dtx b/Master/texmf-dist/source/latex/texpower/texpower-addons.dtx new file mode 100644 index 00000000000..56f04d69829 --- /dev/null +++ b/Master/texmf-dist/source/latex/texpower/texpower-addons.dtx @@ -0,0 +1,1821 @@ +% \iffalse meta-comment +% -------------------------------------------------------------- +% TeXPower bundle - dynamic online presentations with LaTeX +% Copyright (C) 1999-2004 Stephan Lehmke +% +% This program is free software; you can redistribute it and/or +% modify it under the terms of the GNU General Public License +% as published by the Free Software Foundation; either version 2 +% of the License, or (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% -------------------------------------------------------------- +% +% texpower-addons.dtx,v 1.2 2004/07/27 11:39:45 hansfn Exp +% +% \fi +% +% \iffalse +% +%<*driver> +\documentclass{article} +\begin{document} +\typeout{***********************************************************} +\typeout{*} +\typeout{*\space\space\space\space\space\space\space Do NOT compile this dtx file!} +\typeout{*} +\typeout{***********************************************************} +\end{document} +%</driver> +% +% \fi +% +%<*automata> +%<<KEEPCOMMENTS +%======================================================================================================================= +% File: automata.sty +% +% Draw and animate `automata' as used in theoretical computer science, using PSTricks and TeXPower. +% +% This package is an addition to the TeXPower bundle, to be found at +% +% http://texpower.sourceforge.net/ +% +%======================================================================================================================= +% Author: Stephan Lehmke <Stephan.Lehmke@cs.uni-dortmund.de> +% +% v0.2 Oct 05, 2001 First version for the pre-alpha release of texpower. +% Only deterministic FA and Mealy Automata yet. +% + +\NeedsTeXFormat{LaTeX2e} + +\ProvidesPackage% +{automata}% +[2001/10/05 v0.2 Draw and animate automata.] + + +%======================================================================================================================= + +\RequirePackage{ifthen} + +\RequirePackage{relsize} + +\RequirePackage{texpower} + +\ifthenelse{\boolean{psspecialsallowed}}{\RequirePackage{tppstcol}}{} + + +%======================================================================================================================= +% Implementation of the functionality. + +%----------------------------------------------------------------------------------------------------------------------- +% Some definitions of general interest. + +\defineTPcolor{automatoncolor}{gray}{0.8} +\defineTPcolor{autoplatecolor}{gray}{0.95} +\defineTPcolor{currstatecolor}{rgb}{0.8,1,0.8} +\colorbetween{markstatecolor@TPATM}{pagecolor}{currstatecolor} +\replacecolor{cellcolor}{white} + + + +\newlength{\tapepos@TPATM} + +\newcounter{tapecells@TPATM} +\newcounter{inputlength@TPATM} +\newcounter{states@TPATM} +\newcounter{currstate@TPATM} +\newcounter{nextstate@TPATM} +\newcounter{currinputsymbol@TPATM} +\newcounter{currtapepos@TPATM} + +\newtoks\tabrows@TPATM +\newtoks\tabdecl@TPATM + +\newsavebox{\tabbox@TPATM} + +\newboolean{stategraph@TPATM} + +\newif\iffliplabel@TPATM + +\newcommand{\formatsymbol}[1]{\texttt{#1}} + + +%----------------------------------------------------------------------------------------------------------------------- +% Helper macros. + +% Make a fixed point number have exactly five decimal places, either by truncating or by filling up with trailing +% zeroes. +\newcommand{\filltofive@TPATM}[1]{\expandafter\@filltofive@TPATM#1000000\@nil#1} + +\def\@filltofive@TPATM#1.#2#3#4#5#6#7\@nil#8{\def#8{#1.#2#3#4#5#6}} + + +% Count the number of items in a comma-separated list. +\newcommand{\countsymbols@TPATM}[2]{\setcounter{#2}{1}\@countsymbols@TPATM#1,\@nil{#2}} + +\def\@countsymbols@TPATM#1,#2\@nil#3{\ifthenelse{\equal{#2}{}}{}{\stepcounter{#3}\@countsymbols@TPATM#2\@nil{#3}}} + + + +% Get a symbol from a (macro containing a) comma-separated list. +\newcommand{\getsymbol@TPATM}[2] +{% + \expandafter\@getsymbol@TPATM#1\@nil{#1}{#2}% +} + +\def\@getsymbol@TPATM#1,#2\@nil#3#4{\gdef#3{#2}\@@getsymbol@TPATM#1\@nil{#4}} + +\def\@@getsymbol@TPATM{\@ifnextchar({\@@@getsymbol@TPATM}{\@@@getsymbol@TPATM()}} + +\def\@@@getsymbol@TPATM(#1)#2\@nil#3{\def\statepos@TPATM{#1}\def#3{#2}} + + +% Get a state from a (macro containing a) comma-separated list of states and check whether it's accepting. + +\newif\ifacceptingstate@TPATM + +\newcommand{\getstate@TPATM}[4]{\expandafter\@getstate@TPATM#1\@nil{#1}{#2}{#3}{#4}} + +\def\@getstate@TPATM#1,#2\@nil#3#4#5#6{\gdef#3{#2}\@@getstate@TPATM#1\@nil{#4}{#5}{#6}} + +\def\@@getstate@TPATM{\@ifnextchar({\@@@getstate@TPATM}{\@@@getstate@TPATM()}} + +\def\@@@getstate@TPATM(#1)#2#3\@nil#4#5#6% +{% + \def\statepos@TPATM{#1}% + \def#6{#2#3}% + \ifx\accept#2% + \acceptingstate@TPATMtrue% + \def#5{#4}% + \else + \acceptingstate@TPATMfalse% + \let#5\empty + \fi + } + +% Get a state transition from a (macro containing a) comma-separated list of states. +\newcommand{\getdeltapair@TPATM}[3] +{% + \expandafter\@getdeltapair@TPATM#1\@nil{#1}{#2}{#3}% +} + +\def\@getdeltapair@TPATM{\@ifnextchar[{\@@getdeltapair@TPATM}{\@@getdeltapair@TPATM[\@nil]}} + +\def\@@getdeltapair@TPATM[#1]% +{% + \def\optarg@TPATM{#1}% + \@ifstar{\let\fliplabel@TPATM=\fliplabel@TPATMtrue\@@@getdeltapair@TPATM} + {\let\fliplabel@TPATM=\fliplabel@TPATMfalse\@@@getdeltapair@TPATM}% + } + +\def\@@@getdeltapair@TPATM{\@ifnextchar({\@@@@getdeltapair@TPATM}{\@@@@getdeltapair@TPATM(.5)}} + +\def\@@@@getdeltapair@TPATM(#1)% +{% + \def\labelpos@TPATM{#1}% + \@ifnextchar[{\@@@@@getdeltapair@TPATM}{\@@@@@getdeltapair@TPATM[\@nil]}% + } + +\def\@@@@@getdeltapair@TPATM[#1]#2->#3,#4\@nil#5#6#7{\def\labelopt@TPATM{#1}\protected@edef#6{#2}\protected@edef#7{#3}\gdef#5{#4}} + +% Decompose a comma-separated pair (without parentheses) into its components. +\def\decomposestpos@TPATM#1,#2\@nil#3#4{\def#3{#1}\def#4{#2}} + +% Remove trailing comma from a comma-separated list. +\def\gobblelastcomma@TPATM#1,\@nil#2{\gdef#2{#1}} + +% A first step towards internationalization - german only at the moment. +\newcommand{\automatonname}{Automatenmodell} +\newcommand{\inputname}{Eingabe} +\newcommand{\inputtapename}{Eingabeband} +\newcommand{\outputname}{Ausgabe} +\newcommand{\outputtapename}{Ausgabeband} +\newcommand{\acceptname}{Akzeptieren} +\newcommand{\statename}{Zustand} +\newcommand{\statesname}{Zust"ande} +\newcommand{\statetransname}{Zustands"uberg"ange} +\newcommand{\nextstatename}{Folgezust.} + +\newcommand{\statetransitiontablepreamble}{} + +\newcommand{\transitionarrayparameters} +{% + \renewcommand{\arraystretch}{.3}% + \setlength{\extrarowheight}{16pt}% + \setlength{\tabcolsep}{.5pt}% +} + +\let\accept\empty +\let\comma\empty + + +%----------------------------------------------------------------------------------------------------------------------- +% Finite Automata. + +% Generic macros for drawing deterministic finite automata. The difference between simple dfa and mealy automata is made +% by setting parameters. + +\def\finalisetabrows@TPATM#1\\\@nil#2{#2={#1\end{tabular}}}% + +\newcommand{\draw@outputtape@TPATM}[1]{}% +\newcommand{\getoutput@TPATM}[2]{} +\newcommand{\inittabrows@TPATM}[1]{} +\newcommand{\addtabrow@TPATM}[2]{} +\newcommand{\label@output@TPATM}{}% +\newcommand{\fix@nextstate@TPATM}{} +\newcommand{\mk@new@outputtape@TPATM}[1]{}% + + + +\newcommand{\genericdfa@TPATM}[8] +{% + \begin{pspicture}(1,1) + % Draw automaton body. + \psframe[fillstyle=solid,fillcolor=automatoncolor](0.05,0)(0.95,1) + \rput[b]{90}(0.05,0.5){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\automatonname}}% + % Draw input tape. + \rput[l](0.07,0.93){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\inputtapename}}% + \setlength{\tapepos@TPATM}{0.55pt-0.1pt*\real{#6}}% + \setcounter{currinputsymbol@TPATM}{1*\real{#6}}% + \mkfactor{\startx@TPATM}{\ratio{\tapepos@TPATM}{1pt}}% + \setcounter{tapecells@TPATM}{6+\value{currinputsymbol@TPATM}}% + \countsymbols@TPATM{#5}{inputlength@TPATM}% + \ifthenelse{\value{tapecells@TPATM}>\value{inputlength@TPATM}} + {\setcounter{tapecells@TPATM}{\value{inputlength@TPATM}}} + {}% + \multips(\startx@TPATM,0.88)(0.1,0){\value{tapecells@TPATM}}{\psframe[fillstyle=solid,fillcolor=cellcolor](0.1,0.1)}% + \mkfactor{\startx@TPATM}{\ratio{\tapepos@TPATM+0.05pt}{1pt}}% + \filltofive@TPATM{\startx@TPATM}% + \protected@edef\tapecontents@TPATM{#5,}% + \setcounter{currtapepos@TPATM}{0}% + \let\inputtapesymbol@TPATM\relax + \let\nextinputtapesymbol@TPATM\relax + \multido{\n=\startx@TPATM+0.10000}{\value{tapecells@TPATM}} + {% + \getsymbol@TPATM\tapecontents@TPATM\inputtapesymbol@TPATM + \ifnum\value{currtapepos@TPATM}=\value{currinputsymbol@TPATM}\relax + \global\let\nextinputtapesymbol@TPATM\inputtapesymbol@TPATM + \fi + \stepcounter{currtapepos@TPATM}% + \ifnum\value{currtapepos@TPATM}=\value{currinputsymbol@TPATM}\relax + \global\let\inputtapesymbol@TPATM\inputtapesymbol@TPATM + \fi + \rput(\n,0.93){\formatsymbol\inputtapesymbol@TPATM}% + }% + \psframe[linewidth=2pt,linecolor=conceptcolor](0.45,0.88)(0.55,0.98) + % Draw state transitions + \countsymbols@TPATM{#1}{states@TPATM}% + \mkfactor{\tapeadvancement@TPATM}{\real{#6}-\value{currinputsymbol@TPATM}pt}% + \def\defdelta@TPATM{#3,}% + \whiledo{\not\equal{\defdelta@TPATM}{}} + {% + \getdeltapair@TPATM\defdelta@TPATM\domainvalue@TPATM\rangevalue@TPATM + \expandafter\def\csname delta(\domainvalue@TPATM)@TPATM\expandafter\endcsname\expandafter{\rangevalue@TPATM}% + \expandafter\let\csname deltaopt(\domainvalue@TPATM)@TPATM\endcsname=\optarg@TPATM + \expandafter\let\csname deltalabelpos(\domainvalue@TPATM)@TPATM\endcsname=\labelpos@TPATM + \expandafter\let\csname deltalabelopt(\domainvalue@TPATM)@TPATM\endcsname=\labelopt@TPATM + \expandafter\let\csname deltaflag(\domainvalue@TPATM)@TPATM\endcsname=\empty + \expandafter\let\csname deltafliplabel(\domainvalue@TPATM)@TPATM\endcsname=\fliplabel@TPATM + }% + \ifthenelse{\boolean{stategraph@TPATM}}% Draw state transition diagram? + {% Yes. + \ifthenelse{\lengthtest{\tapeadvancement@TPATM pt=0pt}} + {% + \let\nextinputtapesymbol@TPATM\inputtapesymbol@TPATM + \ifthenelse{\value{nextstate@TPATM}>-1}{\def\tapeadvancement@TPATM{1}}{}% + }{}% + \colorbetween[\tapeadvancement@TPATM]{activetranscolor@TPATM}{currstatecolor}{pagecolor}% + \rput(0.5,0.5) + {% + \begingroup + % Make `subpicture' containing the state transition diagram. + \psset{xunit=.43\psxunit,yunit=.36\psyunit,labelsep=1pt}% + \begin{pspicture}(0,0) + \psframe[fillstyle=solid,fillcolor=cellcolor,dimen=inner](-1,-1)(1,1) + \rput[lt](-1,1){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\statetransname}}% + % First, the nodes representing states. + \mkfactor{\statedistance@TPATM}{2/\value{states@TPATM}}% + \mkfactor\startx@TPATM{-1+\statedistance@TPATM pt/2}% + \def\states@TPATM{#1,}% + \setcounter{currstate@TPATM}{0}% + \multido{\n=\startx@TPATM+\statedistance@TPATM}{\value{states@TPATM}} + {% + \stepcounter{currstate@TPATM}% + \getstate@TPATM{\states@TPATM}{,linewidth=2pt,linecolor=red}{\statetype@TPATM}{\state@TPATM}% + \ifnum\value{currstate@TPATM}=#7\relax + \ifacceptingstate@TPATM\global\acceptingstate@TPATMtrue\else\global\acceptingstate@TPATMfalse\fi + \fi + \edef\next + {% + \noexpand + \cnode + [% + fillstyle=solid,% + fillcolor=\ifnum\value{currstate@TPATM}=#7currstatecolor\else cellcolor\fi\statetype@TPATM + ]% + (\ifx\statepos@TPATM\empty\n,0\else\statepos@TPATM\fi)% + }% + \next{.4}{{state\state@TPATM}}% + \rput(\ifx\statepos@TPATM\empty\n,0\else\statepos@TPATM\fi){\let\comma,\state@TPATM}% + \ifthenelse{\value{currstate@TPATM}=#4} + {% + \ifx\statepos@TPATM\empty + \mkfactor{\stxpos@TPATM}{\real{\n}-.2pt}% + \def\stypos@TPATM{0}% + \else + \expandafter\decomposestpos@TPATM\statepos@TPATM\@nil{\stxpos@TPATM}{\stypos@TPATM}% + \mkfactor{\stxpos@TPATM}{\real{\stxpos@TPATM}-.2pt}% + \fi + \pnode(\stxpos@TPATM,\stypos@TPATM){start}% + \ncline{->}{start}{state\state@TPATM}% + }{}% + }% + % Next, the node connections. + \setcounter{currstate@TPATM}{0}% + \def\states@TPATM{#1,}% + \whiledo{\not\equal{\states@TPATM}{}} + {% + \stepcounter{currstate@TPATM}% + \getsymbol@TPATM\states@TPATM\state@TPATM + \protected@edef\state@TPATM{\state@TPATM}% + \def\inputalphabet@TPATM{#2,}% + \whiledo{\not\equal{\inputalphabet@TPATM}{}} + {% + \getsymbol@TPATM\inputalphabet@TPATM\inputsymbol@TPATM + \getoutput@TPATM\state@TPATM\inputsymbol@TPATM + \ifthenelse{\equal{\csname deltaflag(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname}{}} + {% + \let\currentnstate@TPATM=\nstate@TPATM + \let\currentia@TPATM=\inputalphabet@TPATM + \inittabrows@TPATM\tabrows@TPATM + \def\arrowparams@TPATM{border=1pt}% + \begingroup + \def\inputalphabet@TPATM{#2,}% + \whiledo{\not\equal{\inputalphabet@TPATM}{}} + {% + \getsymbol@TPATM\inputalphabet@TPATM\inputsymbol@TPATM + \getoutput@TPATM\state@TPATM\inputsymbol@TPATM + \ifx\currentnstate@TPATM\nstate@TPATM + \expandafter\global\expandafter\let + \csname deltaflag(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname=\relax + \ifthenelse + {% + \value{currstate@TPATM}=#7% + \and\equal\inputsymbol@TPATM\nextinputtapesymbol@TPATM + \and\lengthtest{\tapeadvancement@TPATM pt>0pt}% + } + {% + \xdef\arrowparams@TPATM + {% + doubleline=true,doublecolor=activetranscolor@TPATM,doublesep=\tapeadvancement@TPATM pt,% + arrowsize=1pt 1.5,border=1pt% + }% + \def\@hlinput@TPATM{\noexpand\rowcolor{activetranscolor@TPATM}}% + } + {\let\@hlinput@TPATM=\empty}% + \addtabrow@TPATM\tabrows@TPATM{\inputsymbol@TPATM}% + \ifnum\value{currstate@TPATM}=#7\relax + \ifx\inputsymbol@TPATM\inputtapesymbol@TPATM + \fix@nextstate@TPATM% + \fi + \fi + \fi + }% + \expandafter\finalisetabrows@TPATM\the\tabrows@TPATM\@nil\tabrows@TPATM + \global\tabrows@TPATM=\tabrows@TPATM + \endgroup + \expandafter\gdef\expandafter\fullarrowparams@TPATM\expandafter{\expandafter[\arrowparams@TPATM]}% + \expandafter\gdef\expandafter\addarrowparams@TPATM\expandafter{\expandafter,\arrowparams@TPATM}% + \global\let\inputalphabet@TPATM=\currentia@TPATM + \transitionarrayparameters + \csname deltafliplabel(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname + \edef\mkcirclabel@TPATM + {% + \iffliplabel@TPATM\noexpand\aput\else\noexpand\bput\fi + \expandafter\ifx\csname deltalabelopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\@nnil + \else + [\csname deltalabelopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname]% + \fi + (\csname deltalabelpos(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname)% + }% + \edef\mklinelabel@TPATM + {% + \iffliplabel@TPATM\noexpand\bput\else\noexpand\aput\fi + \expandafter\ifx\csname deltalabelopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\@nnil + \else + [\csname deltalabelopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname]% + \fi + (\csname deltalabelpos(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname)% + }% + \expandafter + \ifx\csname deltaopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\@nnil + \ifx\state@TPATM\nstate@TPATM + \expandafter\nccircle\fullarrowparams@TPATM{->}{state\state@TPATM}{.35}% + \mkcirclabel@TPATM{\the\tabrows@TPATM}% + \else + \expandafter\ncline\fullarrowparams@TPATM{->}{state\state@TPATM}{state\nstate@TPATM}% + \mklinelabel@TPATM{\the\tabrows@TPATM}% + \fi + \else + \ifx\state@TPATM\nstate@TPATM + \edef\next + {% + \noexpand\nccircle + \expandafter + \ifx\csname deltaopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\empty + \fullarrowparams@TPATM + \else + [\csname deltaopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\addarrowparams@TPATM]% + \fi + }% + \next{->}{state\state@TPATM}{.35}% + \mkcirclabel@TPATM{\the\tabrows@TPATM}% + \else + \edef\next + {% + \noexpand\ncarc + \expandafter + \ifx\csname deltaopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\empty + \fullarrowparams@TPATM + \else + [\csname deltaopt(\state@TPATM;\inputsymbol@TPATM)@TPATM\endcsname\addarrowparams@TPATM]% + \fi + }% + \next{->}{state\state@TPATM}{state\nstate@TPATM}% + \mklinelabel@TPATM{\the\tabrows@TPATM}% + \fi + \fi + }% + {}% + }% + }% + \end{pspicture}% + \endgroup + }% + } + {% No; draw state transition table. + % First, the list of states. + \rput[l](0.07,0.81){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\statesname}}% + \mkfactor\startx@TPATM + {\ratio{\widthof{\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\statesname}}}{\psyunit}}% + \mkfactor{\statewidth@TPATM}{0+(0.88pt-\startx@TPATM pt)/\value{states@TPATM}}% + \ifthenelse{\lengthtest{\statewidth@TPATM pt>.1pt}}{\def\statewidth@TPATM{.1}}{}% + \filltofive@TPATM{\startx@TPATM}% + \filltofive@TPATM{\statewidth@TPATM}% + \def\states@TPATM{#1,}% + \setcounter{currstate@TPATM}{0}% + \multido{\n=\startx@TPATM+\statewidth@TPATM}{\value{states@TPATM}} + {% + \stepcounter{currstate@TPATM}% + \mkfactor{\endx@TPATM}{\real{\n}+\statewidth@TPATM pt}% + \getstate@TPATM{\states@TPATM}{,linewidth=2pt,linecolor=red}{\statetype@TPATM}{\state@TPATM}% + \ifnum\value{currstate@TPATM}=#7 + \ifacceptingstate@TPATM\global\acceptingstate@TPATMtrue\else\global\acceptingstate@TPATMfalse\fi + \fi + \edef\next + {% + \noexpand + \psframe + [% + fillstyle=solid,% + fillcolor=\ifnum\value{currstate@TPATM}=#7currstatecolor\else cellcolor\fi\statetype@TPATM + ]% + }% + \next(\n,0.76)(\endx@TPATM,0.86)% + \mkfactor{\charpos@TPATM}{\real{\n}+\statewidth@TPATM pt/2}% + \rput(\charpos@TPATM,0.81){\state@TPATM}% + \ifthenelse{\value{currstate@TPATM}=#4}{\psline{->}(\charpos@TPATM,0.74)(\charpos@TPATM,0.76)}{}% + }% + % Next, the state transition table itself. + \psframe[fillstyle=solid,fillcolor=cellcolor,dimen=inner](0.07,0.14)(0.93,0.74) + \rput[lt](0.07,0.74){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\smaller\statetransname}}% + % Construct tabular declaration and first row. + \def\inputalphabet@TPATM{#2,}% + \tabrows@TPATM={}% + \tabdecl@TPATM={}% + \ifthenelse{\equal{\inputtapesymbol@TPATM}{\nextinputtapesymbol@TPATM}} + {% + \replacecolor{oldinputcolor@TPATM}{markstatecolor@TPATM}% + \replacecolor{newinputcolor@TPATM}{markstatecolor@TPATM}% + \replacecolor{oldoutputcolor@TPATM}{currstatecolor}% + \replacecolor{newoutputcolor@TPATM}{currstatecolor}% + } + {% + \colorbetween[\tapeadvancement@TPATM]{oldinputcolor@TPATM}{pagecolor}{markstatecolor@TPATM}% + \colorbetween[\tapeadvancement@TPATM]{newinputcolor@TPATM}{markstatecolor@TPATM}{pagecolor}% + \ifthenelse{\lengthtest{\tapeadvancement@TPATM pt>0.5pt}} + {% + \colorbetween[\tapeadvancement@TPATM]{newoutputcolor@TPATM}{currstatecolor}{pagecolor}% + \replacecolor{oldoutputcolor@TPATM}{markstatecolor@TPATM}% + } + {% + \colorbetween[\tapeadvancement@TPATM]{oldoutputcolor@TPATM}{pagecolor}{currstatecolor}% + \replacecolor{newoutputcolor@TPATM}{markstatecolor@TPATM}% + }% + }% + \whiledo{\not\equal{\inputalphabet@TPATM}{}} + {% + \getsymbol@TPATM\inputalphabet@TPATM\inputsymbol@TPATM + \protected@edef\newtabrows@TPATM{\the\tabrows@TPATM&\noexpand\formatsymbol{\inputsymbol@TPATM}}% + \expandafter\tabrows@TPATM\expandafter{\newtabrows@TPATM}% + \edef\newtabdecl@TPATM + {% + \the\tabdecl@TPATM + \ifx\inputsymbol@TPATM\nextinputtapesymbol@TPATM>{\noexpand\columncolor{newinputcolor@TPATM}}\fi + \ifx\inputsymbol@TPATM\inputtapesymbol@TPATM>{\noexpand\columncolor{oldinputcolor@TPATM}}\fi + c% + }% + \expandafter\tabdecl@TPATM\expandafter{\newtabdecl@TPATM}% + }% + % Construct remaining rows. + \setcounter{currstate@TPATM}{0}% + \def\states@TPATM{#1,}% + \whiledo{\not\equal{\states@TPATM}{}} + {% + \stepcounter{currstate@TPATM}% + \getsymbol@TPATM\states@TPATM\state@TPATM + \protected@edef\newtabrows@TPATM + {% + \the\tabrows@TPATM\noexpand\\% + \ifnum\value{currstate@TPATM}=#7 \noexpand\rowcolor{markstatecolor@TPATM}\fi\state@TPATM + }% + \expandafter\tabrows@TPATM\expandafter{\newtabrows@TPATM}% + \def\inputalphabet@TPATM{#2,}% + \whiledo{\not\equal{\inputalphabet@TPATM}{}} + {% + \getsymbol@TPATM\inputalphabet@TPATM\inputsymbol@TPATM + \protected@edef\newtabrows@TPATM + {% + \the\tabrows@TPATM&% + \ifnum\value{currstate@TPATM}=#7 + \ifx\inputsymbol@TPATM\inputtapesymbol@TPATM + \noexpand + \multicolumn{1}{>{\noexpand\columncolor{oldoutputcolor@TPATM}}c} + {\formatdfaoutput@TPATM\state@TPATM\inputsymbol@TPATM}% + \else + \ifx\inputsymbol@TPATM\nextinputtapesymbol@TPATM + \noexpand + \multicolumn{1}{>{\noexpand\columncolor{newoutputcolor@TPATM}}c} + {\formatdfaoutput@TPATM\state@TPATM\inputsymbol@TPATM}% + \else + \formatdfaoutput@TPATM\state@TPATM\inputsymbol@TPATM + \fi + \fi + \else + \formatdfaoutput@TPATM\state@TPATM\inputsymbol@TPATM + \fi + }% + \expandafter\tabrows@TPATM\expandafter{\newtabrows@TPATM}% + % Set succeeding state (and output symbol). + \ifnum\value{currstate@TPATM}=#7\relax + \ifx\inputsymbol@TPATM\inputtapesymbol@TPATM + \getoutput@TPATM{\state@TPATM}{\inputsymbol@TPATM}% + \fix@nextstate@TPATM + \fi + \fi + }% + }% + % Save tabular into a box. + \savebox{\tabbox@TPATM} + {% + \raisebox{\depth} + {% + \setlength{\fboxsep}{0.4pt}% + \fbox + {% + \clipbox + {% + \edef\next{\noexpand\begin{tabular}[b]{c\the\tabdecl@TPATM}}% + \statetransitiontablepreamble + \next + \the\tabrows@TPATM + \end{tabular}% + }% + }% + }% + }% + % Print state transition table, with some decoration. + \rput(0.5,0.44) + {% + \raisebox{.5\tabcolsep} + {\rotatebox{90}{\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\smaller \statename}}}% + \parbox[b]{\wd\tabbox@TPATM} + {% + \offinterlineskip\raggedleft + \psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\smaller \inputname}\kern\tabcolsep\\% + \usebox{\tabbox@TPATM}% + }% + \raisebox{.5\tabcolsep} + {% + \rotatebox{90} + {\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\smaller[2]\nextstatename}}% + }% + \label@output@TPATM + }% + }% + % Draw output tape, if mealy automaton. + \draw@outputtape@TPATM{#8}% + % Calculate number of succeeding state. + \setcounter{currstate@TPATM}{0}% + \def\states@TPATM{#1,}% + \whiledo{\not\equal{\states@TPATM}{}} + {% + \stepcounter{currstate@TPATM}% + \getsymbol@TPATM\states@TPATM\state@TPATM + \edef\state@TPATM{\state@TPATM}% + \ifx\state@TPATM\nextstate@TPATM + \setcounter{nextstate@TPATM}{\value{currstate@TPATM}}% + \fi + }% + % Calculate new output tape. + \mk@new@outputtape@TPATM{#8}% + \end{pspicture}% + \endgroup + } + + +% \dfa{<width>}{<height>}{<states>}{<inputalphabet>}{<statetransitions>} +% {<initial state>}{<input tape>}{<tape position>}{<current state>} +% draws a deterministic finite automaton. +% +% The parameters have the following meanings: +% <width> Width of the automaton to be drawn. +% <height> Height of the automaton to be drawn. +% <states> Comma-separated list (symbolically) specifying the set of states. +% <inputalphabet> Comma-separated list (symbolically) specifying the set of input symbols. +% <statetransitions> Comma-separated list (symbolically) specifying the state transition function (also giving the +% output symbols associated with state transitions). +% <initial state> Number of the initial state. +% <input tape> Comma-separated list (symbolically) specifying the contents of the input tape. +% <tape position> Fixed-point number (greater or equal 1) specifying the current position of the head reading input +% and output tape. The symbol currently read corresponds to the integer part of <tape position>. +% <current state> Number of the current state. +% +% The standard version of \dfa displays a state transition table, i.e. for every combination of state and +% input symbol, the successor state is displayed in a tabular. The current state, current input +% symbol and next input symbol (if <tape position> is not integer) are indicated by colored bars. +% +% There is a starred version \mealyautomaton* which displays a state transition graph where states are displayed as +% circles and state transitions as arrows between circles. The `active' transition (leading from the current to the next +% state) is highlighted. +% +% The <states> parameter looks like <state1>,<state2>,...,<staten>, where every single <state> has the following form: +% {(<x>,<y>)\accept <symbol>} +% where (<x>,<y>) and the special keyword \accept are optional and <symbol> is the symbolic name of the state. +% The optional parameter (<x>,<y>) is used only in the starred version \mealyautomaton*. If given, it specifies the +% position of the circle representing the state in the state transition graph, in PSTricks notation. The origin of the +% state transition graph is in the middle of the area reserved for it, stretching one unit in all directions, so that +% the corners of the area are at coordinates (-1,1), (1,1), (1,-1), (-1,-1). If not given in the starred version +% \mealyautomaton*, the position is calculated automatically in a `bead' style. +% The special keyword \accept flags this state as an accepting one. +% If the optional coordinates argument is not given, the outer curly braces may be left out, but otherwise leaving the +% curly braces out would disturb the parsing of the comma-separated list because of the comma between <x> and <y>. +% +% The <statetransitions> parameter looks like <trans1>,<trans2>,...,<transm>, where every single <trans> has the +% following form: +% [<opt>]<state>;<input>-><state'> +% where [<opt>] is optional. <state> and <input> are the arguments of the state transition function, and <state'> is the +% successor state. +% The optional parameter [<opt>] is used only in the starred version \mealyautomaton*. If given, it specifies additional +% optional parameters for the node connection command (\nccircle or \ncarc) drawing the arrow for this +% transition. \ncline is used for transitions from a state to itself. For transitions between states, \ncarc is used +% whenever the optional argument is given, otherwise \ncline is used. This is a seldom instance where giving an empty +% optional argument is different from giving no optional argument at all: Giving the optional argument [] switches +% between \ncline and \ncarc (useful if two transitions go `back and forth' between two states). +% + +\newcommand{\initializedfa@TPATM} +{% + \renewcommand{\draw@outputtape@TPATM}[1] + {% + \colorbetween{outercirclecolor@TPATM}{black}{automatoncolor}% + \pscircle[fillstyle=solid,fillcolor=outercirclecolor@TPATM,linewidth=.5\pslinewidth](0.5,0.07){0.25}% + \ifacceptingstate@TPATM + \replacecolor{acceptlampcolor@TPATM}{red}% + \else + \colorbetween[.1]{acceptlampcolor@TPATM}{red}{automatoncolor}% + \fi + \pscircle[fillstyle=solid,fillcolor=acceptlampcolor@TPATM,linewidth=.5\pslinewidth](0.5,0.07){0.15}% + \rput[l](0.53,0.07){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\acceptname}}% + }% + \renewcommand{\getoutput@TPATM}[2] + {% + \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter\nstate@TPATM + \expandafter\expandafter\expandafter{\csname delta(##1;##2)@TPATM\endcsname}% + }% + \renewcommand{\inittabrows@TPATM}[1]{##1={\smaller\begin{tabular}{@{}r@{}}}}% + \renewcommand{\addtabrow@TPATM}[2] + {% + \protected@edef\newtabrows@TPATM{\the##1\@hlinput@TPATM\formatsymbol{##2}\noexpand\\}% + \expandafter##1\expandafter{\newtabrows@TPATM}% + }% + \def\formatdfaoutput@TPATM##1##2{\csname delta(##1;##2)@TPATM\endcsname}% + \renewcommand{\label@output@TPATM}{}% + \renewcommand{\fix@nextstate@TPATM} + {% + \global\let\nextstate@TPATM=\nstate@TPATM + }% + \renewcommand{\mk@new@outputtape@TPATM}[1]{}% + }% + +\newcommand{\dfa} +{% + \initializedfa@TPATM + \dfa@TPATM + } + +\newcommand{\dfa@TPATM} +{% + \@ifstar + {\setboolean{stategraph@TPATM}{true}\@dfa@TPATM} + {\setboolean{stategraph@TPATM}{false}\@dfa@TPATM}% + } + +\newcommand{\@dfa@TPATM}[2] +{% + \ifthenelse{\boolean{psspecialsallowed}} + {% + \begingroup + \setlength{\@tempdima}{#1}% + \setlength{\@tempdimb}{#2}% + \psset{xunit=\@tempdima,yunit=\@tempdimb,arrowinset=0}% + \let\next=\@@dfa@TPATM + } + {% + \rule{#1}{#2}% + \let\next=\@@nodfa@TPATM + }% + \next +} + +\newcommand{\@@nodfa@TPATM}[7]{} + +\newcommand{\@@dfa@TPATM}[7]{\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{#6}{#7}{}} + + +% \simulatedfa{<width>}{<height>}{<states>}{<inputalphabet>}{<statetransitions>} +% {<initial state>}{<input tape>}{<number of steps>}{<tape move resolution>} +% simulates a deterministic finite automaton. +% +% The parameters <width>, <height>, <states>, <inputalphabet>, <statetransitions>, <initial state>, and <input tape> +% have the same meaning as for \dfa. +% <number of steps> gives the number of state transitions to perform (in fact, the first state transition occurs after +% the first step, so <number of steps>=1 means no state transition. +% The simulation starts with both tapes at the beginning, in the initial state. After this, the simulation proceeds in +% the following steps: +% 1) Change state. +% 2) Advance input tape and reiterate. +% The steps are realised with TeXPower's \step mechanism. This means the whole simulation will lead to the corresponding +% number of `subpages' each displaying the automaton in changing states. +% If <tape move resolution>=1, then step number 3 will just switch over the tape position. Otherwise, advancing the tape +% will take <tape move resolution> intermediate steps, which are automatically animated using hyperref's pdfpageduration +% mechanism, i.e. when displayed in acroread's full screen mode (with automatic advancing activated), a `smooth' tape +% movement will be seen. +% \simulatedfa comes in normal and starred versions, with the same semantics as for \dfa, i.e. the normal version +% displays a state transition table, the starred version displays a state transition graph. + +\newcommand{\simulatedfa} +{% + \initializedfa@TPATM + \@ifstar + {\setboolean{stategraph@TPATM}{true}\@simulatedfa@TPATM} + {\setboolean{stategraph@TPATM}{false}\@simulatedfa@TPATM}% + } + +\newcommand{\@simulatedfa@TPATM}[2] +{% + \ifthenelse{\boolean{psspecialsallowed}} + {% + \begingroup + \setlength{\@tempdima}{#1}% + \setlength{\@tempdimb}{#2}% + \psset{xunit=\@tempdima,yunit=\@tempdimb,arrowinset=0}% + \let\next=\@@simulatedfa@TPATM + } + {% + \rule{#1}{#2}% + \let\next=\@@nosimulatedfa@TPATM + }% + \next +} + +\newcommand{\@@nosimulatedfa@TPATM}[7]{} + +\newcounter{currentdfastate@TPATM} +\newcounter{currentsupstep@TPATM} +\newcounter{currentsubstep@TPATM} +\newboolean{beginautosim@TPATM} +\newcommand{\autosimduration}{0.04} +\releasecounter{currentdfastate@TPATM}\releasecounter{nextstate@TPATM} + +\newcommand{\@@simulatedfa@TPATM}[7] +{% + % Setup initial state. + \setcounter{currentsupstep@TPATM}{0}% + \setcounter{currentdfastate@TPATM}{#4}% + \setcounter{nextstate@TPATM}{0}% + \stepwise[\setcounter{currentdfastate@TPATM}{#4}\setcounter{nextstate@TPATM}{0}] + {% + \setboolean{beginautosim@TPATM}{true}% + % Main loop for state transitions. + \whiledo{\value{currentsupstep@TPATM}<#6} + {% + % At the beginning, the situation right before the state transition is displayed. This is effected by only + % displaying the last step of the tape movement. + \ifthenelse{\boolean{beginautosim@TPATM}} + {\setboolean{beginautosim@TPATM}{false}\setcounter{currentsubstep@TPATM}{#7-1}} + {\setcounter{currentsubstep@TPATM}{0}}% + % Inner loop for tape movement. + \whiledo{\value{currentsubstep@TPATM}<#7} + {% + \stepcounter{currentsubstep@TPATM}% + % Display sequence of steps while the tape gradually moves. + \mkfactor{\tapeposition@TPATM}{\value{currentsupstep@TPATM}+\arabic{currentsubstep@TPATM}pt/#7}% + \ifthenelse{\value{currentsubstep@TPATM}=#7} + {% + \setcounter{tmpcnta@TP}{\value{currentsupstep@TPATM}+1}% + \ifthenelse{\value{tmpcnta@TP}=#6}{\switch}{\switch[][\boolean{firstactivation}]}{} + {% + \begingroup\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{\tapeposition@TPATM}{\value{currentdfastate@TPATM}}{}% + \afterstep{\stopAdvancing}% + \setcounter{currentdfastate@TPATM}{\value{nextstate@TPATM}}\setcounter{nextstate@TPATM}{-1}% + }% + } + {% + \switch[][\boolean{firstactivation}]{} + {% + \begingroup\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{\tapeposition@TPATM}{\value{currentdfastate@TPATM}}{}% + \afterstep{\pageDuration{\autosimduration}}% + }% + }% + }% + \stepcounter{currentsupstep@TPATM}% + % After the tape is in the next (or initial) position, switch state and reiterate. + \ifthenelse{\value{currentsupstep@TPATM}=#6}{} + {% + \switch[][\boolean{firstactivation}]{}% + {% + \begingroup\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{\tapeposition@TPATM}{\value{currentdfastate@TPATM}}{}% + }% + }% + }% + }% +\endgroup +} + + +%----------------------------------------------------------------------------------------------------------------------- +% Finite Automata with output. + +% \mealyautomaton{<width>}{<height>}{<states>}{<inputalphabet>}{<statetransitions>} +% {<initial state>}{<input tape>}{<tape position>}{<current state>}{<output tape>} +% draws a mealy automaton (deterministic finite automaton with output tape, output is triggered by state transitions). +% +% The parameters have the same meanings as for \dfa, with one addition: +% <output tape> Comma-separated list (symbolically) specifying the contents of the output tape. +% +% The standard version of \mealyautomaton displays a state transition table, i.e. for every combination of state and +% input symbol, the successor state and output symbol are displayed in a tabular. The current state, current input +% symbol and next input symbol (if <tape position> is not integer) are indicated by colored bars. +% +% There is a starred version \mealyautomaton* which displays a state transition graph where states are displayed as +% circles and state transitions as arrows between circles. The `active' transition (leading from the current to the next +% state) is highlighted. +% +% The <states> parameter has the same structure as for \dfa. +% +% The <statetransitions> parameter looks like <trans1>,<trans2>,...,<transm>, where every single <trans> has the +% following form: +% [<opt>]<state>;<input>-><state'>;<output> +% where [<opt>] is optional. <state> and <input> are the arguments of the state transition function, and <state'> and +% <output> are the successor state and output symbol, respectively. +% The optional parameter [<opt>] is used only in the starred version \mealyautomaton*. If given, it specifies additional +% optional parameters for the node connection command (\nccircle or \ncarc) drawing the arrow for this +% transition. \ncline is used for transitions from a state to itself. For transitions between states, \ncarc is used +% whenever the optional argument is given, otherwise \ncline is used. This is a seldom instance where giving an empty +% optional argument is different from giving no optional argument at all: Giving the optional argument [] switches +% between \ncline and \ncarc (useful if two transitions go `back and forth' between two states). +% + +\newcommand{\initializema@TPATM} +{% + \renewcommand{\draw@outputtape@TPATM}[1] + {% + \rput[l](0.07,0.07){\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\outputtapename}}% + \mkfactor{\startx@TPATM}{\ratio{\tapepos@TPATM}{1pt}}% + \setcounter{tapecells@TPATM}{6+\value{currinputsymbol@TPATM}}% + \multips(\startx@TPATM,0.02)(0.1,0){\value{tapecells@TPATM}}{\psframe[fillstyle=solid,fillcolor=cellcolor](0.1,0.1)}% + \mkfactor{\startx@TPATM}{\ratio{\tapepos@TPATM+0.05pt}{1pt}}% + \filltofive@TPATM{\startx@TPATM}% + \protected@edef\tapecontents@TPATM{##1,}% + \setcounter{currtapepos@TPATM}{0}% + \multido{\n=\startx@TPATM+0.10000}{\value{tapecells@TPATM}} + {% + \ifx\tapecontents@TPATM\empty + \else + \stepcounter{currtapepos@TPATM}% + \getsymbol@TPATM\tapecontents@TPATM\outputtapesymbol@TPATM + \ifnum\value{currtapepos@TPATM}=\value{currinputsymbol@TPATM}\relax + \global\let\outputtapesymbol@TPATM\outputtapesymbol@TPATM + \fi + \rput(\n,0.07){\formatsymbol\outputtapesymbol@TPATM}% + \fi + }% + \psframe[linewidth=2pt,linecolor=mathcolor](0.45,0.02)(0.55,0.12) + }% + \renewcommand{\getoutput@TPATM}[2] + {\expandafter\expandafter\expandafter\@getoutput@TPATM\csname delta(##1;##2)@TPATM\endcsname\@nil}% + \def\@getoutput@TPATM##1;##2\@nil{\def\nstate@TPATM{##1}\def\output@TPATM{##2}}% + \renewcommand{\inittabrows@TPATM}[1]{##1={\smaller\begin{tabular}{rcl}}}% + \renewcommand{\addtabrow@TPATM}[2] + {% + \protected@edef\newtabrows@TPATM + {% + \the##1% + \@hlinput@TPATM\formatsymbol{##2}&\origmath{\vartriangleright}&\noexpand\formatsymbol{\output@TPATM}\noexpand\\% + }% + \expandafter##1\expandafter{\newtabrows@TPATM}% + }% + \def\formatdfaoutput@TPATM##1##2% + {\expandafter\expandafter\expandafter\@formatdfaoutput@TPATM\csname delta(##1;##2)@TPATM\endcsname\@nil}% + \def\@formatdfaoutput@TPATM##1;##2\@nil{##1;\formatsymbol{##2}}% + \renewcommand{\label@output@TPATM} + {% + \raisebox{.5\tabcolsep} + {\rotatebox{90}{\psframebox[linestyle=none,fillstyle=solid,fillcolor=autoplatecolor]{\smaller \outputname}}}% + }% + \renewcommand{\fix@nextstate@TPATM} + {% + \global\let\newoutputsymbol@TPATM=\output@TPATM + \global\let\nextstate@TPATM=\nstate@TPATM + }% + \renewcommand{\mk@new@outputtape@TPATM}[1]% + {% + \setcounter{currtapepos@TPATM}{0}% + \protected@edef\tapecontents@TPATM{##1,}% + \let\newoutputtape@TPATM=\empty + \whiledo{\not\equal{\tapecontents@TPATM}{}} + {% + \stepcounter{currtapepos@TPATM}% + \getsymbol@TPATM\tapecontents@TPATM\outputsymbol@TPATM + \ifnum\value{currtapepos@TPATM}=\value{currinputsymbol@TPATM}% + \let\outputsymbol@TPATM=\newoutputsymbol@TPATM% + \fi + \protected@edef\newoutputtape@TPATM{\newoutputtape@TPATM\outputsymbol@TPATM,}% + }% + \expandafter\gobblelastcomma@TPATM\newoutputtape@TPATM\@nil\newoutputtape@TPATM + }% + } + +\newcommand{\mealyautomaton} +{% + \initializema@TPATM + \mealyautomaton@TPATM + } + +\newcommand{\mealyautomaton@TPATM} +{% + \@ifstar + {\setboolean{stategraph@TPATM}{true}\@mealyautomaton@TPATM} + {\setboolean{stategraph@TPATM}{false}\@mealyautomaton@TPATM}% + } + +\newcommand{\@mealyautomaton@TPATM}[2] +{% + \ifthenelse{\boolean{psspecialsallowed}} + {% + \begingroup + \setlength{\@tempdima}{#1}% + \setlength{\@tempdimb}{#2}% + \psset{xunit=\@tempdima,yunit=\@tempdimb,arrowinset=0}% + \let\next=\@@genericdfa@TPATM + } + {% + \rule{#1}{#2}% + \let\next=\@@nomealyautomaton@TPATM + }% + \next +} + +\newcommand{\@@nomealyautomaton@TPATM}[8]{} + + +% \simulatema{<width>}{<height>}{<states>}{<inputalphabet>}{<statetransitions>} +% {<initial state>}{<input tape>}{<number of steps>}{<tape move resolution>}{<output tape>} +% simulates a mealy automaton (deterministic finite automaton with output tape, output is triggered by state +% transitions). +% +% The parameters <width>, <height>, <states>, <inputalphabet>, <statetransitions>, <initial state>, <input tape>, +% <output tape> have the same meaning as for \mealyautomaton. +% The parameters <number of steps> and <tape move resolution> have the same meaning as for \simulatedfa. +% The simulation starts with both tapes at the beginning, in the initial state and with the output tape in the state +% given by <output tape>. After this, the simulation proceeds in the following steps: +% 1) Write output symbol of the `active' transition to the output tape. +% 2) Change state. +% 3) Advance both tapes and reiterate. +% \simulatema comes in normal and starred versions, with the same semantics as for \mealyautomaton, i.e. the normal +% version displays a state transition table, the starred version displays a state transition graph. + +\newcommand{\simulatema} +{% + \initializema@TPATM + \@ifstar + {\setboolean{stategraph@TPATM}{true}\@simulatema@TPATM} + {\setboolean{stategraph@TPATM}{false}\@simulatema@TPATM}% + } + +\newcommand{\@simulatema@TPATM}[2] +{% + \ifthenelse{\boolean{psspecialsallowed}} + {% + \begingroup + \setlength{\@tempdima}{#1}% + \setlength{\@tempdimb}{#2}% + \psset{xunit=\@tempdima,yunit=\@tempdimb,arrowinset=0}% + \let\next=\@@simulatema@TPATM + } + {% + \rule{#1}{#2}% + \let\next=\@@nosimulatema@TPATM + }% + \next +} + +\newcommand{\@@nosimulatema@TPATM}[8]{} + +\newcommand{\@@simulatema@TPATM}[8] +{% + % Setup initial state. + \setcounter{currentsupstep@TPATM}{0}% + \setcounter{currentdfastate@TPATM}{#4}\gdef\currentoutputtape@TPATM{#8}% + \stepwise[\setcounter{currentdfastate@TPATM}{#4}\gdef\currentoutputtape@TPATM{#8}] + {% + \setboolean{beginautosim@TPATM}{true}% + % Main loop for state transitions. + \whiledo{\value{currentsupstep@TPATM}<#6} + {% + % At the beginning, the situation right before the state transition is displayed. This is effected by only + % displaying the last step of the tape movement. + \ifthenelse{\boolean{beginautosim@TPATM}} + {\setboolean{beginautosim@TPATM}{false}\setcounter{currentsubstep@TPATM}{#7-1}} + {\setcounter{currentsubstep@TPATM}{0}}% + % Inner loop for tape movement. + \whiledo{\value{currentsubstep@TPATM}<#7} + {% + \stepcounter{currentsubstep@TPATM}% + % Display sequence of steps while the tape gradually moves. + \mkfactor{\tapeposition@TPATM}{\value{currentsupstep@TPATM}+\arabic{currentsubstep@TPATM}pt/#7}% + \switch[][\boolean{firstactivation}]{} + {% + \begingroup\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{\tapeposition@TPATM}{\value{currentdfastate@TPATM}}{\currentoutputtape@TPATM}% + \ifthenelse{\value{currentsubstep@TPATM}=#7} + {\afterstep{\stopAdvancing}\global\let\currentoutputtape@TPATM\newoutputtape@TPATM}% + {\afterstep{\pageDuration{\autosimduration}}}% + }% + }% + \stepcounter{currentsupstep@TPATM}% + % After the tape is in the next (or initial) position, display new output symbol. + \switch[][\boolean{firstactivation}]{} + {% + \begingroup\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{\tapeposition@TPATM}{\value{currentdfastate@TPATM}}{\currentoutputtape@TPATM}% + \setcounter{currentdfastate@TPATM}{\value{nextstate@TPATM}}\setcounter{nextstate@TPATM}{-1}% + }% + % Next, switch state and reiterate. + \ifthenelse{\value{currentsupstep@TPATM}=#6}{\switch}{\switch[][\boolean{firstactivation}]}{}% + {% + \begingroup\genericdfa@TPATM{#1}{#2}{#3}{#4}{#5}{\tapeposition@TPATM}{\value{currentdfastate@TPATM}}{\currentoutputtape@TPATM}% + }% + }% + }% +\endgroup +} + +%KEEPCOMMENTS +%</automata> +%======================================================================================================================= +%<*fixseminar> +%<<KEEPCOMMENTS +%======================================================================================================================= +% File: fixseminar.sty +% +% Fix some problems in conjunction with seminar. +% +% This package is part of the TeXPower bundle, to be found at +% +% http://texpower.sourceforge.net/ +% +% If using hyperref, load this package _after_ hyperref. +% +%======================================================================================================================= +% Author: Stephan Lehmke <Stephan.Lehmke@cs.uni-dortmund.de> +% +% v0.0.1 Mar 28, 2000 First version for the pre-alpha release of texpower and hyperref v6.70a. +% +% v0.0.1a May 18, 2000 Added a \vss to a \vbox to get rid of an `overfull vbox' message. +% +% v0.0.2 Jun 02, 2000 Now handle seminar as well as powersem. +% +% v0.0.3 Sep 07, 2000 hyperref v6.70u and later don't have the \@hyperfixhead bug any more. +% +% v0.0.4 Nov 22, 2002 Now using ifpdf package if available. +% As hyperref v6.70u exists for some time now, the \@hyperfixhead hack is removed. +% Fixed a problem with \twoup (bug found and fix proposed by Laurent Mugnier). +% Added a preliminary fix for rotating slides with pdftex. +% +% v0.0.5 May 26, 2003 A small change to make fixseminar work better when hyperref is not loaded. + + +\NeedsTeXFormat{LaTeX2e} + +\ProvidesPackage% +{fixseminar}% +[2003/05/26 v0.0.5 Fix some problems of seminar.] + + +%======================================================================================================================= + +\RequirePackage{ifthen} + + +%======================================================================================================================= +% Options and general setup. + +\ProcessOptions + + +% The switch \ifpdf is to determine whether pdfLaTeX is being run and outputting pdf, using Heiko Oberdiek's faultproof +% pdf detector: + +\IfFileExists{ifpdf.sty} +{% + \RequirePackage{ifpdf}% + } +{% + \@ifundefined{pdftrue} + {% + \expandafter\newif\csname ifpdf\endcsname + \ifx\pdfoutput\undefined + \else + \ifx\pdfoutput\relax + \else + \ifcase\pdfoutput + \else + \pdftrue + \fi + \fi + \fi + }{}% + } + + +%======================================================================================================================= +% Here come the fixes. + +% We need to make sure that magnification, as used by seminar, is respected when setting \pdfpageheight and +% \pdfpagewidth. We strip the pt and add truept which respects magnification. + + +\ifthenelse{\boolean{pdf}}% Are we outputting PDF? +{% Yes. + \@ifclassloaded{seminar}% seminar document class? + {% + \RequirePackage{graphics}% + \def\leftsliderotation#1{\rotatebox{90}{#1}}% + \def\rightsliderotation#1{\rotatebox{270}{#1}}% + \sliderotation{left}% + }{}% + \AtBeginDocument% Then we need to set \pdfpagewidth and \pdfpageheight in a _true_ unit to make sure + {% the pdf page has the right dimensions even when magnifying (as seminar does). + \setlength{\pdfhorigin}{1truein}% \pdfhorigin and \pdfvorigin also need to be set to true dimensions. + \setlength{\pdfvorigin}{1truein}% + \@ifclassloaded{seminar}% seminar document class? + {% + \ifportrait% Portrait slides? + \setlength{\pdfpageheight}{\strip@pt\paperheight truept}% + \setlength{\pdfpagewidth}{\strip@pt\paperwidth truept}% + \else% Landscape. Need to exchange height and width. + \renewcommand{\printlandscape} + {% + \setlength{\pdfpagewidth}{\strip@pt\paperheight truept}% + \setlength{\pdfpageheight}{\strip@pt\paperwidth truept}% + }% + \fi + }% + {% + \setlength{\pdfpageheight}{\strip@pt\paperheight truept}% + \setlength{\pdfpagewidth}{\strip@pt\paperwidth truept}% + }% + }% +} +{% No. In this case we define \special@paper which will put an appropriate \special into the dvi file. + \@ifclassloaded{seminar} + {% + \ifportrait + \edef\special@paper{\the\paperwidth,\the\paperheight}% + \else% Need to exchange height and width. + \renewcommand{\printlandscape}{\edef\special@paper{\the\paperheight,\the\paperwidth}} + \fi + \AtBeginDocument{\special{papersize=\special@paper}}% + }% + {% + }% + }% + + +% There is a bug in old hyperref versions to the effect that apparently, when using seminar there is a glitch in +% vertical spacing. Issue a warning if hyperref is too old. + +\@ifpackageloaded{hyperref}% Looking for \@hyperfixhead bug. +{% + \@ifpackagelater{hyperref}{2000/09/07}% Is the \@hyperfixhead bug present in hyperref? + {}% No. + {% Yes. Issue a warning. + \PackageWarning{fixseminar} + {Package hyperref too old (older than 6.70u).\MessageBreak Expect problems with seminar}% + }% + }{} +%KEEPCOMMENTS +%</fixseminar> +% =============================================================================== +%<*tplists> +%<<KEEPCOMMENTS +% =============================================================================== +% File: tplists.sty +% +% Function: The package provides dynamic lists. The following +% environments/lists are available +% 1) 'stepenum', 'stepitem', 'stepeqlist', 'stepcompactenum' +% 'stepcompactitem' and 'stepcompacteqlist'. +% 2) 'flipenum', 'flipitem', 'flipeqlist', 'flipcompactenum', +% 'flipcompactitem', and 'flipcompacteqlist' +% 3) 'dimenum', 'dimitem', 'dimeqlist', 'dimcompactenum', +% 'dimcompactitem', and 'dimcompacteqlist' +% where 'step' is short for stepped, 'flip' for flipped and +% 'dim' for dimmed. The packages 'paralist' and 'eqlist' +% must be loaded before this package to use the *eqlist and +% *compact* lists. +% +% Usage: The package is loaded in the normal fashion, eg: +% \usepackage{tplists} +% The following options exist: +% pausestep - makes step* lists use \pause +% The package works better (the lists look better) if TeXPower +% uses colors. +% +% All lists (except *eqlist) takes an optional parameter +% adding to the indent of the list. Note that dim* and +% flip* lists do not nest, and that step* lists inside +% dim*/flip* will behave as a dim*/flip* list respectively. +% +% Example: +% +% \documentclass[a4paper]{article} +% \usepackage[darkbackground,display]{texpower} +% \usepackage{tplists} +% \begin{document} +% \begin{flipitem}[2cm] +% \item Before +% \begin{enumerate}[1cm] +% \item An item +% \item Another item +% \end{enumerate} +% \item After +% \end{flipitem} +% \end{document} +% +% (The normal 'itemize' and 'enumerate' lists are modified +% so they accept the optional parameter and work nested +% with the new lists.) +% +% Issues: The step* lists use \vstep (as default) which give weird results with +% structured backgrounds. Using the pausestep option fixes this, but then +% you can't nest step* lists inside dim* or flip* lists. +% There are also some unresolved problems when using french babel. +% +% History: 2003/10/03 v0.1: +% * first public release +% 2003/10/04 v0.1a: +% * removed redefinition of eqlist (since it doesn't work) +% 2003/10/07 v0.1b: +% * corrected some typos in this documentation +% * added option pausestep +% * made dim* (and all variants of flip*) lists work without +% colors by using boldface for active items. +% + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tplists}% + [2003/10/07 v0.1b Dynamic Lists using TeXPower] + +%% Packages +\RequirePackage{texpower} +% Compact enum/item. +\newboolean{tpl@paralist} +\@ifpackageloaded{paralist}{\setboolean{tpl@paralist}{true}}{} +% Lists with equal indentation. +\newboolean{tpl@eqlist} +\@ifpackageloaded{eqlist}{\setboolean{tpl@eqlist}{true}}{} + +%% Options +% Use \pause for steplists (too avoid problems with structured backgrounds). +\newboolean{tpl@pausestep} +\DeclareOption{pausestep}{\setboolean{tpl@pausestep}{true}} + +\ProcessOptions + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % +% Flipped/dimmed/stepped itemize/enumerate/eqlist environment. % +% % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% '\iftpl@instepenv' indicates if we are in some kind of stepped list +% environment. '\iftpl@indimenv' / '\tpl@inflipenv' indicates that we are +% using one of the stepwise environments from texpower (that doesn't +% nest). '\iftpl@inpausestepenv' indicates that we are in a stepped +% list that uses \pause. + +% using 'tpl@' as prefix for internals. +\newif\iftpl@instepenv \tpl@instepenvfalse +\newif\iftpl@inpausestepenv \tpl@inpausestepenvfalse +\newif\iftpl@indimenv \tpl@indimenvfalse +\newif\iftpl@inflipenv \tpl@inflipenvfalse +\let\oldenumerate=\enumerate +\let\olditemize=\itemize +\let\endoldenumerate=\endenumerate +\let\endolditemize=\enditemize +\ifthenelse{\boolean{tpl@eqlist}}{% +\let\oldeqlist=\eqlist +\let\endoldeqlist=\endeqlist +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\let\oldcompactenum=\compactenum +\let\oldcompactitem=\compactitem +\let\endoldcompactenum=\endcompactenum +\let\endoldcompactitem=\endcompactitem +}{} + +%%% Defining \tpl@collect@body - command used to scan the list +%%% environments. Definition borrowed from 'amsmath.sty' - slightly +%%% modified to allow for 'long' arguments +\let\tpl@nx\noexpand +\let\tpl@xp\expandafter +\newtoks\tpl@emptytoks +\newtoks\tpl@envbody +\long\def\tpl@addto@envbody#1{\global\tpl@envbody\tpl@xp{\the\tpl@envbody#1}} +\def\tpl@collect@body#1{% + \tpl@envbody{\tpl@xp#1\tpl@xp{\the\tpl@envbody}}% + \edef\tpl@process@envbody{\the\tpl@envbody\tpl@nx\end{\@currenvir}}% + \tpl@envbody\tpl@emptytoks \def\begin@stack{b}% + \begingroup + \tpl@xp\let\csname\@currenvir\endcsname\tpl@collect@@body + \edef\tpl@process@envbody{\tpl@xp\tpl@nx\csname\@currenvir\endcsname}% + \tpl@process@envbody +} +\long\def\tpl@push@begins#1\begin#2{% + \ifx\end#2\else b\tpl@xp\tpl@push@begins\fi +} +\long\def\tpl@collect@@body#1\end#2{% + \edef\begin@stack{\tpl@push@begins#1\begin\end \tpl@xp\@gobble\begin@stack}% + \ifx\@empty\begin@stack + \endgroup + \@checkend{#2}% + \tpl@addto@envbody{#1}% + \else + \tpl@addto@envbody{#1\end{#2}}% + \fi + \tpl@process@envbody +} + +%%% Defining command '\tpl@addmargin' used to add a length to +%%% the leftmargin of the current level in a list. +\def\tpl@addmargin#1{% + \advance\@listdepth 1 + \addtolength{\csname leftmargin\romannumeral\@listdepth\endcsname}{#1} + \advance\@listdepth -1 +} + +%%% Defining a flipped step command. +\ifthenelse{\boolean{TPcolor}}% Can we use colors? +{% Yes. In this case highlighting is implemented by switching color. + \def\tpl@flipstep% Note that \tpl@flipstep takes no argument. + {% + \step{\ifthenelse{\boolean{firstactivation}}% + {\color{textcolor}}% + {\color{inactivecolor}}% + }% + }% +} +{% No. In this case highlighting is implemented by putting the item in boldface. + \def\tpl@flipstep + {% + \step{\ifthenelse{\boolean{firstactivation}}% + {\bfseries}{\mdseries}} + }% + } + +%%% Defining a dimmed step command. +\ifthenelse{\boolean{TPcolor}}% Can we use colors? +{% Yes. In this case highlighting is implemented by using \dstep + \def\tpl@dimstep% Note that \tpl@flipstep takes no argument. + {% + \dstep + }% +} +{% No. In this case highlighting is implemented by putting the item in boldface. + \def\tpl@dimstep + {% + \step{\bfseries} + \ifthenelse{\boolean{active}}{}{\mdseries}% + }% + } + +%%% Defining flipped stepped - itemize / enumerate / eqlist +%%% compact itemize / compact enumerate / compact eqlist - environments. +\newenvironment{flipitem}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@flipitem}% + {\global\@ignoretrue} +\newenvironment{flipenum}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@flipenum}% + {\global\@ignoretrue} +\ifthenelse{\boolean{tpl@eqlist}}{% +\newenvironment{flipeqlist}[1][0cm]{% + \tpl@collect@body\@flipeqlist}% + {\global\@ignoretrue} +\newenvironment{flipcompacteqlist}[1][0cm]{% + \tpl@collect@body\@flipcompacteqlist}% + {\global\@ignoretrue} +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\newenvironment{flipcompactitem}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@flipcompactitem}% + {\global\@ignoretrue} +\newenvironment{flipcompactenum}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@flipcompactenum}% + {\global\@ignoretrue} +}{} + +\newcommand\@fliplist[2]{% + \iftpl@indimenv + \PackageError{tplists}{% + dim* and flip* environments do NOT nest}{% + Do not continue! Type 'q' to stop and fix the nested list. + } + \else\iftpl@instepenv + \begin{#1} + \let\hidestepcontents=\displaystepcontents + \renewcommand{\item}{\tpl@flipstep\tpl@origitem}% + #2 + \end{#1}% + \else + \iftpl@inpausestepenv\let\liststepwise=\stepwise\fi + \liststepwise[\let\hidestepcontents=\displaystepcontents]{% + \begin{#1} + \iftpl@inpausestepenv\else + \iftpl@instepenv\else\let\tpl@origitem=\item\fi + \fi + \tpl@instepenvtrue + \tpl@inflipenvtrue + \renewcommand{\item}{\tpl@flipstep\tpl@origitem}% + #2 + \step{} + \end{#1}} + \fi\fi +} + +\newcommand\@flipitem[1]{% + \@fliplist{olditemize}{#1}} +\newcommand\@flipenum[1]{% + \@fliplist{oldenumerate}{#1}} +\ifthenelse{\boolean{tpl@eqlist}}{% +\newcommand\@flipeqlist[1]{% + \@fliplist{oldeqlist}{#1}} +\newcommand\@flipcompacteqlist[1]{% + \@fliplist{compacteqlist}{#1}} +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\newcommand\@flipcompactitem[1]{% + \@fliplist{oldcompactitem}{#1}} +\newcommand\@flipcompactenum[1]{% + \@fliplist{oldcompactenum}{#1}} +}{} + +%%% Defining dimmed stepped - itemize / enumerate / eqlist / +%%% compact itemize / compact enumerate / compact eqlist - environments. +\newenvironment{dimitem}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@dimitem}% + {\global\@ignoretrue} +\newenvironment{dimenum}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@dimenum}% + {\global\@ignoretrue} +\ifthenelse{\boolean{tpl@eqlist}}{% +\newenvironment{dimeqlist}[1][0cm]{% + \tpl@collect@body\@dimeqlist}% + {\global\@ignoretrue} +\newenvironment{dimcompacteqlist}[1][0cm]{% + \tpl@collect@body\@dimcompacteqlist}% + {\global\@ignoretrue} +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\newenvironment{dimcompactitem}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@dimcompactitem}% + {\global\@ignoretrue} +\newenvironment{dimcompactenum}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@dimcompactenum}% + {\global\@ignoretrue} +}{} + +\newcommand\@dimlist[2]{% + \iftpl@inflipenv + \PackageError{tplists}{% + dim* and flip* environments do NOT nest}{% + Do not continue! Type <q> to stop and fix the nested list. + } + \else\iftpl@instepenv + \begin{#1} + \renewcommand{\item}{\tpl@dimstep\tpl@origitem}% + #2 + \end{#1}% + \else + \iftpl@inpausestepenv\let\liststepwise=\stepwise\fi + \liststepwise{% + \begin{#1} + \iftpl@inpausestepenv\else + \iftpl@instepenv\else\let\tpl@origitem=\item\fi + \fi + \tpl@instepenvtrue + \tpl@indimenvtrue + \renewcommand{\item}{\tpl@dimstep\tpl@origitem}% + #2 + \end{#1}} + \fi\fi +} + +\newcommand\@dimitem[1]{% + \@dimlist{olditemize}{#1}} +\newcommand\@dimenum[1]{% + \@dimlist{oldenumerate}{#1}} +\ifthenelse{\boolean{tpl@eqlist}}{% +\newcommand\@dimeqlist[1]{% + \@dimlist{oldeqlist}{#1}} +\newcommand\@dimcompacteqlist[1]{% + \@dimlist{compacteqlist}{#1}} +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\newcommand\@dimcompactitem[1]{% + \@dimlist{oldcompactitem}{#1}} +\newcommand\@dimcompactenum[1]{% + \@dimlist{oldcompactenum}{#1}} +}{} + +%%% Defining stepped - itemize / enumerate / eqlist / +%%% compact itemize / compact enumerate / compact eqlist - environments. +\newenvironment{stepitem}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@stepitem}% + {\global\@ignoretrue} +\newenvironment{stepenum}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@stepenum}% + {\global\@ignoretrue} +\ifthenelse{\boolean{tpl@eqlist}}{% +\newenvironment{stepeqlist}[1][0cm]{% + \tpl@collect@body\@stepeqlist}% + {\global\@ignoretrue} +\newenvironment{stepcompacteqlist}[1][0cm]{% + \tpl@collect@body\@stepcompacteqlist}% + {\global\@ignoretrue} +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\newenvironment{stepcompactitem}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@stepcompactitem}% + {\global\@ignoretrue} +\newenvironment{stepcompactenum}[1][0cm]{% + \tpl@addmargin{#1} + \tpl@collect@body\@stepcompactenum}% + {\global\@ignoretrue} +}{} + +\ifthenelse{\boolean{tpl@pausestep}}{% +% Using \pause for step* lists +\newcommand\@steplist[2]{% + \iftpl@inflipenv + \PackageError{tplists}{% + 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\iftpl@indimenv + \PackageError{tplists}{% + 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} + \iftpl@inpausestepenv\else\let\tpl@origitem=\item\fi + \tpl@inpausestepenvtrue + \renewcommand{\item}{\pause\tpl@origitem}% + #2 + \end{#1} + \fi\fi +} +}{ +% Using \liststepwise for step* lists +\newcommand\@steplist[2]{% + \iftpl@inflipenv + \begin{#1} + \renewcommand{\item}{\tpl@flipstep\tpl@origitem} + #2 + \end{#1}% + \else\iftpl@indimenv + \begin{#1} + \renewcommand{\item}{\dstep\tpl@origitem}% + #2 + \end{#1}% + \else\iftpl@instepenv + \begin{#1} + \renewcommand{\item}{\vstep\tpl@origitem}% + #2 + \end{#1}% + \else + \liststepwise{% + \begin{#1} + \iftpl@instepenv\else\let\tpl@origitem=\item\fi + \tpl@instepenvtrue + \renewcommand{\item}{\vstep\tpl@origitem}% + #2 + \end{#1}} + \fi\fi\fi +} +} + +\newcommand\@stepitem[1]{% + \@steplist{olditemize}{#1}} +\newcommand\@stepenum[1]{% + \@steplist{oldenumerate}{#1}} +\ifthenelse{\boolean{tpl@eqlist}}{% +\newcommand\@stepeqlist[1]{% + \@steplist{oldeqlist}{#1}} +\newcommand\@stepcompacteqlist[1]{% + \@steplist{compacteqlist}{#1}} +}{} +\ifthenelse{\boolean{tpl@paralist}}{% +\newcommand\@stepcompactitem[1]{% + \@steplist{oldcompactitem}{#1}} +\newcommand\@stepcompactenum[1]{% + \@steplist{oldcompactenum}{#1}} +}{} + +%%% Defining compact eqlist +\newenvironment{compacteqlist}[1][0cm]{% + % \tpl@addmargin{#1} + \begin{eqlist}[\parsep0pt\itemsep0pt]}% + {\end{eqlist}} + + +%%% Redefining enumerate and itemize to handle changes made by +%%% introducing steps and leftmargini-option. +\renewenvironment{enumerate}[1][0cm]{% + \tpl@addmargin{#1} + \begin{oldenumerate} + \iftpl@instepenv + \renewcommand{\item}{\tpl@origitem}% + \fi + }% + {\end{oldenumerate}} + +\renewenvironment{itemize}[1][0cm]{% + \tpl@addmargin{#1} + \begin{olditemize} + \iftpl@instepenv + \renewcommand{\item}{\tpl@origitem}% + \fi + }% + {\end{olditemize}} + +%%% Redefining compactenum and compactitem to handle changes made by +%%% introducing steps and leftmargini-option. +\ifthenelse{\boolean{tpl@paralist}}{% +\renewenvironment{compactenum}[1][0cm]{% + \tpl@addmargin{#1} + \begin{oldcompactenum} + \iftpl@instepenv + \renewcommand{\item}{\tpl@origitem}% + \fi + }% + {\end{oldcompactenum}} + +\renewenvironment{compactitem}[1][0cm]{% + \tpl@addmargin{#1} + \begin{oldcompactitem} + \iftpl@instepenv + \renewcommand{\item}{\tpl@origitem}% + \fi + }% + {\end{oldcompactitem}} +}{} +%KEEPCOMMENTS +%</tplists> +%======================================================================================================================= +%<*tppstcol> +%<<KEEPCOMMENTS +%======================================================================================================================= +% File: tppstcol.sty +% +% Replacement for ``pstcol.sty'' with some quirks corrected. +% There is a small problem with pstcol.sty which makes it impossible +% to set something like "fillcolor=\linecolor" in pstricks (see LaTeX +% Bug graphics/3366). As this is absolutely indispensible for +% automata.sty, I had to make a modified version to be used until the +% bug is mended. +% The following code is identical with the original pstcol.sty, with +% some modifications to correct the bug. +% +% This package is an addition to the TeXPower bundle, to be found at +% +% http://texpower.sourceforge.net/ +% +% Beware! As soon as the original bug in pstcol is corrected, this +% package will be deleted. +% +%======================================================================================================================= + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tppstcol} + [2001/08/28 v0.2 PSTricks color compatibility (DPC; revised + by STL)] +%%%%%%%%%%%%%%%%%% +\let\saved@gray\color@gray +\RequirePackage{pstricks} +\let\color@gray\saved@gray +%%%%%%%%%%%%%%%% +\DeclareOption*{\PassOptionsToPackage\CurrentOption{color}} +\ProcessOptions +\RequirePackage{color} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\pst@getcolor#1#2{% +\@ifundefined{\string\color@#1}% +{\@pstrickserr{Color `#1' not defined}\@eha}% + {\edef#2{#1}}} +\def\pst@usecolor#1% +{% + \expandafter\expandafter\expandafter + \c@lor@to@ps\csname\string\color @#1\endcsname\@@\space% + } +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\definecolor{darkgray}{gray}{.25} +\definecolor{gray}{gray}{.5} +\definecolor{lightgray}{gray}{.75} +\definecolor{gradbegin}{rgb}{0,1,1} +\definecolor{gradend}{rgb}{0,.1,.95} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\psset@bordercolor{white} +\psset@doublecolor{white} +\psset@linecolor{black} +\psset@fillcolor{white} +\psset@hatchcolor{black} +\psset@gridcolor{black} +\psset@gridlabelcolor{black} +\psset@shadowcolor{darkgray} +\psset@subgridcolor{gray} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\def\newgray#1{% + \definecolor{#1}{gray}} +\def\newrgbcolor#1#2{% + \newrgbcolorx{#1}#2\@@} +\def\newrgbcolorx#1#2 #3 #4\@@{% + \definecolor{#1}{rgb}{#2,#3,#4}} +\def\newcmykcolor#1#2{% + \newcmykcolorx{#1}#2\@@} +\def\newcmykcolorx#1#2 #3 #4 #5\@@{% + \definecolor{#1}{cmyk}{#2,#3,#4,#5}} +%KEEPCOMMENTS +%</tppstcol> +%======================================================================================================================= +%<*tpsem-a4> +%<<KEEPCOMMENTS +% Fixed for LaTeX2e (\paperwidth and \paperheight are dimensions) by +% Stephan Lehmke. +\setlength\paperwidth{210mm} +\setlength\paperheight{297mm} +\input sem-page.sty +\slidewidth 222mm +\slideheight 152mm +%KEEPCOMMENTS +%</tpsem-a4> +\endinput |