# 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. Commented Mar 3, 2023 at 13:11
• ambientpen is officially gone: see sourceforge.net/p/asymptote/discussion/409349/thread/e5ca5b440f. Commented Mar 3, 2023 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. Commented Mar 3, 2023 at 15:51
• With Texstudio, have you tried Tools -> Commands -> Asymptote? Works for me with version 4.5.1. Commented Mar 3, 2023 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. Commented Mar 3, 2023 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. Commented Mar 6, 2023 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. Commented Mar 8, 2023 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. Commented Mar 8, 2023 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. Commented Mar 8, 2023 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. Commented Mar 8, 2023 at 12:31