314 lines
8.7 KiB
Plaintext
314 lines
8.7 KiB
Plaintext
%%% 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}[2010/08/19 v1.19 Asymptote style file for LaTeX]
|
|
\RequirePackage{keyval}
|
|
\RequirePackage{ifthen}
|
|
\newif\ifASYdefaultinline
|
|
\newif\ifASYdefaultattach
|
|
\DeclareOption{inline}{\ASYdefaultinlinetrue}
|
|
\DeclareOption{attach}{\ASYdefaultattachtrue}
|
|
\ProcessOptions*
|
|
|
|
\def\asydir{}
|
|
\def\ASYprefix{}
|
|
|
|
\def\unquoteJobname#1"#2"#3\relax{\def\rawJobname{#1}%
|
|
\ifx\rawJobname\empty\def\rawJobname{#2}\fi}
|
|
\expandafter\unquoteJobname\jobname""\relax
|
|
% 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\rawJobname*\relax
|
|
|
|
\RequirePackage{color,graphicx}
|
|
|
|
\def\makeinnocent#1{\catcode`#1=12 }
|
|
\def\csarg#1#2{\expandafter#1\csname#2\endcsname}
|
|
\newwrite\AsyStream
|
|
\newwrite\AsyPreStream
|
|
\newread\AsyTestStream
|
|
|
|
\def\AsyInput#1{\openin\AsyTestStream=#1
|
|
\ifeof\AsyTestStream
|
|
\else
|
|
\input #1
|
|
\fi
|
|
\closein\AsyTestStream%
|
|
}
|
|
|
|
\AsyInput{\jobname.pre}
|
|
|
|
\immediate\openout\AsyPreStream=\jobname.pre
|
|
|
|
\newif\ifASYinline
|
|
\newif\ifASYattach
|
|
\newif\ifASYPDF
|
|
|
|
\ifx\pdfoutput\undefined
|
|
\else
|
|
\ifcase\pdfoutput
|
|
\else
|
|
\ASYPDFtrue
|
|
\fi
|
|
\fi
|
|
\ifx\XeTeXversion\undefined
|
|
\else
|
|
\ASYPDFtrue
|
|
\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
|
|
\ifASYattach
|
|
\def\ASYdefaultviewportwidth{0}%
|
|
\else
|
|
\def\ASYdefaultviewportwidth{\the\linewidth}%
|
|
\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\closeout\AsyStream
|
|
\ifASYinline
|
|
\openin\AsyTestStream=\AsyFile.tex
|
|
\else
|
|
\ifASYPDF
|
|
\openin\AsyTestStream=\AsyFile.pdf
|
|
\else
|
|
\openin\AsyTestStream=\AsyFile.eps
|
|
\fi
|
|
\fi
|
|
\ifeof\AsyTestStream
|
|
\ifASYinline
|
|
\PackageWarning{asymptote}{file `\AsyFile.tex' not found}%
|
|
\closein\AsyTestStream%
|
|
\else
|
|
\closein\AsyTestStream%
|
|
\openin\AsyTestStream=\AsyFile.tex
|
|
\ifeof\AsyTestStream
|
|
\ifASYPDF
|
|
\PackageWarning{asymptote}{file `\AsyFile.pdf' not found}%
|
|
\else
|
|
\PackageWarning{asymptote}{file `\AsyFile.eps' not found}%
|
|
\fi
|
|
\else
|
|
\catcode`:=12
|
|
\input \AsyFile.tex%
|
|
\fi
|
|
\closein\AsyTestStream%
|
|
\fi
|
|
\else
|
|
\closein\AsyTestStream%
|
|
\ifASYinline
|
|
\catcode`:=12
|
|
\input \AsyFile.tex%
|
|
\else
|
|
\ifASYattach
|
|
\ifASYPDF
|
|
\openin\AsyTestStream=\AsyFile+0.pdf
|
|
\fi
|
|
\ifeof\AsyTestStream
|
|
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile}}%
|
|
\else
|
|
\setbox\ASYbox=\hbox{\includegraphics[hiresbb]{\AsyFile+0}}%
|
|
\fi
|
|
\textattachfile{\AsyFile.pdf}{\phantom{\copy\ASYbox}}%
|
|
\vskip-\ht\ASYbox%
|
|
\indent%
|
|
\box\ASYbox%
|
|
\closein\AsyTestStream%
|
|
\else
|
|
\includegraphics[hiresbb]{\AsyFile}%
|
|
\fi
|
|
\fi
|
|
\fi
|
|
\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}%
|
|
}
|
|
\define@key{ASYkeys}{inline}[true]{%
|
|
\ifthenelse{\equal{#1}{true}}{\global\ASYinlinetrue}{\global\ASYinlinefalse}%
|
|
}
|
|
\newcommand\asy[1][]{%
|
|
\begingroup
|
|
\let\par\empty
|
|
\stepcounter{asy}%
|
|
\global\let\ifASYinline\ifASYdefaultinline
|
|
\global\let\ifASYattach\ifASYdefaultattach
|
|
\setkeys{ASYkeys}{#1}%
|
|
\ifASYattach
|
|
\global\ASYinlinefalse
|
|
\fi
|
|
\ifx\asydir\empty
|
|
\else
|
|
\gdef\ASYprefix{\asydir/}
|
|
\fi
|
|
\immediate\write\AsyPreStream{\@backslashchar%
|
|
AsyInput{\ASYprefix\@backslashchar jobname-\the\c@asy.pre}}
|
|
\immediate\openout\AsyStream=\ASYprefix\jobname-\the\c@asy.asy
|
|
\gdef\AsyFile{\ASYprefix\Jobname-\the\c@asy}%
|
|
\immediate\write\AsyStream{if(!settings.multipleView)}%
|
|
\immediate\write\AsyStream{ settings.batchView=false;}%
|
|
\ifx\XeTeXversion\undefined
|
|
\ifASYPDF
|
|
\immediate\write\AsyStream{settings.tex="pdflatex";}%
|
|
\fi
|
|
\else
|
|
\immediate\write\AsyStream{settings.tex="xelatex";}%
|
|
\ASYPDFtrue
|
|
\fi
|
|
\ifASYinline
|
|
\immediate\write\AsyStream{settings.inlinetex=true;}%
|
|
\immediate\write\AsyStream{deletepreamble();}%
|
|
\fi
|
|
\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=(2,2);}%
|
|
\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\AsyPreStream}
|
|
|
|
\newcommand{\ASYanimategraphics}[5][]{%
|
|
\openin\AsyTestStream=_#3.pdf
|
|
\ifeof\AsyTestStream%
|
|
\else%
|
|
\animategraphics[{#1}]{#2}{_#3}{#4}{#5}%
|
|
\fi%
|
|
}
|
|
|
|
% Work around bug in dvips.def: allow spaces in file names.
|
|
\def\Ginclude@eps#1{%
|
|
\message{<#1>}%
|
|
\bgroup
|
|
\def\@tempa{!}%
|
|
\dimen@\Gin@req@width
|
|
\dimen@ii.1bp%
|
|
\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}
|
|
|
|
\def\Asymptote{{\tt Asymptote}}
|
|
|
|
%%% Local Variables:
|
|
%%% mode: latex
|
|
%%% TeX-master: "shared"
|
|
%%% End:
|