% Jak jsem d�lal knihu klikac�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 9.2.1997          Petr Ol��k

\chyph % �esk� d�len�, form�t csplain

% Zrcadlo
\raggedbottom
\hsize=30pc \vsize=45pc \emergencystretch=2em \hbadness=2000
\parindent=12pt
\exhyphenpenalty=10000
\hyphenchar\tentt=-1

% Uvozovky
\def\uv{\bgroup\aftergroup\closequotes\leavevmode\clqq\let\next=}
\def\closequotes{\unskip\crqq\relax}
\def\clqq{\char254 }
\def\crqq{{\edef\iSF{\spacefactor\the\spacefactor}\char255 \iSF\relax}}

% Verbatim
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
\def\begtt{\bgroup\parskip=0pt\medskip\setverb
  \obeylines \startverb}
{\catcode`\|=0 \catcode`\\=12
  |gdef|startverb#1\endtt{|tt#1|egroup|medskip}}
{\obeyspaces \gdef {\ }}

% Bibliografie
\def\bib#1{\par\hangindent=\parindent \hangafter=1
   \noindent \hbox to\parindent{[#1]\hss}\ignorespaces}

% Loga:
\def\LaTeX{L\kern-.36em\raise.5ex\hbox{\sevenrm A}\kern-.12em\TeX}
\def\CS{$\cal C\kern-.1667em\lower.5ex\hbox{$\cal S$}\kern-.075em $}
\def\mf{{\mflogo META}\-{\mflogo FONT}}
\font\mflogo=logo10

% Jednoduch� \footnote
\let\orifootnote=\footnote
\def\footnote{\orifootnote{*)}}

% Tisk backslashe:
\chardef\\=`\\

% Title a sub
\font\bbf=csbx12 scaled\magstep1
\def\title #1 \par{\noindent{\bbf #1}\par\nobreak\bigskip}
\def\sub #1 \par{\par\goodbreak\bigskip \noindent{\bf#1}\par\nobreak\medskip}
\def\author#1 \par{\par \noindent{\it#1}\par\nobreak\medskip}


\title Jak jsem d�lal knihu klikac�
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\author Petr Ol��k

V~tomto �l�nku pop��u postupy a makra, pomoc� nich� jsem p�evedl svou knihu
{\it \TeX{}book naruby\/}~[1] do klikac� podoby form�tu {\tt pdf}.
Pou�il jsem modifikaci \TeX{}u nazvanou {\tt tex2pdf} od pana Han The
Thanha. Proto bude �e� hlavn� o~tomto programu. Ka�d� u�ivatel Internetu a
�tec�ho programu Acroreader se m��e pod�vat na v�sledek m�ho sna�en�
nap��klad na {\tt ftp://math.feld.cvut.cz/pub/olsak/tbn}.

�esk� jazyk n�m umo��uje po�ad�m slov nepatrn� m�nit v�znam �e�en�ho.
V~n�zvu tohoto �l�nku jsem pou�il spojen� \uv{knihu klikac�} m�sto
\uv{klikac� knihu}. T�m jsem cht�l nazna�it, �e nejprve jsem
vytvo�il knihu a potom (jako vedlej�� efekt) jsem se u� danou knihu sna�il
p�ev�st do klikac� podoby. C�lem d�la tedy od za��tku bylo vytvo�it knihu,
kter� m� existovat p�edev��m v~{\it pap�rov� podob�}, pokud mo�no kvalitn�
vys�zen� a sv�zan�. V�bec jsem necht�l d�lat p��ru�n� n�pov�du k~\TeX{}u do
po��ta�e. Cel� d�lo bylo tedy p�edev��m pod��zeno koncepci form�tu knihy,
nikoli filosofii elektronick�ho hypertextov�ho dokumentu. Kdybych m�l d�lat
elektronickou n�pov�du pro \TeX{}, ud�lal bych ji zcela jinak. Jist� mnoz�
�ten��i v�d�, �e jsem s~po��ta�ovou my�� zcela nesrostl, ba pr�v� naopak.
Tak�e asi bych elektronickou n�pov�du ned�lal v�bec.

Zdrojov� text knihy jsem napsal s~hojn�m po�tem symbolick�ch odkaz�
typu {\tt\\ref\char`\{zna�ka\char`}} podstatn� d��ve, ne� jsem za�al
v�bec koketovat s~mo�nost� po��zen� hypertextov� verze. Jak�m
konkr�tn�m dialektem byl text dokumentu naps�n se m��e ka�d�
pod�vat~--- v~elektronick� distribuci knihy je uk�zkov� soubor {\tt
tabulky.tex} obsahuj�c� jednu kapitolu knihy.  P�i zaveden�
hypertextov�ch odkaz� tedy nebylo pot�eba d�lat v�bec ��dnou zm�nu ve
zdrojov�m textu. Pozm�nil jsem pouze p�r maker pro form�tov�n� knihy a
v�sledkem byl klikac� dokument, kter� obsahuje p�es 10~tis�c
hypertextov�ch odkaz�.


\sub O~programu {\tt tex2pdf}

V~[3] zve�ejnil autor programu {\tt tex2pdf} sv� d�lo. Rozhodl
jsem se tuto pr�ci pou��t. Pop��u nejprve, jak vypadala instalace%
\footnote{P�izn�m se, �e m� nebav� ��st recenze typu, jak jsem \uv{To}
vybalil z~krabice, jak jsem \uv{To} instaloval, jak jsem \uv{To} rozchodil
�i nerozchodil apod. V~tomto p��pad� mi ale p�ipad� popis instalace pom�rn�
d�le�it�.}. Bal�k {\tt tex2pdf} je ve�ejn� p��stupn� na
{\tt ftp://ftp.muni.cz/pub/tex/local/cstug/thanh/tex2pdf}
a je snadno instalovateln� na UNIXov�ch syst�mech, kter�
pou��vaj� \TeX{} podle Berryho instalace {\tt web2c}. V~m�m p��pad� �lo
o~SUN~OS~4.1.3 a {\tt web2c} jsem tam m�l, tak�e p�da byla p�ipravena.
Sta�ilo postupovat podle n�vodu v~{\tt README}. Tam se nap��klad m��eme
do��st, �e je nejprve pot�eba p�ekontrolovat, zda je p��tomn�
{\tt web2c/tex} spole�n� s~knihovnou \hbox{\tt kpathsea-2.6}. To bohu�el
nen� zcela samoz�ejm�, proto�e Karl Berry nechal {\tt web2c/tex} u� dva
roky netknut� se starou knihovnou \hbox{\tt kpathsea-1.8}, kter� obsahuje
chyby a se kterou nejde {\tt tex2pdf} p�elo�it. Je tedy nejprve nutn�
postupovat podle z�platovac�ho souboru 
\hbox{\tt web2c.kpathsea-2.6.help}, kter�
je p��tomen v~arch�vech CTANu v~m�st� vlastn�ho {\tt web2c} \TeX{}u.

Pokud pou��v�me origin�ln� Knuth�v \TeX{} a nechceme o~n�j p�ij�t, pak
p�e\-kon\-tro\-lu\-jeme, zda m�me v~{\tt /usr/local/bin} {\it kopie\/}
bin�rn�ch soubor� {\tt virtex} a {\tt initex} a nikoli jen jejich linky
ukazuj�c� do {\tt web2c/tex}. V~adres��i {\tt web2c/tex} toti� vzniknou
nov� spustiteln� programy {\tt virtex} a {\tt initex} (zahrnuj�c�
vlastnosti v�stupu do {\tt pdf}) a p�vodn� programy nen�vratn� zmiz�.

P�ed kompilac� {\tt tex2pdf} je rovn� nutn� nejprve p�elo�it knihovny
{\tt zlib} a {\tt libpng}. P�izn�m se, �e s~tou druhou jsem m�l jist�
probl�my, proto�e tam n�kdo nechal v~{\tt make} souboru m�sto
povelu {\tt ranlib} povel {\tt echo}.

Kone�n� jsem pozm�nil zm�nov� soubor {\tt tex1.ch} tak, aby v�sledn� \TeX{}
zapisoval do {\tt log}u a dal��ch pracovn�ch soubor� {\tt �esky} a nikoli
{\tt \char`\^\char`\^e8sky}. Na odpov�daj�c� m�sto (podle po�ad� sekc�)
jsem proto p�idal:

\begtt
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% [4.49] Make characters 128--255 printable
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@x
  (k<" ")or(k>"~")
@y
  (k<" ")or(k=invalid_code) 
@z
\endtt

Vyhled�vac� m�sta (cesty) jsem nechal v~p�vodn�m stavu, tj.~programy si
najdou co pot�ebuj� v~ko�at�m stromu adres��� v~{\tt /usr/local/lib/texmf}
podle dohodnut�ho sch�matu. Komu se to nehod�, p�e�te si dokumentaci ke
{\tt kpathsea} a uprav� soubor {\tt texmf.cnf}.

Nyn� u� sta�� spustit podle n�vodu {\tt install.sh}. Nemus�me se
b�t~--- nic se neinstaluje. N�zev tedy neberme v�n�.
V~adres��i {\tt web2c/tex} se provede  zm�na zm�nov�ch soubor� a kompiluj�
se tam nov� programy {\tt virtex} a {\tt initex}. Vlastn� instalace typu
\uv{nap��u install a pak program pou��v�m} nen� zat�m v~t�to verzi
distribuce zahrnuta. Mo�n� je to dob�e, proto�e ka�d� se m��e s�m
rozhodnout, jak za��d� koexistenci nov�ch program� s~p�vodn�mi origin�ln�mi
Knuthov�mi. J� jsem nap��klad instalaci provedl takto:

\begtt
# cd /usr/local/bin
# mv virtex virtex-knuth
# mv initex initex-knuth
# cd /usr/local/lib/texmf/ini
# mv tex.pool tex.pool-knuth
# mv csplain.fmt csplain.fmt-knuth
# cd /usr/src/kpathsea-2.6/web2c/tex
# cp virtex initex /usr/local/bin
# cp tex.pool /usr/local/lib/texmf/ini
# cd /usr/local/lib/texmf/ini
# initex csplain.ini
\endtt

Vid�te, �e jsem si nejprve ud�lal z�lohy {\tt *-knuth}, ke kter�m se po
dokon�en� pr�ce s~form�tem {\tt pdf} vr�t�m. Asi lep�� �e�en� by bylo
pozm�nit n�zvy form�t� (nap��klad {\tt csplain-pdf.fmt}) a volat p�i
po�adavku na {\tt pdf} v�stup m�sto {\tt csplain} \hbox{\tt csplain-pdf}.
Proto�e ale {\tt pdf} varianta \TeX{}u se od p�vodn� li�� jen p�id�n�m
n�kter�ch primitiv� a bez dodate�n�ch z�sah� generuje b�n� {\tt dvi}, d�
se n�jakou dobu celkem dob�e existovat i s~t�mto pozm�n�n�m \TeX{}em.

V~distribuci {\tt tex2pdf} je n�zorn� uk�zka {\tt example.tex}, ze kter�
je celkem p�ehledn� vid�t pou�it� jednotliv�ch nov�ch primitiv�.
Kdy� jsem si pak v�sledek mohl vyzkou�et v~Acroreaderu a vid�l jsem, co
to d�l�, z�skal jsem prvn� p�edstavu, jak form�t {\tt pdf} a implementace
{\tt tex2pdf} funguj�. P�izn�m se, �e o~{\tt pdf} nem�m ��dn� podrobn�j��
informace (nevlastn�m ��dnou dokumentaci), tak�e ono {\tt example.tex}
bylo pro m� doslova darem.

P�i pokusu zpracovat uk�zku {\tt example.tex} celou (v�etn� obr�zku na
konci) se mi sou�asn� verze programu zbortila. To je ov�em mo�n� p�isoudit
n�kter�m chyb�m v~syst�mov�ch knihovn�ch nebo v~knihovn�ch funkc� na
zpracov�n� obr�zk�. M�j z�m�r ud�lat knihu klikac� to neovlivnilo, proto�e
nem�m v~knize jedin� obr�zek. Pt�te se pro� tam nejsou obr�zky? Proto�e
kniha je manu�lem k~\TeX{}u a nikoli obr�zkovou publikac� pro d�ti.


\sub Pou�it� fonty v~knize

V~knize jsem pou�il \CS-fonty, proto�e text knihy je hlavn� o~plainu a
csplainu. Druh� zm�n�n� form�t tyto fonty implicitn� pou��v�. Zd�lo se mi
nef�rov� pou��t jin� fonty ne� o~kter�ch mluv�m v~uk�zk�ch.

Form�t {\tt pdf} ov�em nepodporuje fonty ve form�tu \mf{}u. Podporuje pouze
fonty Type1 nebo TrueType. Posledn� jmenovan� form�t jsem okam�it� zavrhl
a za�al p�trat po �e�en� vedouc� k~Type1 form�tu font�. Bohu�el, \CS-fonty
v~tomto form�tu zat�m nem�me. P�esto se nakonec uk�zalo, �e existuje �e�en�
prostink� jak kolob�ka. Na S�ti jsou toti� voln� dostupn� tzv. BaKoMa Type1
fonty zahrnuj�c� jednak v�echny Computer Modern fonty a jednak v�echny DC
fonty. P�itom {\tt tex2pdf} pracuje p�i z�v�re�n�m p�ibalen� font� do
v�stupu se souborem {\tt texpdf.map}, kter� m� velmi podobn� vlastnosti,
jako soubor {\tt psfonts.map}, jen� d�v�rn� zn�me z~{\tt dvips}. Nap��klad
jsou zde informace o~tom, jak nalo�it s~fontem {\tt cmmi10}:

\begtt
cmmi10 cmmi10 4 <cmmi10.pfb CMmathit.enc
\endtt

Prvn� slovo ozna�uje n�zev fontu, kter� je pou�it p��mo v~\TeX{}u nebo
na kter� odkazuje pou�it� virtu�ln� font. Program {\tt tex2pdf} toti� um�
(p�i vytv��en� {\tt pdf} v�stupu) ��st i virtu�ln� fonty a prov�d� expanzi
virtu�ln�ch skript� a� na �rove� \uv{skute�n� pou�it�ho} fontu. Jeho n�zev
pak hled� v~{\tt texpdf.map}. Druh� slovo je n�zvem fontu ve sv�t�
Post\-Scriptu. V~p��pad� BaKoMa font� m� {\tt cmmi10.pfb} skute�n� n�zev
{\tt cmmi10}, tak�e toto slovo je shodn� s~prvn�m slovem. Za jin�ch
okolnost� by tam bylo t�eba naps�no \hbox{\tt Palatino-BoldItalic} nebo
n�co podobn�ho. Pak n�sleduje tajemn� konstanta {\tt 4}, jej�� v�znam jsem
p��li� nepochopil. Souvis� to n�jak s~r�zn�mi variantami form�t� font�
v~{\tt pdf}. Pokorn� tu �tverku obkresluji a funguje to. Podstatn� m�n� r�d
p��u �tverku do zkou�kov�ch zpr�v p�i zkou�en� student� z~line�rn� algebry.
Pr�v� nyn� prob�h� zkou�kov� obdob� a tato nemil� povinnost mi nastala.

Za men��tkem je vlastn� n�zev souboru s~fontem ({\tt*.pfb}).
Posledn� slovo ozna�uje n�zev souboru, kter� popisuje k�dov�n� pou�it�ho
fontu z~pohledu \TeX{}u v~terminologii Post\-Scriptu. Jedn� se o~zn�m�
k�dovac� vektor, kter� se pou��v� i v~{\tt dvips}. Pokud je nap��klad na
�est� pozici v~tomto vektoru naps�no {\tt /Sigma} a \TeX{} s�z� fontem {\tt
cmmi10} �estou pozici, algoritmus vybere z~fontu {\tt cmmi10.pfb} znak {\tt
/Sigma} bez z�vislosti na tom, na jak� pozici je tento znak
v~Post\-Scripto\-v�m fontu zrovna implementov�n.

Dopi�me do {\tt texpdf.map} nap��klad ��dky:

\begtt
csr10  dcr10  4 <dcr10.pfb  il2.enc
cstt10 dctt10 4 <dctt10.pfb it2.enc
\endtt

T�m jsme programu {\tt tex2pdf} prozradili, odkud m� br�t jednotliv� znaky
pro realizaci fontu {\tt csr10} a {\tt cstt10}. K�dovac� vektory \CS-font�
(soubory {\tt il2.enc} a {\tt it2.enc}) jsem p�evzal z~distribuce bal�ku
{\tt a2ac} skoro beze zm�ny. P�esn�ji, provedl jsem jen dv� �pravy:
1.~V~souboru {\tt it2.enc} jsem zam�nil {\tt /.notdef} na pozici 32 za
{\tt /visiblespace}, abych nep�i�el o~mo�nost tisku vani�ky pro vyzna�en�
mezery ({\tt\char`\ }). 2.~Slova {\tt/dcaron} a {\tt/tcaron}, pro jejich�
zaveden� jsem m�l dobr� d�vody (viz~[2]), nejsou respektov�na v~pou�it�ch
fontech BaKoMa. Proto jsem je byl nucen nahradit slovy {\tt/dquoteright} a
{\tt/tqouteright}.

Vid�me, �e nen� pot�eba pou��t ��dn� virtu�ln� fonty. Za tuto jednoduchost
ov�em plat�me. P�i�li jsme o~znak promile, �krt�tko pro polsk� l a hlavn�
o~skupinu jeden�cti znak� ze za��tku k�dov� tabulky CM font�, obsahuj�c�
velk� p�smena �eck� abecedy ($\Gamma$, $\Delta$, atd.). Posledn� probl�m
lze vy�e�it dodate�n�m zaveden�m fontu pro matematiku:

\begtt
\font\cmtenrm=cmr10  \textfont0=\cmtenrm
\font\cmsevenrm=cmr7 \scriptfont0=\cmsevenrm
\font\cmfiverm=cmr5  \scriptscriptfont0=\cmfiverm
\endtt

Font {\tt\\tenrm} z�st�v� zaveden jako {\tt csr10}, tak�e v~textov�m re�imu
nep�ich�z�me o~�e�tinu a v~matematick�m jsme ji nikdy nem�li. Z�st�v� n�m
tedy nevy�e�eno promile a �krt�tko pro polsk� l. Nad t�mto detailem jsem
m�vl rukou a vytvo�il {\tt pdf} form�t knihy s~v�dom�m, �e u~hesla
{\tt \\promile} a {\tt \\l} v~��sti~B knihy budou na ur�it�ch m�stech b�l�
m�sta. Kdyby to n�hodou n�komu nedalo sp�t, je pot�eba zd�raznit, �e
technick� prost�edky na �e�en� zm�n�n�ch dvou znak� existuj�. Pomoc�
virtu�ln�ho fontu sestav�me znak promile ze znaku procento a mali�k� nuly,
kter� v~DC fontech je. Pro �krt�tko se odk�eme ve virtu�ln�m skriptu
nap��klad do fontu {\tt cmr10}, tak�e se �krt�tko vykresl� z~fontu
{\tt cmr10.pfb}. J� osobn� ale pova�uji {\tt pdf} form�t jen za klikac�
atraktivitu a ne za solidn� form�t ur�en� k~profesion�ln�mu tisku. Proto
tak� o�el�m ztr�tu kvality kresby n�kter�ch akcent� zp�sobenou pou�it�m
kreseb DC font� m�sto p�vodn�ch \hbox{\CS-font�}.

V~souboru {\tt texpdf.map} jsou ji� v�echny fonty {\tt cm*} zaneseny tak,
�e se �tou soubory {\tt cm*.pfb} a odpov�daj�c� k�dovac� vektory. Bohu�el,
soubory s~t�mito k�dovac�mi vektory (nap��klad {\tt CMmathit.enc}) p�ibaleny
nejsou. Povedlo se mi sice na CTANu soubory stejn�ch n�zv� naj�t, ale
tyto soubory pou��vaj� na hojn�ch m�stech zcela jin� n�zvy pro jednotliv�
znaky, ne� pou��vaj� BaKoMa fonty. V�sledkem potom je, �e v~matematick�ch
vzorc�ch m�me a� p��li� mnoho nevyti�t�n�ch znak�. Nezbylo mi tedy nic
jin�ho, ne� vz�t odpov�daj�c� BaKoMa fonty ve form�tu {\tt afm},
prohl�dnout, jak� jsou tam pou�ity n�zvy znak� a v~k�dovac�ch vektorech to
opravit. V~p�vodn�m {\tt texpdf.map} tak� nebylo rozli�eno k�dov�n� pro font
{\tt cmr10} a t�eba {\tt cmtt10}. V~obou p��padech bylo pou�ito
{\tt CMtext.enc}. Pak ale nevytisknete backslash z~{\tt cmtt10} ani
kroucen� z�vorky. Provedl jsem n�kter� opravy a domluv�m se s~panem
Thanhem, aby tuto \uv{fontovou podporu pro BaKoMa fonty} za�adil do sv�
distribuce programu {\tt tex2pdf}.

Na z�v�r tohoto odstavce se zm�n�m je�t� o~dal��m probl�mu. V~knize
jsem pou�il font {\tt logo10} pro logo \mf{} a d�le bal�k font� {\tt
bbold} pro uk�zku za�azen� nov�ho matematick�ho fontu do \TeX{}u. Font
{\tt logo10} nen� do BaKoMa font� zahrnut a z~bal�ku {\tt paradissa}
mi tento font n�jak nefungoval. Acroreader ho odm�tal zobrazit. Fonty
{\tt bbold} v~Type1 form�tu pravd�podobn� v�bec neexistuj�. Podruh�
jsem m�vl nad {\tt pdf} form�tem rukou a napsal jsem do zdrojov�ho
souboru {\tt tbn.tex} n�hradn� a velmi nouzov� �e�en�:

\begtt
\let\mflogo=\rm
\font\bbtext=cmmib10
\let\bbex=\tenex
\endtt


\sub P�vodn� struktura odkaz� v~knize

Kniha {\it \TeX{}book naruby\/} m� obrovsk� mno�stv� odkaz� nejr�zn�j��ch
typ�. Jejich p�evodem do hypertextov� podoby vznikne pom�rn� po��dn�
klikac� atrakce. Pop��u nejprve strukturu odkaz� v~takov�m stavu, v~jak�m
je pou�ita v~ti�t�n� verzi knihy (tj. bez hyperlink�). Kdo m� knihu p�ed
sebou, m��e tuto ��st ��st rychleji, proto�e v�, o~�em hovo��m.

Obsah knihy je �len�n na kapitoly. Ka�d� kapitola m� je�t� n�kolik sekc�.
Takov� �len�n� je v~��sti~A~knihy. D�le v~��sti~B knihy jsou dodatky.
N�kter� kr�tk� dodatky nejsou �len�ny v�bec a rozs�hlej�� dodatky
(slovn�k syntaktick�ch pravidel a slovn�k primitiv� a maker) je d�le �len�n
na hesla �azen� v~abecedn�m po�ad�.

V~knize je velk� mno�stv� uk�zek maker ve verbatim prost�ed�. Tyto uk�zky
maj� ��slov�ny ��dky a v~textu se na n�kter� ��sla ��dk� odkazuji.
Uk�zky jsou p�i zpracov�n� knihy automaticky extrahov�ny do sum�rn�ho
souboru v�ech uk�zek maker {\tt tbn.mac}. V~tomto souboru se odkazuje
zp�tn� na strany, na kter�ch se uk�zky v~knize vyskytuj�.

V~textu knihy se odkazuji na jednotliv� sekce v~��sti~A~a pou��v�m hesla,
kter� lze vyhledat v~��sti~B. D�le se na mnoha m�stech odkazuji na ��sla
stran. V~��sti~B je u~ka�d�ho hesla sum�rn� odkaz na v�echna ��sla stran a
��sla ��dk� v~uk�zk�ch, ve kter�ch bylo heslo v~knize pou�ito. Jak�mi makry
jsem tohoto efektu doc�lil popisuji v~sekci 2.4 knihy.

Kone�n� v~rejst��ku odkazujeme zp�tn� na ��sla stran a stejn� tak �in�me
v~seznamu v�ech pou�it�ch p��klad� v~knize. Na seznam literatury
odkazujeme v~textu b�n�m ��slem (nap��klad~[1]) a v~seznamu
literatury je uveden zp�tn� seznam v�ech str�nek v~knize, kde byl titul
zm�n�n.

Knihu pova�uji sv�m zp�sobem t� za uk�zku, co v�echno lze v~oblasti
k���ov�ch referenc� naprogramovat makrojazykem \TeX{}u.
P�i zpracov�n� knihy se vytv��ej� krom� {\tt dvi} (nebo {\tt pdf})
automaticky t�i soubory. Ji� zm�n�n� soubor v�ech uk�zek maker
{\tt tbn.mac}, d�le soubor pro pozd�j�� vygenerov�n� obsahu {\tt tbn.toc}
a kone�n� soubor v�ech podklad� pro k���ov� reference {\tt tbn.ref}. Tento
soubor obsahuje kolem dvan�cti tis�c ��dk� pln�ch �daj� o~odkazech. Z~toho
je mo�n� soudit, �e r�zn�mi k���ov�mi referencemi v�eho druhu je kniha
skute�n� napln�na a� po okraj.

Teprve p�i �tvrt�m zpracov�n� knihy \TeX{}em se v�echny k���ov� reference
pou�ij� jak maj�. Z~d�vodu �et�en� pam�t� \TeX{}u jsou toti� do
{\tt tbn.ref} zan�eny jen takov� �daje, kter� skute�n� pot�ebuj� b�t n�kde
odkazov�ny. Probereme si jednotliv� pr�chody:

1. pr�chod: Soubor {\tt tbn.ref} neexistuje. \TeX{} se proto domn�v�, �e
neexistuje ��dn� heslo v~��sti~B, na kter� je nutno odkazovat a z~n�ho� je
nutno odkazovat zp�t na str�nky, kde bylo heslo pou�ito. Proto do
{\tt tbn.ref} nezapisuje v�skyt ��dn�ho hesla, ale po p�e�ten� ��sti~B tam
zap��e informaci o~existenci v�ech hesel.

2. pr�chod: Ze souboru {\tt tbn.ref} si \TeX{} p�e�te v�echna pou�it�
hesla. Nyn� pro ka�d� takov� heslo zap��e to {\tt tbn.ref} z�znam o~jeho
poloze na str�nce a p��padn� na ��dku v~uk�zce. P�i tisku ��sti~B jsou ale
zat�m sum�rn� informace s~odkazy na str�nky s~v�skyty odpov�daj�c�ho hesla
pr�zdn�. Proto ��st~B vyjde na m�n� str�nek, ne� odpov�d� definitivn�mu
rozm�ru knihy.

3. pr�chod: Soubor {\tt tbn.ref} u� je zcela zapln�n, jen mo�n� pro n�kter�
hesla nem� spr�vn� �daj o~stran�. Je to z~toho d�vodu, �e v~p�edchoz�m
pr�chodu vy�la ��st~B na m�n� str�nek, ne� je definitivn� rozm�r knihy.
Nyn� u� bude ��st~B obsahovat pln� zp�tn� odkazy a zapln�
spr�vn� po�et str�nek. T�m se vytvo�� definitivn� {\tt tbn.ref}, kde je v�e
zaneseno v~po��dku.

4. pr�chod: Na�te se spr�vn� {\tt tbn.ref} a vytvo�� se definitivn� sazba
knihy. Pomoc� UNIXov�ho {\tt diff} lze ov��it, �e nov� vytvo�en�
{\tt tbn.ref} se s~p�edchoz� verz� z~3.~pr�chodu neli��.

Pro zaj�mavost uvedu je�t� velikosti jednotliv�ch elektronick�ch
form�t�. Zdrojov� soubory {\tt *.tex} maj� dohromady velikost 1,25~MB.
Ty byly naps�ny lidskou rukou. Ostatn� form�ty jsou generov�ny
automaticky. Soubor {\tt tbn.dvi} m� velikost 1,7~MB, co� vzhledem
k~mno�stv� vstupn�ch informac� a vzhledem k~tomu, �e soubor obsahuje
�daje o~naprosto p�esn� sazb� textu, nen� nijak velk� objem. Vid�me
tedy, �e form�t {\tt dvi} byl velmi dob�e navr�en (podrobn�ji se o~n�m
m��ete dozv�d�t p��mo v~knize, kde mimo jin� popisuji \TeX{}ovsk� form�ty
{\tt dvi} a {\tt tfm}). Post\-Scriptov� v�stup, ur�en� pro tisk, m� pro
srovn�n� 3,2~MB (fonty tam jsou v~rozli�en� 600~dpi bitmapov�). Kone�n�
form�t {\tt pdf} v~nekomprimovan� podob� m� p�es 9~MB, co� je nepou�iteln�
obluda. Proto jsem volil v~{\tt tex2pdf} kladn� {\tt\\compresslevel} a
dos�hl jsem v�stupn�ho {\tt pdf} ve velikosti 4,8~MB. Bohu�el komprimovan�
data v~{\tt pdf} um� ��st a� Acroreader verze 3.0, tak�e pro u�ivatele
verze~2 je {\tt tbn.pdf} ne�iteln�.


\sub P�id�v�me hyperlinky

Hyperlink se v~dokumentu skl�d� aspo� ze dvou ��st�: aktivn� odkaz a c�l.
Kliknut�m na plochu aktivn�ho odkazu se zobraz� na obrazovce ta ��st
dokumentu, kter� obsahuje c�l. Na spole�n� c�l m��e sm�rovat v�ce aktivn�ch
odkaz�. V�echny tyto aktivn� odkazy a jejich spole�n� c�l maj� stejn�
p�irozen� ��slo (tzv. ��seln� kl��), kter�m jsou vz�jemn� propojeny. Toto
��slo u�ivatel nevid�, ale p�i implementaci maker pro {\tt pdf} form�t n�s
bude toto ��slo samoz�ejm� zaj�mat.

Aktivn� odkaz je ur�en plochou obd�ln�kov�ho tvaru um�st�nou n�kde v~dokumentu.
Jakmile kurzor my�i posuneme nad tuto plochu, zm�n� se tvar kurzoru
(nap��klad z~packy se stane vzty�en� prst). Nav�c je�t� m��e b�t toto m�sto
ohrani�eno viditeln�m r�me�kem a text v~n�m (pro p�ehlednost) vol�me
obvykle v~jin� barv�. O~volbu odli�n� barvy textu hyperlinku se ov�em
mus�me postarat sami~--- to nen� samoz�ejm� vlastnost hyperlinku.

Pro vymezen� plochy aktivn�ho odkazu jsou v~{\tt tex2pdf} pou�ity
zna�kovac� primitivy {\tt \\pdfannotlink} a {\tt \\pdfendlink}. Jejich
p��tomnost v~textu nem� ��dn� vliv na um�st�n� ostatn� sazby nebo velikosti
box�. Prvn� zna�ka ozna�uje za��tek (lev� okraj) aktivn� plochy a druh�
prav� okraj. Nad ��a��m bude plocha tak velik�, jako je v��ka boxu, ve
kter�m se ob� zna�ky vyskytuj� sou�asn�. Analogicky hloubka tohoto boxu
ur�uje p�esah aktivn� plochy pod ��a��. Tyto �daje lze t� zadat explicitn�
pomoc� kl��ov�ch slov {\tt height} a {\tt depth} u~primitivu {\tt
\\pdfannotlink}. V~takov�m p��pad� se p�i v�po�tu aktivn� plochy ignoruj�
rozm�ry boxu. Zna�ky po��tku a konce sice mus� b�t ve spole�n�m boxu (jinak
se {\tt tex2pdf} tak prudce roz��l�, �e ukon�� celou �innost), ale pokud
jsou dodate�n� algoritmem ��dkov�ho zlomu od sebe odtr�eny do v�ce box�,
pak jsou zna�ky za��tku a konce automaticky p�id�ny do m�st roztr�en�. T�m
je umo�n�no nechat aktivn� cel� v�ce��dkov� �sek odstavce. To jsem ve sv�
knize ale nikde nepou�il.

C�l hyperlinku je d�n pouze bezrozm�rn�m m�stem v~dokumentu. Rozli�ujeme
n�kolik kategori� c�l�: vertik�ln�, horizont�ln� a jin�. Kategorie se li��
pouze v~tom, jak se prohl��e� {\tt pdf} vyrovn� s~celkov�m um�st�n�m strany
v~m�st� c�le po aktivaci hyperlinku. Bu� bude vid�t c�l spole�n� s~plnou
���kou strany, nebo bude vid�t c�l spole�n� s~plnou v��kou strany nebo
nev�m. P�izn�m se, �e jsem tyto vlastnosti zat�m p��li� neprokoukl a
pou��v�m osv�d�en� {\tt \\pdfdestfith}%
\footnote{V nov� verzi {\tt tex2pdf} je m�sto {\tt\\pdfdestfith} pou�it
primitiv {\tt\\pdfdest} s~r�zn�mi parametry {\tt fitph}, {\tt fitpv},
{\tt fitp}, {\tt fitbh} atd.},
co� je z�ejm� c�l, kter� ponech� velikost str�nky na plnou jej� ���ku.

U�ite�n� je v�d�t, �e pokud existuje aktivn� odkaz, kter� nem� odpov�daj�c�
c�l, p�esto se {\tt pdf} vytvo�� a u�ivatel Acroreaderu pak klik�
napr�zdno. Pokud zpracov�v�me pokusn� jen ��st knihy, je tento jev
velmi �ast�. Tak� je dobr� v�d�t, �e hyperlinky hned po prvn�m pr�chodu
funguj� dop�edu i zp�t, co� ve srovn�n� s~generov�n�m ti�t�n�ch
odkaz� nem� obdobu. V~{\tt pdf} form�tu nevad� ani p��tomnost
osi�el�ch c�l�, kter� nemaj� na sebe ��dn� odkaz.

Nejprve jsem navrhl makra, kter� tvo�� rozhran� mezi makry ji� pou�it�mi
v~knize a nov�mi primitivy z~{\tt tex2pdf}. Pokud nepou�iji v�stup do
{\tt pdf}, cht�l bych, aby makra pracovala \uv{napr�zdno}, tj. t�eba takto:

\begtt
\def\beglink#1{}   % Za��tek odkazu, #1 je identifik�tor kl��e
\def\endlink{}     % Konec odkazu
\def\aimlink#1{}   % C�l odkazu, #1 je identifik�tor kl��e
\def\pglink#1{#1}  % \pglink{28} tiskne ��slo 28 jako
                   % aktivn� odkaz na stranu 28
\endtt

Pou�it� uveden�ch �ty� maker jsem za�adil do st�vaj�c�ch maker knihy na
hojn� m�sta a p�ekontroloval, zda tyto z�sahy nezm�nily dosavadn�
zpracov�n� knihy. Nap��klad pro tisk ��dku obsahu s~n�zvem sekce jsem
pozm�nil makro {\tt \\subtocline} n�sledovn�:

\begtt
% v tbn.toc je t�eba: \subtocline{1.3}{Token procesor}{19}{token}
\def\subtocline #1#2#3#4{%
   \line{\qquad #1\quad \hbox{\beglink{sec/#4}#2\endlink}%
       \puntiky\hbox to2em{\hfil\pglink{#3}}}\cvak}
\endtt

V~obsahu tedy budeme m�t aktivn� jednak n�zvy sekc� a jednak ��sla stran.
N�zvy sekc� odkazuj� p��mo na za��tek sekce, zat�mco ��sla stran odkazuj�
na za��tek strany, na kter� sekce za��n�.

V~makru {\tt \\sub}, kter� je pou�ito v~m�st� za��tku sekce, p��u:

\begtt
% pou�it�: \sub Token procesor [token]
\def\sub #1 [#2]{\par\goodbreak
   \advance\secnum by1
   \noindent{\bbf \the\chapnum.\the\secnum. #1}\par\nobreak
   \aimlink{sec/#2} % <<< --- toto souvis� s hypertextov�m c�lem
   ... zapi� odpov�daj�c� informace do tbn.toc a tbn.ref}
\endtt

Z~d�vodu p�ehlednosti jsem si tuto uk�zku lehce zestru�nil a nerozepisuji,
jak se zapisuj� informace do {\tt tbn.toc} a {\tt tbn.ref}.
To nen� v�c, kterou nyn� sledujeme.

Nastal �as vytvo�it klikac� folkl�r. K~tomu sta�� p�edefinovat
zm�n�n� makra nap��klad takto:

\begtt
\newcount\numlink \newcount\sumlink  % ��slo PDF odkazu
\pdfoutput=1
\def\pdfsetcmykcolor#1{\special{PDF:#1 k}}
\def\CadetBlue{\pdfsetcmykcolor{0.62 0.57 0.23 0}}
\def\Black{\pdfsetcmykcolor{0 0 0 1}}  % Barva pro hyperlinky
\def\beglink#1{\convertkey{#1}\CadetBlue
   \pdfannotlink height8pt depth3pt 
        attr{/Border [0 0 0]} \numlink \relax}
\def\endlink{\pdfendlink\Black}
\def\aimlink#1{\convertkey{#1}\pdfdestfith \numlink \relax}
\def\convertkey#1{{% Konvertuje textov� kl�� na ��slo do \numlink
   \expandafter\ifx \csname #1\endcsname \relax
      \global\advance\sumlink by1
      \expandafter\xdef \csname #1\endcsname{\the\sumlink}%
      \global\numlink=\sumlink
   \else \global\numlink=\csname #1\endcsname\relax
   \fi}}
\endtt

Vid�me, �e pomoc� p��slu�n�ho {\tt\\special} jsme schopni \uv{nam�chat
jakoukoli barvu} pro b�n� text i pro text aktivn�ch odkaz�. Zde byla
pro texty odkaz� pou�ita barva modr�, soud� podle n�zvu jde o~barvu
uniforem vojensk�ho n�mo�nictva �i letectva. V~distribuci {\tt tex2pdf} je
soubor {\tt colorpdf.tex}, kde je p�eddefinov�no velk� mno�stv� r�zn�ch
barvi�ek. Vid�me, �e se barva deklaruje obvykl�m zp�sobem po jednotliv�ch
slo�k�ch v~CMYK barevn�m pl�nu.

Parametrem {\tt attr}, kter� p��slu�� primitivu {\tt\\pdfannotlink},
je mo�no d�t form�tu {\tt pdf} vzkaz v~jeho �e�i o~vzhledu aktivn�ho
odkazu. J� tu �e� moc neum�m, pouze v�m, �e nenap��e-li se 
{\tt/Border [0 0 0]}, budou m�t aktivn� odkazy �ern� r�me�ky, 
kter� v~textu knihy pom�rn� dost ru��.

T�i�t� na�eho makra spo��v� v~pomocn�m makru {\tt\\convertkey}, kter�
konvertuje textov� kl�� na p�irozen� ��slo. P�itom tato konverze
mus� b�t jednozna�n�. Nap��klad po
{\tt \\convertkey\char`\{sec/token\char`\}} obdr��me v~registru
{\tt \\numlink} ��slo (�ekn�me) 457 a p���t�, a� se budeme znovu pt�t na
\uv{{\tt sec/token}}, dostaneme tot� ��slo. Polo��me-li dotaz
s~jin�m identifik�torem kl��e, vr�t� n�m makro do {\tt\\numlink} jin� ��slo
ne� 457. Primitivy implementuj�c� hyperlinky ({\tt\\pdfannotlink} a
{\tt\\pdfdestfith}) vy�aduj� toti� ke sv� pr�ci numerick� kl�� a ne
mnemotechnick� slovo%.
\footnote{Poznamenejme, �e nov� verze {\tt tex2pdf}, kterou jsem ale p�i
form�tov�n� knihy nepou�il, zahrnuje mo�nost �ten� textov�ch kl��� p��mo na
�rovni primitiv� {\tt\\pdfannotlink}, {\tt\\pdfdest} a {\tt\\pdfoutline}.
V~takov�m p��pad� je z�ejm� makro {\tt\\convertkey} zbyte�n�.}.

Zb�v� n�m je�t� uk�zat k�d makra {\tt\\pglink}, kter� vys�z� sv�j
��seln� parametr jako hypertextov� odkaz na str�nku odpov�daj�c�ho ��sla.

\begtt
\def\pglink#1{\hbox{\beglink{pg/#1}#1\endlink}}
\let\orishipout=\shipout
\def\shipout#1#2{\orishipout#1{\aimlink{pg/\the\pageno}#2}}
\endtt

Zde jsme s�hli na primitiv {\tt\\shipout}, kter� jsme p�edefinovali
tak, aby vkl�dal do v�stupn�ho seznamu i {\tt\\aimlink} s~odpov�daj�c�m
��slem strany.

Zaj�mav� je t� makro, kter� rozhoduje, zda vyti�t�n� ��dic� sekvence
v~uk�zce maker \uv{zmodr�} (p�esn�ji stane se aktivn�m odkazem), nebo
z�stane �ern�. K�d tohoto makra zde nebudu uv�d�t, proto�e souvis�
s~dal��mi z�le�itostmi a cel� je to velmi rozs�hl�. Zm�n�m pouze princip
tohoto makra.

Jak ji� bylo �e�eno, p�i zpracov�n� ��sti~B se pro ka�d� heslo ulo�� do
souboru {\tt tbn.ref} informace o~v�skytu tohoto hesla. P�i druh�m
zpracov�n� si \TeX{} z~tohoto souboru p�e�te v�echny n�zvy pou�it�ch hesel
a ud�l� si jasno o~tom, kter� heslo je v~��sti~B pou�ito a kter� ne. Kdy�
pak nap��klad ve verbatim uk�zce zpracov�v� heslo {\tt\\def}, ov��� si, �e
toto heslo je v~��sti~B uvedeno a zpracuje je jako hyperlinkov� odkaz. Kdy�
ale zpracov�v� t�eba heslo {\tt\\memakro}, zjist�, �e v~��sti~B nic
takov�ho nen� a ponech� text {\tt\\memakro} �ern�. V�sledkem je strakat�
modro�ern� uk�zka, kde v�e, co je modr�, je primitivem nebo makrem plainu
vysv�tlen�m v~��sti~B a v�e, co je �ern�, je jen pomocn�m nebo nov�
definovan�m makrem. V~��sti~B u~jednotliv�ch hesel jsou zp�tn� odkazy na
v�echny v�skyty hesla v~knize a pou��vaj� se tam dal�� hesla vyhledateln�
jinde v~��sti~B. �ten��-u�ivatel se tedy m��e proklikat a� do Bohnick�
l��ebny.

Aby bylo takov� zpracov�n� modro�ern�ch uk�zek mo�n�, je samoz�ejm� v~tomto
\uv{verbatim} re�imu backslash aktivn�. Aby to v�echno fungovalo v�etn�
extrahov�n� uk�zek do souboru {\tt tbn.mac}, je to nav�c pom�rn�
komplikovan�. Kdo m� z�jem se do maker pono�it, m��e. Soubor maker
{\tt tbn.tex}, kter�mi byla kniha zpracov�na, je voln� k~dispozici v~r�mci
elektronick� distribuce knihy.


\sub P�id�v�me z�lo�ky dokumentu

Form�t {\tt pdf} m� je�t� jednu u�ite�nou vlastnost, kterou jsem necht�l
nechat stranou. Lze v~n�m deklarovat tzv. z�lo�ky. Jedn� se o~hypertextov�
odkazy, kter� nejsou um�st�ny v~dokumentu, ale na okraji v~samostatn�m
r�me�ku. Tyto odkazy jsou tedy k~dispozici po��d bez z�vislosti na zrovna
zobrazen� str�nce dokumentu a v�� se na c�l uvnit� dokumentu. Klikne-li
u�ivatel na text z�lo�ky, zobraz� se mu str�nka s~odpov�daj�c�m
c�lem.

Odkazy typu z�lo�ka lze nav�c uspo��dat v~postrann�m r�me�ku do stromov�
struktury. Ka�d� z�lo�ka m��e m�t ur�it� mno�stv� potomk� (to jsou zase
z�lo�ky) a nav�c je mo�n� p�edem definovat, zda implicitn� u�ivatel ono
potomstvo z�lo�ky vid� (otev�en� z�lo�ka), nebo se mu objev� a� po kliknut�
na ur�it� symbol (zat�m zav�en� z�lo�ka).

Ka�d�ho okam�it� napadne, �e je nanejv�� ��douc� p�ev�st do z�lo�ek
stromovou strukturu obsahu knihy. T�m m� u�ivatel obsah neust�le p�ed sebou
a nemus� se k~n�mu vracet na konkr�tn� str�nku dokumentu.

Z�lo�ky mus� b�t vlo�eny v~po�ad�, v~jak�m se objev� v~postrann�m
r�me�ku a mus� obsahovat text z�lo�ky a ��seln� kl�� c�le (ono p�irozen�
��slo, o~kter�m jsme u� mluvili v~souvislosti s~hyperlinky). Nav�c
u~z�lo�ky mus� b�t �e�eno, kolik m� z�lo�ka potomk� a zda se m� zobrazit
otev�en� nebo zav�en�. Proto�e mus�me vlo�it po�et potomk� do z�lo�ky
d��ve, ne� projdeme v�echny n�sleduj�c� potomky v~dokumentu, je z�ejm�, �e
tuto vlastnost lze programovat pomoc� aspo� dvou pr�chod� \TeX{}u.

K~implementaci stromov� struktury z�lo�ek obsahu knihy ov�em nepot�ebujeme
zakl�dat nov� pracovn� soubor. V~souboru s~podklady pro obsah {\tt tbn.toc}
toti� u� od druh�ho pr�chodu m��eme zjistit celou strukturu stromu z�lo�ek
a pak u� jen z�lo�ky vkl�dat. Z�lo�ky lze vkl�dat kdekoli v~dokumentu (to
nem� ��dn� vliv na jejich chov�n�). Logicky ale budeme �e�it z�lo�ku
v~dob�, kdy budeme vytv��et jej� c�l.

Rozhodl jsem se mezi z�lo�ky vlo�it t� v�echna hesla v~��sti~B. Budeme
m�t tedy �ty�i druhy z�lo�ek. 1.~Odkazuj�c� na kapitoly (budou m�t
potomky). 2.~Odkazuj�c� na sekce (bez potomk�). 3.~Odkazuj�c� na dodatky
(s~v�jimkou dvou dodatk� s~hesly bez potomk�). 4.~Odkazuj�c� na hesla
v~dodatc�ch (bez potomk�). V�echny strukturovan� z�lo�ky budou implicitn�
zav�eny. U�ivatel tedy nejprve uvid� jen n�zvy kapitol a dodatk�. Klikne-li
na p��slu�n� symbol u~n�zvu kapitoly, objev� se mu v�echny sekce dan�
kapitoly. Klikne-li na vybranou sekci, m��e za��t ��st. Podobn� po otev�en�
z�lo�ky dodatku se v�emi primitivy a makry se u�ivateli v~prostoru z�lo�ek
v�echny tyto primitivy a makra objev� v~abecedn�m po��dku. Je jich kolem
tis�ce. Pak u�ivateli sta�� jen vybrat to heslo, kter� ho zaj�m�.

Nejprve jsem navrhl makro {\tt\\outlink}, kter� tvo�� rozhran� mezi
ostatn�mi makry pro form�tov�n� knihy a pou�it�mi primitivy pro hyperlinky.
Makro m� t�i parametry. Prvn�m parametrem je mnemotechnick� kl�� shodn�
s~kl��em c�le, druh�m parametrem je po�et potomk� (kter� budou n�sledovat)
a t�et�m parametrem je vlastn� text z�lo�ky. Pr�zdn� varianta makra (pro
p��pad v�stupu do {\tt dvi} a nikoli do {\tt pdf}) vypad� tedy takto:

\begtt
\def\outlink #1#2#3{}
\endtt

Varianta makra v~p��pad� v�stupu do {\tt pdf} je n�sleduj�c�:

\begtt
\def\outlink #1#2#3{{%
   \def\tt{}\def~{ }\def\char`{\string}\def\TeX##1{TeX}%
   \convertkey{#1}% kl�� c�le
   \pdfoutline \numlink count -#2 % z�lo�ka je zav�en�
       {#3}}} % vlastn� text z�lo�ky
\endtt

Za vysv�tlen� stoj� z�ejm� druh� ��dek uk�zky, kde jsou n�kter� sekvence
p�edefinov�ny. Do textu z�lo�ky se toti� dostane v�e, i to, co
bychom necht�li. Nap��klad v~nadpisu sekce pou��v�m z�pis:

\begtt
\sub Tabulky pomoc� \tt \char`\\halign    [halign]
\endtt

Proto�e jsem v~makru {\tt\\sub} za��dil (zde neuv�d�m jak), �e v~okam�iku
z�pisu do {\tt tbn.toc} maj� sekvence {\tt\\\\} a {\tt\\tt} v�znam
{\tt\\relax} a sekvence {\tt\\char} je primitivn�, zap��e se do
{\tt tbn.toc} skute�n� text
\uv{{\tt Tabulky pomoc� \\tt \\char `\\\\halign}}.
V~dob� tisku obsahu se to spr�vn� p�e�te a vytiskne. Ov�em nic
takov�ho nechceme zapisovat do z�lo�ky. Proto jsou odpov�daj�c� sekvence na
chv�li p�edefinov�ny. N� p��klad se tedy expanduje postupn� na
\uv{{\tt Tabulky pomoc� \\string\\\\halign}} a do textu z�lo�ky se
zap��e \uv{{\tt Tabulky pomoc� \\\\halign}}. Proto�e je text z�lo�ky
Acroreaderem interpretov�n jako string s~c��kovou konvenc�, zm�n� se
nakonec dvojit� backskash na jednoduch�.

Zab�vejme se nyn� v�po�tem struktury z�lo�ek.
Rozhodl jsem se pracovat s~t�mito ��dic�mi
sekvencemi: \uv{{\tt kap:$\langle$\it ��slo kapitoly$\rangle$}}~---
expanduje na po�et sekc� dan� kapitoly. D�le
\uv{{\tt app:$\langle$\it ��slo dodatku$\rangle$}}~---
expanduje na po�et hesel v~dan�m dodatku.

Nejprve uvedu pomocn� makra, kter� s~t�mito ��dic�mi sekvencemi pracuj�:

\begtt
\def\expnumber#1{\expandafter \ifx\csname#1\endcsname \relax 0%
    \else \csname#1\endcsname \fi}
\def\advancenumber#1{\tempnum=\expnumber{#1}\relax
    \advance\tempnum by1
    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
\def\extractkapnum#1.#2:{#1}
\endtt

V~souboru {\tt tbn.toc} se vytvo�� podklady pro obsah v~tomto tvaru:

\begtt
\kaptocline {1}{Vstupn� ��sti \TeX {}u}{10}
\subtocline {1.1}{Koncept vstupn� br�ny \TeX {}u}{10}{koncept}
\subtocline {1.2}{Input procesor}{12}{input}
\subtocline {1.3}{Token procesor}{19}{token}
\kaptocline {2}{Expand procesor}{31}
\subtocline {2.1}{Definov�n� maker}{31}{def}
...
\endtt

Na�ten�m takto �len�n�ho souboru {\tt tbn.toc} z�sk�me informace o~po�tech
sekc� ka�d� kapitoly:

\begtt
\def\subtocline #1#2#3#4{%
  \advancenumber{kap:\extractkapnum#1:}%
  \line{... d�le s�z�me ��dek obsahu stejn�, jako prve ...}}
\kaptocline #1#2#3{\line{... sazba ��dku obsahu beze zm�n ...}}
\endtt

Podobn� spo��t�me po�et hesel v~��sti~B p�i �ten� souboru {\tt tbn.ref}.
Nyn� sta�� z�lo�ky prost� vlo�it na po�adovan� m�sto. T�eba v~definici
{\tt\\kap} a {\tt\\sub} uprav�me k�d n�sleduj�c�m zp�sobem:

\begtt
\def\kap#1 \par{\vfill\break \linenum=0 \secnum=0
   \global\advance\chapnum by1 \xdef\chapmark{\the\chapnum. #1}
   \headline={\hfil\starthead}
   {\bigbf \the\chapnum. #1}\par
   \aimlink{kp/\the\kapnum}
   \outlink{kp/\the\kapnum}{\expnumber{kap:\the\kapnum}}{#1}
   ... a d�le z�pis do tbn.toc}
\def\sub #1 [#2] \par{\par\goodbreak
   \advance\secnum by1
   \noindent{\bbf \the\kapnum.\the\secnum. #1}\par\nobreak
   \aimlink{sec/#2}
   \outlink{sec/#2}0{#1}
   ... a d�le z�pis do tbn.ref a tbn.toc}
\endtt

Pr�ce se z�lo�kami m� sv� �skal�. Nelze vybrat font pro text z�lo�ek,
proto�e tento font z�vis� na konfiguraci Acroreaderu v~pou�it�m opera�n�m
syst�mu. Jsou-li tedy texty z�lo�ek �esk� (v~csplainu a v~Unixov�m \TeX{}u
je pou�ito ISO-8859-2), pak se tyto texty spr�vn� zobraz� jen tehdy, pokud
pou�it� opera�n� syst�m pracuje s~fonty ve stejn�m k�dov�n� a Acroreader je
m� nakonfigurov�ny pro zobrazov�n� text� z�lo�ek. Z~toho d�vodu
\uv{Portable Document Format} nen� zas tak �pln� \uv{Portable}, ale nad t�m
jsem jen m�vl (do t�etice) rukou. Mohl jsem sice vytvo�it v~\TeX{}u makra,
kter� by konvertovala n�zvy kapitol a sekc� na nehackovanou a necarkovanou
variantu textu, ale na� si p�id�l�vat zbyte�nou pr�ci, �e?

Zde vid�me, �e zm�na zm�nov�ho souboru, zm�n�n� na za��tku tohoto �l�nku,
m� pro n�s velk� v�znam. Kdybychom ji neud�lali, dostali bychom v~�esk�ch
textech do z�lo�ek {\tt \def\^{\char`\^\char`\^}%
p\^f8\^ed\^b9ernou zm\^ec\^bb st\^f8\^ed\^b9ek}%
\footnote{Zde bylo v~ISO-8859-2 �e�eno: \uv{p���ernou zm� st���ek}.}.


\sub V�tven� v�po�tu

V~p�edchoz�ch odstavc�ch jsme nazna�ili, �e makra {\tt\\beglink},
{\tt\\endlink}, {\tt\\aimlink}, {\tt\\pglink} a {\tt\\outlink}  nech�me
pr�zdn�, pokud zpracov�v�me knihu do {\tt dvi}. Naopak, nastav�me je na
nepr�zdnou hodnotu, pokud generujeme {\tt pdf}. K~tomu se mi osv�d�ilo velmi
prost� v�tven�:

\begtt
% \let\pdfoutput=\undefined  %% Pokud chceme v�stup jen do DVI
\ifx\pdfoutput\undefined
... definice pr�zdn�ch maker:
    \beglink, \endlink, \aimlink, \pglink, \outlink
\else
\pdfoutput=1
\fontsubset=1
... definice hyperlinkov�ch maker:
    \beglink, \endlink, \aimlink, \pglink, \outlink
... �e�en� n�hradn�ch font� \fam0, \mflogo, \bbtext, \bbex
... zmen�en� okraj� elektronick�ho "pap�ru"
\fi
\endtt

Jestli�e nyn� budeme zpracov�vat knihu na Thanhov� \TeX{}u, bude se
generovat {\tt pdf} soubor. Pokud ji budeme zpracov�vat klasick�m \TeX{}em,
dostaneme star� zn�m� {\tt dvi}. Nav�c, pokud chceme na Thanhov� \TeX{}u
vytvo�it v�stupn� {\tt dvi}, sta�� zru�it po��te�n� procento na prvn�m
��dku uk�zky.

V�tven� jsem pou�il je�t� v~protitulu knihy. Tam m�m v~klasick� variant�
zrcadlov� obr�zek, zat�mco v~{\tt pdf} variant� je vysv�tluj�c� text.
K~tomu sta�ilo ps�t:

\begtt
%% Protitul
\ifx\pdfoutput\undefined
\input epsf
\vglue 7mm
\centerline{\epsfbox{protitul.eps}}
\else
\vglue 2cm
Toto je text knihy v~\uv{klikac�} verzi ve form�tu PDF.
Jsou zde pou�ity n�hradn� fonty ve sn��en� kvalit�.
Proto nedoporu�uji z~tohoto form�tu tisknout.
Pro tisk pou�ijte form�t {\tt dvi} nebo
{\tt ps}, viz t� soubor {\tt tbn-tisk.txt}.
\fi
\vfil\break
\endtt


\sub Z�v�rem

Cht�l bych pod�kovat panu Thanhovi za jeho velmi dob�e ud�lan�
program {\tt tex2pdf}. Hodn� si cen�m i jeho ochoty pomoci mi v~dob�, kdy
jsem m�l s~t�mto programem probl�my. Pokud jsem v~programu objevil n�jakou
z�vadu, m�l jsem ji b�hem p�r hodin opravenu. Takov� servis se hned tak
nevid�.

D�le bych cht�l poznamenat, �e m� ani po hran� s~{\tt pdf} form�tem
v~Acroreaderu tato filosofie p�enosu informac� nenadchla a �e z�st�v�m
u~star�ho zn�m�ho tvrzen�: {\it kniha je kniha}. S~knihou si mohu vl�zt do
postele nebo naj�t jinou fyziologicky p��jemnou polohu, zvolit osv�tlen�
p��jemn� pro o�i a pln� a neru�en� se soust�edit na informace v~knize
obsa�en�. Sebelep�� po��ta�, sebelep�� klikac� vylomeniny a sebelep��
obrazovka tuto pohodu nenahrad�.



\sub Tabulka pou�it�ch primitiv� z~{\tt tex2pdf} implementace \TeX{}u

Uv�d�m jen primitivy ze star�� verze {\tt tex2pdf}, kter� jsem pou�il.
Program {\tt tex2pdf} je st�le ve v�voji a syntaxe n�kter�ch primitiv� u�
doznala zm�ny. Proto doporu�uji prostudovat nejprve dokumentaci
k~{\tt tex2pdf} a~{\tt example.tex}.

J� jsem pou�il star�� verzi {\tt tex2pdf} hlavn� proto, �e jsem v~n� m�l
u� text knihy odlad�n a nov� verze (s~bohat��m jazykem primitiv� a s~nov�mi
klikac�mi mo�nostmi) byla v~dob� z�v�re�n�ho zpracov�n� knihy teprve ve
f�zi testov�n�. A� bude otestov�na, pak mi bude sta�it b�hem p�r vte�in
pozm�nit pou�it� primitiv� v~makrech {\tt\\beglink}, {\tt\\endlink},
{\tt\\aimlink} a {\tt\\outlink} a p�echod na novou verzi bude proveden.

{\catcode`\<=13 \def <#1>{\hbox{$\langle$\it#1\/$\rangle$}}
 \catcode`\[=13 \def [{$\mathchar"405B$}
 \catcode`\]=13 \def ]{$\mathchar"505D$}
 \catcode`\&=13 \def &{\unskip\egroup \ifdim\wd0>3cm \unhbox0 \hfil\break
                               \else \hbox to3cm{\unhbox0\hss}\fi
                               \ignorespaces}
 \parindent=0pt
 \everypar={\hangindent=3cm \hangafter=1 \setbox0=\hbox\bgroup\tt
            \spaceskip=3.3pt plus3pt minus 1pt }
 \medskip

\\pdfoutput    & Je registr typu <number>. Je-li kladn�, bude v�stup do
                 {\tt pdf}. Jinak do {\tt dvi}. Implicitn�~0. Z�le�� na jeho
                 hodnot� p�i prvn�m {\tt\\shipout} v~dokumentu.

\\pdfpagewidth & Registr typu <dimen>. Ur�uje ���ku strany v~{\tt pdf}
                 dokumentu. Nen�-li specifikov�n, bude po��t�n z~registru
                 {\tt\\hsize} plus okraj (1in+{\tt\\hoffset}) po obou stran�ch.

\\pdfpageheight & Podobn� jako {\tt\\pdfpagewidth}.

\\compresslevel & Registr typu <number>.
                  Hodnota komprese textu ve v�stupn�m {\tt pdf}. 
                  Implicitn�~0 (��dn� komprese), maxim�ln� 9 (nejv�t�� komprese).
                  Pozor, je-li {\tt\\compresslevel}${}>0$, je v�stup
                  �iteln� jen v~Acroreaderu verze~$\ge$~{\tt 3.0}.

\\fontsubset    & Registr typu <number>. Je-li kladn�, budou do
                  {\tt pdf} zav�d�ny jen ty znaky font�, kter� jsou
                  pou�ity. Nikoli tedy cel� fonty.

\\pdfannottext width<dimen> height<dimen> [open]
                  \char`\{<balanced text>\char`\}
                & Vlo�� do dokumentu zna�ku. Klikne-li u�ivatel na tuto
                  zna�ku, otev�e se text uveden� (po expanzi)
                  v~<balaced text>.
                  Je-li uvedeno nepovinn� kl��ov� slovo {\tt open},
                  inicializuje se zna�ka jako otev�en�.

\\pdfdestfith <number> & C�l hyperlinku nebo z�lo�ky. Parametr <number>
                  je kl�� c�le.

\\pdfannotlink [height<dimen>] [depth<dimen>]
               [attr\char`\{<balanced text>\char`\}] <number>
                & Zahajovac� zna�ka odkazu hyperlinku.
                  Parametr <number> je kl�� shodn� s~kl��em c�le.
                  Nepovinn� <balanced text> ud�v� parametry zna�ky a
                  {\tt height} a {\tt depth} jej� rozm�ry.

\\pdfendlink    & Ukon�uj�c� zna�ka hyperlinku. Mus� n�sledovat ve stejn�m
                  boxu, jako zahajuj�c� {\tt\\pdfannotlink}.

\\pdfoutline <number> [count<number>] \char`\{<balanced text>\char`\}
                & Z�lo�ka. Povinn� parametr <number> je kl�� odpov�daj�c�
                  kl��i c�le a <balanced text> je (po expanzi) text
                  z�lo�ky. Nepovinn� {\tt count<number>} specifikuje po�et
                  potomk� z�lo�ky, kter� budou za touto z�lo�kou
                  n�sledovat. Implicitn�~0.

\\pdfinfo \char`\{<balanced text>\char`\}
               & Vlo�� do v�stupn�ho souboru �daje ulo�en� 
                 v~<balanced text>. Jedn� se o informace speci�ln�ch
                 typ� {\tt/Author}, {\tt/Title}, {\tt/Subject},
                 {\tt/Keywords}, {\tt/CreationDate}, {\tt/ModDate},
                 {\tt/Creator} a {\tt/Producer}, kter� se zobraz�
                 p�i vyvol�n� \uv{Document info} ve �tec�m programu.

\\special  \char`\{PDF:<balanced text>\char`\}
                & To je samoz�ejm� star� zn�m� primitiv, ov�em za zm�nku
                  stoj�, �e p�i v�stupu do {\tt pdf} je {\tt tex2pdf}
                  schopen interpretovat jedin� {\tt\\special} za��naj�c� na
                  text \uv{{\tt PDF:}}. Jak� vzkazy se daj� do v�stupu
                  prost�ednictv�m <balanced text> vkl�dat vypl�v� z�ejm�
                  z~dokumentace k~{\tt pdf}. Pro pr�ci s~obr�zky ve form�tu
                  {\tt png} je v~{\tt tex2pdf} implementov�n primitiv
                  {\tt\\pdfimage}, kter� jsem ov�em v~knize nepou�il.
\par}


\sub Literatura

\bib{1} Petr Ol��k: {\it \TeX{}book naruby}, Praha~1996.
        Pln� text knihy je k~dispozici v~elektronick� podob� na
        {\tt ftp://math.feld.cvut.cz/pub/olsak/tbn}. 468 stran.

\bib{2} Petr Ol��k: Program {\tt a2ac} -- manipulace s~fontem na �rovni
        PostScriptu. {\it Zpravodaj CSTUGu\/}, 1/96, strany~\hbox{23--30}.

\bib{3} Han The Thanh: Alternativn� v�stup programu \TeX{} -- PDF.
        {\it Zpravodaj CSTUGu}, 1/96, strany~\hbox{69--85}.


\bye

