LaTeX
usage
Asymptote
comes with a convenient LaTeX
style file
asymptote.sty
(version 1.15 or later) 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-*.asy latex latexusage
or
pdflatex latexusage asy latexusage-*.asy pdflatex latexusageTo switch between using
latex
and pdflatex
you may first
need to remove the files latexusage-*
, latexusage.pre
, and
latexusage.aux
.
An even better method for processing a LaTeX
file with embedded
Asymptote
code is to use the latexmk
utility from
http://www.ctan.org/tex-archive/support/latexmk/after putting the rules
sub asy {return system("asy '$_[0]'");} add_cus_dep("asy","eps",0,"asy"); add_cus_dep("asy","pdf",0,"asy"); add_cus_dep("asy","tex",0,"asy");in a file
latexmkrc
in the same directory. The command
latexmk -pdf latexusagewill then call
Asymptote
automatically, recompiling only the figures
that have changed. Since each figure is compiled in a separate
system process, this method also tends to use less memory.
One can specify width
, height
,
viewportwidth
, viewportheight
, attach
, and inline
.
keyval
-style options to the asy
environment.
Three-dimensional PRC files may either be embedded within
the page (the default) or attached as annotated (but printable)
attachments, using the attach
option and the attachfile2
(or older attachfile
) LaTeX
package. The default value
of viewportwidth
is \the\linewidth
for inline 3D figures
and 0
for attachments. The inline
option generates
inline LaTeX
code instead of EPS or PDF
files. This makes 2D LaTeX symbols visible to the
\begin{asy}...\end{asy}
environment. In this mode,
Asymptote correctly aligns 2D 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 the latex
TeX engine is used with the
inline
option, 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).
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 by default: %\usepackage[inline]{asymptote} % Use this form with latex or pdflatex to create PDF attachments by default: %\usepackage[attach]{asymptote} % Enable this line to support PDF hyperlinks: %\usepackage{hyperref}\hypersetup{setpagesize=false,unicode} % Enable this line to support the attach option: %\usepackage[dvips]{attachfile2} \begin{document} \begin{asydef} // Global Asymptote definitions can be put here. import three; usepackage("bm"); texpreamble("\def\V#1{\bm{#1}}"); // One can globally override the default toolbar settings here: // settings.toolbar=true; \end{asydef} Here is a venn diagram produced with Asymptote, drawn to width 4cm: \def\A{A} \def\B{\V{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; path c1=circle(z1,r); path 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); //draw("$\A$",box,z1); // Requires [inline] package option. //draw(Label("$\B$","$B$"),box,z2); // Requires [inline] package option. draw("$A$",box,z1); draw("$\V{B}$",box,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. This 3D example can be viewed interactively either with Adobe Reader or Asymptote's fast OpenGL-based renderer. To support {\tt latexmk}, 3D figures should specify \verb+inline=true+. It is sometimes desirable to embed 3D files as annotated attachments; this requires the optional \verb+\usepackage{attachfile2}+ package and the \verb+attach=true+ option: \begin{center} \begin{asy}[height=4cm,inline=true,attach=false] currentprojection=orthographic(5,4,2); draw(unitcube,blue); label("$V-E+F=2$",(0,1,0.5),3Y,blue+fontsize(17pt)); \end{asy} \end{center} One can also scale the figure to the full line width: \begin{center} \begin{asy}[width=\the\linewidth,inline=true] pair z0=(0,0); pair z1=(2,0); pair z2=(5,0); pair zf=z1+0.75*(z2-z1); draw(z1--z2); dot(z1,red+0.15cm); dot(z2,darkgreen+0.3cm); label("$m$",z1,1.2N,red); label("$M$",z2,1.5N,darkgreen); label("$\hat{\ }$",zf,0.2*S,fontsize(24pt)+blue); pair s=-0.2*I; draw("$x$",z0+s--z1+s,N,red,Arrows,Bars,PenMargins); s=-0.5*I; draw("$\bar{x}$",z0+s--zf+s,blue,Arrows,Bars,PenMargins); s=-0.95*I; draw("$X$",z0+s--z2+s,darkgreen,Arrows,Bars,PenMargins); \end{asy} \end{center} \end{document}