有没有办法在 metapost 中打印单个标签(以数学符号表示)像这样
label(btex \Large{$3$} etex,(2,-1));
使用一些特定的颜色,如红色或蓝色?
先感谢您。
答案1
它很简单,但是仍有一些事项需要牢记。
label
中定义plain.mp
在正确的位置绘制 <picture> 变量。如果您传递纯字符串,它会自动转换为 <picture> infont
。如果您传递btex ... etex
字符串,它将在传递给 之前转换为 <picture> label
。
所以如果你label(btex $3$ etex, (2,1));
这样做,本质上就等同于
picture P;
P = btex $3$ etex;
draw P shifted (2,1);
因此如果你label(btex $3$ etex, (2,1)) withcolor red;
这样做,就会扩展为
picture P;
P = btex $3$ etex;
draw P shifted (2,1) withcolor red;
您的标签会显示为红色。在普通 MP 中,图片中的所有内容P
都只会显示为红色。因此,您可能需要考虑这个程序:
prologues := 3;
outputtemplate := "%j%c.eps";
verbatimtex
\documentclass{article}
\usepackage{xcolor}
\begin{document}
etex
beginfig(1);
picture T[];
T1 = btex $e=mc^2$ etex;
T2 = btex $\mathcolor{red}{e} = \mathcolor{blue}{mc}^2$ etex;
T3 = image(
fill fullcircle scaled 22 -- reverse fullcircle scaled 14 -- cycle withcolor blue;
fill unitsquare shifted -(1/2, 1/2) xscaled 36 yscaled 4 withcolor red;
) shifted 18 right;
for i = 1, 2, 3:
draw T[i] shifted (0, -64i);
draw T[i] shifted (60, -64i + 12) withcolor 1/2 red;
draw T[i] shifted (60, -64i - 12) withcolor 1/2 green;
endfor
endfig;
end.
如果你编译它,mpost -tex=latex
你应该得到一个如下所示的 EPS 文件:
withcolor
请注意,当您在命令后添加后,这三幅图像将变成“单色” draw
。即使它们原本是多色的。
luamplib
用户额外说明
当前的 TeXLive 版本似乎有一个怪癖 —— 或者可能是一个错误 —— luamplib
。如果你更改上述程序的标题,使其看起来像这样:
\documentclass[border=5mm]{standalone}
\usepackage{luamplib}
\usepackage{xcolor}
\begin{document}
\begin{mplibcode}
beginfig(1);
picture T[];
T1 = btex $e=mc^2$ etex;
T2 = btex $\mathcolor{red}{e} = \mathcolor{blue}{mc}^2$ etex;
T3 = image(
fill fullcircle scaled 22 -- reverse fullcircle scaled 14 -- cycle withcolor blue;
fill unitsquare shifted -(1/2, 1/2) xscaled 36 yscaled 4 withcolor red;
) shifted 18 right;
for i = 1, 2, 3:
draw T[i] shifted (0, -64i);
draw T[i] shifted (60, -64i + 12) withcolor 1/2 red;
draw T[i] shifted (60, -64i - 12) withcolor 1/2 green;
endfor
endfig;
\end{mplibcode}
\end{document}
重新编译后lualatex
你将得到如下的 PDF:
由于某种原因,withcolor
如果 <picture> 包含彩色文本,则会被忽略。这可能是我自己设置的怪癖!