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.