绘制线的边框

绘制线的边框

我有这样一行:

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 处理单位的巧妙方式。guidepenblackwhiteblackblack+5mm

答案3

我认为您应该将的尺寸改为defaultpen小于您正在使用的尺寸,即小于0.5cm

我希望这有帮助!

相关内容