%%% Asymptote style file for LaTeX
%%% Contributed by Tom Prince 14 May 2003
%%% Modified by John Bowman
%%% Adapted from comment.sty (Under GPL v2)
\ProvidesPackage{asymptote}[2009/06/18 v1.08 Asymptote style file for LaTeX]
\RequirePackage{keyval}
\RequirePackage{ifthen}
\newif\ifASYinline
\DeclareOption{inline}{\ASYinlinetrue}
\ProcessOptions*
% Work around jobname bug in MiKTeX 2.5 and 2.6:
% Turn stars in file names (resulting from spaces, etc.) into minus signs
\def\fixstar#1*#2\relax{\def\argtwo{#2}\ifx\argtwo\empty\gdef\Jobname{#1}\else
\fixstar#1-#2\relax\fi}
\expandafter\fixstar\jobname*\relax
\RequirePackage{color,graphicx}
\def\makeinnocent#1{\catcode`#1=12 }
\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
\newwrite\AsyStream
\newread\AsyTestStream
\newread\AsyTestTeXStream
\def\AsyFile{\jobname.asy}
\openin\AsyTestStream=\jobname_.pre
\ifeof\AsyTestStream
\else
\input \jobname_.pre
\fi
\closein\AsyTestStream%
\immediate\openout\AsyStream=\AsyFile
\immediate\write\AsyStream{if(!settings.multipleView)}%
\immediate\write\AsyStream{ settings.batchView=false;}%
\newif\ifASYattach
\newif\ifASYtex
\newif\ifASYPDF
\ifx\pdfoutput\undefined
\else
\ifcase\pdfoutput
\else
\ASYPDFtrue
\fi
\fi
\ifx\XeTeXversion\undefined
\else
\ASYPDFtrue
\immediate\write\AsyStream{settings.texcommand="xelatex";}%
\fi
\ifASYPDF
\immediate\write\AsyStream{settings.tex="pdflatex";}%
\fi
\ifASYinline
\immediate\write\AsyStream{settings.inlinetex=true;}%
\immediate\write\AsyStream{deletepreamble();}%
\fi
\newbox\ASYbox
\newcounter{asy}
\def\ProcessAsymptote#1% start it all off
{\begingroup
\def\CurrentAsymptote{#1}%
\let\do\makeinnocent \dospecials
\makeinnocent\^^L% and whatever other special cases
\endlinechar`\^^M \catcode`\^^M=12 \xAsymptote}
{\catcode`\^^M=12 \endlinechar=-1 %
\gdef\xAsymptote{%
\expandafter\ProcessAsymptoteLine}
\gdef\ProcessAsymptoteLine#1^^M{\def\test{#1}
\csarg\ifx{End\CurrentAsymptote Test}\test
\edef\next{\noexpand\EndOfAsymptote{\CurrentAsymptote}}%
\else \ThisAsymptote{#1}\let\next\ProcessAsymptoteLine
\fi \next}
}
\def\ASYstringmeaning#1{\expandafter\ASYgobblearrow\meaning#1}
\def\ASYstringcsnoescape#1{\expandafter\ASYgobbleescape\string#1}
{\escapechar-1
\expandafter\expandafter\expandafter\gdef
\expandafter\expandafter\expandafter\ASYgobblearrow
\expandafter\string\csname macro:->\endcsname{}
}
\def\ASYgobbleescape#1{\ifnum`\\=`#1 \else #1\fi}
\def\WriteAsyLine#1{\def\ASYtmp{#1}%
\immediate\write\AsyStream{\ASYstringmeaning\ASYtmp}}
\def\gedefappend#1#2{%
\toks@ = \expandafter{#1}%
\global\edef#1{\the\toks@ #2}%
}%
\def\globalASYdefs{}
\def\WriteGlobalAsyLine#1{\def\ASYtmp{#1^^J}%
\gedefappend\globalASYdefs{\ASYstringmeaning\ASYtmp}}
\def\EndOfAsymptote#1{\endgroup\end{#1}%
\csname After#1Asymptote\endcsname}
\def\AsymptoteEndDef#1{{\escapechar=-1\relax
\csarg\xdef{End#1Test}{\string\\end\string\{#1\string\}}%
}}
\def\AfterasyAsymptote{%
\ifx\ASYwidth\empty
\ifx\ASYheight\empty
\else
\immediate\write\AsyStream{size(0,\ASYheight);}%
\fi
\else
\ifx\ASYheight\empty
\immediate\write\AsyStream{size(\ASYwidth,0);}%
\else
\immediate\write\AsyStream{size(\ASYwidth,\ASYheight);}%
\fi
\fi
\ASYtexfalse
\ifASYattach
\def\ASYdefaultviewportwidth{0}
\else
\def\ASYdefaultviewportwidth{\the\linewidth}
\ifASYinline
\ASYtextrue
\fi
\fi
\ifx\ASYviewportwidth\empty
\ifx\ASYviewportheight\empty
\else
\immediate\write\AsyStream{viewportsize=(0,\ASYviewportheight);}%
\fi
\else
\ifx\ASYviewportheight\empty
\immediate\write\AsyStream{viewportsize=(\ASYviewportwidth,0);}%
\else
\immediate\write%
\AsyStream{viewportsize=(\ASYviewportwidth,\ASYviewportheight);}%
\fi
\fi
\gdef\ASYwidth{}
\gdef\ASYheight{}
\gdef\ASYviewportwidth{\ASYdefaultviewportwidth}
\gdef\ASYviewportheight{}
\immediate\write\AsyStream{\@charrb);}%
\immediate\write\AsyStream{// End of Asymptote Figure \the\c@asy}%
\ifASYtex
\openin\AsyTestStream=\Jobname-\the\c@asy_.tex
\else
\ifASYPDF
\openin\AsyTestStream=\Jobname-\the\
[email protected]
\else
\openin\AsyTestStream=\Jobname-\the\
[email protected]
\fi
\fi
\ifeof\AsyTestStream
\ifASYtex
\PackageWarning{asymptote}{file \Jobname-\the\c@asy_.tex does not exist}%
\else
\openin\AsyTestTeXStream=\Jobname-\the\c@asy_.tex
\ifeof\AsyTestTeXStream
\ifASYPDF
\PackageWarning{asymptote}{file \Jobname-\the\
[email protected] does not exist}%
\else
\PackageWarning{asymptote}{file \Jobname-\the\
[email protected] does not exist}%
\fi
\else
\catcode`:=12
\input \Jobname-\the\c@asy_.tex%
\fi
\closein\AsyTestTeXStream%
\fi
\closein\AsyTestStream%
\else
\closein\AsyTestStream%
\ifASYtex
\catcode`:=12
\input \Jobname-\the\c@asy_.tex%
\else
\ifASYattach
\ifASYPDF
\openin\AsyTestStream=\Jobname-\the\c@asy+0.pdf
\fi
\ifeof\AsyTestStream
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\Jobname-\the\c@asy}}%
\else
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\Jobname-\the\c@asy+0}}%
\fi
\textattachfile{\Jobname-\the\
[email protected]}{\phantom{\copy\ASYbox}}%
\vskip-\ht\ASYbox%
\indent%
\box\ASYbox%
\closein\AsyTestStream%
\else
\includegraphics[hiresbb]{\Jobname-\the\c@asy}%
\fi
\fi
\fi
\global\ASYattachfalse
\relax%
\endgroup}
\gdef\ASYwidth{}%
\define@key{ASYkeys}{width}{%
\gdef\ASYwidth{#1}%
}
\gdef\ASYheight{}%
\define@key{ASYkeys}{height}{%
\gdef\ASYheight{#1}%
}
\gdef\ASYviewportwidth{\ASYdefaultviewportwidth}%
\define@key{ASYkeys}{viewportwidth}{%
\gdef\ASYviewportwidth{#1}%
}
\gdef\ASYviewportheight{}%
\define@key{ASYkeys}{viewportheight}{%
\gdef\ASYviewportheight{#1}%
}
\define@key{ASYkeys}{attach}[true]{%
\ifthenelse{\equal{#1}{true}}{\global\ASYattachtrue}{\global\ASYattachfalse}%
}
\newcommand\asy[1][]{%
\begingroup
\let\par\empty
\stepcounter{asy}%
\setkeys{ASYkeys}{#1}%
\immediate\write\AsyStream{}%
\immediate\write\AsyStream{// Beginning of Asymptote Figure \the\c@asy}%
\immediate\write\AsyStream{eval(quote\@charlb}%
\immediate\write\AsyStream{defaultfilename='\Jobname-\the\c@asy';}%
\immediate\write\AsyStream{if(settings.render < 0) settings.render=4;}%
\ifASYattach
\immediate\write\AsyStream{settings.inlineimage=false;}%
\immediate\write\AsyStream{settings.embed=false;}%
\immediate\write\AsyStream{settings.outformat='pdf';}%
\immediate\write\AsyStream{settings.toolbar=true;}%
\else
\immediate\write\AsyStream{settings.inlineimage=true;}%
\immediate\write\AsyStream{settings.embed=true;}%
\immediate\write\AsyStream{settings.outformat='';}%
\immediate\write\AsyStream{settings.toolbar=false;}%
\immediate\write\AsyStream{viewportmargin=(1,1);}%
\fi
\immediate\write\AsyStream{\globalASYdefs}%
\let\ThisAsymptote\WriteAsyLine%
\ProcessAsymptote{asy}%
}
\AsymptoteEndDef{asy}
\def\asydef{%
\let\ThisAsymptote\WriteGlobalAsyLine%
\ProcessAsymptote{asydef}}
\AsymptoteEndDef{asydef}
\def\AfterasydefAsymptote{}
\AtEndDocument{\immediate\closeout\AsyStream}
\newcommand{\ASYanimategraphics}[5][]{%
\openin\AsyTestStream=_#3.pdf
\ifeof\AsyTestStream%
\else%
\animategraphics[{#1}]{#2}{_#3}{#4}{#5}%
\fi%
}
\def\Asymptote{{\tt Asymptote}}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "shared"
%%% End: