我发现 Aditya 前段时间发布的这个技巧允许在上下文中使用 metaobj。目前此代码不再有效。目前,有没有办法在上下文中使用 metaobj?主要问题是标签。有一篇关于此的 wiki 文章(http://wiki.contextgarden.net/MetaObj_and_Labels),但是这个解决方案不再起作用。
来自 Aditya:
\startMPinclusions[+]
input metaobj;
boolean flag; flag := false;
\stopMPinclusions
\startMPdefinitions
vardef newSegment@\#=
if not flag :
assignObj(@\#,"Segment");
ObjPoint a,b;
ObjCode "@\#b-@\#a=(1cm,2cm)";
fi ;
enddef;
def drawSegment(suffix n)=
draw n.a--n.b;
draw btex \tt \overbar{E} etex shifted n.a; % 1
enddef;
\stopMPdefinitions
\starttext
\startMPpage
newSegment.s;
ObjLabel.s(btex hello! etex) "labpoint(a)"; % 2
s.a=origin;
drawObj(s);
flag := true ;
\stopMPpage
\stoptext
答案1
btex … etex
如果我用 ConTeXt/Metafun 的宏替换代码中的标志,它对我来说是有效的textext("…")
。但结果图有点丑,所以它可能不是你期望的结果。
答案2
请尝试一下 Aditya 前段时间发布的这个示例:
\startMPenvironment
\setupbodyfont[8pt]
\setupframed[width=3cm, align=center, frame=off]
\stopMPenvironment
\startMPinclusions[+]
input metaobj;
setObjectDefaultOption("Ellipse")("fit")(false)
setCurveDefaultOption("arcangleA",15);
setCurveDefaultOption("arcangleB",15);
boolean flag;
flag := false; % flag is false in the first run
\stopMPinclusions
\starttext
\startMPpage
% Metaobj provides a Circle command. But there seems to be
% a bug in the interaction of Circle and Matix. So using Ellipse with
% fit=false
if not flag:
newEllipse.N1(textext(" \framed{" Mise Sous Tension "})) ;
newEllipse.N2(textext(" \framed{Mesure du point zéro méchaique} ")) ;
newEllipse.N3(textext(" \framed{Régalage des paramèters de contrôle} ")) ;
newEllipse.N4(textext(" \framed{Envoi du contenu de l'\cap{EEPROM}} ")) ;
newEllipse.N5(textext(" \framed{{\bf Mode stop|/| réglage} Attente de commande} "));
newEllipse.N6(textext(" \framed{\bf Mode freins libres} ")) ;
newEllipse.N7(textext(" \framed{Le contenu de l'\cap{EEPROM} a changé} ")) ;
newEllipse.N8(textext(" \framed{Ëcriture du contenu de la \cap{RAM} vers l'\cap{EEPROM}} "));
newEllipse.N9(textext(" \framed{{\bf Mode Contrôle} La valeur de la commande est rafraîchie à chaque cycle} ")) ;
newMatrix.diagram(3,3)(N1,N2,N3,N4,N5,N6,N7,N8,N9) "hsep(1.5cm)", "vsep(1.5cm)";
fi;
diagram.c = origin ;
drawObj(diagram) ;
ncline(N1)(N5) ;
for i = 2,3,4,6,7,8,9:
ncarc(N[i])(N[5]) ;
ncarc(N[5])(N[i]) ;
endfor
nccircle(N6) "angleA(-120)" ;
nccircle(N9) "angleA(-120)" ;
flag:=true;
% Labels can be added. See metaobj manual
\stopMPpage
\stoptext