# Asymptote problem

I want to modify an Asymptote code that i found on this forum, but when i compile i get an empty page. I used Texstudio and Texmaker and the result is the same (an empty page). here is the code and link to the forum page. Draw realistic 3D crystal structures (diamond)

\documentclass{standalone}
\usepackage{asymptote}

\begin{document}
\begin{asy}
import three;
settings.render=8;
settings.prc=false;
size(10cm);

//currentprojection=perspective((45,45,30));
currentprojection = orthographic((3,6,1));

material sphereCcolor = material(diffusepen=black, ambientpen=gray(0.1), specularpen=white);
material cylcolor = material(diffusepen=white, ambientpen=white);

void drawRod(triple a, triple b) {
triple orthovector = cross(Z, b-a);
if (length(orthovector) > .01) {
real angle = aCos(dot(Z, b-a) / length(b-a));
rod = rotate(angle, orthovector) * rod;
}
draw(shift(a)*rod, surfacepen=cylcolor);
}

void drawCarbon(triple center) {
}

triple Aa = (0,0,0);
triple Ab = 4X;
triple Ac = 4Y;
triple Ae = 2X+2Y;
triple Ba = 1X+1Y+1Z;
triple Bb = 3X+3Y+1Z;
triple Ca = 2X+2Z;
triple Cb = 2Y+2Z;
triple Cc = 4X+2Y+2Z;
triple Cd = 2X+4Y+2Z;
triple Da = 3X+1Y+3Z;
triple Db = 1X+3Y+3Z;
triple Ea = 4Z;
triple Eb = 4X+4Z;
triple Ec = 4Y+4Z;
triple Ed = 4X+4Y+4Z;
triple Ee = 2X+2Y+4Z;

drawRod(Ba,Aa);
drawRod(Ba,Ae);
drawRod(Bb,Ae);
drawRod(Ba,Ca);
drawRod(Ba,Cb);
drawRod(Bb,Cc);
drawRod(Bb,Cd);
drawRod(Da,Ca);
drawRod(Da,Cc);
drawRod(Db,Cb);
drawRod(Db,Cd);
drawRod(Da,Eb);
drawRod(Da,Ee);
drawRod(Db,Ee);
drawRod(Db,Ec);

drawCarbon(Aa);
drawCarbon(Ab);
drawCarbon(Ac);
drawCarbon(Ae);
drawCarbon(Ba);
drawCarbon(Bb);
drawCarbon(Ca);
drawCarbon(Cb);
drawCarbon(Cc);
drawCarbon(Cd);
drawCarbon(Da);
drawCarbon(Db);
drawCarbon(Ea);
drawCarbon(Eb);
drawCarbon(Ec);
drawCarbon(Ed);
drawCarbon(Ee);

// Frame
material framecolor = material(diffusepen=white, ambientpen=yellow);
void drawFrame(triple a, triple b) {
triple orthovector = cross(Z, b-a);
if (length(orthovector) > .01) {
real angle = aCos(dot(Z, b-a) / length(b-a));
rod = rotate(angle, orthovector) * rod;
}
draw(shift(a)*rod, surfacepen=framecolor);
}
drawFrame((0,0,0),4X);
drawFrame((0,0,0),4Y);
drawFrame((0,0,0),4Z);
drawFrame(4X,4X+4Y);
drawFrame(4X,4X+4Z);
drawFrame(4Y,4Y+4X);
drawFrame(4Y,4Y+4Z);
drawFrame(4Z,4X+4Z);
drawFrame(4Z,4Y+4Z);
drawFrame(4X+4Y+4Z,4Y+4Z);
drawFrame(4X+4Z,4X+4Y+4Z);
drawFrame(4X+4Y,4X+4Y+4Z);
\end{asy}
\end{document}


This is the code in asymptote (page of the developper https://github.com/pivaldi) to get this figure:

• The code is broken (see the comment from "user25957" in the answer from where you have copied this code). material(diffusepen=white, ambientpen=yellow); don't work. So replace material sphereCcolor = material(diffusepen=black, ambientpen=gray(0.1), specularpen=white); by material sphereCcolor = green; and the two other similar lines by color like blue and red. In Asymptote, one error gives directly blank page. You need also to configure your LaTeX IDE to use the Asymptote toolchain. For the errors, perhaps the syntax has changed. Mar 3 at 13:11
• ambientpen is officially gone: see sourceforge.net/p/asymptote/discussion/409349/thread/e5ca5b440f. Mar 3 at 13:18
• Thank you very much @quark67 for your answer. I changed "ambientpen" in the code and everything works fine with Texmaker, but with Texstudio I still have a blank page. Mar 3 at 15:51
• With Texstudio, have you tried Tools -> Commands -> Asymptote? Works for me with version 4.5.1. Mar 3 at 17:27
• The compilation needs 3 step (pdflatex, asy, pdflatex). Go to Texstudio settings, Build section, and in "Build & view", select txs:///asy-pdf-chain chain. Then, click on ▶︎▶︎ (the Build & View button in the interface). You should read in messages "Process started: pdflatex ...", "Process started: asy ..." and again "Process started: pdflatex ..." where "..." contains options for the pdflatex command and the file name processed. For the asy command, the file name is appended with a "-1" before the extension ".asy", it's normal. If this don't work, edit your question with steps & screenshoots. Mar 3 at 23:18

I simplify the code for the connector rods. For embbeding on a LaTeX document, see this overleaf link.

// http://asymptote.ualberta.ca/
import three;
size(5cm);
currentprojection=orthographic((3,4,5));
void drawRod(triple a,triple b){
draw(a--b,blue+8pt);
}
triple[] A={O,X,2Z};
for(triple p : A)
draw(shift(p)*scale3(.2)*unitsphere,orange);

drawRod(A[0],A[1]);
drawRod(A[1],A[2]);


Also have a look at this.

• I tried with this simplified the code but I still get an error. Mar 6 at 18:14
• @moumou85 I have fixed the code. Go on the site asymptote.ualberta.ca, paste the code and click on "Run". It will work. Then, copy this code on a file with the extension .asy and on a Terminal go on the directory of the file and execute the command asyon it (asy myfile.asy). Normally, you obtain a file named myfile.eps(Encapsuled PostScript). Then delete the .eps file, open the .asy file with TexStudio, go to Tools, Compile, Asymptote. You will see in the "Messages" at botton of TexStudio that all is OK, and you will find the file myfile.eps alongside with the .asy file. Mar 8 at 3:11
• @moumou85 For a .tex file (\documentclass, \begin{document} AND \begin{asy}), you need 3 passes (pdflatex, asy, pdflatex). All are in Tools, Compile, Asymptote in TexStudio. Mar 8 at 3:15
• @moumou85 I updated an overleaf link (LaTeX online). Your problem is technical on how to setup your TexStudio, and it's not hard when following some (Bing, Google, this texSE forum) searches. Mar 8 at 6:29
• I know that with TexStudio i need 3 passes (pdflatex, asy, pdflatex) i do and i get "Process exited normally" but it gives blank page. Mar 8 at 12:31