Changes

Jump to navigation Jump to search
3,797 bytes added ,  07:52, 24 June 2020
m
→‎Documentation & Tutorials: delete link to deleted wiki page
< [[Math]]__TOC__MetaPost is a graphical programming language, [[MetaFun]]based on Donald Knuth's MetaFont. Normally MP graphics are converted to PostScript and used with dvips, but ConTeXt can use it directly with PDF (see the[[Graphics]http://www.pragma-ade.com/general/sources/mptopdf.pdf MP to PDF]manual).
MetaPost is a graphical programming language, based on Donald KnuthConTeXt's MetaFontnative graphics language. Normally MP graphics are converted to PostScript and used with dvips, but ConTeXt can use it directly with PDF (see [http://www.pragma[MetaFun -ade.com/general/sources/mptopdf.pdf MPtoPDFMetaPost in ConTeXt]])is a MetaPost module by Hans Hagen that adds a lot of extra features; it is enabled by default, so one could say that MetaFun is ConTeXt's default dialect of MetaPost.
MetaPost is ConTeXt's "native" graphics mode, see [[MetaFun]].  == Documentation & Tutorials ==
* [http://www.tug.org/docs/metapost/mpman.pdf A User's Manual for MetaPost] <!-- http://cm.bell-labs.com/who/hobby/cstr_162.pdf has its pages reversed -->
* [http://remote.science.uva.nl/~heck/Courses/mptut.pdf Learning METAPOST by doing] ([http://maps.aanhet.net/maps/pdf/32_14.pdf this] and [http://maps.aanhet.net/maps/pdf/32_15.pdf this link] are not working)
* [[manual:metafun-s.pdf|MetaFun]]
* [http://tex.loria.fr/prod-graph/zoonekynd/metapost/metapost.html Lots of examples]
* [[Color in MetaPost]] describes how to get color mixtures, TeX colors, and transparent effects in MetaPost graphics.
 
= Using MetaPost in ConTeXt =
 
With {{cmd|startuseMPgraphic}}, you define a piece of graphics code that is processed anew every time the graphic is placed with {{cmd|useMPgraphic}}. Further commands are described at [[MetaFun - MetaPost in ConTeXt]].
 
<context source=yes>
\def\mycolor{.625red}
 
\startuseMPgraphic{name}
fill fullcircle scaled 20pt withcolor \mycolor;
\stopuseMPgraphic
 
red: \useMPgraphic{name}
 
\def\mycolor{.625blue}
blue: \useMPgraphic{name}
</context>
 
= Different Packages, Extensions & Applications of Metapost =
* [http://www.ctan.org/tex-archive/graphics/metaplot/ MetaPlot] - graph drawing
* [http://www.ctan.org/tex-archive/graphics/metapost/contrib/macros/metaobj/ MetaObj] - object-oriented drawing, see also the page about [[MetaObj and Labels]]
 
* [http://stud4.tuwien.ac.at/~e0225855/finomaton/finomaton.html finomaton] - drawing finite state automata
* [http://www-math.univ-poitiers.fr/~phan/statsmac.html statsmac] - metapost macros for statistics graphs
* [http://metauml.sourceforge.net/ MetaUML] - MetaPost library for typesetting UML diagrams
* [http://vigna.dsi.unimi.it/metagraph/ METAGRAPH] - drawing (un)directed graphs
 
== 3D support ==
* [http://matagalatlante.org/nobre/featpost/doc/featexamples.html FeatPost]
* [http://www.gnu.org/software/3dldf/LDF.html 3DLDF]
* [http://www-math.univ-poitiers.fr/~phan/m3Dplain.html m3D]
{{todo|needs major review}}
=MetaPost relatives = Troubleshooting plain MetaPost == Font Creation ==* Test if MetaPost is installed on your system[[MetaType1]], see [http://www. * create testctan.mp containing this:org/tex-archive/fonts/utilities/metatype1/ CTAN]
== 3D drawing ==* [http://asymptote.sourceforge.net/ Asymptote] - inspired by MetaPost & fully generalizes MetaPost path construction algorithms to three-dimensions = Testing plain MetaPost =To test whether MetaPost is installed on your system, create a file called {{code|test.mp}}:  beginfig(1) draw fullcircle scaled 3cm ; endfig ; end ;
* apply MetaPost on the testfile
* that should create a postscript file test.1
* open test.1 with a postscript viewer like ghostviewGhostview, okular ... Okular, … You should see a circle.
== Troubleshooting Testing MetaPost embedded in ConTeXt ==
* create test.tex containing this:If MetaPost is installed on your system and working correctly, you can
\starttext \startMPcode draw fullcircle scaled 3cm ; \stopMPcode \stoptext
* for mkii you need to have write18 support enabled and run
texexec --pdf test.tex
* for mkiv run
context test.tex
* that should create a pdf file test.pdf
* open test.pdf with a pdf viewer like acroreadAdobe Acrobat, okularOkular... You should see a circle. = Text in MetaPost = Text that is typeset using `textext` or `btex … etex` adapts to the body font. However, when `label("Foo", pair)` or `"Foo" infont defaultfont` is used, which is not the recommended way, the text is typeset using the font `MetafunDefault`, which can be changed if desired. Example: <context mode="mkiv" source="yes" text="Gives:">\starttext \startMPcode label("Foo", origin); draw textext("Bar") yshifted -LineHeight; \stopMPcode  \definefontsynonym [MetafunDefault] [Bold*default]  \switchtobodyfont [pagella, 18pt]  \startMPcode label("Foo", origin); draw textext("Foo") yshifted -LineHeight; \stopMPcode\stoptext</context> The recommended way to typeset text is to use the `textext` macro and change the font using {{cmd |setupMPinstance}}. = Repetition of a Text Element to Fill a Bar Using textext = Imagine you want to create a frame which consists out of one glyph or a combination of different glyphs in order to make a decorative border. For this purpose a series of such elements should be placed on the bar as pictures, evenly spaced. Probably you want to have at the end of the bar a different glyph inserted as a picture too. The following code is working but the last picture is not the expected glyph. One would expect 14 times the "?" and at the end of the bar a "*": <context mode="mkiv" source="yes" text="Gives:">\starttext \startMPpage picture PicA ; PicA := textext("*"); picture PicB ; PicB := textext("?");  numeric Step ; Step := 2cm div bbwidth(PicB) ;  for i = 1 upto Step : draw PicB shifted (i*5mm,0) ; endfor ; draw PicA ; \stopMPpage\stoptext</context> What you get is 15 "?" but no "*"! In order to get this corrected one needs to calculate the boundingbox of the "?" on beforehand. Hans Hagen provided this solution on 14-10-2014. <context mode="mkiv" source="yes" text="Gives:">\starttext \startMPcalculation path PicX ; PicX := boundingbox textext("?") ; \stopMPcalculation  \startMPpage picture PicA ; PicA := textext("*"); picture PicB ; PicB := textext("?");  numeric Step ; Step := 2cm div bbwidth(PicX) ; % numeric Step ; Step := 2cm div bbwidth(PicB) ;  for i = 1 upto Step : draw PicB shifted (i*5mm,0) ; endfor ; draw PicA ; \stopMPpage\stoptext </context> Now you get 14 "?" and the "*". == A Full Example == <context mode="mkiv" source="yes" text="Gives:">\setupbodyfont [8pt]
== Different Packages, Extensions & Applications of Metapost ==* \defineoverlay[http://www.ctan.org/tex-archive/graphics/metaplot/ MetaPlotMyframe] - graph drawing* [http://www.ctan.org/tex-archive/graphics/metapost/contrib/macros/metaobj/ MetaObj\reuseMPgraphic{Frame}]
* \setuppapersize[http://stud4.tuwien.ac.at/~e0225855/finomaton/finomaton.html finomatonA8] - drawing finite state automata* [http://www-math.univ-poitiers.fr/~phan/statsmac.html statsmacA8] - metapost macros for statistics graphs* [http://metauml.sourceforge.net/ MetaUML] - MetaPost library for typesetting UML diagrams
\setuplayout [topspace=5mm, backspace=5mm, height= 3D support middle, width=middle, header=0pt, footer=* [http://matagalatlante.org/nobre/featpost/doc/featexamples.html FeatPost]* [http://www.gnu.org/software/3dldf/LDF.html 3DLDF]* [http://www-math.univ-poitiers.fr/~phan/m3Dplain.html m3D0pt]
{{todo|needs major review}}\starttext
% ======== Definition of the frame in Metafun == MetaPost relatives ===== Font Creation ===* [[MetaType1]]\startMPcalculation path PicX ; PicX := boundingbox textext("= : =") ;\stopMPcalculation \startreusableMPgraphic{Frame} numeric u,v,xshift,yshift,picwidth, see [http://www.ctan.org/tex-archive/fonts/utilities/metatype1/ CTAN]remnant,nelements;
u :=OverlayWidth; v :=OverlayHeight; path p,w; p := 3D drawing =unitsquare xscaled u yscaled v; w :=fullcircle scaled 8pt; picture Edgepic,Linepic[]; color edgedotcolor,linelementcolorA; edgedotcolor :=blue;* [http linelementcolorA ://asymptote.sourceforge.net/ Asymptote] - inspired by MetaPost & fully generalizes MetaPost path construction algorithms to three-dimensions= red;
Linepic[1] := textext("\rotate[rotation=90]{= : =}"); Linepic[2] := Using MP in ConTeXt textext("=: =");The first way is a usable graphic. Such a graphic is Edgepic := textext("o"); %Calculations for the horizontal frame-element placement: % In order to make this work, the width of the line element needs to be calculated anew each time it is usedon beforehand. An example % path PicX; PicX := textext(")("); picwidth := bbwidth(PicX); nelements := u div picwidth; remnant := u mod picwidth; xshift := picwidth + remnant/nelements;
<texcode>\startuseMPgraphic{name} fill fullcircle scaled 5cm withcolor red Linepic[3] := Linepic[2] shifted (0.5*picwidth,0);\stopuseMPgraphic
\useMPgraphic{name} for a = llcorner p, ulcorner p :< for i = 1 upto nelements : draw Linepic[3] shifted ((xpart a + (i-1)*xshift),ypart a) withcolor linelementcolorA; endfor; endfor; %Calculations for the vertical frame-element placement: picheight := bbwidth(PicX); nelements := v div picheight; remnant := v mod picheight; yshift := picheight + remnant/texcode>nelements; Linepic[4]:= Linepic[1] shifted (0,0.5*picheight); for a = llcorner p, lrcorner p : for i = 1 upto nelements: draw Linepic[4] shifted (xpart a,ypart a + (i-1)*yshift) withcolor linelementcolorA; endfor; endfor;
As said for i = llcorner p, this graphic is calculated each time it is placedlrcorner p, which can be time consuming. Apart from the time aspectulcorner p, this also means that the graphic itself is incorporated many times. Thereforeurcorner p : fill w shifted (xpart i, for graphics that don’t changeypart i) withcolor white; draw Edgepic shifted (xpart i, CONTEXT provides reusable graphics:ypart i) withcolor edgedotcolor; endfor;
<texcode>\startreusableMPgraphic{name}% For frame-element positioning checking:% fill fullcircle scaled 200pt withcolor .625yellowdraw p;%
\stopreusableMPgraphic
\reuseMPgraphic{name}</texcode>% ==========
When reusing a graphic is \startframedtext [width=0.8\textwidth,height=0.8\textheight,frame=off,background=Myframe, align={middle,lohi}] The butterfly counts not so important months but moments, and you just want to include something inline, you can also use the following:has time enough. \blank {\tfx Rabindranath Tagore}\stopframedtext\stoptext
<texcode>\startMPcode fill fullcircle scaled 200pt withcolor .625yellow;\stopMPcode</texcodecontext>
See also section 3.3 of [[manual:metafun-s.pdf|MetaFun manual]].
=== Examples ===There is one important remark: The MPcalculation and the drawing itself must be inside \starttext ... \stoptext.
== Other Links ==
* Metapost home page: http://tug.org/metapost

Navigation menu