我有这样一行:
line.tex
:
\documentclass[12pt]{article}
\usepackage{asymptote}
\begin{document}
\begin{asy}
unitsize(1cm);
defaultpen(0.5cm);
draw((0,0)--(1,1));
\end{asy}
\end{document}
latexmrc
:
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");
正如预期的那样,它绘制了一条带有圆边的实线,如下所示:
不过,我只想画出那条线的外边框,如下所示:
我怎样才能做到这一点?
答案1
我接受了这个想法这个帖子,使用graph
包构造path[] getBorder(path, pen)
函数如下面的代码所示。
unitsize(1inch);
import graph;
path[] getBorder(path p, pen origPen)
{
real offset = linewidth(origPen)/2.0/72.0;
pair offsetPoint(real t) { return point(p, t) + offset*(rotate(90)*dir(p,t)); }
path path1 = graph(offsetPoint, 0, length(p), operator ..);
offset = -offset;
path path2 = graph(offsetPoint, 0, length(p), operator ..);
path[] paths;
if (cyclic(p)) { paths = path1^^path2; }
else { paths = path1..reverse(path2)..cycle; }
return paths;
}
pen origPen = 10+black;
draw(getBorder((0,0){E}..{S}(2,0), origPen), red);
draw(getBorder((0,1)--(1,0), origPen), blue);
draw(getBorder(shift(1,0.5)*scale(0.5)*unitcircle, origPen), green);
该代码适用于循环路径或非循环路径。origPen
定义确定路径轮廓的最终宽度。该函数假定用origPen
定义roundcap
。
不幸的是,该函数的性质决定了尖角或小半径将无法得到正确处理。也许其他人知道如何克服这个问题。
答案2
您可以使用具有背景颜色且宽度略窄的笔来覆盖它。
这是一个例子:(编译asy
或集成到您现有的 LaTeX 文档中)。
unitsize(1cm);
guide sausage = (0,0) -- (2,3);
draw(sausage, black+5);
draw(sausage, white+4.2);
结果是:
该命令使用指定的draw(*guide*, *pen*)
绘制。要设置笔的宽度,只需将一个实数添加到现有笔中。在本例中,我使用了预定义(彩色)笔和。将 5 添加到可使笔的宽度为 5 个 PostScript 点。如果您想要一个 5 毫米宽的笔,那么您可以做到,这要归功于 Asymptote 处理单位的巧妙方式。guide
pen
black
white
black
black+5mm
答案3
我认为您应该将的尺寸改为defaultpen
小于您正在使用的尺寸,即小于0.5cm
。
我希望这有帮助!