图片上的标签尺寸

图片上的标签尺寸

这是我的问题

现在,当我使用它时,在我看来,此代码生成的标签字母比文本公式中的相应字母稍大一些(比如,查看内联公式中的字母 A,在标题中 - 这些看起来相同,并且字母 A 是 vetrex A 的标签 - 这个对我来说看起来更大)。

在此处输入图片描述

问题:如何让它们变得相同?

一般来说:如何让图片上的标签和文字大小一致?

对我来说,很明显,问题在于 opendot 函数的工作方式,但@Charles Staats(他提出这个建议并给了我很大帮助)和我都不明白它是如何工作的。


限制

  1. 必须保留缩放图片的选项。有时我需要缩放图片,这不会影响标签 - 无论图片大小如何,所有标签都必须相同(并且与主文本公式中的字母相同)。
  2. 这些点必须保持“空白”。这是整个三卷书的设计,我真的想保留它。
  3. 图形必须保持矢量。因此,
 settings.prc = false;  // IMPORTANT
 settings.render = 0;   // IMPORTANT

真的很重要。所以,请不要使用带有标签的整幅图的解决方案。

更改图片的功能必须保留,标签始终与正文中的标签相同

谢谢。

梅威瑟:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[OT1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage[pdftex]{graphicx}
\usepackage{euler,beton}
\usepackage[inline]{asymptote}

%============================================================
\begin{document}
Triangle $ABC$.



\begin{figure}[h]
    \centering
    \caption{Triangle $ABC$.}\label{OrthoCenterTetr}
    \begin{asy}
    settings.outformat = "pdf";
    settings.prc = false;  // IMPORTANT
    settings.render = 0;   // IMPORTANT
    import three;
    import geometry;
    texpreamble("\usepackage{euler,beton}");
%============================================================   
    void opendot(picture pic=currentpicture, triple v, material p=currentpen,
    light light=nolight, string name="", render render=defaultrender)
    {
    pen q=(pen) p;
    pen fillpen = light.background;
    if (invisible(fillpen)) fillpen = currentlight.background;
    if (invisible(fillpen)) fillpen = white;
    real size=0.5*linewidth(dotsize(q)+q);
    pic.add(new void(frame f, transform3 t, picture pic, projection P) {
    triple V=t*v;
    assert(!is3D(), "opendot() not supported unless settings.prc == false and settings.render != 0");
    if(pic != null)
    dot(pic,project(V,P.t),filltype=FillDraw(fillpen=fillpen, drawpen=q));
    },true);
    triple R=size*(1,1,1);
    pic.addBox(v,v,-R,R);
    }
%============================================================   
    void opendot(picture pic=currentpicture, Label L, triple v, align align=NoAlign,
    string format=defaultformat, material p=currentpen,
    light light=nolight, string name="", render render=defaultrender)
    {
    Label L=L.copy();
    if(L.s == "") {
    if(format == "") format=defaultformat;
    L.s="("+format(format,v.x)+","+format(format,v.y)+","+
    format(format,v.z)+")";
    }
    L.align(align,E);
    L.p((pen) p);
    opendot(pic,v,p,light,name,render);
    label(pic,L,v,render);
    }
%============================================================   
    size(4cm, 0);
    currentprojection=orthographic((5,2,3));

    real a=3;
    real b=4;
    real c=4;

    triple A=(0,0,a);
    triple B=(0,b,0);
    triple C=(c,0,0);

    draw(A--B--C--A,linewidth(1));
    draw(O--A^^O--B^^O--C,dashed);

    path3 p=O--(6,6*c/b,0);
    path3 q=B--C;
    path3 p1=O--(6,0,6*c/a);
    path3 q1=A--C;

    triple H1=intersectionpoint(p,q);
    triple H2=intersectionpoint(p1,q1);

    path3 h1=A--H1;
    path3 h2=B--H2;
    triple H=intersectionpoint(h1,h2);

    draw(h1);
    draw(h2);
    draw(O--H,dashed);
    opendot(Label("$H_2$",align=NW),H2);
    opendot(Label("$H_1$",align=SE),H1);
    opendot(Label("$H$",align=NE),H);
    opendot(Label("$A$",align=N),A);
    opendot(Label("$B$",align=E),B);
    opendot(Label("$C$",align=SW),C);
    opendot(Label("$O$",align=0.7S+0.3E),O);

    \end{asy}
\end{figure}

\end{document}

答案1

Charles Staats 是正确的。在 中使用相同的字体大小,documentclass并告诉 Asymptote 的 大小defaultpen,那么 Asymptote 图片上的标签与文本中的大小相同。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[OT1]{fontenc}
\usepackage{amsmath,amsfonts,amsthm,amssymb}
%\usepackage[pdftex]{graphicx}
\usepackage{euler,beton}
\usepackage[inline]{asymptote}
%============================================================
\begin{document}
In \LaTeX\ document, using the same fontsize in \verb|documentclass| and tell Asymptote that size for \verb|defaultpen|  in a Asymptote picture, say drawing a triangle $ABC$.
\begin{figure}[h]
\centering
\caption{Triangle $ABC$}\label{OrthoCenterTetr}
\begin{asy}
defaultpen(fontsize(12pt));
unitsize(1cm);
pair B=(-4,0), C=(1,0), A=(0,3.5);
pair M=(C+B)/2;
draw (A--M,green);
draw (A--B--C--cycle,orange);
label("$B$",B,SW);
label("$C$",C,SE);
label("$A$",A,N);
label("$M$",M,S);
\end{asy}
\end{figure}

Then the labels on the Asymptote picture of the same size as in the text: $A$ in the triangle $ABC$ and $A$ in Figure \ref{OrthoCenterTetr} have the same size.
\end{document}

答案2

先前的答案适用于 2D。对于 3D,我需要添加:

  1. documentclass 中的 [10 pt] 选项
  2. defaultpen(fontsize(10pt)); 在渐近线环境中 AND (ta-da-da-da...)
  3. \usepackage{asypictureB} 按照建议这里

这三种方法的组合确实提供了图表和文本中相同大小的字体。谢谢大家。

相关内容