考虑以下 MWE。抱歉,我无法提供更简单的一个。
% spiral.tex
\documentclass[preview]{standalone}
\usepackage[inline]{asymptote}
\begin{document}
\begin{asy}
settings.tex="pdflatex";
settings.prc=false;
settings.render=0;
import graph3;
import math;
size(200);
size3(150,180,100);
defaultpen(fontsize(10pt));
currentprojection=orthographic(camera=(8,6,4),up=Z,target=O,zoom=1);
real x(real t) {return t*cos(2pi*t*3);}
real y(real t) {return t*sin(2pi*t*3);}
real z(real t) {return t;}
real xMax=3, yMax=3, zMax=4;
path3 p=graph(x,y,z,0,2.735,operator ..);
triple P=relpoint(p,0.986);
triple Q=(P.x,P.y,0);
pen spiPen=deepcyan+1.2bp;
draw(p,spiPen,Arrow3(size=3));
dot(P);
label("$P$",P,Z+X);
guide3 h=P--Q;
guide3 rho=O--1.2Q;
draw(h, dashed+0.7bp);
draw(rho,dashed+0.7bp);
real arcd=1.5;
guide3 garc=arc(O,arcpoint(O--X,arcd),arcpoint(rho,arcd));
draw(garc,gray,Arrow3(size=3));
label("$z$",h,E);
label("$\rho$",rho,SW);
label("$\phi$",garc,NE);
pen xyzPen=darkblue+1bp;
xaxis3(0,xMax,xyzPen,Arrow3(size=3));
zaxis3("",0,zMax,xyzPen,Arrow3(size=3));
label("$Z$",zMax*Z,SW);
shipout(bbox(Fill(lightyellow)));
\end{asy}
\end{document}
编译后Asymptote.bat spiral
产生下列结果。
我的批次Asymptote.bat
定义如下。
rem Asymptote.bat
echo off
rem %1 TeX input filename without extension
if exist "%~1.pdf" del "%~1.pdf"
if exist "%~1.tex" pdflatex "%~1.tex"
if exist "%~1-*.asy" asy -f pdf %~1-*.asy
if exist "%~1.tex" pdflatex "%~1.tex"
for %%x in (pdf tex asy pre) do (if exist "%~1-*.%%x" del "%~1-*.%%x")
for %%x in (aux log pre) do (if exist "%~1.%%x" del "%~1.%%x")
我注意到,由于转换,PDF 输出中的字符无法搜索。我们可以让它们仍可搜索吗?
附加问题:
我能使用asy -f pdf %~1-*.asy
,为什么我不能在asy
命令中使用双引号,即asy -f pdf "%~1-*.asy"
?
答案1
为了获得可搜索的文本,必须将 3d 标签替换为投影的 2d 标签,例如 而label("$Z$",project(zMax*Z),SW)
不是label("$Z$",zMax*Z,SW)
。
asy
带有双引号文件名的命令可以用作asy -f pdf "%~n1-"*.asy
,这里“%~n1”表示不带扩展名的文件名,因此无需手动删除扩展名,它可以用作batch.bat filename.tex
或batch.bat "filename.tex"
。