From c68f9012130bdc604769e59229abefc28ac1cf04 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 24 Jun 2009 16:44:01 +0000 Subject: new latex package asyfig (23jun09) git-svn-id: svn://tug.org/texlive/trunk@13944 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/asyfig/asyalign.sty | 55 +++++++++ Master/texmf-dist/tex/latex/asyfig/asyfig.sty | 141 ++++++++++++++++++++++ Master/texmf-dist/tex/latex/asyfig/asyprocess.sty | 59 +++++++++ 3 files changed, 255 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/asyfig/asyalign.sty create mode 100644 Master/texmf-dist/tex/latex/asyfig/asyfig.sty create mode 100644 Master/texmf-dist/tex/latex/asyfig/asyprocess.sty (limited to 'Master/texmf-dist/tex/latex/asyfig') diff --git a/Master/texmf-dist/tex/latex/asyfig/asyalign.sty b/Master/texmf-dist/tex/latex/asyfig/asyalign.sty new file mode 100644 index 00000000000..1bc05a30f7d --- /dev/null +++ b/Master/texmf-dist/tex/latex/asyfig/asyalign.sty @@ -0,0 +1,55 @@ +%% LaTeX2e file `asyalign.sty' +%% generated by the `filecontents' environment +%% from source `asyfig' on 2009/06/24. +%% +\ProvidesPackage{asyalign} + +% This package provides code for placing Asymptote labels inline in \LaTeX\ documents. It is adapted from code that is usually included within Aymptote's \|_.pre| file, which provides a \LaTeX\ preamble for |asy| processing; this preamble is skipped with the \pkg{asyfig} package since all figures inherit the preamble from that of the main document. + +\RequirePackage{ifpdf} + +\newbox\ASYbox +\newdimen\ASYdimen + +\def\ASYbase#1#2{% + \setbox\ASYbox=\hbox{#1}% + \ASYdimen=\ht\ASYbox + \setbox\ASYbox=\hbox{#2}% + \lower\ASYdimen\box\ASYbox} + +\ifpdf + \def\ASYalign(#1,#2)(#3,#4)#5#6{% + \leavevmode + \setbox\ASYbox=\hbox{#6}% + \setbox\ASYbox\hbox{% + \kern#3\wd\ASYbox + \raise#4\dimexpr\ht\ASYbox+\dp\ASYbox\relax\box\ASYbox}% + \put(#1,#2){% + \special{pdf:q #5 0 0 cm}% + \wd\ASYbox\z@\dp\ASYbox\z@\ht\ASYbox\z@ + \box\ASYbox + \special{pdf:Q}% + }} + \let\ASYraw\@firstofone + +\else + \def\ASYalign(#1,#2)(#3,#4)#5#6{% + \leavevmode + \setbox\ASYbox=\hbox{#6}% + \setbox\ASYbox\hbox{% + \kern#3\wd\ASYbox + \raise#4\dimexpr\ht\ASYbox+\dp\ASYbox\relax\box\ASYbox}% + \put(#1,#2){% + \special{% + ps:gsave currentpoint currentpoint translate + [#5 0 0] concat neg exch neg exch translate}% + \box\ASYbox + \special{ps:currentpoint grestore moveto}% + }} + \def\ASYraw#1{% + currentpoint currentpoint translate matrix currentmatrix + 100 12 div -100 12 div scale + #1 + setmatrix neg exch neg exch translate} +\fi + diff --git a/Master/texmf-dist/tex/latex/asyfig/asyfig.sty b/Master/texmf-dist/tex/latex/asyfig/asyfig.sty new file mode 100644 index 00000000000..30b15b6d796 --- /dev/null +++ b/Master/texmf-dist/tex/latex/asyfig/asyfig.sty @@ -0,0 +1,141 @@ +%% LaTeX2e file `asyfig.sty' +%% generated by the `filecontents' environment +%% from source `asyfig' on 2009/06/24. +%% +\ProvidesPackage{asyfig}[2009/06/23 v0.1a + Commands for using asymptote figures] + +% This package is the main user interface for inserting external |asy| figures +% into the document. + +\RequirePackage{% + asyalign,color,ifmtarg,ifpdf,ifplatform,import, + graphicx,pdftexcmds,suffix,xkeyval} + +% Better conditionals than |\newif| provides: +\def\@True{11} +\def\@False{01} +\def\asy@If#1{\if#1\relax\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi} + +\let\asy@always\@False +\let\asy@never\@False +\let\asy@process\@False + +% Package options: +\define@choicekey*{asyfig.sty}{process}[\@tempa\@tempb]{all,none,auto}{% + \ifcase\@tempb\relax + \let\asy@always\@True + \or + \let\asy@never\@True + \or + \fi +} +\ExecuteOptions{process=auto} + +\ProcessOptionsX + +% \subsection{Auxiliary macros} + +\def\asy@splitpath#1/#2/{% +% Recursive macro that is used like\\ +% \qquad |\asy@splitpath abc/def/ghi.asy/\@nil/|\\ +% It defines |\asy@filename| $\to$ |ghi.asy| and |\asy@path| $\to$ |abc/def/| + \ifx\@nil#2\relax +% If input is \|/\@nil/| then we've reached the end: + \def\asy@filename{#1}% + \else +% Otherwise we're in the middle of the slash-separated list; +% build up |\asy@path|, and iterate: + \edef\asy@path{\asy@path#1/}% + \def\@tempa{\asy@splitpath#2/}% + \expandafter\@tempa + \fi +} + +\newcommand\asypath[1]{\def\asy@pathprefix{#1}} +\asypath{} + +\def\asy@asyfile{\asy@pathprefix\asy@path\asy@filename.asy} +\def\asy@texfile{\asy@pathprefix\asy@path\asy@filename\string_.tex} + +\def\asy@cmdsep{\ifwindows \string& \else; \fi} + +% \subsection{The main macro} + +\newcommand\asyfig[1]{% + \let\asy@path\@empty + \asy@splitpath #1/\@nil/% + \IfFileExists{\asy@asyfile}{% + \asy@If\asy@process{}{% + \asy@If\asy@always{% + \let\asy@process\@True + }{% + \IfFileExists{\asy@texfile}{% + \asy@If\asy@never{}{% + % compare file dates to see if we want to reprocess: + \ifnum\pdf@strcmp{\pdf@filemoddate{\asy@texfile}} + {\pdf@filemoddate{\asy@asyfile}} < \z@ + \let\asy@process\@True + \fi + }% + }{% if the .tex file doesn't exist, either + % give an error or process the .asy file: + \asy@If\asy@never{% + \PackageError{asyfig}{% + ^^J\space\space\space\space + "\asy@pathprefix\asy@path\asy@filename.asy" requires processing% + }{% + The generated file that is required to insert the asy graphic, + ^^J\space\space\space\space + "\asy@pathprefix\asy@path\asy@filename\string_.tex"^^J% + does not exist. + Please process the asy figure manually or de-activate the^^J% + [process=none] package option. + }% + }{% + \let\asy@process\@True + } + }% + }}% + \asy@If\asy@process{% + \edef\@tempa{\asy@pathprefix\asy@path}% + \pdf@system{% + echo "^^J====== ASY PROCESS =====^^J" + \asy@cmdsep + \ifx\@tempa\@empty\else + cd \@tempa + \asy@cmdsep + \fi + \ifpdf pdf\fi latex + -shell-escape + -interaction=batchmode + -jobname=\asy@filename-comp + \unexpanded{% + "\RequirePackage{asyprocess}\ProcessAsy + \documentclass{article} + \begin{document}\ShowAsy + \end{document}" + }% + \asy@cmdsep + echo "^^J==== ASY END PROCESS ===^^J" + }% + }{}% + \import{\asy@pathprefix\asy@path}{\asy@filename\string_.tex}% + }{% + \PackageWarning{asyfig}{% + ^^J\space\space + "\asy@pathprefix\asy@path\asy@filename.asy" not found.^^J% + This warning occurred% + }% + }% + \let\asy@process\@False +} + +% The starred version of \cmd\asyfig\ processes the graphic always: +\WithSuffix\newcommand\asyfig*[1]{% + \begingroup + \let\asy@process\@True + \csname\NoSuffixName\asyfig\endcsname{#1}% + \endgroup +} + diff --git a/Master/texmf-dist/tex/latex/asyfig/asyprocess.sty b/Master/texmf-dist/tex/latex/asyfig/asyprocess.sty new file mode 100644 index 00000000000..c665b37cba0 --- /dev/null +++ b/Master/texmf-dist/tex/latex/asyfig/asyprocess.sty @@ -0,0 +1,59 @@ +%% LaTeX2e file `asyprocess.sty' +%% generated by the `filecontents' environment +%% from source `asyfig' on 2009/06/24. +%% +\ProvidesPackage{asyprocess} +\nofiles + +\RequirePackage{ifmtarg,ifpdf,catchfile,ifplatform,color,graphicx} +\RequirePackage[active,tightpage]{preview} + +\def\@par@macro{\par} + +\def\asy@status{asyprocess-statusfile.txt} + +\edef\@tempa{\detokenize{-comp}} +\@temptokena{\def\asy@strip@comp#1} +\expandafter\the\expandafter\@temptokena\@tempa#2\@nil{% + \@ifmtarg{#2}{% + \errorstopmode + \PackageError{asyprocess}{% + The \string\jobname\space of this compilation must end with `-comp'% + }{% + You must set the \cmd\jobname\ with the equivalent of^^J\space\space + pdflatex -jobname=XYZ-comp ...% + } + }{}% + \edef\asy@compname{#1}} +\expandafter\expandafter\expandafter + \asy@strip@comp\expandafter\jobname\@tempa\@nil + +\newcommand\ProcessAsy{% + \immediate\write18{% + asy -wait -inlinetex -tex \ifpdf pdf\fi latex + \asy@compname\space 2> \asy@status}% + \CatchFileDef{\@tempb}{\asy@status}{}% + \immediate\write18{\ifwindows del \else rm \fi \asy@status} + \ifx\@tempb\@par@macro + \expandafter\@gobble + \else + \g@addto@macro\@tempb{^^J^^J% + ------------ ASY ERROR ------------^^J% + -----------------------------------}% + \expandafter\@firstofone + \fi{% + \errorstopmode + \typeout{% + -----------------------------------^^J% + ------------ ASY ERROR ------------^^J} + \typeout{\expandafter\strip@prefix\meaning\@tempb} + \batchmode + \end{document}}} + +\newcommand\ShowAsy{% + \begin{preview} + \input{\asy@compname_} + \end{preview}} + +\AtBeginDocument{\InputIfFileExists{\asy@compname_.pre}{}{}} + -- cgit v1.2.3