% cs
% \magnification 1200
\input epsf

\font\manual   logo10 % font used for the METAFONT logo, etc.
\font\tensye   cmsye10
\font\tensyn   cmnsy10
\textfont4 \tensye
\textfont5 \tensyn
\catcode`\"=12
\mathchardef\GG="351D
\mathchardef\LL="351C
\mathchardef\uhel="0501
\mathchardef\Uhel="0500
\mathchardef\langle="0468
\mathchardef\rangle="0469
\catcode`\"=\active
\def\mf{{\manual META}\-{\manual FONT}}
\def\mp{{\manual META}\-{\manual POST}}


\catcode`\*=\active
\def*{\item{$\bullet$}}
\input verbatim


V~�em se li�� sazba matematiky v~�esk�m (a~v�t�inou i~evropsk�m)
prost�ed�:

* p�edev��m opakov�n�m rela�n�ch a~opera�n�ch symbol� p�i zlomu
  ��dku a~u~soustav rovnic a~nerovnic (resp.~rovnost� a~nerovnost�);
* pou��v�n� desetinn� ��rky a~mezer k~odd�len� tis�c�;
* p�irozen� v~n�zvech n�kter�ch matematick�ch funkc� (tg, cotg);
* n�kter�mi speci�ln�mi zna�kami ($\uhel$, $\Uhel$), nebo
  odli�nostmi v~jejich tvaru ($\ll$, $\gg$ a~$\LL$, $\GG$);
  tak� lomen� z�vorky b�valy obvykle ost�ej�� ne� ty, kter�
  najdeme v~\TeX{}u: $\langle0,1\rangle$;
* ozna�ov�n�m interval� pomoc� lomen�ch z�vorek
  ($\left<0,1\right)$ narozd�l od $\left[0,1\right[$;
* d�sledn�j��m rozli�ov�n�m ��seln�ch konstant $\pi$, e a~i~od
  prom�nn�ch s�zen�ch obvyklou kurz�vou ($\oldpi$, $e$, $i$); 
k~tomu lze p�i�adit i~sazbu diferenci�l� antikvou;
* pou��v�n�m jin�ch �ez� zejm�na pro vektory ($\vv a$, $ \vv u$,
  $ \vv v$), ale i~zobrazen�, matice.






\bigskip
Literatura:

Karel Wick: {\it Sazba matematick�ch a~chemick�ch vzorc�}

Karel Wick: {\it Pravidla matematick� sazby}


\vfil\eject

\mp
\bigskip
Prvn�m krokem pro ty, kdo se u� osm�lili pou��vat \mf, je zkusit
pou��t na stejn� zdrojov� text \mp. Ve v�t�in� p��pad� to bude
bezchybn� fungovat! Sta�� p�i kompilaci \mp em pou��t jeden ze
dvou dod�van�ch form�t� nazvan� \verb|mfplain|. Co nebude
fungovat, jsou operace typu \verb|cull|, proto�e to jsou operace
na �rovni pixel�. M�sto toho ale m�me k~dispozici �adu
vymo�enost� PostScriptu: pou�it� barvy �i rastru, o�ez podle dan�
cesty a~v~neposledn� �ad� i~pravideln� parametrizace cesty
(��rkovan�, te�kovan� �i �erchovan� ��ry). To v�e lze samoz�ejm�
n�jak�m zp�sobem zvl�dnout i~pomoc� samotn�ho \mf: m��eme rovnou
po�adovan� obr�zek rozseparovat do pot�ebn�ho po�tu z�kladn�ch
barev, m��eme vyrobit rastr (to ostatn� u�inil u� s�m Velk� m�g 
v~programech pro �ed� fonty), ale velmi brzy naraz�me na probl�my 
s~pam�t�, k~o�ezu poslou�� shora zm�n�n� operace \verb|cull|, 
i~stejnom�rn� parametrizace cesty lze v~\mf{}u dos�hnout, ale jen
pom�rn� slo�it�m programov�n�m. A~posledn�m, ale nikoli zcela
bezv�znamn�m omezen�m \mf{}u z�st�v� nemo�nost generovat
libovoln� velk� bitmapy. Spole�n�m omezen�m obou t�chto skv�l�ch
program� z�st�v� celo��seln� aritmetika, v~n�� je nejv�t�� mo�n�
��slo $2^{12}=4\,096$.

Co ned�v� v~\mp\ smysl:

\medskip
{\let\par\cr\tt
\obeylines\halign to\hsize{&#\hss\tabskip 0pt plus\hsize&#\hss&#\hss&#\hss\tabskip 0pt
hppp        &autorounding     &chardx     &tracingpens
vppp        &fillin           &chardy     &tracingedges
xoffset     &granularity      &proofing   &
yoffset     &turningcheck     &smoothing  &
}}

\bigskip
Primitivy \mp{}u, kter� p�irozen� chyb�j� v~\mf{}u
\medskip
{\let\par\cr\tt
\obeylines\halign to\hsize{&#\hss\tabskip 0pt plus\hsize&#\hss&#\hss\tabskip 0pt
color               &dashed             &fontsize
bluepart            &clip               &tracinglostchars
redpart             &btex               &llcorner
greenpart           &etex               &lrcorner
withcolor           &verbatimtex        &ulcorner
miterlimit          &mpxbreak           &urcorner
linecap             &prologues          &truecorners
linejoin            &infont             &setbounds
}}

\bigskip
Zm�n�m se je�t� o~probl�mu umis�ov�n� popisek do obr�zk�.
Bezkonkuren�n� postup, jak umis�ovat popisky do \mf ov�ch obr�zk�,
vymyslel Alan Hoenig (p��slu�n� makra nazval labtex). Tento
postup se d� aplikovat i~na PostScriptov� obr�zky vytvo�en� \mp
em. Nesm�me ale zapom�nat, �e v~p��pad� PostScriptu je
bezpe�n�j�� vysadit nejd��ve obr�zek, a~teprve pak popisky,
proto�e jinak by n�m n�kter� z~popisek mohly zmizet pod obr�zkem.
Nav�c p�i sazb� PostScriptov�ho obr�zku hraje d�le�itou roli
tzv.~{\it bounding box}, ten v�ak ur�� \mp\ podle skute�n�ho
obr�zku. Proto i~pro sazbu obr�zku je v~takov�m p��pad� pot�eba
vyu��t odpov�daj�c� metriku {\it tfm}. D�le uv�d�m p��klad maker,
jak se s~touto skute�nost� lze vypo��dat.

% ~-
\verbatim
\newcount\epsfurX   \newcount\epsfurY
\newdimen\figwd     \newdimen\fight     \newdimen\figdp
\newbox\figbox
\newcount\figcount
\let\Char\char
\def\fig<#1:#2>{% usage: \fig<2:uceb>, where 2 is the figure number
 \figcount=#1 \catcode`\^^M=5 %
 \setbox\figbox=\hbox{\Char\figcount }%
 \global\figwd=\wd\figbox \global\fight=\ht\figbox
 \global\figdp=\dp\figbox
 \setbox\figbox=\hbox{\epsffile{#2.#1}}%
    \epsfurX\epsfurx
    \epsfurY\epsfury
 \setbox\figbox=\hbox{\epsffile[0 0 {\the\epsfurX} {\the\epsfurY}]{#2.#1}}%
 \setbox\figbox=\hbox{\epsfxsize 2\wd\figbox
    \epsfurX\epsfurx
    \epsfurY\epsfury
    \hbox{\epsffile[0 0 {\the\epsfurX} {\the\epsfurY}]{#2.#1}}}%
 \zerobox\figbox%
 \hbox\bgroup\box\figbox % now add \point'ing commands and labels
 \vrule width0pt height\fight depth\figdp \kern\figwd \egroup
}
\def\zerobox #1{\ht#1=0pt \dp#1=0pt \wd#1=0pt }
\endverbatim
% ~+

Samoz�ejm� pokud pokro��me natolik, �e za�neme tvo�it obr�zky
p��mo v~\mp{}u, nemus�me se zdr�ovat �vahami, jak p�izp�sobit u�
vymy�len� syst�m popisek, a~vyu�ijeme rovnou mo�nosti, kter� n�m
\mp\ nab�z�.

% ~-
\verbatim
defaultfont:="Helvetica";
color barva[];
barva1:=red; barva2:=blue; barva3:=violet;
barva4:=yellow; barva5:=green; barva6:=ocre;
beginfig(100);
w:=3u;
z0=.5w*sv; z9=z1;
for k=1 upto 8: z[k]=z0+.5w*dir(45k-22.5); endfor
 for k=1 upto 8: fill z0--z[k]--z[k+1]--cycle withcolor barva[k];
endfor
pickup pencircle scaled 1pt;
 for k=1 upto 8: draw z0--z[k]--z[k+1];
label(a[k] infont defaultfont scaled defaultscale
  rotated(90+45k),z0+.3w*dir(45k));
endfor
pic0:=currentpicture; clearit;
s1:=left..jz..2down&2down..jv--right--cycle;
s1:=s1 scaled.25w xscaled.1 shifted z0;
s2:=right--halfcircle scaled2 shifted up--left.. .06down..cycle;
s2:=s2 scaled.25w xscaled.1 shifted z0;
fill s1 withcolor brown;
draw s1;
addto currentpicture also pic0 shifted-z0 rotated-22.5 yscaled.65 shifted z0;
fill s2 withcolor brown;
draw s2;
endfig;
\endverbatim
% ~+
\noindent\hfil\epsfxsize45mm\epsfbox{uceb3.100}

Dal�� mo�nost� je vyu��t mo�nost� \TeX{}u pro sazbu, co� pak lze
v~\mp{}u prost�ednictv�m program� mptotex a~dvitomp. N�pis
vysad�me do souboru \verb|uceb2.try| (jeho� pou�it� n�m nab�z�
roletka mnu) nap�. takto:

% ~-
\verbatim
\newbox\vstupenka
\setbox\vstupenka\vbox{\let\par\cr
\obeylines\halign{\hss#\hss
\ VSTUPENKA
\ CENA 10 K�
DATUM:\hfill
}}
\endverbatim
% ~+

\noindent
Pot� spust�me nap�. n�sleduj�c� batch 

% ~-
\verbatim
mptotex %1.mp temp_.mpx
tex &plain temp_.mpx
dvitomp temp_.dvi %1.mpx
del temp_.*
\endverbatim
% ~+
\noindent
a~pot� \mp, kter� si ve vznikl�m souboru \verb|uceb2.mpx| najde
popis v�sledn�ho grafick�ho objektu ve sv�m jazyce a~d�le s~n�m
pracuje jako s~obr�zkem.

% ~-
\verbatim
verbatimtex \input uceb2.try etex

beginfig(201);
w:=15u;h:=3*5u;
z1=origin;z2=.26h*up;z3=.52h*up;
a1=-6;a2=0;a3=6;
blpen d1;
background:=lightblue;
 for k=1 upto 3: overdraw unitsquare scaled 5u xscaled 3
                 rotated a[k] shifted z[k];
 label(btex \copy\vstupenka etex rotated a[k],z[k]+2.5u*(3,1) rotated a[k]);
endfor
endfig;
\endverbatim
% ~+

\noindent\hfil\epsfbox{uceb2.201}

\bigskip
Nakonec se je�t� zm�n�m o~jedn� mo�nosti, jak vyu��t \mp\ pro
snadn� vygenerov�n� grafick�ho objektu, kter� se pak hod� 
k~dal��mu vyu�it� (nap�. prost�ednictv�m maker z~bal�ku {\it
pstricks}). Tato idea je hlavn� pro ty u�ivatele, kte�� stejn�
jako j� dok��� snadno vytvo�it po�adovanou k�ivku v~\mf, ale
t��ko by ji d�vali dohromady programov�n�m v~PostScriptu.

N�sleduj�c� progr�mek vytvo�� jednoduchou konstrukc� n�co na
zp�sob bubliny, jak ji zn�me z~obl�ben�ch komiks�:

% ~-
\verbatim
beginfig(1);
s:=superellipse((w,.5h),(.5w,h),(0,.5h),(.5w,0),beta);
s:=(0,h){dir-60}..subpath(4,11.2) of s..{dir150}cycle;
% pickup pencircle scaled 1pt;
 draw s;
endfig;
\endverbatim
% ~+

Ve v�sledn�m postscriptov�m souboru \verb|oblacek.1|
odkomentujeme �vodn� nastaven� a~na konci p��kazy \verb|stroke| 
a~\verb|showpage|:

% ~-
\verbatim
%!PS
%%BoundingBox: -1 -1 228 57 
%%Creator: MetaPost
%%CreationDate: 1997.07.20:2128
%%Pages: 1
%%EndProlog
%%Page: 1 1
%  0 0.5 dtransform truncate idtransform setlinewidth pop [] 0 setdash
%  1 setlinejoin 10 setmiterlimit
newpath 0 56.69281 moveto
4.93573 48.14386 0 38.02896 0 28.3464 curveto
...
% stroke
% showpage
%%EOF
\endverbatim
% ~+

\noindent
N�sleduj�c� makro n�m pak umo�n� �k�lovat v�sledn� obl��ek podle
rozm�ru boxu s~textem, ani� by do�lo k~ne��douc� zm�n� tlou��ky
��ry, kterou bude obl��ek vykreslen. Makro \verb|\slova| s~jedn�m
parametrem pak umo��uje pru�n� vyb�rat z~v�ce takto vytvo�en�ch
obl��k� (podle sm�ru zob��ku).

% ~-
\verbatim
\font\sx           henew    at 10pt
\newbox\slovax
\newcount\A \newcount\B \newcount\C
\newcount\tempnum
\newcount\testcnt
\newcount\epsnum
\def\printbox{\dimen0=.80mm \dimen1=.20mm
     \tempnum\wd\slovax
     \divide\tempnum \dimen0
     \A\tempnum \divide\A by 100 \B=\A \multiply\B-100
     \advance\B\tempnum \edef\xscale{\the\A.\ifnum\B<10 0\fi\the\B}%
     \tempnum\ht\slovax \advance\tempnum\dp\slovax
     \divide\tempnum \dimen1
     \A\tempnum \divide\A by 100 \B=\A \multiply\B-100
     \advance\B\tempnum \edef\yscale{\the\A.\ifnum\B<10 0\fi\the\B}%
    {\pscustom[linecolor=red]%
    {\code{1 setlinewidth
       /cmtx matrix currentmatrix def gsave
        \xscale\space \yscale\space scale}
      \file{oblacek.\the\epsnum}\fill[fillstyle=solid,fillcolor=white]%
      \code{cmtx setmatrix stroke grestore}}}%
    \copy\slovax}
\def\slova#1{\epsnum=#1\relax\leavevmode\setbox\slovax=
     \hbox\bgroup\kern3mm\aftergroup\printbox\vbox\bgroup
     \vskip 1mm
       \baselineskip 12pt \sx\def\bf{\sxi}\raggedright
     \def\strut{\vrule width 0pt height 11pt depth 3.5pt\relax}
     \def\par{\ifhmode\crcr\else\noalign{\vskip 1mm}\egroup
               \egroup\kern3mm\egroup\fi}
     \obeylines\halign\bgroup&\hss##\hss\crcr\let\next}
\endverbatim
% ~+

\noindent
Pou�it� \verb|\obeylines| pak umo��uje n�sleduj�c� jednoduch�
z�pis s�zen� promluvy (text ukon�uje pr�zdn� ��dek):

% ~-
\verbatim
\slova1
To je hr�za.
Kdo by to byl tu�il!

\endverbatim
% ~+

\bigskip
Pokud v�ak pou��v�me v~\mf{}u n�jak� makra na ��rkovan� ��ry
(nej�ast�ji �se�ky nebo po ��stech line�rn� ��ry), kter�
vyu��vaj� automatick� v�po�et um�st�n� ��rek, a~tedy n�jak�m
zp�sobem zaokrouhlovac� oper�tor, m��eme se do�kat p�i kompilaci
\mp em nep��jemn�ho zklam�n�: ��rkovan� ��ra skon�� d��ve. Je to
proto, �e \verb|mfplain.mp| narozd�l od \verb|plain.mf| pou��v�
jinou definici:
% ~-
\verbatim
vardef round primary u = u enddef;
vardef hround primary x = x enddef;
vardef vround primary y = y enddef;
\endverbatim
% ~+

Definice v~plainu:
% ~-
\verbatim
vardef hround primary x = floor(x+.5) enddef;
vardef vround primary y = floor(y.o_+.5)_o_ enddef;
\endverbatim
% ~+
D�vod tohoto rozd�lu nezn�m. P�vodn� Knuthovu definici jsem
doplnil do sv�ch maker a~zat�m jsem nem�l d�vod ke st��nostem.

\mp\ pou��v� barevn� model {\it rgb}, zat�mco dnes se v~oblasti
elektronick�ho publikov�n� t�m�� v�hradn� pou��v� model {\it
cmyk}. Sna�il jsem se z�skat jakousi p�edstavu o~vztahu t�chto
dvou model� v~dostupn� \TeX ovsk� literatu�e a~dokonce si odvodil
n�jak� vztah mezi ob�ma modely, kter� mi p�ipadal p�irozen�. Byl
jsem v�ak pou�en, �e prvn� model je bohat��, a~proto ani
neexistuje jednozna�n� p�evodn� vztah.

\end
