
\hsize=11cm \vsize=16cm

\baselineskip=11dd
\parindent=1em
\tolerance=800
\emergencystretch=.33em
\clubpenalty=10000
\widowpenalty=10000

\font\tit=csbx10 scaled\magstep2
\font\mflogo=logo10
\font\petitt=cstt8
\font\eightit=csti8

% Macro loads the bbold fonts for mathematics in 10pt size
% 12.1.93                                   Petr Ol\v s\'ak

                               % Example for 12pt size:
\font\bbtext=bbold10           % \font\bbtext=bbold12
\font\bbscript=bbold7          % \font\bbscript=bbold9
\font\bbscriptscript=bbold5    % \font\bbscriptscript=bbold7
\font\bbex=cspex10             % \font\bbex=cspex10 scaled 1200

\newfam\bbfam
\newfam\bebfam

\textfont\bbfam=\bbtext
 \scriptfont\bbfam=\bbscript
 \scriptscriptfont\bbfam=\bbscriptscript

\textfont\bebfam=\bbex
 \scriptfont\bebfam=\bbex
 \scriptscriptfont\bebfam=\bbex

\def\sixt#1{\ifcase#1 0\or1\or2\or3\or4\or5\or6\or7\or8\or9\or
 A\or B\or C\or D\or E\or F\fi}

\def\[{\delimiter"4\sixt\bbfam5B\sixt\bebfam02 }
\def\]{\delimiter"5\sixt\bbfam5D\sixt\bebfam03 }

\mathchardef\squarcap="1\sixt\bebfam46
\mathchardef\squarcapcup="1\sixt\bebfam48
\mathchardef\parallelism="1\sixt\bebfam4A
\mathchardef\interleaving="1\sixt\bebfam4C
\mathchardef\Dijkstra="1\sixt\bebfam4E
\mathchardef\circlevee="1\sixt\bebfam50
\mathchardef\circlewedge="1\sixt\bebfam52

\def\bbmathcodes{%
   \mathcode`\*="2\sixt\bbfam2A \mathcode`+="2\sixt\bbfam2B
   \mathcode`\(="4\sixt\bbfam28 \mathcode`\)="5\sixt\bbfam29
   \mathchardef\alpha="0\sixt\bbfam0B \mathchardef\beta="0\sixt\bbfam0C }

\def\bb{\fam\bbfam\bbmathcodes\bbtext}

%%%%%%%%%%%% end of macro

\def\title#1\par{\hrule\vskip12pt\centerline{\tit #1}
  \vskip7pt\hrule\bigskip}

\def\cite#1|#2:#3,#4\par{\line
  {\hfil\vbox{\hsize=7cm\it \noindent#1\par\smallskip
  \rm#2: \it#3, \rm#4}}\medskip}

\chyph
\hyphenation{pod-in-dexov�}

\def\MF{{\mflogo META}\-{\mflogo FONT}}
\def\LaTeX{L\kern-.36em\raise.5ex\hbox{\sevenrm A}\kern-.12em\TeX}
\def\m{\hskip.6em}
\def\uv#1{\vbox to0pt{\kern-.33ex\hbox{''}\vss}\kern-.1ex#1\kern-.1ex``}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
{\catcode`\'=13
\gdef\begtt#1{\par\medskip\bgroup\setverb\catcode`\"=12
  \catcode`\'=13 \def'{\leavevmode\hbox\bgroup\let'=\egroup\eightit}
  \def\p{#1} \def\q{petitt} \ifx\p\q\baselineskip=.8\baselineskip \fi
  \obeylines \startverb{#1}}
\catcode`|=0 \catcode`\\=12
|gdef|startverb#1#2\endtt{|csname#1|endcsname #2|egroup|medskip}}
{\obeyspaces\gdef {\ }}

\catcode`\"=13
\def"{\leavevmode\hbox\bgroup\let"=\egroup\setverb\tt}



\title Dvojit� hranat� z�vorky v~matematice
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\cite V~matematick� sazb� rozezn�v�me p�t druh� z�vorek: obl�~$(\ )$,
hranat�~$[\ ]$, slo�en� (svorky)~$\{\ \}$, dvojit�~$\[\ \]$ a
lomen�~$\langle\ \rangle$.
|Pavel Pop: Ru�n� sazba, u�ebnice pro stud. obor Polygrafie, 1983.

P�ed ned�vnem jsem pot�eboval za�adit do matematick�ch text� dvojit�
hranat� z�vorky. Kolega Miroslav Dont sehnal na s�ti font "bbold" v~\MF ov�ch
zdrojov�ch textech. Font obsahuje mal� i velk� p�smena psan� dvojit�m
tahem, d�le tak� �eck� p�smena, n�kter� matematick� oper�tory a zm�n�n�
z�vorky. Autorem fontu je Alan Jeffrey.

U~\uv{dod�vky} jsem nena�el makro pro zaveden� t�chto font� do \TeX u.
P�itom font obsahuje tabulky umo��uj�c� sazbu t�chto z�vorek v~libovoln�
velikosti a d�le obsahuje plno zaj�mav�ch symbol� a oper�tor�.
Mysl�m si, �e by mohlo �ten��e zaj�mat, jak se takov� font za�azuje do
matematiky, aby v�e fungovalo jak v~z�kladn�, tak v~indexov� a podindexov�
pozici a aby byly vyu�ity v�echny mo�nosti fontu.

Vytvo�il jsem soubor "bb10.tex", kter� obsahuje zaveden� uveden�ho fontu do
\uv{desetibodov�ho} dokumentu. Na obsahu tohoto souboru si ilustrujeme
problematiku za�azen� matematick�ho fontu.

\begtt{petitt}
% Macro loads the bbold fonts for mathematics in 10pt size
''
                               % Example for 12pt size:
\font\bbtext=bbold10           % \font\bbtext=bbold12
\font\bbscript=bbold7          % \font\bbscript=bbold9
\font\bbscriptscript=bbold5    % \font\bbscriptscript=bbold7
\font\bbex=cspex10             % \font\bbex=cspex10 scaled 1200
''
\newfam\bbfam
\newfam\bebfam
''
\textfont\bbfam=\bbtext
    \scriptfont\bbfam=\bbscript
    \scriptscriptfont\bbfam=\bbscriptscript
\textfont\bebfam=\bbex
    \scriptfont\bebfam=\bbex
    \scriptscriptfont\bebfam=\bbex
''
\def\sixt#1{\ifcase#1 0\or1\or2\or3\or4\or5\or6\or7\or8\or9\or
 A\or B\or C\or D\or E\or F\fi}
''
\def\[{\delimiter"4\sixt\bbfam5B\sixt\bebfam02 }
\def\]{\delimiter"5\sixt\bbfam5D\sixt\bebfam03 }
''
\mathchardef\squarcap="1\sixt\bebfam46
\mathchardef\circlevee="1\sixt\bebfam50
'... atd...'
''
\def\bbmathcodes{%
   \mathcode`\*="2\sixt\bbfam2A \mathcode`+="2\sixt\bbfam2B
   \mathcode`\(="4\sixt\bbfam28 \mathcode`\)="5\sixt\bbfam29
   '... atd...'
   \mathchardef\alpha="0\sixt\bbfam0B
   \mathchardef\beta="0\sixt\bbfam0C
   '... atd...'}
''
\def\bb{\fam\bbfam\bbmathcodes\bbtext}
\endtt

Je vid�t, �e jsou vlastn� pou�ity �ty�i fonty --- "bbold10" pro z�kladn�
velikost, "bbold7" pro indexovou velikost, "bbold5" pro podindexovou
velikost a "cspex10" obsahuj�c� speci�ln� symboly Vpravo od p��kaz� "\font"
za procenty je uveden p��klad pro zaveden� font� pro dvan�ctibodov�
dokument. Analogicky lze zav�st i fonty pro z�kladn� velikost jeden�cti
bod�. Chceme-li ud�lat univerz�ln�j�� makro pro v�echny velikosti (po vzoru
\LaTeX u), lze v~m�st� p��kaz� "\font" zahrnout v�tven� podle p��n�
u�ivatele. V�echny pot�ebn� velikosti font� jsou v~dod�vce "bbold"
obsa�eny.

Makro zav�d� dv� nov� \uv{rodiny} ("\fam"). Rodina "\bbfam" obsahuje velk�
a mal� p�smena latinsk� abecedy i �eck� ({\bb A B C a b c $\alpha$ $\beta$
...}), n�kter� speci�ln� znaky ({\bb \char35\ \char36\ \char37\
\char38\ \char94\ \char95\ \char92\ + * /}) a dal��. Tato rodina shrnuje
uveden� znaky ve t�ech velikostech (z�kladn�, indexov� a podindexov�
poloha). V~t�to rodin� jsou tak� \uv{v�choz�} velikosti z�vorek $\[\ \]$.

Druh� rodina "\bebfam" zahrnuje jedinou velikost fontu speci�ln�ch symbol�.
Obsahuje \uv{zv�t�en�} formy z�vorek $\[\ \]$ a sedm oper�tor� typu
\uv{suma} ve velikosti pro textov� styl i \uv{display}. Jedn� se
o~tyto oper�tory: $\squarcap\quad \squarcapcup\quad \parallelism\quad
\interleaving\quad \Dijkstra\quad \circlevee\quad \circlewedge$.

Definice "\def\sixt#1" definuje p��kaz "\sixt", kter� vrac� �estn�ctkov�
z�pis ��sla p��slu�n� rodiny. V~dal��ch definic�ch se v�sledek tohoto
p��kazu pou�ije jako jedna cifra �estn�ctkov�ho z�pisu k�du jednotliv�ch
matematick�ch objekt�.

\smallskip
\line{\hss
$ \left\[ \>
\vcenter{\advance\hsize by -20pt
N�sleduje definice p��kaz� "\[" a "\]". Tyto p��kazy budou vracet
p��slu�n� dvojit� hranat� z�vorky ve v�ech velikostech i libovoln�
\uv{nataho\-vateln�}. K�d p��kazu "\delimiter" �t�te nap�. takto:
�tverka -- jedn� se o~matematick� objekt typu \uv{open} (otev�rac� z�vorka),
"\sixt\bbfam5B" -- v�choz� velikost se bere z~fontu rodiny "\bbfam" z~pozice 5B
a kone�n� "\sixt\bebfam02" -- zv�t�en� velikost se vezme z~fontu rodiny
"\bebfam" z~pozice 02 (hexadecim�ln�). V~posledn� jmenovan�m fontu je
ulo�ena informace tvaru \uv{�et�z postupn� se zv�t�uj�c�ch z�vorek},
p�i�em� tento �et�z je zakon�en odkazem na t�i znaky fontu: horn� ��st,
doln� ��st a st�edn� ��st z�vorky. V~p��pad� po�adavku na ob�� z�vorku si
\TeX\ veme horn� a doln� ��st a st�ed vypln� dostate�n�m po�tem opakov�n�
st�edn� ��sti. Takov� z�vorky vid�te po stran�ch tohoto odstavce. Stejn�
princip zn�te z~fontu "cmex10", kde jsou ulo�eny \uv{natahovac�} verze
v�ech b��n� pou��van�ch z�vorek.
} \>
\right\] $ \hss
}
\smallskip

Nyn� nap��klad

\begtt{petitt}
$$  \left\[ {A+B\over C + \left\[ {D+E\over F} \right\]} \right\],
    \quad \[1\]_{\[2\]_{\[3\]}}  $$
\endtt

\noindent povede na
$$
  \left\[ {A+B\over C + \left\[ {D+E\over F} \right\]} \right\],
  \quad \[1\]_{\[2\]_{\[3\]}}
$$

Upozor�uji u�ivatele \LaTeX u, �e\m "{x\over y}"\m znamen� tot��, co\m
"\frac{x}{y}"\m a �e ozna�en� dvojit�ch z�vorek sekvencemi "\[" a "\]"
jim m��e zp�sobit komplikace, proto�e tyto sekvence jsou v~\LaTeX u~pou�ity
pro vstup a v�stup do/z matematick�ho m�du (jak�si n�hrada za dolary). Pokud
tyto sekvence nikdy v~tomto smyslu neu��v�te, m��ete je s~klidn�m sv�dom�m
pou��vat pro dvojit� z�vorky (re-definovat p�vodn� p��kaz). Ke koliz�m
nedoch�z�.

Pokud si budete cht�t uvedenou definici opsat, je vhodn� upozornit na
d�le�itost mezery za k�dem p��kazu "\delimiter". Kdyby tam nebyla, pak se
nap��klad "$\[1+1\]$" expanduje na

\begtt{tt}
$\delimiter"485B9021+1\delimiter"585D903$
\endtt

\noindent co� je ur�it� n�co jin�ho, ne�
\begtt{tt}
$\delimiter"485B902 1+1\delimiter"585D903 $
\endtt

D�le v~makru n�sleduj� definice oper�tor� typu \uv{suma}.
Nap��klad p��kaz

\begtt{tt}
\mathchardef\squarcap="1\sixt\bebfam46
\endtt

\noindent
�t�te: sekvence "\squarcap" se definuje jako matematick� objekt typu
\uv{suma} (jedni�ka v~k�du), jeho� men�� (textov�) verze se vezme z~fontu
rodiny "\bebfam" z~m�sta 46 (hexadecim�ln�). Ve fontu existuje odkaz 
z~men�� verze na v�t��, tak�e se o~to nemus�me v~\TeX u~starat a nap��klad

\begtt{tt}
\squarcap_{n=1}^\infty = \circlevee_0^\infty
\endtt

\noindent
povede uvnit� textu na $\squarcap_{n=1}^\infty = \circlevee_0^\infty$,
zat�mco v~\uv{display} stylu dostaneme

$$
\squarcap_{n=1}^\infty = \circlevee_0^\infty
$$

Kone�n� p��kaz "\def\bb" v~makru definuje p�ep�na� p�sma "\bb",
kter� pracuje podobn� jako nap��klad zn�m� p�ep�na� "\bf".
Pou�it� p��kazu "\bb" v~textov�m re�imu zp�sob� p�epnut� fontu d�ky
p��kazu "\bbtext" (p��kaz "\fam\bbfam" se neprojev�), zat�mco 
v~matematick�m re�imu naopak \uv{zabere} p��kaz "\fam\bbfam" a p��kaz
"\bbtext" nem� vliv. Tak�e nap��klad {\bb text z~naseho noveho fontu} byl
vyps�n sekvenc�

\begtt{tt}
nap��klad {\bb text z~naseho noveho fontu} byl ...
\endtt

\noindent
P�vodn� font nem� h��ky a ��rky. Pozorn� �ten�� kn��e�ky \uv{The Pamphlet
on \TeX\ Fonts} si jist� v�iml, �e font "bbold10" je demonstrov�n pouze na
anglick� citaci.

Zat�m jsem nem�l pot�ebu ani chu� h��ky do metafontov�ch zdroj� dopsat.
Jinak na tom byl Karel Hor�k, kter� tuto v�c dod�lal. Proto je mo�n�, �e
v~t�to uk�zce u� uvid�te jeho h��ek i ��rku.

Mnohem u�ite�n�j�� asi bude pou��vat font v~matematick�m re�imu. Proto
p�ep�na� "\bb" nav�c spou�t� p��kaz "\bbmathcodes", v~n�m� se (lok�ln� ---
v~r�mci skupiny) p�edefinuj� matematick� objekty jako nap�. "+",
"\alpha" a podobn�. Tak�e t�eba

\begtt{tt}
$$  {\bb \alpha (A + B) } = \alpha (A + B) $$
\endtt

\noindent vede na
$$
  {\bb \alpha\,(A + B) } = \alpha\,(A + B)
$$

V~definici p��kazu "\bbmathcodes" nap��klad

\begtt{tt}
\mathcode`\*="2\sixt\bbfam2A
\endtt

\noindent
lze ��st takto: symbol "*" v~matematick�m m�du bude znamenat bin�rn�
oper�tor (dvojka v~k�du) bran� z~fontu rodiny "\bbfam" z~pozice 2A
(hexadecim�ln�). Podobn� se �tou p��kazy "\mathchardef", kter� definuj�
kontroln� sekvence "\alpha", "\beta" atd. Tyto definice nem�m vypsan�
d�sledn� v�echny ani ve vlastn�m souboru maker, proto�e se mi jev�
v�hodn�j�� tam za�azovat nov� matematick� kontroln� sekvence a� v~p��pad�
pot�eby. Vy�aduje to pracovat s~tabulkou fontu "bbold10" a s~rozmyslem.

Poznamenejme je�t�, �e p��kaz "\mathcodes" v~definici p�ep�na�e "\bb"
zp�sobuje, �e "\bb" nen� \uv{ryz�m} p�ep�na�em. Pou�it� t�to sekvence
zp�sobem:

\begtt{tt}
oby�. text \bb jiny text \rm oby�ejn� text
\endtt

\noindent zp�sob� toti� trval� p�edefinov�n� matematick�ch k�d�. Je proto
nutn� bu� ps�t

\begtt{tt}
oby�. text {\bb jiny text} oby�ejn� text
\endtt

\noindent nebo zru�it p��kaz "\bbmathcodes" z~definice sekvence "\bb".

Na z�v�r se p�izn�m, �e jsem ztratil hodn� �sil� p�i vyp�tr�n� jedn�
\uv{z�ludnosti}. V�imn�te si, �e v~definici "\bbmathcodes" nen� u~p��kazu
"\mathcode`+=..." pou�it backslash p�ed znakem plus, jak se slu�� a pat��
(viz definice v�ech ostatn�ch k�d�). Toti� kontroln� sekvence~"\+" je
definov�na v~\hbox{Plainu} pro ��ely tabbingu jako "\outer\def". To
zp�sobuje, �e nelze sekvenci~"\+" pou��t uvnit� t�la definice v~{\it
��dn�m\/} smyslu. Tj. ani pro definici matematick�ho k�du znaku~"+"~.

Uveden� makro "bb10.tex" nen� zdaleka univerz�ln�. Na to p��jdou velice
rychle v�ichni u�ivatel� \LaTeX u. Pokud nap��klad p��ete pozn�mky pod
�arou v~petitu a v~t�chto pozn�mk�ch se vyskytne n�jak� symbol z~fontu
"bbold", je t�eba pou��t font "bbold8", p�i�em� ten nen� makrem "bb10.tex"
zaveden. Podobn�, pokud se speci�ln� symbol vyskytne ve zv�t�en�m nadpise,
je nutno zav�st p��slu�n� zv�t�en� fonty. Technika zav�d�n� font�
automaticky podle po�adovan� velikosti je vy�e�ena v~\LaTeX u~(soubor
"lfonts.tex") a je�t� l�pe je �e�ena v~NFFS. Kdo chce, m��e se v~t�chto
makrech inspirovat. S�m si mysl�m, �e pou�it� speci�ln�ho fontu v~nadpise
�i zmen�en� pozn�mce je pom�rn� m�lo �ast�. Proto je mo�n� takov� v�skyt
�e�it individu�ln�. Pokud ale navrhujeme form�t knihy (kde nap�. v�echna
cvi�en� budou s�zen� men��m p�smem), je nutno celou v�c do makra zahrnout a
v�e po��dn� domyslet. Makrojazyk \TeX u~n�m neklade ��dn� omezen�.

�l�nek jsem dal ��st kolegovi Dontovi, kter� ned�vno p�inesl zaj�mavou
zpr�vu pro dopln�n�. Na s�ti nalezl bal�k, zvan� {\tt St Mary's Road},
v~n�m� je zahrnut font se zm�n�n�mi z�vorkami (autorem je Alan
Jeffrey spole�n� s~Jeremy Gibbonsem). Nav�c tam najdete \LaTeX ovsk�
styly pro zaveden� fontu do dokumentu a font obsahuje podstatn� v�t��
mno�stv� nov�ch matematick�ch znak�. Sta�� tedy pouze uv�st p��slu�n�
n�zev stylu a o p��kazy typu "\mathcode" apod. se nemus�te starat.
Cht�l jsem ale ve sv�m �l�nku uk�zat, �e zaveden� fontu na �rovni
\TeX-primitiv� nemus� b�t zase tak komplikovan�, t�eba�e se jedn�
o~matematick� font. V�hodou je, �e p�esn� v�te, co m�te zavedeno a jak.

\medskip
\line{17.1.1993 \hfil \it Petr Ol��k}

\bye

