Next: Base modules, Previous: Drawing commands, Up: Top
LaTeX usage
Asymptote comes with a convenient LaTeX style file
asymptote.sty that makes LaTeX
Asymptote-aware. Entering Asymptote code
directly into the LaTeX source file, at the point where it is
needed, keeps figures organized and avoids the need to invent new file
names for each figure. Simply add the line
\usepackage{asymptote} at the beginning of your file
and enclose your Asymptote code within a
\begin{asy}...\end{asy} environment. As with the
LaTeX comment environment, the \end{asy} command
must appear on a line by itself, with no leading spaces or trailing
commands/comments.
The sample LaTeX file below, named latexusage.tex, can
be run as follows:
latex latexusage asy latexusage latex latexusage
If the [inline] package option is given to
asymptote.sty, inline LaTeX code is generated instead of
EPS files.
This makes LaTeX symbols visible to the
\begin{asy}...\end{asy} environment. In this mode,
Asymptote correctly aligns LaTeX symbols defined outside of
\begin{asy}...\end{asy}, but treats their size as zero; an
optional second string can be given to Label to provide an
estimate of the unknown label size. Note that labels might not show up
in DVI viewers that cannot handle raw PostScript code; use
dvips/dvipdf to produce PostScript/PDF
output. We recommend using the modified version of dvipdf in
the Asymptote patches directory, which accepts the dvips -z
hyperdvi option.
An excellent tutorial by Dario Teixeira on integrating Asymptote and
LaTeX is available at http://dario.dse.nl/projects/asylatex/.
Here now is latexusage.tex:
\documentclass[12pt]{article}
% Use this form to include eps files:
\usepackage{asymptote}
% Use this form to include inline LaTeX code.
%\usepackage[inline]{asymptote}
% Enable this line to produce pdf hyperlinks
%\usepackage[hypertex]{hyperref}
\begin{document}
\begin{asydef}
// Global definitions can be put here.
\end{asydef}
Here is a venn diagram
%(Figure~\ref{venn})
produced with Asymptote, drawn to width 5cm:
\def\A{A}
\def\B{B}
%\begin{figure}
\begin{center}
\begin{asy}
size(5cm,0);
pen colour1=red;
pen colour2=green;
pair z0=(0,0);
pair z1=(-1,0);
pair z2=(1,0);
real r=1.5;
guide c1=circle(z1,r);
guide c2=circle(z2,r);
fill(c1,colour1);
fill(c2,colour2);
picture intersection=new picture;
fill(intersection,c1,colour1+colour2);
clip(intersection,c2);
add(intersection);
draw(c1);
draw(c2);
//box(Label("$\A$",z1)); // Requires [inline] package option.
//box(Label("$\B$","$B$",z2)); // Requires [inline] package option.
box(Label("$A$",z1));
box(Label("$B$",z2));
pair z=(0,-2);
real m=3;
margin BigMargin=Margin(0,m*dot(unit(z1-z),unit(z0-z)));
draw(Label("$A\cap B$",0),conj(z)--z0,Arrow,BigMargin);
draw(Label("$A\cup B$",0),z--z0,Arrow,BigMargin);
draw(z--z1,Arrow,Margin(0,m));
draw(z--z2,Arrow,Margin(0,m));
shipout(bbox(0.25cm));
\end{asy}
%\caption{Venn diagram}\label{venn}
\end{center}
%\end{figure}
Each graph is drawn in its own environment. One can specify the width
and height to \LaTeX\ explicitly:
\begin{center}
\begin{asy}[3cm,0]
guide center = (0,1){W}..tension 0.8..(0,0){(1,-.5)}..tension 0.8..{W}(0,-1);
draw((0,1)..(-1,0)..(0,-1));
filldraw(center{E}..{N}(1,0)..{W}cycle);
fill(circle((0,0.5),0.125),white);
fill(circle((0,-0.5),0.125));
\end{asy}
\end{center}
The default width is the full line width:
\begin{center}
\begin{asy}
import graph;
real f(real x) {return sqrt(x);}
pair F(real x) {return (x,f(x));}
real g(real x) {return -sqrt(x);}
pair G(real x) {return (x,g(x));}
guide p=(0,0)--graph(f,0,1,operator ..)--(1,0);
fill(p--cycle,lightgray);
draw(p);
draw((0,0)--graph(g,0,1,operator ..)--(1,0),dotted);
real x=0.5;
pair c=(4,0);
transform T=xscale(0.5);
draw((2.695,0),T*arc(0,0.30cm,20,340),ArcArrow);
fill(shift(c)*T*circle(0,-f(x)),red+white);
draw(F(x)--c+(0,f(x)),dashed+red);
draw(G(x)--c+(0,g(x)),dashed+red);
dot(Label,(1,1));
arrow("$y=\sqrt{x}$",F(0.7),N);
arrow((3,0.5*f(x)),W,1cm,red);
arrow((3,-0.5*f(x)),W,1cm,red);
xaxis("$x$",0,c.x,dashed);
yaxis("$y$");
draw("$r$",(x,0)--F(x),E,red,Arrows,BeginBar,PenMargins);
draw("$r$",(x,0)--G(x),E,red,Arrows,PenMargins);
draw("$r$",c--c+(0,f(x)),Arrow,PenMargin);
dot(c);
\end{asy}
\end{center}
\end{document}