渐近线:有盒子外面的东西

渐近线:有盒子外面的东西

我正在使用 Asymptote 绘制图形。我正在制作一个反正切图。我想给图形贴标签,但我希望标签伸出边界框。我想要这样做是因为如果我只让 Asymptote 将标签包含在边界框中,那么当我将图形放入文档并将其居中时,它看起来就会偏离中心(正确的说法是标签没有图形“重量”吗?)。

简而言之,如果将下面的内容更改为“说” \makebox[0em][l]{$\arctan(..)$},则 Asymptote 会将文本剪切到边界框中。我如何保留 bb,但让所有标签都显示出来?

// arctan.asy
import settings;
settings.outformat="pdf";
settings.render=0;

unitsize(1cm);

import graph;
real f(real x) {
  return (atan(x)+(pi/2.0))/pi;
}

real xmin = -3.5;
real xmax = 3.5;
real ymin = -0.35;
real ymax = 1.5;

draw((xmin,0) -- (xmax,0), blue, arrow=None);
draw((0,ymin) -- (0,ymax), blue, arrow = None);

path g = graph(f,xmin,xmax);
draw(g,red);
label("\makebox[0em][c]{$\scriptstyle (\arctan(x)+(\pi/2))/\pi$}", (2.15,0.8), S);

显然,我可以通过目测来解决这个问题。但是有自动解决方案吗?

答案1

可能有更简单的方法,但这里有一个解决方案。centerAtOrigin下面代码中显示的函数将在绘图上填充一个透明矩形。矩形按比例缩放并以原点为中心,使得图形原点位于左右中心。我在下面的绘图中添加了黑色边框,只是为了说明绘图左侧的白色边框。

// arctan.asy
import settings;
settings.outformat="pdf";
settings.render=0;

unitsize(1cm);

import graph;
real f(real x) {
  return (atan(x)+(pi/2.0))/pi;
}

real xmin = -3.5;
real xmax = 3.5;
real ymin = -0.35;
real ymax = 1.5;

draw((xmin,0) -- (xmax,0), blue, arrow=None);
draw((0,ymin) -- (0,ymax), blue, arrow = None);

path g = graph(f,xmin,xmax);
draw(g,red);
label("$\scriptstyle (\arctan(x)+(\pi/2))/\pi$", (xmax,0.8), S);

void centerAtOrigin()
{
    pair origMinPoint = min(currentpicture)/72*2.54;
    pair origMaxPoint = max(currentpicture)/72*2.54;
    pair origSize = size(currentpicture)/72*2.54;
    real xmin = origMinPoint.x;
    real xmax = origMaxPoint.x;
    real ymin = origMinPoint.y;
    if (xmax > fabs(xmin)) { xmin = -xmax; }
    if (fabs(xmin) > xmax) { xmax = -xmin; }
    fill(shift(xmin,ymin)*scale(xmax-xmin,origSize.y)*
        unitsquare, opacity(0)+white);
}

centerAtOrigin();

在此处输入图片描述

编辑:即使标签位于边界框之外,此方法也不会显示标签,而是扩展另一侧的边界框,以保持垂直轴居中。

相关内容