%% %% This is file `asypictureB.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% asypictureB.dtx (with options: `package') %% ---------------------------------------------------------------- %% asypictureB --- user-friendly integration of Asymptote into LaTeX %% E-mail: cstaats at math.uchicago.edu %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% ---------------------------------------------------------------- %% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{asypictureB} [2014/04/15 v0.3 user-friendly integration of Asymptote into LaTeX] \RequirePackage{fancyvrb} \RequirePackage{graphicx} \RequirePackage{pgfkeys} \makeatletter \def\asy@OutFile{\FV@OutFile} \RequirePackage{ifplatform} \ifshellescape \def\ASYPIC@shell{18} \newcommand{\shell@execute}{\immediate\write\ASYPIC@shell} \else \newwrite\ASYPIC@shell \ifwindows \openout\ASYPIC@shell=\jobname-compile_asy.bat\relax \else \openout\ASYPIC@shell=\jobname-compile_asy.sh\relax \fi \newcommand{\shell@execute}[1]{{% \edef\temp{#1}% \write\expandafter\ASYPIC@shell\expandafter{\temp}% }} \fi \ifshellescape \newcommand{\copyfile}[2]{% \ifwindows% \immediate\write18{copy #1 #2 /y}% \else% \immediate\write18{cp #1 #2}% \fi% } \else \RequirePackage{verbatimcopy} \newcommand{\copyfile}[2]{% \OldVerbatimCopy{#1}{#2}% } \fi \newcommand{\deletefile}[1]{% \ifwindows% \shell@execute{del #1}% \else% \shell@execute{rm #1}% \fi% } \newcommand{\asyset}[1]{\pgfqkeys{/asy}{#1}} \newcommand{\@asyerrorfilename}{\@asypicturename_errors.txt} \newcounter{@asy@linenumber} \asyset{name/.initial=noname, name/.value required}% \asyset{graphic options/.code={}} \asyset{set graphic option/.style={graphic options/.append code=#1}} \asyset{.unknown/.code = % {% \edef\unknownkey{\pgfkeyscurrentname}% \asyset{set graphic option/.expand once = {% \expandafter\setkeys\expandafter{% \expandafter G\expandafter i\expandafter n\expandafter% }\expandafter{\unknownkey=#1}% }}% }% } \def\asy@scale{1} \asyset{scale/.style={set graphic option = {\def\asy@scale{#1}}}, scale/.value required} \newcommand{\asy@angle}{0} \asyset{angle/.style = {set graphic option = {\def\asy@angle{#1}}}, angle/.value required} \newcommand{\getfontsize}{\f@size} \newif\ifasyfilechanged \newif\ifASYPIC@flush \newif\if@asyrepeat \newread\@asyreadold \newread\@asyreadnew \edef\@tempasyfile{\jobname-temp} \newcommand{\RequireAsyRecompile}{\ASYPIC@flushtrue} \newcommand{\AsyCompileIfNecessary}{\ASYPIC@flushfalse} \AsyCompileIfNecessary \newcommand\clearasyheader{\def\ASYPIC@header{}} \def\ASYPIC@header{} \def\asyheader{\FV@Environment{}{asyheader}} \def\FVB@asyheader{% \@bsphack \begingroup \FV@UseKeyValues \FV@DefineWhiteSpace \def\FV@Space{\space}% \FV@DefineTabOut \def\FV@ProcessLine##1{\g@addto@macro\ASYPIC@header{##1^^J}}% \let\FV@FontScanPrep\relax %% DG/SR modification begin - May. 18, 1998 %% (to avoid problems with ligatures) \let\@noligs\relax %% DG/SR modification end \FV@Scan}% \def\FVE@asyheader{\endgroup\@esphack} \DefineVerbatimEnvironment{asyheader}{asyheader}% {codes={\catcode`@=0},tabsize=4} \begin{asyheader} defaultpen(fontsize(@getfontsize pt)); settings.prc = false; \end{asyheader} \def\asypicture{\FV@Environment{}{asypicture}} \newcommand{\ASYPIC@recordname}[1]{% \edef\tempmacroname{ASYPIC@name@#1}% \ifcsname\tempmacroname\endcsname%% if \ASYPIC@name@... is defined \edef\oldnum{\csname\tempmacroname\endcsname}% \edef\@asypicturename% {\scantokens\expandafter{\jobname\noexpand}-#1__\oldnum}% \expandafter\xdef\csname\tempmacroname\endcsname% {\the\numexpr\oldnum+1\relax}% \edef\ASYPIC@current@num{\csname\tempmacroname\endcsname}% \else%% This is the first time this name is being used. \edef\@asypicturename% {\scantokens\expandafter{\jobname\noexpand}-#1}% \expandafter\gdef\csname\tempmacroname\endcsname{1}% \fi% \xdef\asylistingfile{\@asypicturename.asy} } \def\FVB@asypicture#1{% \@bsphack \asyset{graphic options/.code={}}% \asyset{#1, name/.get = \currentname}% \ASYPIC@recordname{\currentname}% \begingroup \FV@UseKeyValues \FV@DefineWhiteSpace \def\FV@Space{\space}% \FV@DefineTabOut \def\FV@ProcessLine{\immediate\write\asy@OutFile}% \immediate\openout\asy@OutFile\@tempasyfile.asy\relax \immediate\write\asy@OutFile{\ASYPIC@header^^J} \let\FV@FontScanPrep\relax %% DG/SR modification begin - May. 18, 1998 %% (to avoid problems with ligatures) \let\@noligs\relax %% DG/SR modification end \FV@Scan} \newcommand{\ASYPICcomparefiles}[2]{ \IfFileExists{\@asypicturename.asy}% {\openin\@asyreadold=#1.asy\relax% \openin\@asyreadnew=#2.asy\relax% \asyfilechangedfalse% \@asyrepeattrue% \loop% \ifeof\@asyreadold% \@asyrepeatfalse% \ifeof\@asyreadnew% \else% \asyfilechangedtrue% \fi% \else% \ifeof\@asyreadnew% \@asyrepeatfalse% \asyfilechangedtrue% \else% Not at the end of either file in this case \read\@asyreadold to \oldfileline% \read\@asyreadnew to \newfileline% \ifx\oldfileline\newfileline% \@asyrepeattrue% \else \asyfilechangedtrue% \@asyrepeatfalse% \fi% \fi% \fi% \if@asyrepeat \repeat% \closein\@asyreadold% \closein\@asyreadnew% }% {\asyfilechangedtrue}% \IfFileExists{#1.pdf}{}{% \IfFileExists{#1.png}{}{% \IfFileExists{#1.eps}{}{% \asyfilechangedtrue% }% }% }% } \def\ASYPIC@runasy{% \message{Attempting to run asy on \@asypicturename.asy^^J}% \shell@execute{asy -noV \@asypicturename.asy 2> \@asyerrorfilename}% \openin\@asyreadold=\@asyerrorfilename\relax% \ifeof\@asyreadold% \closein\@asyreadold% \else% \def\@asyerrormessage{^^JPossible Asymptote error:^^J}% \read\@asyreadold to \@asyerrorfirstline% \g@addto@macro\@asyerrormessage{\@asyerrorfirstline^^J}% \ifeof\@asyreadold% \closein\@asyreadold% \else% {\endlinechar=`^^J% \loop% \readline\@asyreadold to \@asytempmessage% \expandafter\g@addto@macro\expandafter% \@asyerrormessage\expandafter{\@asytempmessage^^J}% \unless\ifeof\@asyreadold\repeat% }% \closein\@asyreadold% \g@addto@macro\@asyerrormessage{^^J}% %Next: Need to process \@asyerrorfirstline to figure %out the Asymptote file line number \expandafter\def\expandafter\@asy@processerrorline% \expandafter##\expandafter1\@asypicturename.asy:% ##2.##3\relax{\xdef\@asy@errorline{\numexpr##2\relax}}% {\expandafter\expandafter\expandafter% \@asy@processerrorline\expandafter% \@asyerrorfirstline\@asypicturename.asy: -5.\relax% }% The surrounding braces should prevent too much from % being gobbled in case the pattern doesn't match. \openin\@asyreadold\@asypicturename.asy\relax% \edef\numlinesout{5} \setcounter{@asy@linenumber}{\numlinesout} \loop\ifnum\value{@asy@linenumber}<\@asy@errorline% \readline\@asyreadold to \temp% \stepcounter{@asy@linenumber}% \repeat% % \addtocounter{@asy@linenumber}{-\numlinesout} % {% \endlinechar=`^^J% \loop\ifnum\value{@asy@linenumber}<\@asy@errorline% \stepcounter{@asy@linenumber}% \edef\temp/{\arabic{@asy@linenumber}}% \expandafter\g@addto@macro\expandafter% \@asyerrormessage\expandafter{\temp/ }% \readline\@asyreadold to \@asytempmessage% \expandafter\g@addto@macro\expandafter% \@asyerrormessage\expandafter{\@asytempmessage}% \repeat% }% \closein\@asyreadold% \PackageError{asypictureB}{\@asyerrormessage}{% The Asymptote run described above gave a non-empty error log. I have^^J reproduced the error log and attempted to print the five lines leading^^J up to the error. Press enter or return to continue, and then fix your^^J Asymptote code when this run is done. }% \fi% \fi% } \def\FVE@asypicture{\immediate\closeout\asy@OutFile\endgroup% \@esphack% \ifASYPIC@flush% \asyfilechangedtrue% \else% \ASYPICcomparefiles{\@asypicturename}{\@tempasyfile}% \fi% \ifasyfilechanged% \IfFileExists{\@asypicturename.png}% {\deletefile{\@asypicturename.png}}{}% \IfFileExists{\@asypicturename.pdf}% {\deletefile{\@asypicturename.pdf}}{}% \IfFileExists{\@asypicturename.eps}% {\deletefile{\@asypicturename.eps}}{}% \copyfile{\@tempasyfile.asy}{\@asypicturename.asy} \ASYPIC@runasy% \fi% \asyset{graphic options}% % Avoid giving "file does not exist" errors. \chardef\previousinteractionmode=\interactionmode% \batchmode% \includegraphics[scale=\asy@scale,angle=\asy@angle]% {\@asypicturename}% \interactionmode=\previousinteractionmode% } \DefineVerbatimEnvironment{asypicture}{asypicture}% {codes={\catcode`@=0},tabsize=4} \ifshellescape\else \AtEndDocument{\closeout\ASYPIC@shell} \fi \makeatother %% %% Copyright (C) 2014 by Charles Staats III %% %% This file may be distributed and/or modified under the %% conditions of the LaTeX Project Public License (LPPL), either %% version 1.3c of this license or (at your option) any later %% version. The latest version of this license is in the following file: %% %% http://www.latex-project.org/lppl.txt %% %% This work is "maintained" (as per LPPL maintenance status) by %% Charles Staats III. %% %% This work consists of the file asypictureB.dtx %% and the derived files asypictureB.ins, %% asypictureB.pdf, and %% asypictureB.sty. %% %% %% End of file `asypictureB.sty'.