Next: Base modules, Previous: Programming, 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
or
pdflatex latexusage asy latexusage pdflatex latexusage
If the inline
option is given to the
asymptote.sty
package, 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 if latex
is used with the inline
option,
the labels might not show up in DVI viewers that cannot
handle raw PostScript
code. One can 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 (latex) or pdf (pdflatex) files: \usepackage{asymptote} % Use this form with latex or pdflatex to include inline LaTeX code: %\usepackage[inline]{asymptote} % Enable this line to produce pdf hyperlinks with latex: %\usepackage[hypertex]{hyperref} % Enable this line to produce pdf hyperlinks with pdflatex: %\usepackage[pdftex]{hyperref} \begin{document} \begin{asydef} // Global Asymptote definitions can be put here. usepackage("bm"); \end{asydef} Here is a venn diagram produced with Asymptote, drawn to width 4cm: \def\A{A} \def\B{\bm{B}} %\begin{figure} \begin{center} \begin{asy} size(4cm,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("$\bm{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} To scale the figure to the full line width: \begin{center} \begin{asy}[\the\linewidth] 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}