MetaPost 中 TeX 标签的轮廓

MetaPost 中 TeX 标签的轮廓

有没有办法在 MetaPost 中获取 TeX 标签的轮廓,其中包含一些相当复杂的东西,比如:$\sum_{x=0}^{10}x^2$?我知道我可以使用获取单独字形的轮廓glyph,但如何保留布局?

答案1

这就是图片变量的作用。考虑这个小例子for e within pp

input TEX
picture p; p = TEX("$\sum_{x=0}^{10}x^2$");
for e within p:
    if textual e:
        message "(" & decimal xpart e & "," & decimal ypart e & ") " 
                    & fontpart e & " " & textpart e;
    elseif stroked e:
        show pathpart e;
    fi
endfor
end

如果你通过简单运行它,mpost你应该得到这个输出:

(0,7.472) cmex10 P
(10.5162,5.0091) cmr7 10
(10.5162,-2.9888) cmmi7 x
(15.0339,-2.9888) cmr7 =0
(27.2797,0) cmmi10 x
(32.9736,3.6154) cmr7 2

它会告诉您位置、所用的字体以及该字体中使用的 ASCII 字符。(请注意,中的和符号为“P” cmex10)。然后您可以使用它glyph来获取字符串中每个字符的轮廓textpart

根据我的实验,这只适用于普通的mpost。我没有从lualatex+获得相同的输出luamplib——我猜是因为字体管理太不一样了。

稍微完整一点的例子

prologues := 3;
outputtemplate := "%j%c.eps";
input TEX
beginfig(1)
picture p; p = TEX("$\displaystyle\sum_{x=0}^{10}x^2$");
for e within p:
    if textual e:
        pair o; o = (xpart e, ypart e) scaled 100/8; 
        for i=1 upto length textpart e:
            string s; s = substring (i-1, i) of textpart e;
            picture g; g = glyph ASCII s of fontpart e scaled 1/8;
            picture out; out = image(
            for ee within g:
                draw pathpart ee;
            endfor);
            draw out shifted o;
            o := o + (xpart lrcorner out, 0);
        endfor
    fi
endfor
endfig;
end

但我不确定我是否完全理解了间距和缩放信息。文档有点稀疏……

在此处输入图片描述

兼容性luamplib

请注意(目前)此处展示的想法仅适用于普通的 Metapost。TEX()提供的内置宏luamplib(用于lualatex)返回的图片只有一个“部分”,并且该部分中没有“文本”元素,唯一的“描边”部分是排版文本的边界框。

相关内容