如何在 Asymptote 中按字符串类型格式化字符串?

如何在 Asymptote 中按字符串类型格式化字符串?

我编写了一个函数,用于绘制带有标签的矢量。我想为标签使用不同的字体。我已完成以下操作

texpreamble("\usepackage{amsmath}\usepackage{amsfonts}");
texpreamble("\renewcommand\vec[1]{\boldsymbol{#1}}");

arrowbar vecArrow=ArcArrow(SimpleHead);

void drawV(pair begin, real leng, real angle=0, 
              Label label="", align align=N,
              arrowbar arrow=vecArrow, arrowbar bar=None,
              picture pic = currentpicture,
              pen p=currentpen, 
              margin margin=NoMargin, 
              marker marker=nomarker){
    path v;
    v=begin--(begin.x+leng, begin.y);
    rotate(angle, begin)*v;

    Label L="$\vec{...}$";       // <-- What can I do here?

    draw(pic=pic, L=L, align=align, v, p=p, arrow=arrow, bar=bar);
    dot(pic=pic, p=p, begin, filltype=dotfilltype);
}

drawV((0,0),5);

在我的例子中,我给出了一个简单的标签(或字符串)参数,函数将改变最终的字体,这样我就不必专门编写字体更改代码。

但我不知道如何使用L给定的参数来格式化label。有什么解决方案吗?

答案1

这是您函数的简化版本。如果您有任何问题或希望我展示任何其他功能,请给我留言。

texpreamble("\usepackage{amsmath}\usepackage{amsfonts}");
texpreamble("\renewcommand\vec[1]{\boldsymbol{#1}}");

unitsize(1cm);

void drawV(pair begin, real leng, real angle=0, string label="")
{
    path v = shift(begin)*rotate(angle)*((0,0)--(leng,0));

    string str = "$\vec{" + label + "}$";

    draw(Label(rotate(angle)*str), v, Arrow(SimpleHead));
    dot(begin, 3+black);
}

drawV((0,0), 5, 30, "test");

在此处输入图片描述

相关内容