metapost、metaobj 和标签

metapost、metaobj 和标签

我发现 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

相关内容