metapost | |
---|---|
Nyelvóra | parancsoló |
Megjelent | 1994 |
Szerző | John Hobby |
Kiadás | 1,8 ( 2013. június 17. ) |
Teszt verzió | 2.0rc2 ( 2018. február 19. ) |
Típusrendszer | implicit , dinamikus , szigorú |
Befolyásolva | METAFONT |
befolyásolta | Aszimptota |
Engedély | GNU LGPL |
Weboldal | tug.org/metapost |
Médiafájlok a Wikimedia Commons oldalon |
A MetaPost egy META programozási nyelv értelmező , amellyel grafikus illusztrációkat lehet készíteni. A MetaPost John Hobbie hozta létre, amikor Donald Knuth végzős hallgatója volt . A METAFONT [1] betűtípus-készítő rendszert vették alapul .
A bemeneten az interpreter META-ban szöveget kap, a kimenet pedig egy PostScript formátumú grafikus fájl [2] . Az 1.200-as verziótól kezdve a MetaPost támogatja az SVG grafikát kimeneti formátumként [3] .
A METAFONT-tól örökölt META nyelv lehetővé teszi geometriai objektumok, például pontok, útvonalak, képek kezelését, és különféle algebrai műveletek végrehajtását, például eltolást , elforgatást és egyéb lineáris transzformációkat .
A fő különbség a MetaPost és a METAFONT között a kimeneti formátumon kívül a színtámogatás és a szöveg beszúrási lehetősége. A szövegbeszúrások a TeX-szel készülnek , így minden TeX -ben létrehozható konstrukció beilleszthető egy MetaPost képbe is. Ezenkívül a MetaPost szerzője, John Hobby eredetileg a METAOBJ („metapost Objects”) könyvtárat fejlesztette ki kétdimenziós gráfok megjelenítésére [4] [5] .
A MetaPost értelmező (futtatható mpost) a szabványos makrókönyvtárakkal együtt nyílt forráskódú szoftverként kerül terjesztésre , általában a TeX disztribúciók részeként.
Az mpost program bemenete egy "META-kép". A "META kép" egy .mp kiterjesztésű szövegfájl (a továbbiakban röviden mp fájl), amely META nyelvű utasításokat tartalmaz. Egy mp-fájlban több képleírást is tárolhat. Az mpost segítségével a forrásfájllal megegyező nevű, de számok formájú kiterjesztésű fájlok jönnek létre, amelyeket a beginfig. Az így kapott fájlok a szokásos módon azonnal beilleszthetők a LaTeX szövegekbe \includegraphics. Ehhez adja hozzá a graphicx LaTeX csomag parancsát a tex fájl fejlécéhez:
\DeclareGraphicsRule { * }{ eps }{ * }{}Csak abban különböznek a "helyes" eps-fájloktól, hogy nincsenek "beágyazott" betűtípusok, így további feldolgozás nélkül nem tekinthetők meg.
Betűtípusok beágyazhatók a latex és dvips programokkal , az eredmény eps fájl formájában vagy az mptopdf szkript , az eredmény pedig pdf fájl formájában. Ezeket a képeket már önállóan használhatja minden olyan program, amely támogatja ezeket a vektorformátumokat.
A cirill betűt csak a LaTeX használatával ágyazhatja be a MetaPost címkékbe. Ehhez az mp-fájlnak a következő fejléchez hasonlónak kell lennie:
verbatimtex \documentclass [12pt] { minimális } %egyszerű cirill \usepackage [koi8-r] { inputenc } \usepackage [english,orosz] { babel } \begin { document } etex;Ez a címsor minden alkalommal használatos, amikor a MetaPost eléri a btexés a címkék közötti szöveget etex. Ha egy címke LaTeX csomagot igényel, akkor ennek megfelelően ezt a csomagot a szokásos módon hozzá kell adnia a fejléchez.
Ahhoz, hogy a latexet használni lehessen egy felirat létrehozásakor , az mpost értelmezőt a -tex=latex paraméterrel kell elindítani . Ha ez az opció nincs jelen, akkor az mpost információkat keres arról, hogy mit kell futtatni a TEX környezeti változóban . Alapértelmezés szerint a tex fut a latex helyett .
Ha a változó a szövegben van definiálva prologues, akkor 0-val kell egyenlőnek lennie. Ebben az esetben az eps és pdf fájlok létrehozásakor az összes szükséges betűtípus „csatolódik” a képhez.
A címet a képek leírása követi. beginfigMinden kép a és a parancsok közé van zárva endfig. beginfigA kép indexszáma paraméterként van megadva. Összeállításkor ez a szám kiterjesztésként kerül a képre. Példa:
Matek HelloWorld beginfig(3) ; alfa esetén:=90 lépés -9-től 0-ig: label(btex \( f ( x )= \frac { 1 }{ \sqrt { 2 \pi } \,\sigma } \int\limits _{ - \infty }^{ \infty } e^{ - \frac {x^ 2 }{ 2 \sigma ^ 2 }}dx \) etex skálázott (5*(1-alpha/100)) elforgatott alfa,(0,0)) színnel(max(1-alfa/45.0)*piros+min(alfa/45.2-alfa/45)*zöld+max(alfa/45-1.0)*kék); endfor; endfig ;end.A fájlnak a vagy paranccsal kell végződnie bye. Ezek a parancsok jelzik az mpost interpreternek , hogy a feldolgozás befejeződött.
A MetaPost segítségével történő képek lekérésének automatizálásához a következő Makefile -t használhatja :
#ideiglenes fájl tmp_file := tmp_file #programok LATEX : = latex MPOST := mpost -tex = latex DVIPS := dvips MPTOPDF := mptopdf MV := mv all : @echo "run: make mpfile.n.[eps|pdf] - ahol n a kép száma" %.eps : % @echo "\documentclass[12pt]{minimal}" > $( tmp_file ) .tex @echo "\usepackage[koi8-r]{inputenc}" >> $( tmp_file ) .tex @echo "\usepackage[english,russian]{babel}" >> $( tmp_file ) .tex @echo "\usepackage{graphicx}" >> $( tmp_file ) .tex @echo "\DeclareGraphicsRule{*}{eps}{*}{}" >> $( tmp_file ) .tex @echo "\nofiles" >> $( tmp_file ) .tex @echo "\begin{document}" >> $( tmp_file ) .tex @echo "\thispagestyle{empty}" >> $( tmp_file ) .tex @echo "\includegraphics{ $( alapnév $@ ) }" >> $( tmp_file ) .tex @echo "\end{document}" >> $( tmp_file ) .tex @ $( LATEX ) $( tmp_file ) @ $( DVIPS ) -E -o $@ $( tmp_file ) @rm $( tmp_file ) .* %.pdf : % @ $( MPTOPDF ) $< @ $( MV ) ` echo $< | sed -e "s/\.\([0-9]\+\) $$ /-\1.pdf/" ` $<.pdf tiszta : @rm -f mpx* *~ *.log *.mpx @rm -f $( tmp_file ) .* #Mpost képek függőségei. #Egy minden számhoz a beginfig %.1 -ben : %. mp $( MPOST ) $< … %.64 : %. mp $( MPOST ) $<Ha kész eps-képet szeretne kapni a kimeneten már „beágyazott” betűtípusokkal, amely bárhová beszúrható, csak futtassa a következő parancsot:
make <mp-fájl neve>.<képszám>. [ eps | pdf ]Az mp-fájlok általában rövid neveket kapnak.
Alternatív megoldásként létezik egy shell script ( mp2pdf.sh ), amely majdnem ugyanazt teszi. GNU/Linuxot (vagy hasonló operációs rendszert) kell használni.
Az egyes -blokkok szkriptje a filen.eps és filen.pdfbeginfig(n) fájlokat hozza létre , ahol a fájl az eredeti MetaPost fájl neve, n pedig a blokk száma. A szkript biztosítja a fogadott fájlok külön könyvtárakba helyezését. A katalógusneveket az EPS_DIR és a PDF_DIR változók adják. Ha nem léteznek ilyen nevű könyvtárak, a szkript automatikusan létrehozza azokat.
#!/bin/sh # Szkript a MetaPost fájl EPS és PDF rajzokká alakításához # könyvtár az eps és pdf fájlok tárolására EPS_DIR = ./eps PDF_DIR = ./pdf TMP_FILE = tmp if [[ " $@ " == "" ]] ; majd az echo echo Script feldolgozza az mp fájlt, eps és pdf fájlokat hoz létre, majd az echo áthelyezi őket a $EPS_DIR és $PDF_DIR könyvtárakba echo Használat: ./mp2pdf.sh file.mp echo exit fi ha [ ! -d $EPS_DIR ] ; majd echo ======== Könyvtár létrehozása az eps fájlokhoz mkdir $EPS_DIR fi if [ ! -d $PDF_DIR ] ; majd echo ======== Könyvtár létrehozása a pdf fájlok számára mkdir $PDF_DIR fi echo ======== Forrásfájl: $@ lista = ` grep beginfig $1 | sed -e 's/beginfig(//' -e 's/);//' ` echo ======== Blokklista : $lista echo ======== Mpost fut... mpost -tex = latex $1 for i in $list # loop over blocks beginfig() do epsi = ${ 1 %mp } $i eps = ${ 1 %.mp }${ i } .eps pdf = ${ 1 %.mp }${ i } .pdf echo blokk ${ i } : ' >> ' $epsi ' >> ' $eps ' >> ' $pdf ha [ ! -e $epsi ] ; akkor echo echo Hibák az mp-fájl feldolgozása közben! echo kilépés else echo ======== MetaPost ===== Ok! fi echo ======== Ideiglenes LaTeX fájl létrehozása... echo \\ documentclass [ 12pt ]{ cikk } > ${ TMP_FILE } .tex echo \\ usepackage { mathtext } >> ${ TMP_FILE } .tex echo \\ usepackage { amsmath } >> ${ TMP_FILE } .tex echo \\ usepackage [ T2A ]{ fontenc } >> ${ TMP_FILE } .tex echo \\ usepackage [ koi8-r ]{ inputenc } >> } ${ TMP_FI .tex echo \\ usepackage [ angol, orosz ]{ babel } >> ${ TMP_FILE } .tex echo \\ usepackage { graphics } >> ${ TMP_FILE } .tex echo \\ begin { document } >> ${ TMP_FILE } .tex echo \\ pagestyle { üres } >> ${ TMP_FILE } .tex echo \\ includegraphics { ${ epsi } } >> ${ TMP_FILE } .tex echo \\ end { document } >> ${ TMP_FILE } .tex echo ======== LaTeX indítása... latex ${ TMP_FILE } ha [ ! -e ${ TMP_FILE } .dvi ] ; then echo echo ======== Nem található dvi fájl! echo kilépés else echo ======== LaTeX ===== Ok! fi echo ======== Dvips futtatása... dvips -E ${ TMP_FILE } -o $eps echo ======== Az epstopdf futtatása... epstopdf $eps if [[ -e $pdf ]] ; majd mv $eps $EPS_DIR mv $pdf $PDF_DIR echo ======== Helyezze át a $eps -t és a $pdf -et a megfelelő helyre... fi echo ======== Tisztítás... rm *.log *.mpx ${ TMP_FILE } .* *.aux *.dvi *.tex $ epsi 2 >>/dev/null KészA szkriptet futtathatóvá kell tenni:
chmod +x ./mp2pdf.shHasználat:
./mp2pdf.sh fájl.mpMinta MetaPost fájl teszteléshez:
%% Sablon mp fájlokhoz prológok:=0; %Latex; együtt működik a következővel: "mpost -tex=latex file.mp" (lásd fentebb a szkriptet) verbatimtex \documentclass [12pt] { cikk } \usepackage { mathtext } \usepackage { amsmath } \usepackage [T2A] { fontenc } \usepackage [koi8 - r] { inputenc } \usepackage [angol, orosz] { babel } \begin { document } etex; beginfig(1); húzó (0,0)-(0,100)-(100,100)-(100,0)-ciklus; label(btex Címke: $ \alpha _ 1 $ etex, (50,50)); endfig; vége.Alapnyelvként, amelynek utasításait a MetaPost program bemenetére tápláljuk, a META nyelvet [6] használjuk .
A MetaPostban a következő adattípusokkal dolgozhat:
A META-ban lévő változónevek több tokenből is állhatnak. A tokenek lehetnek alfabetikusak vagy numerikusak. Például egy változó x1lhárom tokenből áll. Átírható érthetőbben is x[1].l, vagyis a numerikus token lényegében a tömb elemének számát, az azt követő betű pedig a szerkezet elemét adja meg. Lehetőség a „[]” kihagyására. változónevek írásakor bizonyos esetekben leegyszerűsíti a kód érzékelését (például ez a bal oldali vonalhatár x-koordinátája a mozgás irányában az út első pontjára ) és csökkenti a A program. Ehelyett, ha csak ilyen jellemzők nélküli változókra van szüksége, akkor csak betűkombinációkra kell korlátoznia magát. z[]
Használat előtt minden változót deklarálni kell. A kivétel a típusú változók numeric. A tömbök deklarálása és felhasználása a következő módon történik:
pairw[]; w1:=(10,5); w2:=w1;A változók, számok és operátorok kölcsönhatása teljesen természetes, de nem triviális. Ez a leírás külön fejezetet érdemel. Mindenesetre kövesse a szabályt: ha kétségei vannak, tegye a zárójeleket a megfelelő helyre.
A META-ban kihagyhat néhány operátort a bejegyzések lerövidítésére, például 2*xmegfeleltetheti a bejegyzést 2x. Ugyanakkor a matematika szempontjából 1/2x ez a természetesebb, de a programozás szempontjából nem. 0.5xA META-ban először a numerikus tokeneket dolgozzák fel.
A szabványos számítási műveletek készlete a nyelv specializációjának figyelembevételével bővült. A támogatott műveletek különösen a Pitagorasz-összeadás , a Pitagorasz-kivonás , az egész számok osztása és a hatványozás . div
A nyelv ciklusoperátorokat, feltételes ugrásokat és hasonlókat tartalmaz. A META megkülönböztető jellemzője a lineáris egyenletrendszerek megoldásának képessége. Például egy olyan kifejezés, mint a , azt jelenti, hogy a C pont pontosan az A és B pontok közepén van.
Az mpost program számológép módban használható META nyelvű számításokhoz. Ez lehetővé teszi annak ellenőrzését, hogy helyesek-e a nyelvre vonatkozó feltételezései. Az alábbiakban egy példa munkamenet látható:
baldin@evgueni:~$ mpost Ez a MetaPost, 0.901-es verzió (Web2C 7.5.5) **\nyugodj *a:=10; *b:=8; *c:=a+-+b; *c show; >> 6 *show(3-sqrt 5)/2; >> 0,38197 *szög megjelenítése (1, 3 négyzet); >> 60.00008 *műsor 2**10; >> 1024.00003 *mutassa a végtelent; >> 4095.99998 *show epszilon; >> 0,00002 *végtelen-végtelen megjelenítése; >> 0 *vége Az mpout.log oldalon írt átirat.A prompt **megjelenése után írja be a parancsot \relax. Ezután beírhatja a MetaPost parancsokat. Ezt óvatosan kell megtenni, mivel ez a mód nem támogatja a "parancselőzményeket". Kezdetben nem feltételezték, hogy a MetaPost is így használható. A parancs showsegítségével megjelenítheti a képernyőn az eredményt. A munkamenetet a paranccsal fejezheti be end. Kérjük, vegye figyelembe, hogy amikor a végtelenség ( infinity) megjelenítésére kérik, a MetaPost 4095.99998-at adott vissza – ez a maximális érték, amelyet egy típusú változó felvehet numeric. Sőt, a számítás során az eredmény meghaladhatja a "végtelent", de a válasznak kisebbnek vagy egyenlőnek kell lennie vele, különben hiba keletkezik. A minimális típusváltoztatási lépés numeric, epsilonpontosabban 1/256/256. Rajzkészítéskor ezek a korlátozások nem jelentősek, mivel a számok tartománya elég nagy ahhoz, hogy minden elemet elférjen. De mindenesetre ezt is figyelembe kell venni.
Ha egysoros kifejezést kell kiértékelnie, akkor a kezdeti promptban **megadhatja a következőt expr: Ebben az esetben az mpost beolvassa az expr.mf fájlt , és minden műveletre választ ad:
baldin@evgueni:~$ mpost Ez a MetaPost, 0.901-es verzió (Web2C 7.5.5) **expr (/usr/local/texlive/2005/texmf-dist/metafont/base/expr.mf gimme an expr: 2(a+3b)-2b >> 4b+2a add meg a kifejezést: 1/3[a,b] >> 0,33333b+0,66667aMetaPost logó a Wikipédián.
Teknős minta. Példa a képobjektum használatára.
Pascal háromszöge . Példa szöveg beszúrására.
A kerék pontjainak pályái csúszásmentes előrehaladás közben. Példa a ciklus használatára .
Példa a lineáris transzformációk használatára.
A LOR bejegyzéseinek száma az év hónapjának számából. Példa egy egyszerű diagramra.
fraktál minták. Rekurziós példa .
Az anyag eloszlása az Univerzumban. Kördiagram példa
Az egyes példák kódja a megfelelő kép leírásában található.
A MetaPostnak számos korlátozása van, amelyeket a METAFONT örökölt. E korlátok megkerülésére tett kísérlet adta az alapot az Asymptote szoftver értelmező létrehozásához [7] . Az Asymptote által használt nyelv hasonló a META-hoz, de a makró nyelvi szintaxisról a C++ szintaxisra való áttérés miatt sokkal bőbeszédűbb és összetettebb. Az Asymptote fő előnye a PostScript -funkciók jobb támogatása .
A Functional MetaPost a Haskellbe épített grafikus DSL , amely MetaPost kódot generál. [nyolc]
A METAGRAF egy grafikus felület a MetaPost felett. Java nyelven írva . Funkcióiban hasonló az xfig -hez . A képek MetaPost formátumban kerülnek mentésre. [9]
A LaTeX szoftverkörnyezet közül a PSTricks és a PGF/TikZ csomagok is hasonló funkciókkal rendelkeznek, mint a MetaPost .
A MetaPost szoftverbázisra alapozva a METATYPE1 eszközt hozták létre Type1 betűtípusok fejlesztésére.
Szabad tipográfia | |
---|---|
Operációs rendszer fejhallgatók |
|
Egyéb fejhallgatók |
|
Szoftver |
|
Licencek |
|
Csoportok és emberek |
|
|
Τ Ε Χ | |
---|---|
Makró csomagok | |
Alternatív motorok Τ Ε Χ | |
disztribúciók | |
Közösség |
|
Vegyes |
|