Předchozí   Další   Dolů   Obsah 

P) Prostředí picture

Prostředí picture dovoluje kreslit různé geometrické obrazce přímo prostředky LaTeXu - ten vytvoří obrázky jako seskupení různých speciálních fontů. V deklaraci prostředí se vymezí místo rezervované pro kreslení. Prostředí picture vlastně vytváří box, který se umisťuje v okolním textu zrovna tak jako písmeno. V deklaraci je možno zadat i posunutí počátku souřadného systému vzhledem k levému dolnímu rohu boxu pro příkazy kreslení. V tomto prostředí platí jen příkazy, které mají souvislost s kreslením. Ještě před vlastní deklarací prostředí lze specifikovat jednotku. Učiní se tak modifikací délkového registru \unitlength (implicitní hodnota je 1pt).

Deklarace je \begin{picture}(šířka,výška)(x_0,y_0). x_0 a y_0 jsou souřadnice počátku souřadného systému pro kreslení vzhledem k levému dolnímu rohu vzniklého boxu. Druhé kulaté závorky mohou chybět - pak je x_0 i y_0 rovné nule. Možnost posunout počátek souřadného systému umožňuje pohodlně hýbat s obrázkem. V prostředí picture lze specifikovat různé objekty. Pokud objekt vychází mimo vyhrazenou plochu, nic se neděje - skutečně se nakreslí (třeba i přes okolní text). To se dá využít. Objekty jsou většinou tvořeny čarami. Síla čáry se nastavuje následujícími příkazy:

\thicklines - přepíná sílu následujících čar na 0.8 pt
\thinlines - přepíná sílu následujících čar na 0.4 pt (implicitní hodnota)
\linethickness{tloušťka_včetně_jednotky} - nastavuje sílu čar na hodnotu tloušťka

Příkaz \linethickness má vliv jen na horizontální nebo vertikální čáry a bezierovy křivky (jiné čáry tedy mohou mít pouze dvě dříve uvedené tloušťky). Objekty se umisťují příkazem \put(x,y){objekt}, kde x a y jsou souřadnice umístění referenčního bodu objektu (ref. bod - viz boxy). V nejjednodusším případě je objekt nějaký text (což je vlastně box). Objektem je vlastně vždy prostě nějaký box.

Objekty mohou být i boxy vytvořené následujícím způsobem:
\framebox(šířka,výška)[poloha]{objekt} - vytváří box ohraničený plnou čarou a umístí do něj objekt. Poloha objektu jsou dvě písmena vzniklá spojením jednoho z těchto: t,c,b a jednoho z těchto: l,c,r. Implicitní hodnota je cc. Poloha může být také jedno písmeno - chová se to tak, jakoby druhé bylo automaticky c.
\makebox(šířka,výška)[poloha]{objekt} - jako framebox, ale bez orámování
\dashbox{element}(šířka,výška)[poloha]{objekt} - jako framebox, ale orámování je provedeno čárkovanou čarou; element je číslo, které vyjadřuje délku čárky a mezery v jednotkách \unitlength.
Dále je možno uvnitř prostředí picture použít příkaz pro úschovu boxu:
\savebox{\jménoboxu}(šířka,výška)[poloha]{obsah} - vytváří box z obsahu a ukládá ho do \jménoboxu, poloha má význam jako u \framebox; \jménoboxu musí být dříve deklarováno pomocí \newsavebox{\jménoboxu} - viz. boxy.
Pokud se kulaté závorky vynechají, zvolí se šířka s výška nejmenší možná taková, aby se obsah do boxu celý vešel.
Tento příkaz \savebox má stejné jméno jako velmi podobný příkaz bez specifikace výšky (viz. Boxy) - ten lze také použít v prostředí picture.
Nicméně i zde popsaný příkaz \savebox se specifikací šířky i výšky lze použít i mimo prostředí picture! Pro šířku a výšku pak platí jednotky naposledy nastavené v délkovém registru \unitlength. Vlastně lze oba dva příkazy \savebox používat ve stejných situacích - to je poněkud nelogické (stačil by jeden).

Příkaz \savebox umožňuje zaznamenat obrázek a pak ho pomocí \put opakovaně používat na různých místech.
Příklad:
pokud byl již dříve v souboru uveden příkaz \newsavebox{\obrazek} (mimochodem lze ho uvést i v prostředí picture) a pokud se v nějakém prostředí picture uvede např. toto:
\savebox{\obrazek}{\begin{picture}(10,10)\put(8,8){\circle{10}}\end{picture}}, pak v tom samém prostředí můžeme psát např:

\put(2,4){\usebox{\obrazek}}

Příkaz \savebox umožňuje zaznamenat obrázek a pak ho pomocí \put (viz. dále) opakovaně používat na různých místech (třeba i v jiných prostředích picture - pokud se uloží vně prostředí picture). To může ušetřit spoustu práce.

Pozn. ke zde popsaným příkazům \framebox a \makebox se dá říci to samé jako ke zde popsanému příkazu \savebox, co se týče analogie se stejnojmennými příkazy popsanými v kapitole Boxy (zde uvedené příkazy jsou prostě mírným zobecněním stejnojmenných příkazů z kapitoly Boxy).

Další možné objekty:

\line(x,y){délka nebo průmět_délky_ve_směru_osy_x}, kde x a y jsou celá čísla v intervalu <-6,6>, která nemají společného dělitele většího než 1. Toto představuje úsečku, kde y/x je tangens úhlu, který svírá úsečka s osou x. Pokud není úsečka svislá, platí pro povinný parametr druhá možnost a naopak.

\vector(x,y){délka nebo průmět_délky_ve_směru_osy_x} - kreslení vektoru analogickým způsobem jako u úsečky. Šipka se nakreslí v koncovém bodě. x a y mohou být jen z intervalu <-4,4>.

\circle{pruměr} - kreslení prázdného kroužku. Maximalní možný pruměr je asi 14 mm. Příklad použití: \put(20,20){\circle{10}}

\circle*{pruměr} - kreslení plného kroužku. Maximální možný pruměr je asi 6 mm.

\oval(šířka,výška)[část] - kreslí ovál. Parametr část umožňuje kreslit jen polovinu nebo čtvrtinu oválu - může být t, b, rb, rt, lb nebo lt. V důsledku toho, že se nedá nakreslit kružnice větší než asi 14 mm, kreslí se v případě, šířky i výšky větší než asi 14 mm čtverec se zaoblenými rohy.

\qbezier[N](krajníbod1_x,krajníbod1_y)(R_x,R_y)(krajníbod2_x,krajníbod2_y) - vytváří kvadratickou bezierovu křivku (parabolu) spojující dva krajní body podle řídícího bodu R (v řídícím bodu se protínají tečny ke křivce procházející krajními body). V případě, že není volitelný parametr zadán, bude čára plná, v případě s volitelným parametrem bude čára tečkovaná, přičemž počet teček bude N.

Opakování motivu:
\multiput(x,y)(deltax,deltay){počet}{objekt}
Význam parametru je jasný z následujícího příkladu na vytvoření čtvercové mřížky složené s 5x5 čar s roztečí 10 mm:
    \unitlength=1mm
    \begin{picture}(40,40)
    \thicklines
    \multiput(0,0)(10,0){5}{\line(0,1){40}}
    \multiput(0,0)(0,10){5}{\line(1,0){40}}
    \end{picture}
Orámování objektu:
\frame{objekt} - orámování objektu.

Vkládání obrázku do obrázku:
\put(x,y){\begin{picture}(,).....\end{picture}}
Pozn. Složené závorky v příkazu \put vlastně představují prostředí.

Ve složených závorkách příkazu \put může být samozřejmě i příkaz \input - tak je možno natáhnout obrázek z jiného souboru.

Vkládání obrázku do obrázku se změněným měřítkem obrázku:
\put(x,y){\setlength{\unitlength}{hodnota}\begin{picture}(,).....\end{picture}}

Při použití balíku graphpap je možno v prostředí picture použít příkaz:
\graphpaper[spacing](počátek_x,počátek_y)(šířka,výška)
Tento příkaz způsobí vykreslení mřížky (s číselnými koordinátami) podobné milimetrovému papíru. Volitelný parametr spacing udává rozteč mezi čarami v jednotkách \unitlength. Implicitní hodnota je 10. Význam ostatních parametrů je jasný. Parametry příkazu \graphpaper mohou být pouze celá čísla. Tento příkaz je užitečný pro lepší kontrolu umisťování objektů.
Repertoár funkcí prostředí picture je výrazně rozšířen pokud použijeme balík epic. Jedná se zejména o následující funkce:

\drawline(x_1,y_1)(x_2,y_2)...(x_n,y_n) - příkaz pro kreslení úsečky nebo lomené plné čáry spojující zadané body (síla čáry není předepsána příkazem \linethickness). Tento příkaz se neuvádí v argumentu příkazu \put. Není třeba se starat o možný sklon - v případě potřeby balík epic složí úsečku z několika menších s možnými sklony (pak je ovšem úsečka trochu lomená).

\dashline{délka_čárky}(x_1,y_1)(x_2,y_2)...(x_n,y_n) - příkaz pro kreslení čárkované úsečky nebo čárkované lomené čáry - analogie s drawline.
> Pozn. zjistil jsem, že pokud se síla čáry pro \dashline specifikuje příkazem \linethickness, pak je \dashline poněkud zmateno.
>

\dottedline[symbol]{rozteč_teček}(x_1,y_1)(x_2,y_2)...(x_n,y_n) - příkaz pro kreslení tečkované úsečky nebo tečkované lomené čáry - analogie s drawline. Nepovinný parametr symbol umožňuje místo tečky použít např. kolečko (\dottedline[\circle{2}]....)
Překonat omezení ve velikosti poloměru kružnic a sklonů úseček vytvořených příkazem \line (vektorů bohužel ne) v současné době umožňuje např. balík eepic.sty. Balík eepic představuje podstatné rozšíření možnosti prostředí picture. Jedná se např. o následující příkazy:

\Thicklines - tento příkaz umožňuje kreslit tlustší šikmé čáry

\arc{pruměr}{úhel1}{úhel2} - příkaz pro kreslení kruhového oblouku; zde úhel1 (startovací) a úhel2 (konečný) jsou uvedeny v radiánech a vedeny od osy x ve směru hodinových ručiček. Výplňový vzor kruhového oblouku (kruhové výseče) se dá nastavit příkazy \shade, \blacken a \whiten

\ellipse{vel_osy_ve_směru_x}{vel_osy_ve_směru_y} - příkaz pro kreslení elipsy

\path(x_1,y_1)(x_2,y_2)...(x_n,y_n) - příkaz pro kreslení úsečky nebo lomené čáry spojující zadané body (síla čáry není předepsána příkazem \linethickness). Tento příkaz se neuvádí v argumentu příkazu \put.
Pozn. Zdá se, že se \drawline z balíku epic chová úplně stejně jako \path z balíku eepic, pokud je \drawline vylepšen uvedením balíku eepic v preambuli (za epic).
Bohužel ani epic ani eepic nemá funkci pro kreslení čárkované kružnice. U eepic však můžeme takovou kružnici vyrobit složením z několika kruhových oblouků.

Při použití balíku eepic se šikmé úsečky a kružnice kreslí ne jako vhodné spojení speciálních fontů, ale je umožneno příkazy postscriptu vloženými do dvi souboru pomocí příkazu \special. Proto pro konečný výsledek bude asi nutné provést explicitní konverzi dvi na ps.

Složitější manipulace s objekty (jako např. rotace) je možno uvnitř prostředí picture provádět za pomocí instrukcí balíku graphics.

Pozn. program gnuplot na kreslení grafů umí výstup do formátu příkazů prostředí picture při rozšíření eepic.


 Předchozí   Další   Nahoru   Obsah