| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
7 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 trailing commands/comments.
A blank line is not allowed after \begin{asy}.
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 latexusage
To switch between using inline Asymptote code with latex and
pdflatex you may first need to remove the files latexusage-*.tex.
An even better method for processing a LaTeX file with embedded
Asymptote code is to use the latexmk utility from
after putting the contents of
http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/doc/latexmkrc
in a file latexmkrc in the same directory. The command
latexmk -pdf latexusage
will 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.
To store the figures in a separate directory named asy, one can define
\def\asydir{asy}
in latexusage.tex and put the contents of
http://sourceforge.net/p/asymptote/code/HEAD/tree/trunk/asymptote/doc/latexmkrc_asydir
in a file latexmkrc in the same directory.
External Asymptote code in filename.asy should be included with
\asyinclude[<options>]{<filename.asy>}
so that latexmk will recognize when the code is changed. Note that
latemk requires perl, available from http://www.perl.org/.
One can specify width, height, keepAspect,
viewportwidth, viewportheight, attach, and inline.
keyval-style options to the asy and asyinclude
environments.
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 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 the attach option:
%\usepackage[dvips]{attachfile2}
\begin{document}
% Optional subdirectory for asy files (no spaces):
\def\asydir{}
\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 \verb+attach=true+ option as well as the
\verb+attachfile2+ \LaTeX\ package.
\begin{center}
\begin{asy}[height=4cm,inline=true,attach=false,viewportwidth=\linewidth]
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}
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on May 24, 2014 using texi2html 5.0.
