% �l�nek pro CSTeX bulletin
% Program IMARK
%  Jan Kybic, �ervenec 1994
%  k�dov�n� �e�tiny Kamenick�ch, PlainTeX
%
%
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input plaina4           % nastav�me form�t str�nky na A4
\input czech.sty         % zapneme �e�tinu
%
% nyn� zavedeme n�kter� fonty - asi bude nutn� p�ed�lat
\font\title=csbx10 scaled \magstep4    % titulek
\font\secfont=csssi12                  % n�zvy sekc�
\font\sc=cscsc10                       % Small Caps pro logo LaTeXu
\font\sltt=cssltt10                    % Slanted Typewriter
                                       %  pro logo IMark
\font\sf=csss10                        % Sans Serif
%
% makra pro vytvo�en� ��slovan�ch nadpis� sekc�
\newcount\secnum
\secnum=1
\def\sec#1\par{\par\bigbreak
               \leftline{\secfont\the\secnum . #1}
               \advance\secnum by 1 \smallskip\noindent}
%
\def\LaTeX{{\rm L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em\TeX}}
\def\imark{{\sltt IMark}}
\def\bs{\char'134}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
% A tady za��n� vlastn� �l�nek
\rightline{\sl Jan Kybic}
\medskip\centerline{\title Program IMARK}
\medskip
\centerline{N�stroj usnad�uj�c� vytv��en� rejst��k� v~\TeX u~a
            \LaTeX u}
\sec �vod

Rejst��k je velmi d�le�it� a u�ite�n� ��st ka�d� v�deck� �i technick�
knihy. Umo��uje �ten��i velice rychle nal�zt ��danou informaci.
Bohu�el ale jen m�lo dnes vyd�van�ch knih rejst��k m�, nem�vaj� ho ani
knihy vytvo�en� na po��ta�i.

Zam���m se nyn� na dokumenty vys�zen� v~\TeX u~(��m� mysl�m i \LaTeX a
dal�� makra). U�ivatel� \LaTeX mohou vytv��et rejst��k relativn�
jednodu�e. Sta�� ozna�it ve zdrojov�m textu v�echna slova, kter� se v~n�m
maj� objevit. Po prvn�m pr�chodu \LaTeX em vznikne soubor {\tt idx},
kter� je nutn� programem {\tt makeindex} (nebo {\tt csindex}) p�ev�st na
soubor typu {\tt ind}. Po druh�m pr�chodu \LaTeX em se u� rejst��k
objev�  na sv�m m�st�. U�ivatel� Plain\TeX u~pou�ij� v~z�sad� stejn�
p��stup, pouze budou muset napsat n�kolik jednoduch�ch maker.

Bez ohledu na dal�� zpracov�n� je v�ak v�dy nutn� n�jak�m zp�sobem
ozna�it v�echna slova, kter� p�ijdou do rejst��ku. N�kte�� auto�i
doporu�uj� po naps�n� dokumentu ho cel� znovu proj�t a ru�n� ozna�it
ka�d� v�znamn� v�skyt kl��ov�ch slov a term�n�. Je to ov�em zdlouhav�
pr�ce a je zde riziko chyb a p�ehl�dnut�. Druh� p��stup je proto pou��t
k~ozna�ov�n� slov n�jak�m zp�sobem po��ta�. A~to byl d�vod k~naps�n�
programu \imark{}.

\sec Popis �innosti

\imark{} um� vytvo�it abecedn� se�azen� seznam slov ze zdrojov�ch text�
\TeX u. (Slovo se skl�d� z~jednoho �i v�ce p�smen). Je rovn�� mo�n�
vytvo�it jeden seznam z~mnoho zdrojov�ch soubor�, m�me-li nap��klad
ka�dou kapitolu knihy v~jednom souboru, ale rejst��k chceme m�t
spole�n�. Jeliko� vznikl� seznam b�v� opravdu rozs�hl�, je nutn� jej
ru�n� editovat. (Seznam je �ist� ASCII textov� soubor. Ka�d� ��dka
obsahuje jedno slovo.) V~seznamu ponech�me jen ta slova, kter� chceme
za�adit do rejst��ku. Pokud do ��dky v~seznamu nap��ete dv� slova, pak
bude \imark{} ve zdrojov�m textu vyhled�vat prvn� z~nich a druh� slovo
(zde je definice slova zobecn�na na libovoln� �et�zec omezen� mezerami)
se stane argumentem indexovac�ho p��kazu. T�mto zp�sobem lze ovlivnit
formu konkr�tn� polo�ky v~rejst��ku (nap�. zm�nit font) nebo pos�lat
informace programu {\tt makeindex}.

M�me-li p�ipraven� seznam slov pat��c�ch do rejst��ku, zavol�me \imark{}
je�t� jednou, ov�em s~jin�m p��kazem. \imark{} projde zdrojov� texty,
p�i�em� hled� slova ze seznamu. Pokud n�jak� najde, p�ip��e ze n�j
indexovac� p��kaz, co� je implicitn� {\tt \bs index}. Argumentem tohoto
makra je bu� nalezen� slovo samo, nebo druh� slovo na p��slu�n�m ��dku
v~seznamu slov, jak je zm�n�no v��e.

N�kdy bude nutn�  vznikl� zdrojov� text pro \TeX{} lehce upravit, pokud
nap��klad \imark{} um�st� p��kaz {\tt\bs index} do argumentu n�jak�ho
makra, nebo pokud chceme zahrnout do rejst��ku n�co, co \imark{}
nepova�uje za slovo. (\imark{} nap��klad neum� odm�tne zahrnout do
rejst��ku slovo \TeX{}, jeliko� {\tt\bs TeX} obsahuje `{\tt\bs}', co�
nen� p�smeno.) Takov� v�ci je nutn� ud�lat ru�n�. Pokud by to \imark{}
m�l um�t, bylo by nutn� pou��t mnohem slo�it�j��, a tedy i pomalej��
algoritmus.

A~z~tohoto bodu pokra�ujeme jako oby�ejn�. Spust�me nap�.  \LaTeX{},
potom {\tt makeindex} a jsme hotovi (skoro).

\sec Syntaxe

\leftline{{\tt IMARK} [p�ep�na�e] p��kaz seznam [zdrojov� soubory]}
\leftline{\indent  ( {\it seznam} je soubor obsahuj�c� seznam slov,
kter� maj� b�t ozna�eny ve {\it zdrojov�ch souborech} pro \TeX )}
\leftline{{\bf P�ep�na�e} (p�edch�z� jim `-' nebo `/'):}
\halign{\hskip\parindent\bf#\hfil\hskip 4em&#\hfil\cr
e  &   pou�ij anglick� �azen� (implicitn� je �esk�)\cr
c {\it cmd} & nastav indexovac� p��kaz na {\it cmd}
              (implicitn� {\tt index}) \cr
o~{\it ext} & nastav p��ponu v�stupn�ch soubor� na {\it ext}
              (implicitn� {\tt new})\cr}
\goodbreak
\leftline{\bf P��kazy:}
\halign{\hskip\parindent\bf#\hfil\hskip 4em&#\hfil\cr
h  &    zobraz n�pov�du (anglicky) \cr
b  &    vytvo� nov� seznam ze slov obsa�en�ch ve zdrojov�ch souborech \cr
a  &    p�idej do seznamu slova obsa�en� ve zdrojov�ch souborech \cr
m  &    ozna� slova ze seznamu ve zdrojov�ch souborech\cr
   &    \it\ (pro nov� verze soubor� pou�ije p��ponu a indexovac�
        p��kaz nastaven� pomoc� p�ep�na��)\cr
}

\sec P��klad

Cel� proces ilustrujeme n�sleduj�c�m p��kladem. M�jme zdrojov� text pro
\LaTeX{} nazvan� {\tt test.tex}:
\def\unactivate{\catcode`\{=12 \catcode`\}=12}
\begingroup\tt \medskip\raggedright\obeylines
\unactivate
\bs documentstyle{article}
\bs begin{document}
Pro animaci je pou�ita spline interpolace.
\bs end{document}
\endgroup
\medskip\noindent
Zavol�me-li \imark{} na tento soubor ({\tt IMARK b test test}),
dostaneme  soubor {\tt test.lw} se seznamem slov:
\begingroup\tt \medskip\raggedright\obeylines
\unactivate
\% List of words for IMARK, (C) Jan Kybic 1993
animaci
article   
begin   
document   
interpolace
je
pou�ita
spline   
Pro
\% End of the list
\endgroup
\medskip\noindent
Tento soubor ru�n� uprav�me na tvar:
\begingroup\tt \medskip\raggedright\obeylines
\unactivate
\% List of words for IMARK, (C) Jan Kybic 1993
animaci      animace
interpolace
pou�ita
spline       interpolace!spline
\% End of the list
\endgroup
\medskip\noindent
Je�t� jednou zavol�me \imark{} ({\tt IMARK m test test})
a ten vytvo�� ze souboru {\tt test.tex} soubor {\tt test.new}:
\begingroup\tt \medskip\raggedright\obeylines
\unactivate
\bs documentstyle{article}
\bs begin{document}
Pro animaci\bs index{animace} je pou�ita\bs index{pou�ita}
spline\bs index{interpolation!spline} interpolace\bs index{interpolace}.
\bs end{document}
\endgroup
\medskip\noindent
A~je to !

\sec Podpora �e�tiny


\imark{} pou��v� implicitn� �esk� t��d�n� (anglick� zapneme pomoc�
{\tt -e}). T��d�n� je dvoupr�chodov�, v~sou�asn� verzi �ad�m velk�
p�smena a� za mal�, pokud by to n�komu vadilo, sta�� ve zdrojov�m textu
p�epsat jedinou tabulku ({\tt cstab} v~modulu {\tt csort.cpp}).
Stejnou tabulku je nutn� p�epsat, chceme-li pou��t jin� k�dov�n� ne�
Kamenick�ch.
V~t�to souvislosti je nutn� upozornit je�t� na jednu vlastnost programu
\imark{} (dod�v�m, �e stejn� �myslnou jako ta p�edchoz�)  --- za��n�-li
slovo velk�m p�smenem, nap�. na za��tku v�ty, nevid� \imark{} ��dnou
souvislost s~t�m� slovem za��naj�c�m mal�m p�smenem.

\sec Program�torsk� pozn�mky

\imark{} byl naps�n v~Borland~C++ verze 2.0. Tvo�� ho asi 600
��dek zdrojov�ho textu (26~kB). Objektov� p��stup byl pou�it v~maxim�ln�
m��e. Program pou��v� objektovou knihovnu CLASSLIB, kter� poskytuje
mnoho z�kladn�ch algoritm� pro pr�ce s~daty. Nen� ov�em naprogramov�na
p��li� efektivn�, a proto bylo nutn� v~kone�n� verzi n�kter� algoritmy
p�epsat, co� v�ak d�ky objektovosti nebylo obt��n�.
P�ipou�t�m, �e v�sledn� program nen� tak mal� a rychl�, jako by mohl
b�t vzhledem k~re�ii p�i pr�ci s~objekty, ale --- n�co za n�co.

Rutiny �esk�ho t��d�n� jsou obsa�eny v~jedin�m modulu a daj� se proto
pou��t i v~jin�ch programech.

\sec Z�v�r

Program lze z�skat pomoc� anonymous ftp z~{\tt ftp.muni.cz} --- je tam
ulo�en v~souboru {\tt imark.zip}, co� je zdrojov� text, dokumentace
a spustiteln� MSDOS {\tt imark.exe} soubor, v�e zabalen� PKZIP{\sl em\/}.
P�enos pod UNIX asi nebude jednoduch�, bylo by nutn� bu� p�epsat nebo
p�en�st knihovnu CLASSLIB. Pod \hbox{UNIX}em v�ak existuj� mocn� n�stroje, ze
kter�ch se d� n�co podobn�ho jako \imark{} zbastlit. Pokud by byl p�esto
z�jem, jsem ochoten se o~konverzi pod UNIX �asem pokusit.

Program d�v�m k~dispozici jako {\it public domain\/} a v���m, �e bude
n�komu u�ite�n�. Uv�t�m samoz�ejm� jak�koli p�ipom�nky, n�vrhy na zlep�en�
a opraven� chyb. Pokud pou�ijete m�j n�pad nebo zdrojov� text jako
z�klad va�eho programu, kter� bude jak�mkoli zp�sobem lep��, ne�
\imark{}, dejte mi pros�m v�d�t.

\sec Literatura

\halign{[#]\hfil\ \ & \sl # \hfil & # \hfil \cr
1& Lamport Leslie & MakeIndex: An Index Processor for \LaTeX \cr
2& & Dokumentace k~programu MakeIndex \cr
3& W�gner Zde�ek & CsIndex v.2.11 -
   �esk�/Slovensk� implementace MakeIndexu\cr
4& W�gner Zde�ek & Tvorba rejst��ku,
Zpravodaj {\sf CsTUG}u 4/92\cr}

\medskip
\rightline{\vbox{\halign{#\hfil\cr
Jan Kybic\cr
Proseck� 681\cr
\llap{190 00 }Praha 9\cr
\noalign{\smallskip}
\tt\llap{e-mail: }kybic@earn.cvut.cz\cr
\tt kybic@csearn.bitnet\cr}}}
\bye
% Konec �l�nku
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


