%%
%% This is file `asymptote.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% asy-latex.dtx (with options: `pkg')
%% ____________________________
%% The ASYMPTOTE package
%%
%% (C) 2003 Tom Prince
%% (C) 2003-2021 John Bowman
%% (C) 2010 Will Robertson
%%
%% Adapted from comment.sty
%%
%% Licence: GPL2+
%%
\ProvidesPackage{asymptote}
[2024/02/26 v1.38 Asymptote style file for LaTeX]
\def\Asymptote{{\tt Asymptote}}
\InputIfFileExists{\jobname.pre}{}{\typeout{No file \jobname.pre.}}
\newbox\ASYbox
\newdimen\ASYdimen
\newcounter{asy}
\newwrite\AsyStream
\newwrite\AsyPreStream
\newif\ifASYinline
\newif\ifASYattach
\newif\ifASYkeepAspect
\ASYkeepAspecttrue
\RequirePackage{keyval}
\RequirePackage{ifthen}
\RequirePackage{graphicx}
\IfFileExists{ifpdf.sty}{
\RequirePackage{ifpdf}
}{
\expandafter\newif\csname ifpdf\endcsname
\ifx\pdfoutput\@undefined\else
\ifcase\pdfoutput\else
\pdftrue
\fi
\fi
}
\IfFileExists{ifxetex.sty}{
\RequirePackage{ifxetex}
}{
\expandafter\newif\csname ifxetex\endcsname
\ifx\XeTeXversion\@undefined\else
\xetextrue
\fi
}
\IfFileExists{catchfile.sty}{
\RequirePackage{catchfile}
}{
\newcommand\CatchFileDef[3]{%
\begingroup
\everyeof{%
\ENDCATCHFILEMARKER
\noexpand
}%
\long\def\@tempa####1\ENDCATCHFILEMARKER{%
\endgroup
\def##1{####1}%
}%
##3%
\expandafter\@tempa\@@input ##2\relax
}
}
\newif\if@asy@attachfile@loaded
\AtBeginDocument{%
\@ifpackageloaded{attachfile2}{\@asy@attachfile@loadedtrue}{}%
\let\asy@check@attachfile\asy@check@attachfile@loaded
}
\newcommand\asy@check@attachfile@loaded{%
\if@asy@attachfile@loaded\else
\PackageError{asymptote}{You must load the attachfile2 package}{^^J%
You have requested the [attach] option for some or all of your^^J%
Asymptote graphics, which requires the attachfile2 package.^^J%
Please load it in the document preamble.^^J%
}%
\fi
}
\newcommand\asy@check@attachfile{%
\AtBeginDocument{\asy@check@attachfile@loaded}%
\let\asy@check@attachfile\@empty
}
\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
\DeclareOption{inline}{%
\ASYinlinetrue
}
\DeclareOption{attach}{%
\asy@check@attachfile
\ASYattachtrue
}
\ProcessOptions*
\def\asylatexdir{}
\def\asydir{}
\def\ASYasydir{}
\def\ASYprefix{}
\newif\ifASYPDF
\ifxetex
\ASYPDFtrue
\else
\ifpdf
\ASYPDFtrue
\fi
\fi
\ifASYPDF
\def\AsyExtension{pdf}
\else
\def\AsyExtension{eps}
\fi
\def\unquoteJobname#1"#2"#3\relax{%
\def\rawJobname{#1}%
\ifx\rawJobname\empty
\def\rawJobname{#2}%
\fi
}
\expandafter\unquoteJobname\jobname""\relax
\def\fixstar#1*#2\relax{%
\def\argtwo{#2}%
\ifx\argtwo\empty
\gdef\Jobname{#1}%
\else
\fixstar#1-#2\relax
\fi
}
\expandafter\fixstar\rawJobname*\relax
\def\Ginclude@eps#1{%
\message{<#1>}%
\bgroup
\def\@tempa{!}%
\dimen@\Gin@req@width
\
[email protected]\relax
\divide\dimen@\dimen@ii
\@tempdima\Gin@req@height
\divide\@tempdima\dimen@ii
\special{PSfile=#1\space
llx=\Gin@llx\space
lly=\Gin@lly\space
urx=\Gin@urx\space
ury=\Gin@ury\space
\ifx\Gin@scalex\@tempa\else rwi=\number\dimen@\space\fi
\ifx\Gin@scaley\@tempa\else rhi=\number\@tempdima\space\fi
\ifGin@clip clip\fi}%
\egroup
}
\immediate\openout\AsyPreStream=\jobname.pre\relax
\AtEndDocument{\immediate\closeout\AsyPreStream}
\def\WriteAsyLine#1{%
\immediate\write\AsyStream{\detokenize{#1}}%
}
\def\globalASYdefs{}
\def\WriteGlobalAsyLine#1{%
\expandafter\g@addto@macro
\expandafter\globalASYdefs
\expandafter{\detokenize{#1^^J}}%
}
\def\ProcessAsymptote#1{%
\begingroup
\def\CurrentAsymptote{#1}%
\let\do\@makeother \dospecials
\@makeother\^^L% and whatever other special cases
\catcode`\ =10
\endlinechar`\^^M \catcode`\^^M=12 \xAsymptote
}
\begingroup
\catcode`\^^M=12 \endlinechar=-1\relax%
\gdef\xAsymptote{%
\expandafter\ProcessAsymptoteLine%
}
\gdef\ProcessAsymptoteLine#1^^M{%
\def\@tempa{#1}%
{%
\escapechar=-1\relax%
\xdef\@tempb{\string\\end\string\{\CurrentAsymptote\string\}}%
}%
\ifx\@tempa\@tempb%
\edef\next{\endgroup\noexpand\end{\CurrentAsymptote}}%
\else%
\ThisAsymptote{#1}%
\let\next\ProcessAsymptoteLine%
\fi%
\next%
}
\endgroup
\def\asy@init{%
\def\ASYlatexdir{}%
\ifx\asylatexdir\empty\else
\def\ASYlatexdir{\asylatexdir/}%
\fi
\ifx\asydir\empty\else
\def\ASYasydir{\asydir/}%
\fi
\def\ASYprefix{\ASYlatexdir\ASYasydir}%
}
\newcommand\asy[1][]{%
\stepcounter{asy}%
\setkeys{ASYkeys}{#1}%
\ifASYattach
\ASYinlinefalse
\fi
\asy@init
\immediate\write\AsyPreStream{%
\noexpand\InputIfFileExists{%
\ASYprefix\noexpand\jobname-\the\
[email protected]}{}{}%
}%
\asy@write@graphic@header
\let\ThisAsymptote\WriteAsyLine
\ProcessAsymptote{asy}%
}
\def\endasy{%
\asy@finalise@stream
\asy@input@graphic
}
\def\asy@write@graphic@header{%
\immediate\openout\AsyStream=\ASYasydir\jobname-\the\
[email protected]\relax
\gdef\AsyFile{\ASYprefix\Jobname-\the\c@asy}%
\immediate\write\AsyStream{%
if(!settings.multipleView) settings.batchView=false;^^J%
\ifxetex
settings.tex="xelatex";^^J%
\else\ifASYPDF
settings.tex="pdflatex";^^J%
\fi\fi
\ifASYinline
settings.inlinetex=true;^^J%
deletepreamble();^^J%
\fi
defaultfilename="\Jobname-\the\c@asy";^^J%
if(settings.render < 0) settings.render=4;^^J%
settings.outformat="";^^J%
\ifASYattach
settings.inlineimage=false;^^J%
settings.embed=false;^^J%
settings.toolbar=true;^^J%
\else
settings.inlineimage=true;^^J%
settings.embed=true;^^J%
settings.toolbar=false;^^J%
viewportmargin=(2,2);^^J%
\fi
\globalASYdefs
}%
}
\def\asy@expand@keepAspect{%
\ifASYkeepAspect keepAspect=true%
\else keepAspect=false%
\fi%
}
\def\asy@finalise@stream{%
\ifx\ASYwidth\@empty
\ifx\ASYheight\@empty
% write nothing!
\else
\immediate\write\AsyStream{size(0,\ASYheight,\asy@expand@keepAspect);}%
\fi
\else
\ifx\ASYheight\@empty
\immediate\write\AsyStream{size(\ASYwidth,0,\asy@expand@keepAspect);}%
\else
\immediate\write\AsyStream{size(\ASYwidth,\ASYheight,\asy@expand@keepAspect);}%
\fi
\fi
\ifx\ASYviewportwidth\@empty
\ifx\ASYviewportheight\@empty
% write nothing!
\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
\immediate\closeout\AsyStream
}
\def\asy@input@graphic{%
\ifASYinline
\IfFileExists{"\AsyFile.tex"}{%
\catcode`:=12\relax
\@@input"\AsyFile.tex"\relax
}{%
\PackageWarning{asymptote}{file `\AsyFile.tex' not found}%
}%
\else
\IfFileExists{"\AsyFile.\AsyExtension"}{%
\ifASYattach
\ifASYPDF
\IfFileExists{"\AsyFile+0.pdf"}{%
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile+0.pdf}}%
}{%
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile.pdf}}%
}%
\else
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile.eps}}%
\fi
\textattachfile{\AsyFile.\AsyExtension}{\phantom{\copy\ASYbox}}%
\vskip-\ht\ASYbox
\indent
\box\ASYbox
\else
\ifASYPDF
\includegraphics[hiresbb]{\AsyFile.pdf}%
\else
\includegraphics[hiresbb]{\AsyFile.eps}%
\fi
\fi
}{%
\IfFileExists{"\AsyFile.tex"}{%
\catcode`:=12
\@@input"\AsyFile.tex"\relax
}{%
\PackageWarning{asymptote}{%
file `\AsyFile.\AsyExtension' not found%
}%
}%
}%
\fi
}
\def\asydef{%
\let\ThisAsymptote\WriteGlobalAsyLine
\ProcessAsymptote{asydef}%
}
\newcommand\asyinclude[2][]{%
\begingroup
\stepcounter{asy}%
\setkeys{ASYkeys}{#1}%
\ifASYattach
\ASYinlinefalse
\fi
\asy@init
\immediate\write\AsyPreStream{%
\noexpand\InputIfFileExists{%
\ASYprefix\noexpand\jobname-\the\
[email protected]}{}{}%
}%
\asy@write@graphic@header
\IfFileExists{#2.asy}{%
\CatchFileDef\@tempa{#2.asy}{%
\let\do\@makeother
\dospecials
\endlinechar=10\relax
}%
}{%
\IfFileExists{#2}{%
\CatchFileDef\@tempa{#2}{%
\let\do\@makeother
\dospecials
\endlinechar=10\relax
}%
}{%
\PackageWarning{asymptote}{file #2 not found}%
\def\@tempa{}%
}%
}%
\immediate\write\AsyStream{\unexpanded\expandafter{\@tempa}}%
\asy@finalise@stream
\asy@input@graphic
\endgroup
}
\newcommand{\ASYanimategraphics}[5][]{%
\IfFileExists{_#3.pdf}{%
\animategraphics[{#1}]{#2}{_#3}{#4}{#5}%
}{}%
}
\newcommand\asysetup[1]{\setkeys{ASYkeys}{#1}}
\define@key{ASYkeys}{dir}{%
\def\asydir{#1}%
}
\def\ASYwidth{}
\define@key{ASYkeys}{width}{%
\edef\ASYwidth{\the\dimexpr#1\relax}%
}
\def\ASYheight{}
\define@key{ASYkeys}{height}{%
\edef\ASYheight{\the\dimexpr#1\relax}%
}
\define@key{ASYkeys}{keepAspect}[true]{%
\ifthenelse{\equal{#1}{true}}
{\ASYkeepAspecttrue}
{\ASYkeepAspectfalse}%
}
\def\ASYviewportwidth{}
\define@key{ASYkeys}{viewportwidth}{%
\edef\ASYviewportwidth{\the\dimexpr#1\relax}%
}
\def\ASYviewportheight{}
\define@key{ASYkeys}{viewportheight}{%
\edef\ASYviewportheight{\the\dimexpr#1\relax}%
}
\define@key{ASYkeys}{inline}[true]{%
\ifthenelse{\equal{#1}{true}}
{\ASYinlinetrue}
{\ASYinlinefalse}%
}
\define@key{ASYkeys}{attach}[true]{%
\ifthenelse{\equal{#1}{true}}
{\ASYattachtrue}
{\ASYattachfalse}%
}