
\appendix E. Ukázky z formátování této knížky
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\begall{\medskip\bgroup\offinterlineskip \topskip=4pt
   \hrule\vrules\nobreak\setverb \parskip=0pt
   \everypar{\vadjust{\penalty100}\hbox to0pt{\kern-\parindent
      \hbox to\hsize{\vrule\strut\hfil\vrule}\hss}}
   \def\par{\endgraf\leavevmode}
   \catcode`\"=12 \obeylines\reducebaseline
   \startverb}
{\catcode`\|=0 \catcode`\\=12
  |gdef|startverb#1\endall{%
        |eightt#1|endgraf|nobreak|vrules|hrule|egroup|medskip}}

Při formátování této knížky byl vstupní text rozdělen podle
kapitol do jednotlivých souborů {\tt t1.tex} až {\tt t12.tex}.
\TeX{} přitom zpracovával jeden hlavní soubor {\tt t.tex}, ze kterého se
jednotlivé \uv{kapitoly} volaly příkazem "\input". V~době psaní jedné
konkrétní kapitoly byly ostatní příkazy "\input" zakryté procentem, aby se
autor mohl zaměřit na zpracování jediné kapitoly.

V~hlavním souboru {\tt t.tex} jsou soustředěna veškerá makra potřebná pro
formátování této knížky. Výjimku tvoří jistá specializovaná makra řešící
nějaký efekt, který se vyskytuje v~jediné kapitole. Taková makra jsou
zařazena uvnitř kapitoly do místa, kde se efekt řeší.

Nejprve si ukážeme, jak je psán text jednotlivých kapitol. Například
začátek souboru {\tt t1.tex} vypadá takto:

%------------------------------------------------------------------------
\begall
\quotation By preparing a manuscript in \TeX\ format, you will be telling a
computer exactly how the manuscript is to be transformed into pages whose
typographic quality is comparable to that of the worlds finest printers;
yet you won't need to do much more work than would be involved if you were
simply typing the manuscript on a ordinary typewriter.\\
Donald Ervin Knuth: The \TeX book.

\title Začínáme
%%%%%%%%%%%%%%%

Kdesi daleko v~Americe žije pán, který patří mezi zakladatele počítačových
věd. Jmenuje se Donald Knuth a je profesorem na Stanfordské univerzitě.
Velmi známá a dodnes nepřekonaná je jeho učebnice programování
{\it The Art of Computer Programming\/}
[\ncite{Knuth:ACP73-1}, \ncite{Knuth:ACP69-2}, \ncite{Knuth:ACP73-3}],
na jejíž dalších dílech pan profesor stále pracuje.
První díly této učebnice vyšly před více než dvaceti lety.
Tehdy pan profesor nebyl zcela spokojen s~kvalitou a rychlostí sazby svých
knih  a rozhodl se udělat počítačový program, který by umožnil provést sazbu
na počítači. Traduje se, že tak vznikl program \TeX{}%
\footnote{Slovo \TeX{} se čte řecky $\scriptstyle\tau\epsilon\chi$, tedy
nikoli \uv{teks} ale \uv{tech}.}
 -- program na elektronickou sazbu. \endall
%-------------------------------------------------------------------------

Pro vytvoření citátu v~záhlaví byl použit příkaz "\quotation" a pro
titul kapitoly příkaz "\title".
%
Dále pro odkaz na literaturu byl použit příkaz "\ncite" a pro vytvoření
poznámky pod čarou příkaz "\footnote"\lb{footnote}.

Nyní si ukážeme ještě část textu, ve kterém se vyskytuje často používané
\uv{verbatim}\lb{verb} prostředí, uzavřené do rámečku. Například úvod
odstavce 6.1 byl zapsán v~souboru {\tt t6.tex} následovně:

%-----------------------------------------------------------------------
\begall
\sec Zavedení nového fontu
%%%%%%%%%%%%%%%%%%%%%%%%%%

Chceme-li použít nějaký nestandardní font, který není definován ve
formátu, můžeme použít primitivní příkaz "\font". Ukážeme si to na
příkladu. Tento příklad je třeba brát jako experimentální text;
v~žádném případě ne jako návod na to, jak by měly vypadat tištěné
dokumenty.

\begtt
  \font\tucny=csssbx10
  \font\vysoky=csdunh10
~
  Tady píšu písmem základního řezu (Roman),
  \it      zde jsem použil kurzívu, definovanou ve formátu (příkaz it),
  \vysoky  nyní píšu vysokým písmem, Které Vynikne U~Písmen Velké Abecedy,
  \tucny   teď používám polotučné písmo bez patek
  \rm      a nakonec zase základní řez.
  \bye
\endtt

\noindent Výsledek po zpracování dopadne takto:

\medskip\hrule
\line{\vrule\hss\vbox{\narrower\medskip
  \font\tucny=csssbx10
  \font\vysoky=csdunh10
  Tady píšu písmem základního řezu (Roman),
  \it      zde jsem použil kurzívu, definovanou ve formátu (příkaz~it),
  \vysoky  nyní píšu vysokým písmem, Které Vynikne U~Písmen Velké Abecedy,
  \tucny   teď používám polotučné písmo bez patek
  \rm      a nakonec zase základní řez.
\medskip}\hss\vrule}
\hrule\medskip \endall
%---------------------------------------------------------------------

Pro \uv{verbatim} prostředí byly použity dvojice příkazů
"\begtt" a "\endtt". Uvnitř tohoto prostředí je aktivní jen znak
{\tt\char126}, který udělá mezeru. Automatické doplňování vlnek za
předložky by totiž způsobilo, že se vlnky v~tomto prostředí vytisknou a to
by čtenáře zbytečně rušilo. Navíc nám tento znak pomůže vytvořit v~textu
prázdný řádek.

Všimneme si, že fonty, které jsou použity na jediném místě
v~dokumentu, jsou zavedeny až na místě a nikoli v~hlavním souboru {\tt
t.tex}.

Nyní si ukážeme obsah hlavního souboru {\tt t.tex}. V~komentářích je
stručně řečeno, co které makro řeší. Je třeba přiznat, že makra jsou často
jednoúčelová. Byla napsána pro formátování této knížky. Například nikde se
nepracuje s~nadpisem delším než jeden řádek. Berme proto následující ukázku
jen jako jedno z~možných rozšíření formátu plain\TeX{}, které si neklade
za cíl být obecně použitelné. Ukázka dokumentuje, že toto rozšíření může
být relativně přehledné a nemusí být příliš rozsáhlé. Přitom jsou zde
zahrnuta makra pro automatickou tvorbu obsahu, referencí a makra pro
verbatim prostředí.

{\catcode`\!=13  \def!#1.{\lb{#1}\char`\!#1.}
\expandafter\begall\input t
}

Všimneme si, že v~makrech pro titulky kapitol a sekcí byla snaha
dodržet řádkový rejstřík.\lb{radky}
Bohužel tento typografický ideál není v~této knize dotažen do
důsledku, protože často vkládané ukázky zdrojových textů jsou sázeny
osmibodovým písmem se zúženým řádkováním. Raději jsme dodrželi požadavek na
stejné mezery nad a pod ukázkou, než bychom se pouštěli do vyrovnávání
těchto mezer tak, aby další text byl znovu v řádkovém rejstříku bez ohledu
na počet řádků ukázky. Také v~některých dodatcích by požadavek na dodržení
řádkového rejstříku působil komplikace. Kdybychom sázeli beletrii, pak
je dodržení řádkového rejstříku podstatně snazší. Nakonec z~ukázek hotových
knížek, kam dáváme tuto zakázku tisknout, jsem pochopil, že snaha po
dodržení řádkového rejstříku pravděpodobně nebude mít cenu, protože knihař
nebude s~takovou přesností vázat jednotlivé stránky k~sobě.

Nyní se podrobněji podíváme na makra, která nějakým způsobem pracují
s~pomocnými soubory. Především se vytváří pomocný soubor pro obsah {\tt
t.toc}\lb{toc} (je-li přítomen příkaz "\maketoc") a soubor
referencí {\tt t.cit} (je-li přítomen příkaz "\makecit").
Pomocný soubor {\tt t.toc} se načítá v~místě příkazu "\heretoc" a vytvoří
se obsah. Poté se při zpracování jednotlivých kapitol aktualizuje.
Soubor {\tt t.cit} se načítá v~místě příkazu "\makecit". \uv{Vědomosti}
z~tohoto souboru jsou k~dispozici příkazům "\cite", které jsou použity
v~místě, kde se odkazujeme na literaturu. Při zpracování dodatku~D se soubor
{\tt t.cit} aktualizuje. 

Ukážeme si zpracování seznamu literatury\lb{bibmac}. Seznam literatury
je uložen v~souboru {\tt cites.tex}, přičemž tento soubor je
vytvořen Bib\TeX{}em. Vstupem pro Bib\TeX{} je soubor {\tt
cites.aux}, který má tento obsah:

%-----------------------------------------------------------------------
\begall
\bibdata{bulletin,ruzne,master,tugboat}
\bibstyle{is-pl-cz}

\citation{Abrahams:TI90}
\citation{Appelt:TF88}
\citation{Borde:TE92}
\citation{Borde:MTE93}
\citation{Clark:PTP92}
\citation{Doob:TS193}
... atd. další příkazy \citation \endall
%-------------------------------------------------------------------------

Vidíme, že hlavní část seznamu literatury byla generována ze
standardní databáze {\tt master} a {\tt tugboat} dostupné na síti. 
Pro účely této knížky byla pořízena databáze {\tt bulletin} a {\tt
ruzne}. Dále byl upraven stylový soubor {\tt is-plain.bst} pro české
citace na {\tt is-pl-cz.bst}.

Výstupní soubor po zpracování Bib\TeX{}em vypadal takto:

%-------------------------------------------------------------------------
\begall
\input bibnames.sty \input path.sty \hyphenation{Kath-ryn Ker-n-i-ghan Krom-mes
  Lar-ra-bee Pat-rick Port-able Post-Script Pren-tice Rich-ard Ro-bert Richt-er
  Sha-mos Spring-er The-o-dore Uz-ga-lis} \input tugboat.def
\begin{thebibliography}{100}

\bibitem{Adobe:docstruct-spec}
{Adobe PostScript Developer Support Group}.
\newblock {Document Structuring Conventions} specification, version 2.1.
\newblock Technical Report PN LPS5001, {Adobe Systems Incorporated}, 1585
  Charleston Road, P.~O. Box 7900, Mountain View, CA 94039-7900, USA, Tel:
  (415) 961-4400, January 16 1989.
\newblock Dostupné elektronicky z~\path|ps-file-server@adobe.com|
  pomocí e-mailu, příkaz {\tt send Documents \path|struct.ps.Zba|}. Na
  požadavek {\tt send Index} dojde kompletní rejsřík serveru.

\bibitem{Adobe:epsf-spec}
{Adobe PostScript Developer Support Group}.
\newblock {Encapsulated PostScript Files} specification version 2.0.
\newblock Technical Report PN LPS5002, Adobe Systems Incorporated,
  viz \cite{Adobe:docstruct-spec}, June 5 1989.
\newblock Dostupné elektronicky jako~\cite{Adobe:docstruct-spec} v~souboru
  {\tt EPSF.ps.Zba}.
... atd. další položky \bibitem

\end{thebibliography} \endall
%------------------------------------------------------------------------------

Abychom nenačítali soubory deklarované zde na začátku pomocí "\input" a
abychom ignorovali \LaTeX{}ovské ozdoby typu
"\begin{thebibliography}", bylo potřeba v~souboru {\tt ap-d.tex}
nejprve provést předefinování příkazu "\input" a dalších a pak teprve
načíst soubor {\tt cites.tex}. Soubor {\tt ap-d.tex} z~těchto důvodů
vypadá trošku komplikovaně:

%-------------------------------------------------------------------------
\begall
\appendix D. Literatura
%%%%%%%%%%%%%%%%%%%%%%%

V tomto dodatku je poměrně rozsáhlý soubor citací o \TeX{}u.
Na většinu těchto titulů jsme odkazovali v jednotlivých kapitolách
v odstavci \uv{náměty na další čtení}. Tam jsou tedy tituly seřazeny
tematicky, zatímco zde je máme abecedně.

\begingroup
\hbadness=1500
\let\oriinput=\input       % Uvnitř souboru cites.tex ignorujeme \input
\def\input#1 {} \def\begin#1#2{} \def\end#1{} \def\noopsort#1{}
\let\oricite=\cite
\def\cite#1{\if[#1\let\next=\removeparam
   \else\oricite{#1}\let\next=\relax\fi \next}
\def\removeparam#1]#2{\oricite{#2}}
\parindent=0pt \leftskip=2em
\def\bibitem#1{%
  \advance\numcite by 1
  \immediate\write\cit{\string\bibcite{#1}{\the\numcite}}
  \indent\llap{[\the\numcite]\enspace}\ignorespaces}
\def\newblock{\penalty-100\space}
\let\em=\it
\parskip=\medskipamount

\let\METAFONT=\mf  \let\MF=\mf      % Značky pro loga vypadají odlišně.
\def\path|#1|{{\tt #1}}
\def\FWEB{{\tt FWEB}} \def\WEB{{\tt WEB}}
\let\AMSTEX=\AMSTeX \let\AmSTeX=\AMSTeX
\def\Dash{---} \def\emdash{---}
\def\PiCTeX{PiC\TeX} \def\PiC{PiC} \def\BaSiX{BaSiX}
\let\sf=\relax \let\eightrm=\relax

\oriinput cites

\endgroup \endall
%------------------------------------------------------------------------

Nakonec si předvedeme ukázky z~textu v~tomto dodatku~E. Bylo definováno nové
\uv{verbatim} prostředí "\begall" -- "\endall", které navíc přepisuje
prázdné řádky a znak {\tt\char126} nechává jako obyčejný.
Začátek souboru {\tt app-e.tex} vypadá tedy takto:

{\catcode`\|=0 \catcode`\\=12
  |gdef|startverb#1\endtt{%
        |eightt#1|nobreak|vrules|hrule|egroup|medskip}}

%-----------------------------------------------------------------------
\begtt
\appendix E. Ukázky z formátování této knížky
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
~
\def\begall{\medskip\bgroup\offinterlineskip \topskip=4pt
   \hrule\vrules\nobreak\setverb \parskip=0pt
   \everypar{\vadjust{\penalty100}\hbox to0pt{\kern-\parindent
      \hbox to\hsize{\vrule\strut\hfil\vrule}\hss}}
   \def\par{\endgraf\leavevmode}
   \catcode`\"=12 \obeylines\reducebaseline
   \startverb}
{\catcode`\|=0 \catcode`\\=12
  |gdef|startverb#1\endall{%
        |eightt#1|endgraf|nobreak|vrules|hrule|egroup|medskip}}
~
Při formátování této knížky byl vstupní text rozdělen podle
... atd.
\endtt
%------------------------------------------------------------------

Ukázka obsahu souboru {\tt t.tex} byla do textu dodatku zavedena
následovně:

%-------------------------------------------------------------------
\begtt
Přitom jsou zde zahrnuta makra pro automatickou tvorbu
obsahu, referencí a makra pro verbatim prostředí.
~
{\catcode`\!=13  \def!#1.{\lb{#1}\char`\!#1.}
\expandafter\begall\input t
}
~
Všimneme si, že v~makrech pro titulky kapitol a sekcí byla snaha
... atd.
\endtt
%-------------------------------------------------------------------

Samozřejmě v~souboru {\tt t.tex} musí být za příkazem "\bye" uvedena ještě
sekvence "\endall". Trik s~"\expandafter" se používá pro načtení souboru ve
\uv{verbatim}\lb{verb} tvaru (například listingy programů).

Vykřičník je nastaven jako aktivní znak, protože potřebujeme do listingu
odkazovat. Například v rejstříku je u hesla \uv{uvozovky} odkaz na
stránky:~\pg{uv}. Tento seznam stránek byl vytvořen příkazem "\pg{uv}".
Tam, kde mluvíme o~uvozovkách, máme v~textu příkazy "\lb{uv}".
Jedná se o~značky pro křížové odkazy. Abychom mohli odkazovat na i~stranu,
kde je výpis souboru {\tt t.tex}, je potřeba do tohoto souboru psát místo
"\lb" něco jiného. Ve verbatim prostředí by totiž sekvence "\lb" neměla
žádný efekt~-- pouze by se obkreslila do výstupu. Píšeme tedy místo příkazu
"\lb{uv}" text {\tt !uv.} a činíme tak v oblasti komentáře, aby text neměl
žádný vliv při prvním čtení souboru {\tt t.tex}.


