diff options
author | Karl Berry <karl@freefriends.org> | 2012-12-21 17:17:30 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-12-21 17:17:30 +0000 |
commit | 2257828845c52e3a8b6becfa850d1eafdf6f20e5 (patch) | |
tree | e2b67b1c091e49fe54a1a551823339974ca31410 | |
parent | 99eb8d14f7469f1d9a1c7edc39c573ccaa36dc44 (diff) |
new doc package cstex (20dec12)
git-svn-id: svn://tug.org/texlive/trunk@28595 c570f23f-e606-0410-a88d-b1316a301751
37 files changed, 10421 insertions, 6 deletions
diff --git a/Master/texmf-dist/doc/cstex/00-README-cslatex b/Master/texmf-dist/doc/cstex/00-README-cslatex new file mode 100644 index 00000000000..900105f5928 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/00-README-cslatex @@ -0,0 +1,23 @@ + +The CSLaTeX package is obsolete and it will be maintained no more. +This is our decision discussed on the CSTeX list + + https://groups.google.com/forum/?fromgroups#!forum/cz.comp.cstex + +in October 2012. + +The last two changes was done by Petr Olsak in Oct.2012. + +1) in cslatex.ini file: The cslatex.fmt is generated as usual but there + is one difference. The \everyjob gives the following message: + + ***** WARNING ******** CSLaTeX is obsolete, don't use it please ***** + ***** You can use ``normal'' LaTeX+Babel or XeLaTeX+polyglossia ***** + +2) The files czech.sty and slovak.sty are obsolete too. But they was moved + from csplain package to their right place: to the cslatex package. + +3) The cslatex files from cspsfonts.tar.gz was moved to cslatex.tar.gz + +That's all. + diff --git a/Master/texmf-dist/doc/cstex/INSTALL.cslatex b/Master/texmf-dist/doc/cstex/INSTALL.cslatex new file mode 100644 index 00000000000..19695bb86cc --- /dev/null +++ b/Master/texmf-dist/doc/cstex/INSTALL.cslatex @@ -0,0 +1,35 @@ +CSLaTeX 2e +---------- + +Toto je LaTeX2e z jna 1997 upraven pro eskou a slovenskou +sazbu. Vznikl pizpsobenm starch verz autor Jiho Zlatuky a +Zdeka Wagnera. + +Posledn poetn provedl pan Jaroslav Snajdr, viz +http://home.zcu.cz/~snajdr5/cslatex. + +Pebalen do taru s ji docstipovanmi soubory pro UNIX provedl +Petr Olk. + +Tar cslatex-01-98.tar obsahuje jednak plnou verzi LaTeXu 2e datovanou +k prosinci 1997, dle balk tools a graphics. Ve je ji po +"rozbalen" programem docstrip pipraveno pmo k provozu. Proto je +instalace jednoduch: + +INSTALACE +--------- + +0. Je poteba mt instalovn tex, csplain, ltfonts a csfonty. + +1. Rozbalte tar do adrese, ve kterm mte texmf (v teTeXu mezi prvnm a + druhm texmf) + +2. cd texmf/web2c + +3. initex cslatex.ini + +Ped i po bodu 3 je vhodn aktualizovat databzi ls-R, napklad +pkazem MakeTeXls-R. + + + diff --git a/Master/texmf-dist/doc/cstex/README-csplain b/Master/texmf-dist/doc/cstex/README-csplain new file mode 100644 index 00000000000..1650145e965 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/README-csplain @@ -0,0 +1,4 @@ +The documentation of csplain is on the site + + http://petr.olsak.net/csplain.html + diff --git a/Master/texmf-dist/doc/cstex/README-cspsfont b/Master/texmf-dist/doc/cstex/README-cspsfont new file mode 100644 index 00000000000..323cceed417 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/README-cspsfont @@ -0,0 +1,55 @@ + + Informace o balíku cspsfont + %%%%%%%%%%%%%%%%%%%%%%%%%%% + 23. 11. 1995 Petr Olšák + 5. 1. 1996 Zdeněk Wagner + 20. 10. 2012 Petr Olšák + +Dokumentace k tomto balíku je v souboru cstexman.pdf v kapitole třetí. + +Dokumentaci k LaTeXové části tohoto balíku získáte pomocí latex +cspsfont.drv, ovšem je to dokumentace z roku 1996, která se týká +CSLaTeXu. To považujeme za zastaralé. + +Historie +%%%%%%%% + +říjen 2012 - Přegenerovány metriky podle URW metrik. + - Přidány znaky Euro, TM, registered a další (viz cstexman.pdf). + - Přidán soubor chars-8z.tex pro csplain. + - Soubory ctimes.tex a jim podobné volají chars-8z.tex. + - Aktualizována dokumenace. + - Přidány *8z.vf a *8z.tfm rodiny Charter + +24. 3. 1999: POZOR! Pro šest fontů pcrb8t, pcrbc8t, pcrbo8t, pcrr8t, pcrrc8t + a pcrro8t jsme museli změnit názvy na *8u, takže nyní se + správně jmenují: pcrb8u, pcrbc8u, pcrbo8u, pcrr8u, + pcrrc8u a pcrro8u. Důvod: Názvy *8t byly v konfliktu se + stejnými názvy používanými v LaTeXu v kódování T1. + Nebude-li vám tedy fungovat čeština v rodině Courier, + nezapomeňte změnit svá makra, která obsahují konfliktní + názvy *8t. + +5. 1. 1996 Přegenerovány metriky Z. Wagnerem a přidána podpora pro + CSLaTeX. + +23. 11. 1995 Vytvořeny metriky a makra pro csplain. + + +Copyright +%%%%%%%%% + +Tento balík patří mezi volně šířený software; můžete +jej dále distribuovat anebo modifikovat za podmínek GNU General Public +License, jak ji publikovala Free Software Foundation; buď ve verzi 2 +této licence nebo (podle Vaší volby) v libovolné pozdější verzi. + +Tento software je distribuován s přáním, aby byl užitečný, ale BEZ +ŽÁDNÉ ZÁRUKY. Viz GNU General Public License. + +Anglický originál GNU General Publics License najdete v distribuci +CSTeXu a mnoha dalších volně šířených programů. Můžete si též o něj +napsat na adresu Free Software Foundation, Inc., 59 Temple Place, +Suite 330, Boston, MA 02111-1307 USA + + diff --git a/Master/texmf-dist/doc/cstex/README-doc b/Master/texmf-dist/doc/cstex/README-doc new file mode 100644 index 00000000000..0b99758a0a0 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/README-doc @@ -0,0 +1,30 @@ +V tomto adresari jsou ulozeny ceske preklady (a do budoucna mozna i +puvodni texty) nekterych prirucek o TeXu. Tyto dokumenty jsou +vystaveny ve zdrojove forme v kodovani ISO-8859-2, pokud neni receno jinak. + +cstexman.tex, cstexman.ps, cstexman.pdf + Manual k CSTeXu -- referencni manual. Petr Olsak (2002, 2012) +prvni.tex, prvni.ps, prvni.pdf + Prvni seznameni s TeXem. Petr Olsak (1999) +parpozn.tex, parpozn.ps, parpozn.pdf + Par poznamek k CSTeXu -- zastaraly dokument z roku 1996 +csuvodlat.tar.gz + Uvod do LaTeXu (2.09). H. Partl, E. Schlegl and I. Hyna (1987-1990) + Preklad: P. Sykora (1992) +uvodlat.zip + Totez, ale v DOSovem formatu koncu radku a v kodovani Kamenickych. +jemny.tar.gz + Jemny uvod do TeXu (plainu). Michael Doob + Preklad: Josef Danes a Jiri Vesely +jemny.zip + Totez, ale v DOSovem formatu koncu radku a v kodovani CP852. +jemny.errata + ERRATA vyse zmineneho dokumentu +lshort-0.9beta-cz.tgz + Ne prilis strucny uvod do systemu LaTeX2e. Tobias Oetiker + Preklad: Michal Kocer +lshort2e-0.9beta-cz.ps.gz, lshortps.zip + Totez v PostScriptovem formatu +lshort09.zip + Totez, ale v DOSovem formatu koncu radku a v kodovani CP852. + diff --git a/Master/texmf-dist/doc/cstex/README-opmac b/Master/texmf-dist/doc/cstex/README-opmac new file mode 100644 index 00000000000..53632ef9a14 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/README-opmac @@ -0,0 +1,7 @@ +The documentation of the OPmac is: + +opmac-u.tex,pdf ... user documentation (in Czech) +opamc-d.tex,pdf ... technical documentation (in Czech) + +See http://petr.olsak.net/opmac.html for more information. + diff --git a/Master/texmf-dist/doc/cstex/README.cslatex b/Master/texmf-dist/doc/cstex/README.cslatex new file mode 100644 index 00000000000..17acb5b46a7 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/README.cslatex @@ -0,0 +1,211 @@ +CSLaTeX --- pravy LaTeXu 2e pro eskou a slovenskou sazbu + Verze pro LaTeX z prosince '96 +========================================================== +28.10.1997 Jaroslav najdr + +CSLaTeX je sada konfiguranch soubor pro LaTeX2e, kter umouj v +tomto systmu pipravovat esk a slovensk dokumenty. Balk je +distribuovn (jak je u LaTeXu zvykem) v souboru cslatex.dtx, kter +obsahuje pslun makra i s dkladnou dokumentac. Soubor cslatex.ins +je dvka pro program docstrip, kter z dtx zdroje vygeneruje vlastn +soubory. + +Instalace +--------- + +(jednodu postup instalace z balku cslatex-10-97.tar, viz INSTALL.cslatex) + +Pro instalaci potebujete (krom TeXu): + +o CS-fonty. + +o esk a slovensk vzory dlen czhyphen.tex a skhyphen.tex. Jsou + soust csplainu. + +o LaTeXov "obrzkov" fonty lasy, lcircle a line. + +o Originln LaTeX2e. Distribun soubory jsou k nalezen na CTANu v + adresi /tex-archive/macros/latex/base/. + +Pokud toto vechno mte, mete zat instalovat: + +o Smate (zazlohujte) starou verzi LaTeXu. POZOR! Toto se netk + podprnch balk, nap. graphics, tools nebo psnfss. Jejich + upgrade (je-li k dispozici novj verze) je samostatnou zleitost + a nen bezpodmnen nutn. Pokud mte nainstalovanou star verzi + CSLaTeXu, mly by zmizet adrese texmf/tex/latex/cslatex, input a + src. Mte-li v adresi input nkter styly, kter nejsou standardn + soust LaTeXu (nap. a4, a4wide, fancyhdr), vytvote adres + texmf/tex/latex/misc a pesute je tam. + +o Pokud v TeX pouv ke hledn v adresovm stromu hashovac + soubor (nap. v teTeXu ls-R), nechte ho znovu vytvoit, aby se + projevily proveden zmny -- smazan soubory. V teTeXu k tomuto + slou pkaz texhash. + +o Vytvote si nkde v /tmp doasn adres, do kterho zkoprujete + distribun soubory LaTeXu a CSLaTeXov soubory cslatex.dtx a + cslatex.ins. + +o V tomto adresi rozbalte distribuci LaTeXu pkazy "initex + unpack.ins" a "initex cslatex.ins". + +o V normln konfiguraci pouv LaTeX v kdovn T1 dc-fonty. Mte-li + novj ec-fonty, vytvote pslun upraven definin soubory + pkazem "initex ec.ins". Tento krok mus nsledovat a PO + zpracovn unpack.ins. + +o Vytvote formt LaTeX pkazem "initex latex.ltx". + +Nyn mme v naem adresi 266 soubor, z nich ty potebn pesuneme +na pslun msta do adresov struktury TeXu: + +o Soubor latex.fmt pesute do adrese s formty -- v teTeXu + texmf/web2c. + +o Konfiguran soubory pro etinu pesuneme do adrese + texmf/tex/latex/cslatex. Jsou to tyto: + + fonttext.cfg + hyphen.cfg + il2enc.def + il2*.fd + lczech.sty + lslovak.sty + +o Do adrese texmf/tex/latex/input dme vstupn soubory LaTeXu: + + docstrip.tex + *.cls + *.clo + *.sty + *.fd + *.ist + *.def + *.cfg + +o Zdrojov soubory LaTeXu + + fontmath.ltx + fonttext.ltx + hyphen.ltx + latex.ltx + ltpatch.ltx + preload.ltx + +nejsou teba pro normln prci, ale budeme je potebovat, pokud +chceme vygenerovat znovu formt. Tento ppad me nastat, kdy budeme +do LaTeXu pidvat nov vzory dlen, nebo kdy si fmt soubor prost +omylem smaeme. Proto je pesuneme do adrese /texmf/tex/latex/src. + +Ostatn soubory nebudeme potebovat, proto je meme smazat. + +Vygenerujeme hashovac soubor pro TeX pkazem "texhash" +(teTeX). LaTeX je nainstalovn a meme ho otestovat na njakm +krtkm dokumentku. + + +Konfigurace dlen slov +----------------------- + +Konfiguran pkazy se nachzej v souboru cslatex/hyphen.cfg. +Pslun st souboru je viditeln ohraniena komentovmi +dkami. K zaveden vzor dlen slou pkaz + + \DeclareLanguage[seznam kdovn]{jmno pkazu zapnut vzor}% + {jmno souboru se vzory a vjimkami}% + {\lefthyphenmin=slo \righthyphenmin=slo + \@requesthyphens <nebo> \@splitrequestedfalse} + +Vzory dlen naten s \@requesthyphens um vyuvat funkci penen +pomlky pi dlen (viz ne). + +Implicitn je zavedena americk anglitina, etina a sloventina v +kdovn IL2. Pro zaveden etiny v IL2 i T1 pouijte: + + \DeclareLanguage[IL2,T1]{\czech}{czhyphen.tex}% + {\lefthyphenmin=2 \righthyphenmin=3 + \@requesthyphens}% + +V bnm TeXu me bt maximln 4 a 5 vzor najednou -- vc se do +jeho pamti nevejde. + + +Styl czech.sty/slovak.sty +------------------------- + +Bez zaveden tohoto stylu se CSLaTeX chov jako normln LaTeX a +pouv cm-fonty bez eskch znak. + +Pomocn styl zavedeme pomoc + + \usepackage[parametry]{czech} +pop. + \usepackage[paremetry]{slovak} + +Parametry mou bt: + +T1 + Cork kdovn. Budou se pouvat dc(ec) fonty. Aby se sprvn + dlila slova, mus bt vzory dlen nataeny tak pro T1 (viz + ve). Bez tohoto parametru je pouito kdovn IL2. + +split + Zapn penen pomlky pi dlen slov typu propan- + -butan. Tato vlastnost funguje skoro bez problm -- vjimkou + je pouit `-' jako minus v sle, kter te TeX v + horizontlnm mdu (tak bv zadvno nap. \looseness=-1); v + tchto ppadech je pi zapnutm penen dltka mon + napsat \minus. + +nosplit + Vypn penen pomlky. To je tak implicitn chovn. + +nocaptions + Nebudou pedefinovny texty vkldan LaTeXem jako "Kapitola" + nebo "Obsah". Zstanou tedy pvodn "Chapter" nebo "Contents". + +olduv + Pkaz \uv je (nov) definovn tak, e zajist sprvn kerning + kolem uvozovek, ale uvnit jeho argumentu nelze pout pkaz + \verb. Pouitm volby olduv dostaneme starou definici, kter + se chovala pesn obrcen -- patn kerning, lze pout \verb. + Oba tyto poadavky se navzjem vyluuj a nikdo dosud + nevymyslel een, kde by fungovalo oboj najednou. + +Volba 'cstex', kter umoovala pouvn pkaz \csprimeson/off, +byla zruena a tyto pkazy lze pouvat rovnou. Kvli zptn +kompatibilit je stle deklarovna, ale vbec nic nedl -- jej +pouit pouze nezpsob chybu. + +Pkazy definovan ve stylu czech/slovak.sty +-------------------------------------------- + +\dateczech + Pkaz \today expanduje na esk datum, nap. 30. srpna 1977. + +\dateslovak + Slovensk datum, nap. 30. augusta 1977. + +\dateUSenglish + Americk \today, nap. August 30th, 1977. + +\dateenglish + Britsk \today, nap. 30th August 1977. + +\captionsczech + esk captions -- Pedmluva, Tabulka. + +\captionsslovak + Slovensk captions -- Predhovor, Tabuka. + +\captionsenglish + Anglick captions -- Preface, Table. + +\csprimeson, \csprimesoff + ``Anglick'' uvozovky se (ne)budou szet jako esk 99 66. + +\cstieon, \cstieoff + Pedefinuje vlnku ~, aby se v mat. mdu (ne)szela mezera. + +-- diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/README b/Master/texmf-dist/doc/cstex/cspsfonts-gen/README new file mode 100644 index 00000000000..9225b898141 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/README @@ -0,0 +1,12 @@ +Font generation tools of cspsfonts +---------------------------------- +Petr Olsak, 2012 + +The script fontgen was used to generate the metrics of cspsfonts pckage. +The script mkf generates one ``normal'' metrics. +The script mkc generates one ``Caps&SmalCaps'' metrics. + +The program kenroff removes small (invisible) kerns form AFM metric in order +to do the tfm more simple. The kerns smaller then 9/1000 of font size was +removed. + diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/fontgen b/Master/texmf-dist/doc/cstex/cspsfonts-gen/fontgen new file mode 100755 index 00000000000..0a35ae76c85 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/fontgen @@ -0,0 +1,72 @@ +# mkfc command have to preceede the mkf command with the same metric name +# because mkfc makes the raw metrics (and deletes it) and after then the mkf +# command makes the fine metrics with kerns and ligatures used by TeX. + +export AFMDIR="/usr/share/texmf-dist/fonts/afm/urw/*" + +./mkfc ptmr8z ptmrc8z xl2.enc utmr8a.afm +./mkfc ptmb8z ptmbc8z xl2.enc utmb8a.afm + +./mkf ptmr8z xl2.enc utmr8a.afm +./mkf ptmb8z xl2.enc utmb8a.afm +./mkf ptmri8z xl2.enc utmri8a.afm +./mkf ptmbi8z xl2.enc utmbi8a.afm + +./mkfc pagk8z pagkc8z xl2.enc uagk8a.afm +./mkfc pagd8z pagdc8z xl2.enc uagd8a.afm + +./mkf pagk8z xl2.enc uagk8a.afm +./mkf pagko8z xl2.enc uagko8a.afm +./mkf pagd8z xl2.enc uagd8a.afm +./mkf pagdo8z xl2.enc uagdo8a.afm + +./mkfc pbkd8z pbkdc8z xl2.enc ubkd8a.afm +./mkfc pbkl8z pbklc8z xl2.enc ubkl8a.afm + +./mkf pbkd8z xl2.enc ubkd8a.afm +./mkf pbkdi8z xl2.enc ubkdi8a.afm +./mkf pbkl8z xl2.enc ubkl8a.afm +./mkf pbkli8z xl2.enc ubkli8a.afm + +./mkfc pcrb8u pcrbc8u xt2.enc ucrb8a.afm +./mkfc pcrr8u pcrrc8u xt2.enc ucrr8a.afm + +./mkf pcrb8u xt2.enc ucrb8a.afm +./mkf pcrbo8u xt2.enc ucrbo8a.afm +./mkf pcrro8u xt2.enc ucrro8a.afm +./mkf pcrr8u xt2.enc ucrr8a.afm + +./mkfc pncb8z pncbc8z xl2.enc uncb8a.afm +./mkfc pncr8z pncrc8z xl2.enc uncr8a.afm + +./mkf pncb8z xl2.enc uncb8a.afm +./mkf pncbi8z xl2.enc uncbi8a.afm +./mkf pncri8z xl2.enc uncri8a.afm +./mkf pncr8z xl2.enc uncr8a.afm + +./mkfc phvb8z phvbc8z xl2.enc uhvb8a.afm +./mkfc phvr8z phvrc8z xl2.enc uhvr8a.afm + +./mkf phvb8z xl2.enc uhvb8a.afm +./mkf phvbo8z xl2.enc uhvbo8a.afm +./mkf phvro8z xl2.enc uhvro8a.afm +./mkf phvr8z xl2.enc uhvr8a.afm + +./mkfc phvbn8z phvbnc8z xl2.enc uhvb8ac.afm +./mkfc phvrn8z phvrnc8z xl2.enc uhvr8ac.afm + +./mkf phvbn8z xl2.enc uhvb8ac.afm +./mkf phvbon8z xl2.enc uhvbo8ac.afm +./mkf phvrn8z xl2.enc uhvr8ac.afm +./mkf phvron8z xl2.enc uhvro8ac.afm + +./mkfc pplr8z pplrc8z xl2.enc uplr8a.afm +./mkfc pplb8z pplbc8z xl2.enc uplb8a.afm + +./mkf pplbi8z xl2.enc uplbi8a.afm +./mkf pplri8z xl2.enc uplri8a.afm +./mkf pplr8z xl2.enc uplr8a.afm +./mkf pplb8z xl2.enc uplb8a.afm + +./mkf pzcmi8z xl2.enc uzcmi8a.afm + diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/kernoff.c b/Master/texmf-dist/doc/cstex/cspsfonts-gen/kernoff.c new file mode 100644 index 00000000000..45bdbb5810b --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/kernoff.c @@ -0,0 +1,45 @@ +/* This program removes kerns smaller then KERNLIMIT from AFM file + Petr Olsak, 2012 + input AFM file = stdin, output = stdout, no parameters */ + + +#include <stdio.h> + +#define KERNLIMIT 9 + +char line[500]; + +int mygets(char *s, int num) +{ + int c, i; + if ((c=fgetc(stdin))==EOF) return EOF; + if (c=='\n') return s[0] = 0; + s[0] = c; i=1; + while (1) { + if (i>=num) { + fprintf (stderr, "line is too long\n"); + s[num-1] = 0; + return; + } + if ((c=fgetc(stdin))==EOF) return s[i] = 0; + if (c=='\n') return s[i] = 0; + s[i++]=c; + } +} + +int main(int argc, char *argv[]) +{ + int i, v; + while (1) { + if (mygets(line,500)==EOF) return 0; + v=100; + if (line[0]=='K' && line[1]=='P' && line[2]=='X' && line[3]==' ') { + i = 4; + while (line[i]!=' ') i++; + i++; + while (line[i]!=' ') i++; + v = atoi(&line[i]); + } + if (v>KERNLIMIT || v<-KERNLIMIT) printf("%s\n", line); + } +} diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/mkf b/Master/texmf-dist/doc/cstex/cspsfonts-gen/mkf new file mode 100755 index 00000000000..f05e423bd7c --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/mkf @@ -0,0 +1,9 @@ +#!/bin/bash + +echo $1 $2 +cat $AFMDIR/$3 | ./kernoff > $3 +afm2tfm $3 -T $2 -v $1 $1.tfm +rm $1.tfm +vptovf $1 +rm $1.vpl $1.vf + diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/mkfc b/Master/texmf-dist/doc/cstex/cspsfonts-gen/mkfc new file mode 100755 index 00000000000..f0d9664389e --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/mkfc @@ -0,0 +1,9 @@ +#!/bin/bash + +echo $1 $2 $3 +cat $AFMDIR/$4 | ./kernoff > $4 +afm2tfm $4 -T $3 -V $2 $1.tfm +rm $1-c.tfm +vptovf $2 +rm $2.vpl + diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/xl2.enc b/Master/texmf-dist/doc/cstex/cspsfonts-gen/xl2.enc new file mode 100644 index 00000000000..e13e0f2e18b --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/xl2.enc @@ -0,0 +1,332 @@ +% @psencodingfile{ +% author = "Petr Olsak, Zdenek Wagner", +% date = "19oct12", +% filename = "xl2.enc", +% license = "public domain", +% email = "tex-fonts@tug.org", +% codetable = "ISO/ASCII", +% docstring = " +% some of our (CSTUG- czech TeX Users Group) users want to support +% 8bit font coding such that: +% -- lower 7bit is exactly OT1 (but with differences imposed +% by DEK -- e.g. layout of cmr is different from cmtt) +% -- upper part is taken from ISO-Latin 2 (iso 8859-2), +% but some of empty positions are filled with useful characters +% usually available in type-1 font (permill sign etc.) +% " +% } +% +% 19oct12 - added: /Euro, /trademark, /copyright, /registered +% /guilsinglleft/right, /quotesinglbase, /quoteleft. +% fi and ff LIGKERN's added. (Petr Olsak) +% 27aug05 - record Petr Olsak and Zdenek Wagner as the authors. +% 12jun05 - remove Texinfo @'s from LIGKERN's. +% +/XL2encoding [ +%%%%% '000 = "00 + /Gamma + /Delta + /Theta + /Lambda + /Xi + /Pi + /Sigma + /Upsilon +%%%%% '010 = "08 + /Phi + /Psi + /Omega + /ff + /fi + /fl + /ffi + /ffl +%%%%% '020 = "10 + /dotlessi + /dotlessj + /grave + /acute + /caron + /breve + /macron + /ring +%%%%% '030 = "18 + /cedilla + /germandbls + /ae + /oe + /oslash + /AE + /OE + /Oslash +%%%%% '040 = "20 + /.notdef + /exclam + /quotedblright + /numbersign + /dollar + /percent + /ampersand + /quoteright +%%%%% '050 = "28 + /parenleft + /parenright + /asterisk + /plus + /comma + /hyphen + /period + /slash +%%%%% '060 = "30 + /zero + /one + /two + /three + /four + /five + /six + /seven +%%%%% '070 = "38 + /eight + /nine + /colon + /semicolon + /exclamdown + /equal + /questiondown + /question +%%%%% '100 = "40 + /at + /A + /B + /C + /D + /E + /F + /G +%%%%% '110 = "48 + /H + /I + /J + /K + /L + /M + /N + /O +%%%%% '120 = "50 + /P + /Q + /R + /S + /T + /U + /V + /W +%%%%% '130 = "58 + /X + /Y + /Z + /bracketleft + /quotedblleft + /bracketright + /circumflex + /dotaccent +%%%%% '140 = "60 + /quoteleft + /a + /b + /c + /d + /e + /f + /g +%%%%% '150 = "68 + /h + /i + /j + /k + /l + /m + /n + /o +%%%%% '160 = "70 + /p + /q + /r + /s + /t + /u + /v + /w +%%%%% '170 = "78 + /x + /y + /z + /endash + /emdash + /hungarumlaut + /tilde + /dieresis +%%%%% '200 = "80 + /ellipsis + /dagger + /daggerdbl + /bullet + /sterling + /paragraph + /Euro + /.notdef +%%%%% '210 = "88 + /trademark + /copyright + /registered + /.notdef + /.notdef + /perthousand + /guilsinglleft + /guilsinglright +%%%%% '220 = "90 + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef +%%%%% '230 = "98 + /Agrave + /.notdef + /quotesinglbase + /quoteleft + /hyphen + /ogonek + /guillemotleft + /guillemotright +%%%%% '240 = "A0 + /.notdef + /Aogonek + /breve + /Lslash + /currency + /Lcaron + /Sacute + /section +%%%%% '250 = "A8 + /dieresis + /Scaron + /Scedilla + /Tcaron + /Zacute + /.notdef + /Zcaron + /Zdotaccent +%%%%% '260 = "B0 + /ring + /aogonek + /cedilla + /lslash + /acute + /lcaron + /sacute + /caron +%%%%% '270 = "B8 + /agrave + /scaron + /scedilla + /tcaron + /zacute + /hungarumlaut + /zcaron + /zdotaccent +%%%%% '300 = "C0 + /Racute + /Aacute + /Acircumflex + /Abreve + /Adieresis + /Lacute + /Cacute + /Ccedilla +%%%%% '310 = "C8 + /Ccaron + /Eacute + /Eogonek + /Edieresis + /Ecaron + /Iacute + /Icircumflex + /Dcaron +%%%%% '320 = "D0 + /Eth + /Nacute + /Ncaron + /Oacute + /Ocircumflex + /Ohungarumlaut + /Odieresis + /multiply +%%%%% '330 = "D8 + /Rcaron + /Uring + /Uacute + /Uhungarumlaut + /Udieresis + /Yacute + /Togonek + /germandbls +%%%%% '340 = "E0 + /racute + /aacute + /acircumflex + /abreve + /adieresis + /lacute + /cacute + /ccedilla +%%%%% '350 = "E8 + /ccaron + /eacute + /eogonek + /edieresis + /ecaron + /iacute + /icircumflex + /dcaron +%%%%% '360 = "F0 + /eth + /nacute + /ncaron + /oacute + /ocircumflex + /ohungarumlaut + /odieresis + /divide +%%%%% '370 = "F8 + /rcaron + /uring + /uacute + /uhungarumlaut + /udieresis + /yacute + /quotedblbase + /quotedblleft +] def + +% LIGKERN f i =: fi ; f fi =: ffi ; +% LIGKERN f f =: ff ; +% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ; +% LIGKERN quoteleft quoteleft =: quotedblleft ; +% LIGKERN quoteright quoteright =: quotedblright ; +% LIGKERN exclamdown exclamdown =: guillemotleft ; +% frenchdblquotes +% LIGKERN questiondown questiondown =: guillemotright ; +% csquoteleft +% LIGKERN comma comma =: quotedblbase ; +% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; +% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; +% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; +% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; +% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; +% LIGKERN nine {} * ; * {} nine ; +% LIGKERN question {} quoteleft ; exclam {} quoteleft ; diff --git a/Master/texmf-dist/doc/cstex/cspsfonts-gen/xt2.enc b/Master/texmf-dist/doc/cstex/cspsfonts-gen/xt2.enc new file mode 100644 index 00000000000..26d1d3af51e --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cspsfonts-gen/xt2.enc @@ -0,0 +1,321 @@ +% @psencodingfile{ +% author = "Petr Olsak, Zdenek Wagner", +% date = "19aug12", +% filename = "xt2.enc", +% license = "public domain", +% email = "tex-fonts@tug.org", +% codetable = "ISO/ASCII", +% docstring = "This is the typewriter version of xl2." +% } +% +% 19oct12 - added: /Euro, /trademark, /copyright, /registered +% /guilsinglleft/right, /quotesinglbase, /quoteleft (Petr Olsak) +% 27aug05 - record Petr Olsak and Zdenek Wagner as the authors. +% 12jun05 - remove Texinfo @'s from LIGKERN's. +% +/XT2encoding [ +%%%%% '000 = "00 + /Gamma + /Delta + /Theta + /Lambda + /Xi + /Pi + /Sigma + /Upsilon +%%%%% '010 = "08 + /Phi + /Psi + /Omega + /arrowup + /arrowdown + /quotesingle + /exclamdown + /questiondown +%%%%% '020 = "10 + /dotlessi + /dotlessj + /grave + /acute + /caron + /breve + /macron + /ring +%%%%% '030 = "18 + /cedilla + /germandbls + /ae + /oe + /oslash + /AE + /OE + /Oslash +%%%%% '040 = "20 + /.notdef + /exclam + /quotedblright + /numbersign + /dollar + /percent + /ampersand + /quoteright +%%%%% '050 = "28 + /parenleft + /parenright + /asterisk + /plus + /comma + /hyphen + /period + /slash +%%%%% '060 = "30 + /zero + /one + /two + /three + /four + /five + /six + /seven +%%%%% '070 = "38 + /eight + /nine + /colon + /semicolon + /less + /equal + /greater + /question +%%%%% '100 = "40 + /at + /A + /B + /C + /D + /E + /F + /G +%%%%% '110 = "48 + /H + /I + /J + /K + /L + /M + /N + /O +%%%%% '120 = "50 + /P + /Q + /R + /S + /T + /U + /V + /W +%%%%% '130 = "58 + /X + /Y + /Z + /bracketleft + /backslash + /bracketright + /circumflex + /underscore +%%%%% '140 = "60 + /quoteleft + /a + /b + /c + /d + /e + /f + /g +%%%%% '150 = "68 + /h + /i + /j + /k + /l + /m + /n + /o +%%%%% '160 = "70 + /p + /q + /r + /s + /t + /u + /v + /w +%%%%% '170 = "78 + /x + /y + /z + /braceleft + /bar + /braceright + /tilde + /dieresis +%%%%% '200 = "80 + /ellipsis + /dagger + /daggerdbl + /bullet + /sterling + /paragraph + /Euro + /.notdef +%%%%% '210 = "88 + /trademark + /copyright + /registered + /.notdef + /.notdef + /perthousand + /guilsinglleft + /guilsinglright +%%%%% '220 = "90 + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef + /.notdef +%%%%% '230 = "98 + /Agrave + /.notdef + /quotesinglbase + /quoteleft + /hyphen + /ogonek + /guillemotleft + /guillemotright +%%%%% '240 = "A0 + /.notdef + /Aogonek + /breve + /Lslash + /currency + /Lcaron + /Sacute + /section +%%%%% '250 = "A8 + /dieresis + /Scaron + /Scedilla + /Tcaron + /Zacute + /.notdef + /Zcaron + /Zdotaccent +%%%%% '260 = "B0 + /ring + /aogonek + /cedilla + /lslash + /acute + /lcaron + /sacute + /caron +%%%%% '270 = "B8 + /agrave + /scaron + /scedilla + /tcaron + /zacute + /hungarumlaut + /zcaron + /zdotaccent +%%%%% '300 = "C0 + /Racute + /Aacute + /Acircumflex + /Abreve + /Adieresis + /Lacute + /Cacute + /Ccedilla +%%%%% '310 = "C8 + /Ccaron + /Eacute + /Eogonek + /Edieresis + /Ecaron + /Iacute + /Icircumflex + /Dcaron +%%%%% '320 = "D0 + /Eth + /Nacute + /Ncaron + /Oacute + /Ocircumflex + /Ohungarumlaut + /Odieresis + /multiply +%%%%% '330 = "D8 + /Rcaron + /Uring + /Uacute + /Uhungarumlaut + /Udieresis + /Yacute + /Togonek + /germandbls +%%%%% '340 = "E0 + /racute + /aacute + /acircumflex + /abreve + /adieresis + /lacute + /cacute + /ccedilla +%%%%% '350 = "E8 + /ccaron + /eacute + /eogonek + /edieresis + /ecaron + /iacute + /icircumflex + /dcaron +%%%%% '360 = "F0 + /eth + /nacute + /ncaron + /oacute + /ocircumflex + /ohungarumlaut + /odieresis + /divide +%%%%% '370 = "F8 + /rcaron + /uring + /uacute + /uhungarumlaut + /udieresis + /yacute + /quotedblbase + /quotedblleft +] def + +% LIGKERN quoteleft quoteleft =: quotedblleft ; +% LIGKERN quoteright quoteright =: quotedblright ; +% LIGKERN exclamdown exclamdown =: guillemotleft ; +% frenchdblquotes +% LIGKERN questiondown questiondown =: guillemotright ; +% csquoteleft +% LIGKERN comma comma =: quotedblbase ; +% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; +% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; +% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; +% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; +% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; +% LIGKERN nine {} * ; * {} nine ; +% LIGKERN question {} quoteleft ; exclam {} quoteleft ; +% LIGKERN f {} f ; f {} i ; f {} l ; diff --git a/Master/texmf-dist/doc/cstex/cstexman.pdf b/Master/texmf-dist/doc/cstex/cstexman.pdf new file mode 120000 index 00000000000..5ab3fbfdc51 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cstexman.pdf @@ -0,0 +1 @@ +doc/cstexman.pdf
\ No newline at end of file diff --git a/Master/texmf-dist/doc/cstex/cstexman.tex b/Master/texmf-dist/doc/cstex/cstexman.tex new file mode 100644 index 00000000000..a9ac921f609 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/cstexman.tex @@ -0,0 +1,3265 @@ + +\chyph % pouzijte csplain + +\mag=\magstephalf + +\csaccents +\raggedbottom + +\hsize=30pc % 30 pica +\vsize=46pc % 46 řádků po 12pt (zhruba) +\hoffset=.8cm + +\emergencystretch=4em +\parindent=12pt + +\widowpenalty=10000 +\clubpenalty=10000 +\exhyphenpenalty=10000 + +\newcount\subnum \newcount\subsubnum +\newwrite\fileref \newread\testin +\newcount\numlink +\newif\iflinecolor \linecolorfalse + +\def\beglink#1{} +\def\endlink{} +\def\aimlink#1{} +\def\urllink#1{{\tt#1}} +\def\zalozka#1{} + +\def\subtitle #1 | #2\par{\subsubnum=0 \advance\subnum by1 + \bigskip\noindent{\llap{\raise15pt\hbox{\zalozka{#2}}\kapfont\the\subnum. }% + \kapfont #1}% + \writetoc\refsub{\ifnum\subnum=0 \else\the\subnum. \fi#1}% + \par\nobreak\medskip} +\def\subsub#1| #2\par{\advance\subsubnum by1 + \bigskip\noindent{\llap{\raise15pt\hbox{\zalozka{ \space#2}}% + \bf\the\subnum.\the\subsubnum\space}% + \bf\let\CS=\bCS \let\AMS=\bAMS \let\LaTeX=\bLaTeX #1}% + \writetoc\refsubsub{\the\subnum.\the\subsubnum\space #1}% + \par\nobreak\medskip} +\def\writetoc #1#2{{\noexpandcs\xdef\act{% + \write\fileref{\noexpand\noexpand\noexpand#1{% + \noexpand\the\noexpand\pageno}{#2}}}}\act} + +\def\url#1{{\tt #1}} + +\def\delejobsah{\bgroup \subnum=-1 + \noindent {\kapfont Obsah} \bigskip + \softinput \jobname.ref + \immediate\openout\fileref\jobname.ref + \egroup \vfil\break} +\def\softinput #1 {\let\next=\relax \openin\testin=#1 + \ifeof\testin \message{VAROVÁNÍ: pro vytvoření obsahu TeXujte ještě jednou.}% + \else \closein\testin \def\next{\input #1 }\fi + \next} +\def\tocfill{\leaders\hbox{ . }\hfill} +\def\refsub#1#2{\advance\subnum by1 + \line{#2\unskip\tocfill\space#1}} +\def\refsubsub#1#2{\advance\subnum by1 + \line{\indent#2\unskip\tocfill\space#1}} +\def\noexpandcs{\let\csplain=\relax \let\cslatex=\relax \let\CSfont=\relax \let\tt=\relax + \let\AMS=\relax \let\TeX=\relax \let\LaTeX=\relax \let~=\relax \let\mf=\relax} +\output={\noexpandcs \plainoutput} + + +\font\mflogo=logo10 % METAFONT logo +\font\boldsy=cmbsy10 % Tučné \CS, \AMS. +\font\titulfontinternal=csb10 scaled\magstep4 +\font\titulboldsy=cmbsy10 scaled\magstep4 +\def\titulfont{\titulfontinternal \let\CS=\bCS \let\boldsy=\titulboldsy} +\font\kapfontinternal=csbx12 +\font\kapboldsy=cmbsy10 at12pt +\font\kaptt=cstt12 +\def\kapfont{\kapfontinternal \let\CS=\bCS \let\boldsy=\kapboldsy + \let\tt=\kaptt \let\sevenbf=\tenbf \let\LaTeX=\bLaTeX} + + +\def\CS{$\cal C\kern-.1667em\lower.5ex\hbox{$\cal S$}\kern-.075em $} +\def\bCS{{\boldsy C\kern-.1667em\lower.5ex\hbox{S}\kern-.04em}} +\def\CSTeX{\CS\TeX} +\def\CSTUG{\CS TUG} +\def\CSfont{\CS\kern.1em font} +\def\csplain{\CS\kern.1em plain} +\def\mf{{\mflogo META}\-{\mflogo FONT}} +\def\mp{{\mflogo META}\-{\mflogo POST}} +\def\LaTeX{L\kern-.36em\raise.5ex\hbox{\sevenrm A}\kern-.12em\TeX} +\def\twoe{$2_{\textstyle\varepsilon}$} +\def\LaTeXe{\LaTeX\thinspace\twoe} +\def\bLaTeX{L\kern-.3em\raise.5ex\hbox{\sevenbf A}\kern-.12em\TeX} +\def\cslatex{\CS\LaTeX} +\def\twoe{$2_{\textstyle\varepsilon}$} +\def\LaTeXe{\LaTeX\thinspace\twoe} +\def\AMS{$\cal A\kern-.166em\lower.5ex\hbox{$\cal M$}\kern-.075em S$} +\def\bAMS{{\boldsy A\kern-.166em\lower.5ex\hbox{M}\kern-.075em S}} +\def\ps{Post\-Script} +\let\copyleft=\copyright + +%% Definice verbatim prostředí %% !verb. +\catcode`\"=13 +\def"{\hbox\bgroup\let"=\egroup\setverb\tt} +\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces} +\def\begtt{\medskip\bgroup + \nobreak\setverb \parskip=0pt %\parindent=0pt + \def\par{\endgraf\penalty500 } + \catcode`\"=12 \obeylines + \startverb} +{\catcode`\|=0 \catcode`\\=12 + |gdef|startverb#1\endtt{% + |tt#1|nobreak|egroup|penalty0|medskip|scannexttoken}} +{\obeyspaces\gdef {\ }} +\long\def\scannexttoken#1{\ifx#1\par\else\noindent#1\fi} + + +%% Prostředí s puntíkatými nebo číslovanými položkami %% +\def\begitems{\medskip\bgroup\catcode`\*=13 \narrower} +\def\enditems{\par\egroup\medskip} +{\catcode`\*=13 \gdef*{\par\noindent\llap{$\bullet$\ }\ignorespaces} +\gdef\numerate{% \numerate napsat těsně za \begitems + \def*{\par\advance\itemnum by1\noindent + \llap{\bf\the\itemnum. }\ignorespaces}}} + +\newcount\bibnum +\def\cit#1{\expandafter\ifx \csname b:#1\endcsname \relax + \message{Warning: The bibitem #1 is not defined}[??#1]% + \else [\csname b:#1\endcsname]\fi} + +\def\bib #1 {\smallskip\advance\bibnum by1 + \immediate\write\fileref{\noexpand\bibref{#1}{\the\bibnum}} + \noindent \llap{[\the\bibnum]\enspace}\ignorespaces} +\def\bibref #1#2{\expandafter\gdef \csname b:#1\endcsname{#2}} + +\def\reference{\subtitle Reference | REFERENCE\par} + +\let\Red=\relax \let\Black=\relax +\def\startcolor#1{} \def\stopcolor#1{} + +\def\newstart{\startcolor{Red}} +\def\newstop{\stopcolor{Black}} +\def\startcc#1#2{} +\def\stopcc#1#2{} + + +\def\new#1{\leavevmode\newstart#1\newstop} +\def\newAbox#1{\Red\hbox{#1}\Black} + +\def\skrt#1{\let\barva=\Red + \dimen0=\maxdimen \leavevmode \skrtslovo #1 {} } + +\def\skrtrule{\vrule height2.8pt depth-2.5pt} + +\def\skrtslovo #1 {\def\tmp{#1}\ifx\tmp\empty \else + \ifdim\dimen0=\maxdimen \else + \linecolortrue\barva \leaders\skrtrule\hskip + \fontdimen2\the\font plus\fontdimen3\the\font minus\fontdimen4\the\font + \Black\linecolorfalse + \fi + \setbox0=\hbox{#1}\dimen0=\wd0% + \rlap{\box0}% + {\linecolortrue\barva\skrtrule width\dimen0\Black\linecolorfalse}% + \expandafter\skrtslovo\fi} + +\def\setbrackets{\catcode`!=0 \catcode`\[=1 \catcode`\]=2 } + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Makra pro pdfTeX %%%%%%%%%%%%%%%%%%%%%%% + +\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%% +\ifnum\pdfoutput>0 + +\pdfhorigin=3mm \pdfvorigin=10mm +\pdfpagewidth=14.5cm +\pdfpageheight=22cm + +\ifx\pdfannotlink\undefined %%% Backward compatibility + \let\pdfannotlink=\pdfstartlink +\fi + +\def\beglink#1{% % Začátek textu odkazu, #1 je klíč odkazu + \Green \pdfannotlink height9pt depth3pt + attr{/Border[0 0 0]} goto name{#1}\relax} +\def\endlink{\pdfendlink\Black} +\def\aimlink#1{% % Místo cíle odkazu, #1 je klíč odkazu + \expandafter\ifx \csname aim:#1\endcsname \relax + \expandafter\gdef \csname aim:#1\endcsname {}% + \vbox to0pt{\vss\hbox{\pdfdest name{#1} fith}\kern15pt}% + \fi +} +\def\zalozka#1{\global\advance\numlink by1 + \pdfdest num\numlink fith\relax + {\let~=\space\pdfoutline goto num\numlink {#1}}} + +\def\pdfsetcmykcolor#1{\special{PDF:#1 \iflinecolor K\else k\fi}} +\def\Red{\pdfsetcmykcolor{0.1 0.9 0.9 0.3}} +\def\Black{\pdfsetcmykcolor{0 0 0 1}} +\def\Green{\pdfsetcmykcolor{0.9 0.1 0.9 .3}} +\def\Blue{\pdfsetcmykcolor{0.9 0.9 0.1 0}} +\def\Orange{\pdfsetcmykcolor{0 0.7 1 .5}} + +\footline={\hss\Black\tenrm\folio\hss} +\headline={\hss \csname cc:\the\pageno\endcsname} +\edef\footnoterule{\noexpand\Black\footnoterule} + +\csname newcount\endcsname\ccnum + +\def\startcc#1#2{\def\ccval{#1}\ccnum=#2 } +\def\stopcc#1#2{\loop \ifnum\ccnum<#2 + \advance\ccnum by1 + \expandafter\xdef\csname cc:\the\ccnum\endcsname + {\noexpand\csname\ccval\noexpand\endcsname}\repeat} + +\def\startcolor#1{\csname#1\endcsname + \write\fileref{\string\startcc{#1}{\the\pageno}}} +\def\stopcolor#1{\csname#1\endcsname + \write\fileref{\string\stopcc{#1}{\the\pageno}}} + +\pdfcompresslevel=9 +\pdfinfo{/Author (Petr Olsak) + /CreationDate (September 2002) + /ModDate (\the\year-\the\month-\the\day) + /Creator (TeX) + /Producer (pdfTeX) + /Title (CSTeX Manual) + /Subject (Documentation) + /Keywords (TeX, Czech+Sloavk localisation) +} +\pdfcatalog{/PageMode /UseOutlines}\relax + + +\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% Konec maker PDFTeXu %%%%% + + +%%%%%%%%%%%%%%%%%%%%%%% Titulni strana %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\nopagenumbers \vglue 5cm + +\centerline{\titulfont Manuál k \CS\TeX{}u} + +\vskip 2cm + +\centerline{\titulfont Petr Olšák} + +\vfill + +\hrule +\bigskip + +\noindent +\hfil Hněvanice, Morávka, Praha -- léto 2002, \newAbox{podzim 2012} + +\vfil\break + +Autor \TeX{}u je profesor Donald Knuth. +\bigskip + +\TeX{} je ochranná známka American Mathematical Society. +\bigskip + +Ostatní v manuálu použité názvy programových produktů, firem +apod. mohou být ochrannými známkami nebo registrovanými ochrannými +známkami příslušných vlastníků. + +\vfill + +Tento text je volně šířen společně s~balíkem \CSTeX. Jedná se +o~referenční manuál k tomuto balíku. Text je k~dispozici ve +formátech "tex" (\csplain), PostScript a PDF. Výchozí adresa textu je +\url{ftp://math.feld.cvut.cz/pub/cstex/doc}. + +Text můžete tisknout a jinak používat pro soukromé účely. V~nezměněném +stavu v elektronické podobě jej můžete také distribuovat bez dalšího +omezení. Není dovoleno tento text zveřejňovat v~pozměněném stavu a +publikovat jej v~papírové podobě bez předchozí dohody s~autorem. + +\bigskip + +This document is free distributed as a part of the \CSTeX{} package. +It is a reference manual of the \CSTeX. It is available +in formats "tex" (\csplain), PostScript and PDF. The base URL of it +is \url{ftp://math.feld.cvut.cz/pub/cstex/doc}. + +You can print this document or use it in another way only as an individual +end-user. If you don't do any change in this document then you can +distribute it in electronical form without any limitation. +It is not permitted to distribute this document in changed versions or to +publish it in hardcopy form without previous agreement with the +author. + +\bigskip + +This original is written in Czech language. +The translation into other languages are welcome. + + +\vfill + +Verze textu 15. 5. 2003 + +\leavevmode\newAbox{Verze textu 30. 11. 2012} +\bigskip + +\copyleft{} RNDr. Petr Olšák, 2002\newAbox{, 2012} + +\bigskip + +%\leavevmode\newAbox{\bf Upozornění: tato verze textu je provizorní.} + +%\leavevmode\newAbox{\bf Během několika týdnů se ještě bude měnit.} + +\break + +} + + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\delejobsah + + +\subtitle Úvod | ÚVOD +%%%%%%%%%%%%%%%%%%%%% + +\new{Po skoro deseti letech se k tomuto textu vracím, abych jej +aktualizoval. Veškeré změny jsou vyznačeny touto barvou. Černý text je +naopak původní z roku 2003. Nabízím čtenáři dva bonbónky v jednom: podrobnou +technickou dokumentaci i pohled do historie.} + +V~tomto manuálu se pokusím vyčerpávajícím způsobem popsat +vlastnosti \CSTeX{}u. Z~tohoto důvodu to asi nebude jednoduché čtení +pro \TeX{}ové začátečníky. Těm doporučuji nejprve přečíst~\cit{prvni}. + +\CSTeX{} je sada \TeX{}ových maker, fontů, vzorů dělení slov a +doplňujícího software pro podporu české a slovenské sazby +v~\TeX{}u. Je vytvořen tak, aby mohl být použit na libovolné \TeX{}ové +distribuci na libovolném operačním systému. + +Dříve byla slovem \CSTeX{} označována také kompletní em\TeX{}ová +distribuce doplněná o~zmíněná makra, fonty a vzory dělení. To bylo +v~roce 1993, kdy sdružení \CSTUG{} rozesílalo pod tímto názvem em\TeX{}ovou +distribuci na disketách svým členům. V~té době většina členů používala +DOS, takže em\TeX{} pro DOS byl pro ně vyhovující. V~dnešní době uživatelé +pracují s~nejrůznějšími operačními systémy a s~různými distribucemi +\TeX{}u pro tyto systémy. Z~toho důvodu se v~tomto manuálu přidržíme +jen užšího významu slova \CSTeX, definovaného v~předchozím odstavci. + +\CSTeX{} sestává ze \skrt{tří} \new{dvou} +základních pilířů: \CSfont{}y, \csplain{} \skrt{a \CS\LaTeX}. +\CSfont{}y jsou konzervativním rozšířením Knuthových Computer Modern +fontů, \csplain{} je konzervativním rozšířením Knuthova formátu plain +a konečně \cslatex{} \skrt{je} \new{byl} jistou modifikací běžně používaného formátu +\LaTeX. Tyto \skrt{tři} pilíře jsou podrobně dokumentovány v~následujících +kapitolách. K~těmto pilířům \CSTeX{}u je ještě připojena podpora +použití základních 35 PostScriptových fontů v~češtině a slovenštině +prostřednictvím virtuálních fontů. + +Základní balíčky \CSTeX{}u přístupné na Internetu mají následující názvy: + +{\setbrackets +\begtt +csfonts.tar.gz ... CSfonty -- Metafontové soubory a metriky. +csplain.tar.gz ... Makra pro formát CSplain a vzory dělení slov. +cslatex.tar.gz ... Makra pro formát CSLaTeX. !newAbox[-- zastaralé] +cspsfonts.tar.gz ... Virtuální fonty základních 35 PostScriptových + fontů v~kódování podle CSfontů. +\endtt +\par} + +Pokud někdo řekne, že má na své distribuci \TeX{}u instalován \CSTeX, +pak to znamená, že má určitě instalovány tyto čtyři balíky. +Kromě toho k~\CSTeX{}u řadíme i následující doplňující software, +který už nemusejí mít všichni uživatelé \CSTeX{}u instalován: + +{\setbrackets +\begtt +csfonts-t1.tar.gz .. Varianta CSfontů ve formátu PostScript Type1. +enctex.tar.gz ... Makra a návod na modifikaci tex.ch souboru !skrt[na] + !skrt[zahrnutí podpory přímého přístupu k vektorům] + !skrt[xord/xchr prostřednictvím primitivů.] + !new[pro vícebytové překódování v input procesoru.] +cstrip.tar.gz ... Test funkcionality formátu CSplain. +csindex-19980713.tar.gz ... Zdrojové soubory v~jazyce C programu + csindex, který je modifikací programu + makeindex se zahrnutou podporou českého a + slovenského řazení. +vlna.tar.gz ... Zdrojové soubory v~jazyce C a v~jazyce cweb + programu vlna na automatické doplňování vlnek + za neslabičné předložky. +\endtt +\par} + +Na Internetu naleznete všechny uvedené balíky na + +\begtt +ftp://math.feld.cvut.cz/pub/cstex/base +\endtt + +Základní balíčky a {\tt csfonts-t1.tar.gz} obsahují adresářovou strukturu +podle TDS (\TeX{} directory standard), takže pokud vaše distribuce +\TeX{}u používá tento standard, pak rozbalení balíčků nad adresářem +{\tt texmf} povede automaticky k~zařazení všech souborů na správná +místa v~{\tt texmf} stromu. + +Starší verze uvedených balíků najdete na + +\begtt +ftp://math.feld.cvut.cz/pub/cstex/base/old +\endtt + +Dokumentaci k~\CSTeX{}u (včetně tohoto manuálu) najdete na + +\begtt +ftp://math.feld.cvut.cz/pub/cstex/doc +\endtt + +Adresář "ftp://math.feld.cvut.cz/pub/cstex/"\new{{\tt old/}} obsahuje kromě +zmíněných věcí kompletní distribuci em\TeX{}u s~podporou \CSTeX{}u +(v~podadresáři {\tt emtex}), minimalizovanou distribuci +em\TeX{}u+\CSTeX{}u pro pouhé tři instalační diskety (v~podadresáři +{\tt minitex}), návody a software na instalaci web2c \TeX{}u +(v~podadresáři {\tt web2c}) a RPM balíky te\TeX{}u podporující \CSTeX{} +pro různé distribuce Linuxu (v~podadresáři {\tt tetex-rpm}). Tyto +podadresáře vznikaly postupně v~poslední dekádě minulého +tisíciletí podle potřeby a zájmu o~uvedené distribuce \TeX{}u. +Podle toho, jak rostla a klesala popularita jednotlivých distribucí, +jsou tyto podadresáře aktualizovány (nebo spíše neaktualizovány). +Na druhé straně mohou vzniknout další adresáře s~balíčky dalších +distribucí \TeX{}u obsahujících \CSTeX{}~-- stačí, když je někdo udělá a +pošle o~tom informaci na mou elektronickou adresu. Mohu třeba založit +podadresář {\tt miktex-zip} analogicky k~adresáři {\tt tetex-rpm}, +pokud se to někomu bude hodit a pokud ty archivy samozřejmě udělá. + + +\subtitle \CSfont{}y | CSFONTY +%%%%%%%%%%%%%%%%%%%% + +\CSfont{}y jsou konzervativním rozšířením CM fontů Donalda Knutha. Tím je +míněno, že každý \CSfont{} má svůj protějšek v~nějakém CM fontu, +přičemž se naprosto shoduje v~kódování, tvarech a šířkách znaků na +prvních 128 pozicích (kódy 0~až~127), tj. na všech pozicích, které +jsou tímto CM fontem použity. \CSfont{} tedy pouze doplňuje další +znaky do pozic s~kódem větším než 127. Tam jsou umístěny znaky české +a slovenské abecedy podle kódování ISO~8859-2. +Některé pozice stále zůstávají neobsazeny. +Níže uvádím tabulku \CSfont{}u. Druhý znak na +pozicích 0B~až 0F se vyskytuje namísto prvního znaku ve fontech +bez ligatur typu fi ({\tt csr5}, {\tt cstt*} a {\tt cssltt*}), +druhý znak na pozicích~20, 3C, 3E, 5C, 5F a +7B~až~7D najdeme ve strojopisných fontech ({\tt cstt*} a {\tt cslstt*}) a +konečně libra místo dolaru na pozici~24 se vyskytuje v kurzívách +({\tt csti*}). Tyto nejednoznačnosti v~kódování mají samozřejmě i +původní CM fonty. + +%------------------------------------------------------------ + +\newcount\colnum \newcount\linenum \newcount\posnum +\def\tabfont #1{\posnum=0 + \vbox\bgroup \offinterlineskip #1 + \line{\hfil {\tt \space\space\space}\vrule depth.4em + \loop + \ifnum\colnum<16 + \hbox to.055\hsize{\hfil\tentt\hex\colnum\hfil}\vrule + \advance\colnum by1 + \repeat + }% end of \line + \loop + \ifnum\linenum<16 + \hrule + \line{\hfil{\tentt \hex\linenum x }% + \vrule height 1.0em depth .4em\tabline} + \advance\linenum by1 + \repeat + \hrule + \egroup +} +\def\tabline{ + \colnum=0 + \loop + \ifnum\colnum<16 + \tabitem + \advance\colnum by1 + \repeat +} +\def\tabitem{\hbox to.055\hsize{\hfil\char\posnum\altchar\hfil}% + \vrule\global\advance\posnum by1} +\def\altchar{\ifcase\posnum + \or\or\or\or\or\or\or\or\or\or\or\a\or\a\or\a\or\a\or\a\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \a\or\or\or\or\kern2pt{\it\$}\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\a\or\or\a\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\a\or\or\or\a\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\a\or\a\or\a\or\or\or + \fi} +\def\a{\kern2pt{\tt\char\posnum}} +\def\hex#1{\ifcase#1\relax 0\or1\or2\or3\or4\or5\or6\or7\or8\or + 9\or A\or B\or C\or D\or E\or F\fi} +\bigskip +\tabfont {\font\f=csr10 \font\it=csti10 \font\tt=cstt10 \f} +\bigskip +%---------------------------------------------------------------- + +Následuje seznam všech CM fontů. Pokud není vpravo uveden alternativní název +\CSfont{}u, jedná se o~matematický font, který nemá v~\CSfont{}ech alternativu. +Také ji nepotřebuje. + +\begtt +CM font CSfont +------------------------------------------------------------------ +cmr17, 12, 10, 9, 8, 7, 6, 5 csr17, 12, 10, 9, 8, 7, 6, 5 +cmbx12, 10, 9, 8, 7, 6, 5 csbx12, 10, 9, 8, 7, 6, 5 +cmsl12, 10, 9, 8 cssl12, 10, 9, 8 +cmtt12, 10, 9, 8 cstt12, 10, 9, 8 +cmsltt10, cmvtt10 cssltt10, csvtt10 +cmss17, 12, 10, 9, 8 csss17, 12, 10, 9, 8 +cmssi17, 12, 10, 9, 8 csssi17, 12, 10, 9, 8 +cmssdc10, cmssbx10 csssdc10, csssbx10 +cmssqi8, cmssq8 csssqi8, csssq8 +cmdunh10, cmbxsl10, cmb10 csdunh10, csbxsl10, csb10 +cmff10, cmfib10 csff10, csfib10 +------------------------------------------------------------------ +cmti12, 10, 9, 8, 7 csti12, 10, 9, 8, 7 +cmbxti10, cmitt10 csbxti10, csitt10 +cmu10, cmfi10 csu10, csfi10 +------------------------------------------------------------------ +cmcsc10, cmtcsc10 cscsc10, cstcsc10 +------------------------------------------------------------------ +cminch10 csinch10 +------------------------------------------------------------------ +cmmi12, 10, 9, 8, 7, 6, 5 +cmmib10 +------------------------------------------------------------------ +cmtex10, 9, 8 +------------------------------------------------------------------ +cmsy10, 9, 8, 7, 6, 5 +cmbsy10 +------------------------------------------------------------------ +cmex10 +------------------------------------------------------------------ +\endtt + +Mezi soubory metrik \CSfont{}ů navíc najdeme metriky vytvořené Sauterovou +extrapolací, které nemají přímou obdobu mezi CM fonty: + +\begtt + CSfont +------------------------------------------------------------------ + csb17, 12, 9, 8, 7, 6, 5 + csbxsl12, 5, 6, 7, 8, 9 + csbxti17, 12 + cscsc17, 12 + csdunh17, 12, 5, 6, 7, 8, 9 + csfib12, 10, 9 + csitt12, 17, 8, 9 + cssl17, 5, 6, 7 + cssltt12, 8, 9 + csssbx12, 17, 9 + cstcs12, 17 + csti17 + csu12, 17, 7, 8, 9 + csvtt12, 8, 9 +------------------------------------------------------------------ +\endtt + +\mf{}ová makra pro Sauterovu extrapolaci jsou součástí balíčku +s~\CSfont{}y {\tt csfonts.tar.gz}. Princip této extrapolace je například +popsán v~\cit{tst}. +\new{Fonty vytvořené Sauterovou extrapolací nedoporučujeme používat, protože +nemají svou implementaci pomocí PostScriptového fontu. Do výstupního PDF se +při použití takového fontu zavede bitmapový výstup z \mf{}u, což může vést +ke komplikacím.} + + +\subsub Odlišnosti od CM fontů | Odlisnosti od CMfontu +%----------------------------- + +Nelze tvrdit, že text používající jen znaky z~pozic 0--127 bude +100\% shodně zpracován při použití CM fontů i \CSfont{}ů. Odlišnosti existují, +ale jsou tak nepatrné, že je velmi malá prvaděpodobnost, že by při běžném +užívání byla pozorovatelná rozdílnost. Nicméně přesto zde všechny +odlišnosti uvádím včetně komentářů. Uvedené hodnoty jsou příkladem +při srovnání fontu "csr10" s~"cmr10". + +\medskip{\bf 1. Kerningové páry} + +Mezi tečkami ("..") je v "csr10" implicitní kern, aby bylo možno sázet + elipsu. Kern~$0,011111$pt. V cmr10 není. + +Dvojice "ka" -- "csr10": $-0,0027777$pt, "cmr10": $-0,0055555$pt. + +Dvojice "P." a "P," -- "csr10": $-0,0027777$pt, "cmr10" není. + +Dvojice "F.", "F,", "V.", "V,", "W." a "W," -- "csr10": $-0,0055555$pt, "cmr10" není. + +Dvojice "Av" a "Aw" -- "csr10": $-0,011111$pt, "cmr10" není. + + +\medskip{\bf 2. Ligatury} + +Dvojice "<<" vede v csr10 na francouzské uvozovky, kód 158, v cmr10 není. + +Dvojice ">>" vede v csr10 na francouzské uvozovky, kód 159, v cmr10 není. + + +\medskip{\bf 3. Výšky znaků} + +Formát "tfm" je omezen na maximálně 16 různých výšek znaků v~jednom fontu. +V~"cmr10" je obsazeno všech 16 různých výšek. Přitom v~"csr10" přicházejí další +výšky znaků dané akcentovanými znaky. Proto \mf{} provedl v~"csr10" jistá +zaokrouhlení, která způsobí odlišnost výšek od výšek v~"cmr10" maximálně +o~0,007779pt. Jedná se o~tyto znaky: + +\begitems +* $\Gamma$ až $\Omega$, \AE, \OE{} a všechny kapitálky: + v~"csr10" jsou menší o~0,00773pt. + +* Nadržítko (kód 22), nadpuntík (kód 95) a přehláska (kód 127): + v~"csr10" větší o~0,007779pt. + +* Písmena i, j jsou v~"csr10" větší o~0,007779pt. + +* Znak plus (+) je v~"csr10" menší o~0,007778pt. +\enditems + +Rozdílnost výšek není kritická, protože při sazbě se většinou berou v~úvahu +jen šířky znaků. Pouze výjimečně promluví do sazby i výška (většinou když +objekt v~řádku je větší než "\baselineskip"). + + +\subsub Struktura \mf{}ových zdrojových souborů \CSfont{}ů | +%--------------------------------------------------------- + Struktura METAFONTovych zdrojovych souboru CSfontu + +\mf{} čte nejprve soubor, který má stejné jméno, jako je jméno +generovaného fontu, a má příponu {\tt mf}. Například {\tt csr10.mf}. +Takovému souboru říkáme hlavní soubor generování fontu. V~\CSfont{}ech je +takových hlavních souborů celkem 121. Všechny mají stejný dvouřádkový +obsah: + +\begtt +input cscode +use_driver; +\endtt + +V~souboru {\tt cscode.mf} se načtou jména a kódy akcentovaných znaků +(jsou uspořádány podle ISO~8859-2) a definuje se "use_driver" +v~závislosti na jménu hlavního souboru tak, že se načte odpovídající +hlavní soubor CM fontů (tj. odpojí se předpona "cs" a připojí předpona +"cm"). V~případě fontu "csr10" se tedy načte v~tuto chvíli +soubor~{\tt cmr10.mf}. Navíc je v~souboru {\tt cscode.mf} +předefinováno {\tt generate} (v~CM fontech má význam {\tt input}) tak, +že poslední řádek {\tt cmr10.mf} s~textem + +\begtt +generate roman +\endtt +% +neprovede {\tt input roman.mf}, ale provede {\tt input kmroman.mf}. +Další průběh výpočtu je tedy zase v~režii \CSfont{}ů. Kromě souboru +{\tt kmroman.mf} jako alternativy k~souboru {\tt roman.mf} z~CM fontů +najdeme analogické alternativy s~názvy {\tt kmtextit.mf}, +{\tt kmcsc.mf}, {\tt kmtexset.mf} a {\tt kmtitle.mf}. + +Z~uvedených souborů se postupně načítají soubory generující tvary +jednotlivých znaků. Jedná o~všechny odpovídající soubory +z~CM fontů a navíc soubory uvedené v~následující tabulce. + +\begitems +* {\tt csaccent.mf} definuje makra pro akcenty, +* {\tt csacutl.mf} generuje á, é, í, ó, \'r, ú, ý, +* {\tt csacutu.mf} generuje Á, É, Í, \'L, Ó, \'R, Ú, Ý, +* {\tt cshachel.mf} generuje č, ě, ň, ř, š, ž, +* {\tt cshacheu.mf} generuje Č, Ď, Ě, Ň, Ř, Š, Ť, Ž, +* {\tt csotherl.mf} generuje \^o, ů, \`a, \'l, \v t, \v d, \v l, \"a, + \"o, \"u, +* {\tt csotheru.mf} generuje \^O, Ů, \`A, \v L, \"A, \"O, \"U, +* {\tt csadded.mf} generuje \clqq\kern2pt, \crqq, >>, <<, \promile, \ogonek{}, +* {\tt cshyph.mf} generuje alternativní hyphenchar. +\enditems + +V~souboru {\tt kmroman.mf} a jemu podobných souborech jsou ještě zapsány +kernové páry a údaje pro tabulku ligatur. V~tomto souboru činnost +\mf{}u končí příkazem {\tt bye}. + + +\subsub Alternativní hyphenchar | Alternativni hyphenchar +%------------------------------ + +Na pozici 156 je v~\CSfont{}ech spojovník s~úplně stejnou kresbou a +metrikou, jako na pozici~45. Nastavíme-li +"\hyphenchar\beznyfont=156", budeme mít zaručeno, že ve slovech +\uv{je-li} nebude \TeX{} dělit slovo. Bez tohoto nastavení by \TeX{} +rozdělil \uv{je-/li}, což není v~souladu s~požadavky na českou sazbu. +Mnoho dalších způsobů řešení tohoto problému najdeme v~\cit{tbn}. + +Další aplikací znaku 156 je modifikace jeho metriky tak, aby kresba +přesahovala přes šířku znaku výrazně doprava. Pak nastavením +"\hyphenchar\beznyfont=156" dosáhneme tzv.~visící interpunkce, +viz například~\cit{texbook} nebo~\cit{tbn}. V~poslední době se visící +interpunkce stává módní záležitostí, protože to umí i nejnovější verze +programu Adobe InDesign. Metriku \CSfont{}u můžete pro vlastní potřeby +modifikovat například programy tftopl a pltotf. Takto modifikovanou +metriku ovšem nesmíte distribuovat pod stejným názvem, jaký má +původní metrika \CSfont{}u. + + +\subsub Anabáze UNIXových hard-linků | Anabase UNIXovych hard-linku +%----------------------------------- + +Jak jsme uvedli v předchozí sekci, +hlavní \mf{}ové soubory \CSfont{}ů mají jednu zvláštnost: ačkoli zde existuje +121 různě nazvaných souborů, všechny obsahují stejný dvouřádkový text. + +Rozhodl jsem se těch 121 stejných různě nazvaných souborů +implementovat pro úsporu inodů v~UNIXu jako hard linky. Takto jsem +fonty zabalil do balíčku {\tt csfonts.tar.gz} a dal k~dispozici +internetové veřejnosti. + +Pokud je systém, na který se balíček {\tt csfonts.tar.gz} instaluje, +rovněž UNIXo\-vého typu, pak program {\tt tar} vytvoří v~cílovém +adresáři 121 hard linků a je vše v~pořádku. Systém ušetřil 120 inodů, +které nemusel alokovat. + +Jestliže ale cílový systém nepracuje s~hard linky, mohou nastat +potíže. Osobně se ale domnívám, že pokud tento systém provozuje +nějakou implementaci programu {\tt tar}, měla by se tato implementace +s~problémem hard linků vyrovnat například tak, že místo hard linků +vytvoří při extrahování archivu stejné soubory. + +Proto považuji stížnosti uživatelů MS Windows na podivnost archivu +{\tt csfonts.tar.gz} za neopodstatněné. Tito uživatelé si stěžují, že +se jim rozbalí z~těch 121 souborů jen jeden, přičemž používají jakýsi +"Wintar". Odpovídám: nechť si tito uživatelé stěžují u~svého dodavatele +implementace programu {\tt tar}. Odmítám kvůli Windowsovým uživatelům +balit \CSfont{}y jinak a opustit tak možnost šetření inodů na UNIXových +systémech. Navíc se mi doneslo, že Windowsoví uživatelé mají možnost +použít jiné implementace programu {\tt tar}, které popsanou chybu +neobsahují, a skutečně na Windowsovém filesystému založí 121 různých +souborů se stejným obsahem. + + +\subsub Virtuální fonty přidané do balíčku \CSfont{}ů | +%---------------------------------------------------- + Virtualni fonty pridane do balicku CSfontu + +V~balíčku {\tt csfonts.tar.gz} jsou přítomny dvě skupiny virtuálních +fontů. Jedny mapují \CSfont{}y na CM fonty a druhé mapují CM fonty na +\CSfont{}y. V~tomto odstavci vysvětlím důvody existence obou skupin a +způsob jejich použití. + +Až donedávna bylo potřeba při prohlížení "dvi" souborů programem "xdvi" +(a~jemu podobnými programy) počkat, až se pomocí \mf{}u a programu +"gftopk" vygenerují potřebné bitmapy fontů, a teprve pak jsme je viděli +v~prohlížeči. Teprve od roku 2002 má program "xdvi" schopnost přímo +zobrazovat Type1 verze fontů, ale popisované virtuální fonty vznikly +v~době, kdy tomu tak nebylo a kdy \CSfont{}y ještě neměly svou Type1 +variantu. Pokud jsme tehdy nemuseli čekat na generování nových fontů +\mf{}em, pak jen proto, že už byly fonty vygenerovány dříve a zůstaly +uloženy na disku v~podobě {\tt pk} souborů. + +Za této situace bylo výhodné udržovat na disku co nejméně {\tt pk} +souborů. Protože uživatel \CSTeX{}u obvykle používá \CSfont{}y, dá se +předpokládat, že jejich {\tt pk} soubory má na disku v~hojném +množství. Když pak jednou za čas potřebuje takový uživatel prohlédnout +{\tt dvi} soubor odkazující na CM fonty, pak je přeci zbytečné pro ně +generovat nové bitmapy, když \CSfont{}y jsou nadmnožinou CM fontů a +bitmapy \CSfont{}ů pravděpodobně na disku už vygenerované jsou. Stačí pro +zobrazení znaků CM fontů čerpat z~bitmap \CSfont{}ů. + +Právě k~tomu účelu slouží první skupina virtuálních fontů označovaná +jako cm2cs. Po rozbalení {\tt csfonts.tar.gz} je tato skupina +virtuálních fontů uložena do adresáře {\tt fonts/vf/public} a je tedy aktivní. +Každý "dvi"-ovladač, který potřebuje vykreslit znak z~CM fontu, pak +použije tyto virtuální fonty, které jej nasměrují na \CSfont{}y. Takže +"dvi"-ovladač bude tyto znaky nakonec čerpat z~\CSfont{}ů. K~žádnému +zkreslení informace přitom nedochází, protože všechny znaky CM fontů +jsou v~odpovídajících \CSfont{}ech na stejných pozicích a vypadají úplně +stejně. + +Pokud \CSfont{}y vůbec nepoužíváte (nebo jen občas), bude pro vás +asi výhodné virtuální fonty cm2cs z~adresáře {\tt fonts/vf/public} +odstranit. Stejně tak se nehodí mít tyto virtuální fonty aktivní +v~mezinárodních \TeX{}ových distribucích, kde většina uživatelů \CSfont{}y +nikdy nepoužije. Tito uživatelé by asi byli velmi překvapeni, že při +prohlížení {\tt dvi} souboru se standardními CM fonty jim distribuce +generuje na disk bitmapy jakýchsi \CSfont{}ů. + +Druhá skupina virtuálních fontů s~označením cs2cm není po rozbalení +balíčku s~\CSfont{}y aktivní, protože není v~adresáři {\tt fonts/vf}, ale +v~adresáři {\tt fonts/vf-cnv}, který dvi-ovladače s~obvyklou konfigurací +neprocházejí. + +Tuto skupinu virtuálních fontů použijeme v~případě, že jsme vytvořili +v~\CSTeX{}u dokument odkazující na \CSfont{}y, a nyní jej chceme ve +formátovaném tvaru (jako soubor {\tt dvi}) poslat například do +zahraničí. Přitom předpokládáme, že příjemce nebude mít ve své \TeX{}ové +distribuci \CSfont{}y. + +Virtuální fonty cs2cm mapují všechny znaky \CSfont{}ů +na odpovídající znaky z~CM fontů. Pokud znak v~CM fontech +neexistuje, virtuální font jej nahradí kompozitem (například +písmeno+háček). Pokud tedy aplikujeme například program "dvicopy" s~těmito +virtuálními fonty, dostáváme nový {\tt dvi} soubor, který už odkazuje +jen na CM fonty, a akcentovaná písmena jsou v~tomto {\tt dvi} souboru +nahrazena kompozity. Takový "dvi" soubor můžeme poslat do zahraničí a máme +jistotu, že bude zpracovatelný na libovolné \TeX{}ové distribuci, +protože každá distribuce obsahuje CM fonty. Kvalita sazby se ovšem +zhorší, protože akcenty (coby samostatné znaky) jsou v~CM fontech +takové poněkud nedomrlé, zatímco v~\CSfont{}ech jsou kresleny společně +s~písmenem s~velikou péčí. Informace v~dokumentu +ovšem není uvedenou modifikací {\tt dvi} souboru +vůbec změněna. Výjimkou je případ výskytu jednoho z těchto čtyř znaků: +promile, ogonek (ocásek pod polské a), levá a pravá francouzská +uvozovka. Tyto znaky nelze nijak pomocí CM fontů nahradit. Pokud +dokument některý z~těchto znaků obsahuje, pak program +"dvicopy" ohlásí \uv{{\tt---missing character packet}} a ponechá místo +těchto znaků prázdná místa. + +Ve web2c distribuci \TeX{}u v UNIXu můžete pro uvedenou +konverzi "dvi" souboru z~\CSfont{}ů na CM~fonty použít příkaz: + +\begtt +VFFONTS=\$TEXMF/fonts/vf-cnv// dvicopy vstup.dvi vystup.dvi +\endtt + +Poznamenejme, že v~žádném případě nesmí "dvi" ovladač najít současně +virtuální fonty cm2cs i cs2cm. V~takovém případě dojde k~havárii, +neboť odkazy ve virtuálních fontech se dostanou do nekonečného cyklu. + + + + +\subsub Historie a budoucnost \CSfont{}ů | Historie a budoucnost CSfontu +%------------------------------------ + +Tvary akcentů \CSfont{}ů byly vytvořeny a implementovány v~jazyce +\mf{}u Petrem Novákem ve spolupráci s~českými typografy někdy na +začátku 90.~let. Autor přenechal \CSfont{}y \CSTUG{}u, který s~nimi +může libovolně nakládat. + +\mf{}ový kód byl pak v~letech 1992--1993 dále upraven Karlem Horákem. +Karel se inspiroval z~\mf{}ových zdrojů pro fonty vytvořené v~Polsku. +Zapracoval tam možnost nastavení kódování fontu a vytvořil makra +umožňující mít všechny hlavní {\tt mf} soubory se stejným +dvouřádkovým obsahem. + +Na schůzce tvůrců \CSTeX{}u na FEL v~roce 1993 bylo rozhodnuto, že +\CSfont{}y budou mít kódování podle ISO~8859-2. Později, při +implementaci \CSTeX{}u do UNIXo\-vých distribucí nepodporujících +změny xord/xchr vektorů, se ukázalo, že to bylo velmi prozíravé +rozhodnutí. + +V~roce 1993 jsem převzal údržbu \CSfont{}ů do svých rukou. Udělal jsem +jen velmi drobné změny. Poslední 28.~9.~1996: + +Písmeno Č a další akcentované kapitálky měly před tímto datem větší +výšku než kresba o~1,2pt. Opravil jsem. +Také jsem tehdy odstranil nevhodné záporné kerny: + Tě, Tř, T\"o, T\"u, T\"a, T\`a (analogicky pro Ť, Y, Ý). + Vě, Vř, V\"o, V\"u (analogicky pro F, W) +a redukoval jsem přílišné záporné kerny: + Té, Tó, Tů, Tŕ, Tá, Tú (analogicky pro Ť, Y, Ý). + +Pak jsem vývoj \CSfont{}ů zmrazil podobným způsobem, jako Knuth přestal +měnit CM~fonty. Prioritním požadavkem je, aby dokument opírající se +o~\CSfont{}y byl od roku 1996 formátován naprosto stejně dnes i kdykoli +v~budoucnu. Aby byl tento požadavek splněn, není tedy možné zasáhnout +do rozměrů znaků, kernů a ligaturních tabulek. + +V~roce 1996 jsem do \CSfont{}ů přidal virtuální fonty podporující náhradu +Computer Modern fonty a naopak. + +V~roce 1998 se podařilo dohodnout s~autorem te\TeX{}u Thomassem +Esserem, aby zařadil do své distribuce \CSfont{}y a celý \CSTeX. +Od této chvíle jsou distribuce odvozené z~te\TeX{}u implicitně +vybaveny \CSfont{}y. + +V~roce 1998 jsem také pro potřeby výstupu do formátu PDF vytvořil +variantu \CSfont{}ů, tentokrát ve formátu PostScript +Type1. Vyšel jsem z~BaKoMa Type1 implementace +CM~fontů a vytvořil jsem si program {\tt t1accent}, který k~písmenkům +přidával akcenty podle vzorových PostScriptových tahů generovaných +z~původních \CSfont{}ů \mp{}em. Na mnoha místech jsem byl nucen přistoupit +k~mikrotypografickým kompromisům~-- v~drobnostech se kresby některých znaků +\CSfont{}ů z~Type1 liší od svých originálních \mf{}ových protějšků. +Proto jsem distribuci Type1 \CSfont{}ů označil jako \uv{alpha} a do +komentáře jsem dal důrazné varování, že tyto fonty je možné používat +na vlastní riziko. Z~toho důvodu jsem také ponechal +implicitní konfiguraci programu "dvips" tak, aby program používal +léty osvědčený výstup z~\mf{}u, tedy bitmapy formátu "pk". +Type1 \CSfont{}y byly původně konfigurovány jen pro pdf\TeX. + +Rozhodnutí ponechat "dvips" pracovat implicitně s~bitmapami naráželo na +problémy. Neustále dokola se uživaté ptali, jak je možné, že výstup +z~pdf\TeX{}u je dobrý, ale při cestě dvips~-- pstopdf dostávají +roztřesená písmenka. Protože jsem byl uondán velmi častým +odpovídáním na tuto otázku, ani jsem se nakonec nezlobil, když v~roce +2001 autor te\TeX{}u rozhodl, že bude \CSfont{}y pro "dvips" implicitně +konfigurovat ve verzi Type1. Asi ty mikrotypografické kompromisy ani +tak moc nevadí, zatímco roztřesená písmenka v~PDF způsobovala oheň na +střeše. + +V~současné době existují volně dostupné nástroje, jako například +"textrace" opírající se o~"autotrace". Tyto nástroje umožní převést +\mf{}ový font do Type1 \uv{obtahováním bitmap} skoro automaticky. +Vyzkoušel jsem to na \CSfont{}ech a s~výsledkem jsem nebyl vůbec +spokojen: výsledné {\tt pfb} soubory byly asi pětkrát větší než ty +moje \uv{ručně} vyrobené. Proto jsem zatím alpha verzi Type1 formátu +\CSfont{}ů z~roku 1998 neopustil. + +Do budoucna bych velmi rád do \CSfont{}ů přidal znak euro a paragraf. +Taková změna by byla zpětně kompatibilní, takže bych se jí nebránil. +\mf{}ové zdroje pro paragraf ověřené na všech \CSfont{}ech už několik +let mám, ale nezveřejnil jsem je. \mf{}ové zdroje znaku euro by se +snadno daly převzít z~jiného \mf{}ového fontu. Největší potíž je ovšem +v~tom, že s~uvedením nové verze \CSfont{}ů dnes nestačí zveřejnit jen +\mf{}ové zdroje a metriky, ale je třeba mít okamžitě s~tím +konzistentní Type1 varianty fontů. Do manuální práce na nové verzi +Type1 varianty \CSfont{}ů se mi ale moc nechce. Je to nevděčná a rozsáhlá +práce: {\tt pfb} souborů je v~balíčku 57 a každý je třeba disassemblovat, +v~editoru přidat nové znaky a znovu převést na {\tt pfb}. +Přitom s~automatickými nástroji, jak jsem uvedl před chvílí, nejsem +spokojen. + + + +\subtitle {\tt cspsfonts.tar.gz} -- 35 základních PostScriptových fontů | +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +CSPSFONTS - 35 ZAKLADNICH FONTU + +Každý \ps{}ový RIP musí být vybaven aspoň 35 základními fonty ze sady +\uv{base~35}. Sada mimo jiné obsahuje sedm rodin textových fontů, +každá rodina obsahuje čtyři fonty (základní, kurzíva, tučný a tučná +kurzíva, \new{Helvetica navíc čtyři zúžené varianty}). +Strojopis se obvykle kombinuje z~rodiny Courier. +Pro tyto fonty je vytvořena podpora ve formě metrik v~kódování +\CSfont{}ů a virtuálních fontů, které tyto metriky mapují na +skutečné fonty, kódované samozřejmě úplně jinak. Tato podpora je +v~balíčku {\tt cspsfonts.tar.gz}, který je povinnou součástí \CSTeX{}u. + +Kódování těchto metrik je inspirováno kódováním \CSfont{}ů, ale chybí +matematické znaky ze začátku tabulky a znaky, které v běžných +\ps{}ových fontech nenajdeme (např. pozice 20: škrtátko polského l). +Na druhé straně jsou přidány znaky s~kódy 80--86 (hexadecimálně) a +některé další (např. kompletní polské \L{} a~\l). Viz následující tabulku +fontu "ptmr8z", implementující písmo Times-Roman pro \CSTeX. + +Fonty rodiny Courier mají kódování inspirováno \CSfont{}em "cstt10", +takže se na pozicích 3C, 3E, 5C, 5F a 7B až 7D znaky poněkud liší. +Toto kódování je označeno "8u" na rozdíl od kódování ostatních +PostScriptových fontů z balíčku "cspsfonts.tar.gz", které je nazváno +"8z". Tuto nejednotnost kódování známe už u~\CSfont{}ů a prapůvodně +existuje u~Computer Modern fontů. Znak vlevo na zmíněných pozicích +odpovídá kódování "8z" a znak vpravo kódování "8u". Na ostatních +pozicích je kódování "8z" a "8u" shodné. + +\def\tabitem{\hbox to.055\hsize{\hfil + \if|\testchar|\char\posnum\fi + \if A\testchar \newAbox{\char\posnum}\fi + \altchar\hfil}% + \vrule\global\advance\posnum by1} +\def\altchar{\ifcase\posnum + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\a\or\or\a\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\a\or\or\or\a\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\a\or\a\or\a\or\or\or + \fi} +\def\testchar{\ifcase\posnum + \or.\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or\or\or\or\or\or\or\or\or\or\or + \or\or\or\or\or\or A\or.\or A\or A\or A\or.\or.\or\or A\or A\or + .\or.\or.\or.\or.\or.\or.\or.\or\or.\or A\or A\or\or\or\or\or + .\or A\or.\or\or\or\or.\or\or.\or\or.\or\or.\or.\or\or.\or + .\or A\or.\or\or.\or\or.\or.\or\or\or.\or\or.\or.\or\or.\or + \or\or\or.\or\or\or.\or\or\or\or.\or\or\or\or\or\or + .\or.\or\or\or\or.\or\or.\or\or\or\or.\or\or\or.\or.\or + \or\or\or.\or\or\or.\or\or\or\or.\or\or\or\or\or\or + .\or.\or\or\or\or.\or\or.\or\or\or\or.\or\or\or\or\or + \fi} +\bigskip +\tabfont {\font\f=ptmr8z \font\tt=pcrr8u \f} +\bigskip + +{\bf Upozornění:} Ve výše uvedené tabulce jsou prázdná místa, na +kterých mohou být umístěny nedokumentované znaky. Když si vytisknete +například skutečnou tabulku fontu "ptmr8z", zjistíte, že tomu tak +skutečně je. Pokud chcete mít dokument zpracovatelný i v budoucích +verzích \CSTeX{}u, nemůžete se o tyto nedokumentované znaky opírat. +Tyto znaky byly obsazeny v rámci soukromé iniciativy Zdeňka Wagnera, +který potřeboval použít font pro více jazyků. Bohužel umístil některé +znaky na pozice, které nejsou pro budoucí rozšíření fontů vhodné. +Každý si může do volných pozic doplnit co potřebuje, ovšem s tím +rizikem, že jeho dokumenty využívající tyto pozice nemusejí být +kompatibilní s~\CSTeX{}em. + +Sada metrik balíčku "cspsfonts.tar.gz" zahrnuje následující fonty: + +{\setbrackets \catcode`/=13 \def/#1/{\skrt{#1}} +\begtt +Metrika /odkazuje na/ Odpovídající PostScriptový font +----------------------------------------------------------- +pagk8z /rpagk/ AvantGarde-Book +pagko8z /rpagko/ AvantGarde-BookOblique +pagd8z /rpagd/ AvantGarde-Demi +pagdo8z /rpagdo/ AvantGarde-DemiOblique +pagkc8z * /rpagk/ AvantGarde-Book Caps & Small Caps +pagdc8z * /rpagd/ AvantGarde-Demi Caps & Small Caps +pbkl8z /rpbkl/ Bookman-Light +pbkli8z /rpbkli/ Bookman-LightItalic +pbkd8z /rpbkd/ Bookman-Demi +pbkdi8z /rpbkdi/ Bookman-DemiItalic +pbklc8z * /rpbkl/ Bookman-Light Caps & Small Caps +pbkdc8z * /rpbkd/ Bookman-Demi Caps & Small Caps +pcrr8u /rpcrr/ Courier +pcrro8u /rpcrro/ Courier-Oblique +pcrb8u /rpcrb/ Courier-Bold +pcrbo8u /rpcrbo/ Courier-BoldOblique +pcrrc8u * /rpcrr/ Courier Caps & Small Caps +pcrbc8u * /rpcrb/ Courier-Bold Caps & Small Caps +phvr8z /rphvr/ Helvetica +phvro8z /rphvro/ Helvetica-Oblique +phvb8z /rphvb/ Helvetica-Bold +phvbo8z /rphvbo/ Helvetica-BoldOblique +phvrc8z * /rphvr/ Helvetica Caps & Small Caps +phvbc8z * /rphvb/ Helvetica-Bold Caps & Small Caps +phvrn8z !skrt[*] /rphvrrn/ Helvetica-Narrow +phvron8z !skrt[*] /rphvron/ Helvetica-Narrow-Oblique +phvbn8z !skrt[*] /rphvbrn/ Helvetica-Narrow-Bold +phvbon8z !skrt[*] /rphvbon/ Helvetica-Narrow-BoldOblique +phvrnc8z * /rphvrrn/ Helvetica-Narrow Caps & Small Caps +phvbnc8z * /rphvbrn/ Helvetica-Narrow-Bold Narrow C & Small C +pncr8z /rpncr/ NewCenturySchlbk-Roman +pncri8z /rpncri/ NewCenturySchlbk-Italic +pncb8z /rpncb/ NewCenturySchlbk-Bold +pncbi8z /rpncbi/ NewCenturySchlbk-BoldItalic +pncrc8z * /rpncr/ NewCenturySchlbk-Roman Caps & Small Caps +pncbc8z * /rpncb/ NewCenturySchlbk-Bold Caps & Small Caps +pplr8z /rpplr/ Palatino-Roman +pplri8z /rpplri/ Palatino-Italic +pplb8z /rpplb/ Palatino-Bold +pplbi8z /rpplbi/ Palatino-BoldItalic +pplrc8z * /rpplr/ Palatino-Roman Caps & Small Caps +pplbc8z * /rpplb/ Palatino-Bold Caps & Small Caps +ptmr8z /rptmr/ Times-Roman +ptmri8z /rptmri/ Times-Italic +ptmb8z /rptmb/ Times-Bold +ptmbi8z /rptmbi/ Times-BoldItalic +ptmrc8z * /rptmr/ Times-Roman Caps & Small Caps +ptmbc8z * /rptmb/ Times-Bold Caps & Small Caps +pzcmi8z /rpzcmi/ ZapfChancery-MediumItalic +\endtt +\par} + +V tabulce jsou hvězdičkou označeny ty metriky, které neodkazují \new{přímo} na +speciální \ps{}ový font, ale jsou implementovány pomocí +virtuálního fontu (Caps \& Small Caps). \skrt{Nebo se jedná o~Narrow varianty fontu +Helvetica, které jsou konfigurovány v "psfonts.map" pomocí \ps{}ové +transformace.} + +České a slovenské znaky \skrt{jsou} \new{byly} ve fontech +"8z" a "8u" implementovány +jako kompozity (tj. virtuální font je posklád\skrt{á}\new{al} +ze samostatného akcentu +a základního písmene). +\new{Tento přístup přinášel problémy: ve výsledném PDF nebylo možno +vyhledávat český text a nebylo možno přenést text clipboardem do jiné +aplikace. Proto jsem v roce 2012 zveřejnil novou verzi fontů, které +odkazují přímo na PostScriptový font, který překódovávají pomocí {\tt +/Encoding} vektoru. Bývalý argument, že nemáme jistotu, zda ve fontu naše +akcentované znaky jsou, už dávno neplatí.} +% +\skrt{Použité segmenty jsou přítomny v~každém +PostScriptovém fontu. Proto virtuální fonty po sestavení kompozitů +odkazují na metriky fontů (s písmenem "r" na začátku), které jsou již +kódovány podle StandardEncoding. Fonty v~PostScriptovém RIPu tedy +nepotřebujeme mít počeštěny ani poslovenštěny a také nepotřebujeme +měnit Encoding vektor těchto fontů na úrovni \ps{}u.} + +Program {\tt dvips} je obvykle konfigurován tak, že do výstupního +\ps{}ového kódu nezavádí žádný z~fontů \uv{base~35} a ponechá tam +jenom odkaz. Starost o~font přenechá \ps{}ovému RIPu. PostScriptové +fonty z~\uv{base35} tedy principiálně není nutné pro provoz v \TeX{}u +instalovat na disk a nejsou tedy ani obsaženy v~balíčku +"cspsfonts.tar.gz". \new{Programu {\tt dvips} je doporučeno nabídnout +mapovací soubor {\tt cs-a35-nodownload.map}.} + +\new{Program {\tt pdftex} je naopak konfigurován tak, že do výstupního PDF +vkládá všechny použité fonty. Pokud je použit Adobe font z~\uv{base35}, je za něj +připravena a zavedena náhrada z~dílny URW, která je přítomna v běžných +\TeX{}ových distribucích. Programu {\tt pdftex} je tedy potřeba nabídnout +jiný mapovací soubor {\tt cs-a35-urwdownload.map}.} + +Pokud \skrt{si chcete prohlížet} \new{jste si prohlíželi} +{\tt dvi} soubor odkazující na fonty +z~\uv{base~35} například starší verzí programu {\tt xdvi}, pak tento +program potřeb\skrt{uje}\new{oval} (alespoň na přechodnou dobu) bitové mapy těchto fontů. +Pokud bitové mapy v~instalaci ještě \skrt{neexistují} \new{nebyly}, +program zavol\skrt{á}\new{al} skript +{\tt mktexpk}, který pro vytvoření rastru vol\skrt{á}\new{al} dále Ghostscript. +To je implementace \ps{}ového RIPu, která musí obsahovat fonty +z~\uv{base~35}.% +\footnote*{Z licenčních důvodů Ghostscript neobsahuje originální fonty od + Adobe, ale jen jejich hodně dobré náhražky od firmy URW. + Rozdíl většinou pouhým okem nerozeznáte.} +Odtud se fonty konvertují do bitových map {\tt pk} a odtud je +nakonec použije program {\tt xdvi}. + +Poznamenejme ještě, že novější verze programu {\tt xdvi} obsahují +tzv.~modul "t1lib", díky němuž {\tt xdvi} umí přímo číst PostScriptové +fonty a vykreslovat je na obrazovku. Není tedy potřeba vůbec vyrábět +{\tt pk} bitmapy fontů, ani na přechodnou dobu. Náhražky fontů od +firmy URW z~\uv{base~35} jsou proto v~novějších distribucích +\TeX{}u přímo instalovány a nespoléhá se v~tomto případě +na Ghostscript. Nemusíte pak ani spoléhat na přítomnost fontů +v PostScriptovém RIPu v tiskárně. Novější verze web2c \TeX{}u +nabízejí pro takový případ možnost použít u~programu +"dvips" přepínač "-Pdownload"\new{{\tt35}}. + + +\subsub Historie a budoucnost balíčku {\tt cspsfonts.tar.gz} | +%----------------------------------------------------------- + Historie a budoucnost balicku cspsfonts + +Balíček "cspsfonts.tar.gz" má méně bohatou historii než \CSfont{}y. +Tento balíček začal vznikat v~září roku 1994. Tehdy jsem zjistil, že +popisy kompozitů v~"AFM" metrice pomocí řádků "CC" jsou správně převáděny +programem "afm2tfm" na odpovídající kompozity ve vytvářeném virtuálním +fontu. Problém byl jen v tom, že originální "AFM" metriky od Adobe +neobsahovaly popisy všech kompozitů potřebných pro český a slovenský +jazyk. Z toho důvodu jsem si vytvořil program "a2ac"~\cit{a2ac}, který +na základě přehledné tabulky kompozity do "AFM" metrik doplnil a +současně doplnil kerningové informace pro nově vytvářené znaky. Za +použití tohoto programu pak vznikla sada metrik a virtuálních fontů +s~písmenem "c" na začátku (např. "cptmr"). \new{České a slovenské znaky měly +plovoucí akcenty.} + +V roce 1996 pak uveřejnil pan Wagner nové metriky generované stejným +způsobem, ovšem opravil několik estetických nedostatků a navíc metriky +nazval podle doporučení Karla Berryho ("8z" a "8t" na konci). Od té +doby jsou v balíčku "cspsfonts.tar.gz" obsaženy metriky pana Wagnera. + +\skrt{Konečně v} \new{V} roce 1999 jsem musel po konzultaci s~Karlem Berrym metriky +pro rodinu Courier přejmenovat z původního "*8t" na nynější "*8u", +protože názvy s~"8t" na konci nám kolidovaly s~názvy stejných fontů +v~kódování podle Corku. To je zatím poslední změna v tomto +balíčku. + +Chyst\skrt{ám} \new{al jsem} doplnění balíčku {\tt cspsfonts.tar.gz} o~nové metriky kódované +jako "8z", které mapují další běžně používané \ps{}ové fonty. +Jako první na řadě se nabízí přidání metrik "8z" pro volně +šířenou rodinu fontů Charter písmolijny BitStream. + +\newstart +V roce 2012 jsem přidal do merik fontů z tohoto balíčku znak Euro a další +znaky (viz vybarvené znaky v tabulce). Bohužel po letech už nebyly k +dispozici zdroje, ze kterých metriky generoval kdysi pan Wagner. +Zejména nebyl k dohledání správný soubor {\tt xl2.enc}. V metrikách tedy bylo +plno nedokumentovatelných slotů, o kterých jsem těžko mohl soudit, co byly +zač. Takové sloty považuji za chybu. Proto jsem ustoupil od zpětné +kompatibility a přegeneroval všechny metriky kompletně znovu. Je možné že sazba +těmito fonty někdy +výjde mírně jinak než kdysi, ale aspoň máme metriky, které přesně +korespondují souboru {\tt xl2.enc}. Protože se mi nepodařilo dohledat AFM +metriky fontů přímo od adobe takové, které obsahují znak {rcaron}, fonty +jsem vygeneroval z metrik URW. Generující skript je obsahem balíčku. + +Z balíčku {\tt cspsfonts.tar.gz} jsem přemístil soubory {\tt ctimes.tex} +atd. do balíčku {\tt csplain.tar.gz}, kam jsem přidal další podobné soubory. + +\newstop + +\subtitle Formát \csplain{} | FORMAT CSPLAIN +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\new{Formát \csplain{} má svou stránku na +{\tt http://petr.olsak.net/csplain.html}. Je tam poněkud stručněji řečeno +víceméně totéž, jako zde.} + +Popíšu \skrt{jenom} \new{zejména} odlišnosti formátu \csplain{} (povel {\tt csplain}) od +Knuthova formátu plain (povel {\tt tex}), popsaného +v~\TeX{}booku~\cit{texbook}. + + +\subsub Překódování v~input procesoru \TeX{}u | Prekodovani v input procesoru TeXu +%-------------------------------------------- + +\skrt{Vstupní text pro formát \csplain{} se předpokládá 8bitový.} Kódování +češtiny nebo slovenštiny vstupního textu je takové, jaké +běžně používáte v~systému, kde je váš \TeX{} instalován. O~tomto kódování +budeme nadále mluvit jako o~{\it vstupním kódování}. + +Ze vstupního kódování je třeba text překódovat do {\it vnitřního +kódování}, se kterým interně pracuje \TeX. Toto vnitřní kódování je +v~\csplain{}u implicitně nastaveno na ISO-8859-2 nezávisle na operačním +systému. V~tomto kódování musí být připraveny fonty použité +v~dokumentu. \CSfont{}y a fonty zaváděné pomocí "\input ctimes", +"\input cbookman" atd. tuto vlastnost mají. + +Překódování textu \skrt{do vnitřního kódování můžete udělat ručně před +spuštěním \TeX{}u (to moc nedoporučuji) nebo} je \skrt{tato konverze} +implementován\skrt{a}\new{o} do input procesoru samotného \TeX{}u. Jak je to uděláno +závisí na použité distribuci \TeX{}u. Nejběžnější metody nastavení +input procesoru budou zmíněny níže. + +Problém vztahu vstupního a vnitřního kódování ilustruji na +příkladě. Nechť je ve vstupním souboru napsáno "\char174=Ž". Po +zpracování \csplain{}em musím na výstupu dostat: Ž=Ž. Tímto příkladem +jsem naznačil dvě věci. Za prvé: některá makra mohou být závislá na +zvoleném vnitřním kódování \TeX{}u (zde makro "\char174", které má +vytisknout písmeno Ž). Pokud použiju v~systému povel {\tt csplain} bez +doplňujících maker, pak předpokládám, že kód 174 znamená písmeno~Ž. + +Za druhé: pokud vpravo od rovnítka vidím v~editoru, kterým zpracovávám +vstupní dokument, písmeno~Ž, pak se tento znak musí dostat do +vnitřních částí \TeX{}u pod kódem 174, ačkoli v~tom editoru je třeba +kódován úplně jinak. Konverze by měla být implementována (závisle +na použitém vstupním kódování) v~input procesoru +\TeX{}u. Důležité je, že to ve svém editoru {\it vidím jako Ž\/} a +očekávám na základě této vizuální informace jednotné chování \csplain{}u +na všech systémech, kde existují editory, kterými se mohu do zdrojového +textu podívat a vidět~Ž (ačkoli různé operační systémy mohou toto~Ž +kódovat různě). + +\new{Pokud se zdrojový soubor \csplain{}u přenáší mezi systémy s různým +kódováním, pak předpokládáme, že příjemce se na soubor podívá ve svém +editoru a když uvidí rozsypaný čaj, nejprve si obdržený soubor +opraví}. + +\new{Jak bylo řečeno, konverze mezi vstupním kódováním a vnitřním kódováním +probíhá na úrovni input procesoru \TeX{}u. To} +\skrt{Konverzi do jednotného vnitřního kódování} je možné realizovat +v~různých distribucích \TeX{}u různě. Pročtěte si dokumentaci k~použité +distribuci. V~em\TeX{}u se pro tyto účely používá tzv.~TCP tabulka +zaváděná při inicializaci formátu. Ve velmi starých web2c distribucích +\TeX{}u (léta 1992--1997) můžete najít tzv.~Škarvadovu záplatu, která +nastavovala kódování podle proměnné prostředí systému. Později se pro +překódování používal enc\TeX (rok 1997), který nastavoval +xord/xchr vektor input procesoru \TeX{}u pomocí +přidaných primitivů (viz~\cit{enctex} a \cit{putovani}). \skrt{Dnes} +\new{Ještě později} +(po roce 1998) se v~distribucích web2c, te\TeX{}, \TeX{}live a +odvozených používají tzv.~TCX tabulky, +které se vyvolají z~příkazového řádku pomocí přepínače +"-translate-file" nebo "-default-translate-file". +\new{Dnes doporučuji se k enc\TeX{}u vrátit, protože jeho současná verze nabízí +(na rozdíl od TCX tabulek) novou možnost: konverzi vícebytového kódování na vnitřní jednobytové, +takže zvládne vstup kódovaný v UTF-8. Toto kódování je od roku 2012 +doporučeno jako implicitní vstupní kódování \csplain{}u.} + +Se správným nastavením překódovací tabulky úzce souvisí schopnost +\TeX{}u zapisovat přímo znaky použité abecedy \skrt{8bitový text} +do logů a do "\write" souborů \new{zpětně ve vstupním kódování.} +\skrt{(tam musí být text zpětně konvertován do vstupního kódování).} +\TeX{} implicitně pro výstup do těchto souborů používá pro znaky +s~kódem větším než 127 hexadecimální přepis uvozený dvěma znaky "^". +To je pro \csplain{} nepřípustné, a proto je nutné v~\TeX{}u rozšířit +tzv.~tabulku znaků povolených pro tisk do logů a pracovních +souborů. Ta je ve web2c distribuci rozšířena automaticky zavedením~TCX +tabulky: znaky, které jsou v~této tabulce zmíněny, se stávají povolenými pro +tisk. To vysvětluje nutnost používání tabulky "il2-cs.tcx" v~UNIXových +distribucích, přestože tabulka pouze deklaruje překódování +\uv{jedna ku jedné}. \new{Detekuje-li \csplain{} při generování formátu +aktivovaný enc\TeX, nastaví se tisknutelnost znaků s kódem větším než 127 +automaticky}. + +Věnujte prosím při implementaci \csplain{}u do jiných \TeX{}ových +distribucí zvýšenou pozornost právě problémům překódování v~input +procesoru a problému množiny povolených znaků pro tisk do logů a +pracovních souborů. Pokud se chcete přesvědčit o~správnosti +implementace \csplain{}u, vyzkoušejte test cstrip (viz~\cit{cstrip}). + + +\subsub Inicializace formátu | Inicializace formatu +%--------------------------- + +Pokud se vám podařilo \csplain{}em zpracovat tento dokument, pak máte +formát \csplain{} již inicializovaný a můžete směle tuto sekci +přeskočit. Pokud používáte \skrt{nejnovější verzi} \TeX{}live, pak stačí +napsat na příkazový řádek {\tt csplain dokument} a \new{použije se +předgenerovaný formát, nebo se} +\skrt{pokud tak činíte +poprvé,} formát \skrt{se} automaticky vytvoří. Také můžete inicializovat +formát \csplain{} pomocí nástroje {\tt texconfig} například +tak, že odstraníte komentářové znaky u~slova {\tt csplain} v~souboru +{\tt texmf/web2c/fmtutil.cnf} a spustíte "texconfig init". + +Následující text popisuje možnost vytvoření formátu \uv{ručně}. +\newstart +\csplain{} v \TeX{}live se vstupním kódováním UTF-8 vygenerujete za použití +enc\TeX{}u (přepínač {\tt-enc}) z příkazové řádky takto: + +{\font\tt=cstt9 +\begtt +pdfetex -ini -enc "\let\enc=u \input csplain.ini" +\endtt +\par} + +Takto vygenerovaný formát implicitně vystupuje do DVI. Dále pdf\csplain{} +vygenerujete z příkazové řádky: + +{\font\tt=cstt9 +\begtt +pdfetex -jobname=pdfcsplain -ini -enc "\let\enc=u \input csplain.ini" +\endtt +\par} + +Pozorování: těsně před "\dump" je ve výpisu a v~log souboru napsáno toto hlášení: +{\tt jobname=pdfcsplain, PDF output initialised.} Takže nyní je implicitně +nastaven výstup do PDF. + +Soubory {\tt csplain.fmt} a {\tt pdfcsplain.fmt} je třeba umístit někam, kde je +\TeX{}ová distribuce najde. Místo použití výše uvedených příkazů se můžete pokusit +editovat konfigurační soubor v~\TeX{}ové distribuci a spustit generování +formátu prostředky, které k tomu účelu nabízí distribuce. + +Spuštění \csplain{}u (resp. pdf\csplain{}u) provedete jedním z příkazů + +\begtt +pdfetex -fmt=csplain.fmt dokument +csplain dokument +pdfetex -fmt=pdfcsplain.fmt dokument +pdfcsplain dokument +\endtt + +Druhý a čtvrtý řádek obsahuje typické zkratky implementované různým způsobem +v~závislosti na operačním systému a \TeX{}ové distribuci. + +Další možností je vygenerovat csplain s jednobytovým vstupním kódováním pomocí tcx +tabulek. To se dělá přepínačem "-translate-file", za kterým následuje +název použité tcx tabulky. +Zbylý text v této sekci většinou dokresluje situaci před deseti a více lety. + +\newstop + +Příkazem {\tt initex} označuji v tomto textu spuštění \TeX{}u +v~inicializačním módu, kdy \TeX{} dokáže načítat tabulky vzorů dělení pro +různé jazyky a ukládat nabyté vědomosti příkazem "\dump" do +binárních souborů, tzv. formátů. Dříve na to existoval zvláštní +program ini\TeX, dnes se často používá nějaký přepínač: +{\tt tex -ini}, {\tt tex /i} atd. + +Formát \csplain{} (soubor {\tt csplain.fmt}) vygenerujete jednoduše: + +\begtt +initex csplain.ini +\endtt + +Používat jej pak můžete pomocí příkazu + +\begtt +tex &csplain dokument +\endtt + +V~UNIXu musíte použít "tex \&csplain dokument", aby se znak "&" +neinterpretoval na úrovni shellu. Nezapomeňte ale +nastavit správnou překódovací \new{tcx} tabulku způsobem obvyklým v~použité +\TeX{}ové distribuci. Níže uvádím několik příkladů. + +\begitems \parindent=0pt +* {\bf te\TeX{}, \TeX{}Live, vstupní kódování ISO-8859-2}: + +\skrt{inicializace: {\tt tex -ini csplain.ini}} + +\skrt{obsah skriptu {\tt csplain}:}\hfil\break\null\hfil + \skrt{{\tt tex -fmt=csplain -default-translate-file=il2-cs \char`\$@}} + +\newstart +inicializace: "tex -ini -translate-file=il2-cs csplain.ini" + +instalace povelu {\tt csplain}:\quad + "ln -s tex csplain" +\newstop + +spuštění \csplain{}u: "csplain dokument" + +\medskip +* {\bf te\TeX{}, \TeX{}Live, vstupní kódování podle Kamenických} +(hypotetický příklad): + +inicializace: "tex -ini csplain.ini" + +obsah skriptu {\tt csplain}:\hfil\break\null\hfil + "tex -fmt=csplain -default-translate-file=kam-cs $@" + +spuštění \csplain{}u: "csplain dokument" + +\medskip +* {\bf web2c\TeX{} s~enc\TeX{}em, vstupní kódování ISO-8859-2}: + +inicializace: "tex -ini csplain.ini" + +instalace povelu {\tt csplain}:\quad + "ln -s tex csplain" + +spuštění \csplain{}u: "csplain dokument" + +\medskip +* {\bf web2\TeX{} s~enc\TeX{}em, vstupní kódování podle Kamenických}: + +inicializace: {\tt tex -ini \newAbox{-enc}} "'\let\enc=k \input csplain.ini'" + +instalace povelu {\tt csplain}:\quad + "ln -s tex csplain" + +spuštění \csplain{}u: "csplain dokument" + +\medskip +* {\bf em\TeX{}, vstupní kódování podle Kamenických}: + +inicializace: "htex386 /i /8 /mt26000 /Ckamenic.tcp csplain.ini" + +obsah dávky {\tt csplain.bat}:\hfil\break\null\hfil + "htex386 /mt26000 &csplain %1 %2 %3 %4 %5 %6 %7" +\enditems + +Zastavím se na chvíli u~em\TeX{}u. Parametr {\tt /mt} zde zvětšuje +prostor pro ukládání vzorů dělení slov tak, aby se do formátu vešlo +celkem pět vzorů dělení: anglické vzory dělení a dále české i +slovenské vzory dělení obě v~kódování ISO-8859-2 a Cork% + \footnote*{Možnost zapnout kódování Cork jako alternativní + vnitřní kódování \csplain{}u je implementována od verze "<Feb 2000>". + Podrobněji se o~tom zmiňuji v~sekci~4.5.}. +Paměť pro vzory dělení v~\TeX{}u se skládá ze dvou částí. První +je nastavována interní \TeX{}ovou proměnnou trie\_size (ta +koresponduje s~přepínačem {\tt/mt}) a druhá proměnnou trie\_op\_size +(viz~\cit{tbn}, str.~301). Bohužel, hodnota trie\_op\_size není +v~em\TeX{}u měnitelná a je ve verzích "tex.exe" a "tex386.exe" nastavena na +malou hodnotu: pět vzorů dělení slov se tam nevejde. Proto jsem +v~příkladu použil "htex386.exe", ve kterém je trie\_op\_size nastavena na +dostatečně velkou hodnotu. Pokud chcete v~em\TeX{}u použít "tex.exe" +nebo "tex386.exe", pak musíte generovat formát \csplain{} jen se třemi +vzory dělení -- vyloučit alternativní kódování Cork. Toho lze +dosáhnout jednak tím, že použijete verzi \csplain{}u starší než +"<Feb. 2000>", nebo tak, že potlačíte opakované volání vzorů +dělení pro Cork pomocí "\let\Cork=\relax" takto: + +\begtt +tex /i/8/mt17000/Ckamenic.tcp \let\Cork=\relax \input csplain.ini +\endtt + +Poznamenejme, že potlačit načítání vzorů dělení v~alternativním +kódování (Cork) lze pomocí "\let\Cork=\relax" ve všech distribucích +\TeX{}u. Nejedná se tedy jen o~em\TeX{}ovou záležitost. Nicméně +v~ostatních mě dostupných distribucích nejsou problémy s~výchozí +hodnotou paměti \TeX{}u pro vzory dělení a je možno načíst bez +nutnosti cokoli nastavovat všech pět vzorů dělení. + + +\subsub Výchozí nastavení v~\csplain{}u | Vychozi nastaveni v CSplainu +%-------------------------------------- + +Aby byla zachována co největší kompatibilita s~mezinárodním formátem +plain a aby se necítili Češi nebo Slováci vzájemně utlačováni, jsou při +startu \csplain{}u inicializovány americké vzory dělení slov a zapnuto +větší mezerování za tečkami (tzv.~"\nonfrenchspacing"). + +Pro přepnutí na české vzory dělení slov použijte povel "\chyph" a +do slovenštiny přepnete pomocí "\shyph". Oba povely navíc zapnou +stejnoměrné mezerování i za tečkou (tzv.~"\frenchspacing"). Takové +mezerování je v~české a slovenské sazbě obvyklejší. Zpět na americké +vzory dělení a větší mezerování za tečkou přejdete pomocí povelu +"\ehyph". + +Příklad: Chceme-li v~\csplain{}u zpracovat český dokument, stačí na +začátku dokumentu uvést "\chyph": + +\begtt +\chyph +Tady už bude vše fungovat česky. +\bye +\endtt + +\newstart +Přepínače "\chyph", resp. "\shyph", resp. "\ehyph" je možné v dokumentu používat kdekoli +(například i uvnitř odstavce) na oddělení částí dokumentu, které podléhají +českým resp. slovenským resp. anglickým pravidlům dělené slov. + +Příkazy pro akcenty "\v", "\^", "\`", "\'", "\v", {\tt\char`\\\char`\"} +mají implicitně původní význam z~plainu, tj. pracují s primitivem "\accent", +který sestavuje znak z akcentu a základu. +To menusí být žádoucí, protože pak nefunguje dělení slov. Příkazem +"\csaccents" se uvedené příkazy předefinují tak, že expandují přímo na +akcentované znaky jako celek. Začne fungovat dělení slov v případech, kdy +jsou slova napsána "takov\'ym podivn\'ym zp\r usobem".~ +Nově je po "\csaccents" definován příkaz "\r" pro +akcent kroužku. Konečně se správně vysázejí i sekvence "\v d" nebo "\'i", které +původně činily potíže. + +\newstop + +\skrt{{\bf Upozornění:} nedoporučuji v~dokumentech pro \csplain{} používat styl +{\tt czech.sty} resp. {\tt slovak.sty}. +Tím se totiž dokument zcela zbytečně stává +závislým na externím balíku maker, který není příliš stabilní. Pokud +k~tomu nemáte vážné důvody, styl {\it nepoužívejte}. Styl je +vyvíjen +spíše pro uživatele \LaTeX{}u, zatímco uživatel \csplain{}u si vystačí +s~povely {\tt\char`\\chyph} a {\char`\\shyph}. V~budoucnu přestěhuji tyto styly +z~archivního souboru {\tt csplain.tar.gz} (kam nepatří a jsou tam jen +z~historických důvodů) do archivu {\tt cslatex.tar.gz}.} + +Rozměr tiskového zrcadla (výška a šířka textu) je implicitně nastaven +tak, aby všechny čtyři okraje měly velikost 1~palec na papíru formátu +A4. To je významný rozdíl oproti nastavení ve formátu plain, kde se sice +také předpokládají okraje 1~in, ale na papíru US-letter. Níže uvádím +tabulku nastavení rozměrů zrcadla v~\csplain{}u a pro srovnání tytéž parametry +v~originálním plainu: + +\begtt + CSplain plain +----------------------------------------------------- +\hsize = 159.2mm \hsize = 6.5in (165.1mm) +\vsize = 239.2mm \vsize = 8.9in (226.06mm) +\hoffset = 0mm \hoffset = 0in +\voffset = 0mm \voffset = 0in +\endtt + +\newstart +Kromě znaků anglické abecedy jsou v \csplain{}u za písmena považovány i +všechny akcentované znaky české a slovenské abecedy, takže i tyto znaky mají +nastaven "\catcode=11" a dále mají nastaveny odpovídající "\lccode" a "\uccode". +\newstop + +Výchozí fonty zavedené do formátu \csplain{} jsou \CSfont{}y. Pro matematiku +jsou zavedeny původní Computer Modern fonty. Na rozdíl od plainu formát +\csplain{} nezavádí do paměti při inicializaci desítky dalších fontů +označených jako "\preloaded", protože další fonty se dají zavést +povelem "\font" až v~době potřeby. Na starodávných strojích bylo možná +užitečné zavést fonty \uv{do rezervy} už při inicializaci formátu, aby +pak příkaz "\font" použitý v~dokumentu moc nezdržoval. Při dnešních +rychlostech počítačů je toto opatření zcela zbytečné, a proto +v~\csplain{}u nepoužité. + +Matematická sazba funguje v~\csplain{}u zcela stejně, jako v~originálním +plainu. Je to díky tomu, že implicitně zavedené \CSfont{}y jsou +konzervativním rozšířením Computer Modern fontů. Při zavádění jiných +fontů do dokumentu je potřeba počítat při matematické sazbě +s~některými obtížemi (viz následující dvě sekce). + + +\newstart + +\subsub Makro {\tt opmac.tex} | +%---------------------------- + Makro opmac.tex + +Makro {\tt opmac.tex} je od konce roku 2012 součástí balíčku \csplain{}u. +Napíšete-li do záhlaví dokumentu + +\begtt +\chyph \input opmac +\endtt +% +pak máte k dispozici další makra, která řeší následující věci: +automatickou tvorbu obsahu, číslování, kapitoly, sekce, křížové reference, +verbatim prostředí, vkládání obrázků, bibtexové odkazy. Tuto sadu svých maker +dávám k dispozici s tím, že jsem si vědom, že makra neřeší všechno a ve +všech souvislostech, nicméně kladu důraz na jednoduchost a srozumitelnost +maker. Předpokládám, že si je uživatelé předefinují k obrazu svému, nicméně +usnadním začínajícímu uživateli první kroky směrem k \csplain{}u. + +WWW stránka nabízející OPmac je {\tt http://petr.olsak.net/opmac.html}. +Uživatelká dokumentace k makrům je v souboru {\tt opmac-u.pdf} +a technická dokumentace v souboru {\tt opmac-d.pdf}. +\newstop + + +\subsub Použití \ps{}ových fontů v~\csplain{}u | +%------------------------------------------ + Pouziti PostScriptovych fontu v CSplainu + +Součástí \CSTeX{}u v~balíčku {\tt cspsfonts.tar.gz} jsou kromě metrik +také soubory, které předefinují textové fonty z~výchozích \CSfont{}ů na +fonty některé rodiny z~\uv{base~35}. Jak jsme již uvedli v předchozí +kapitole, fonty z balíčku {\tt cspsfonts.tar.gz} jsou kódovány +v~ISO-8859-2, tedy v~souladu s~vnitřním kódováním použitým +v~\csplain{}u. Níže je tabulka souborů, které zavádějí \ps{}ové +fonty do \TeX{}u primitivem "\font": + +\begtt +soubor Rodina fontů +-------------------------------- +cavantga.tex Avantgarde Book +cbookman.tex Bookman +chelvet.tex Helvetica +cncent.tex New Century +cpalatin.tex Palatino +ctimes.tex Times Roman +\endtt +% +Chcete-li například přepnout do písma Bookman, stačí napsat na začátek +dokumentu: + +\begtt +\input cbookman +\endtt + +Pokud sami pracujete s~primitivem "\font" například pro zavedení +větších velikostí fontů u nadpisů, doporučuji použít následující +konstrukci: + +\begtt +\font\titulfont=\fontname\tenbf\space scaled \magstep2 +\endtt +% +Tato konstrukce není závislá na konkrétním fontu, takže když později +změníte před takovou konstrukcí "\input bookman" například na +"\input cpalatin", změní se automaticky i font pro nadpisy. + +\newstart +Uvedené soubory {\tt cavantga.tex}, \dots, {\tt ctimes.tex} +zavádějí čtyři běžné varianty textových fontů "\tenrm", "\tenit", +"\tenbf", "\tenbi" a k nim pátou variantu "\tentt" implicitně ve velikosti +10pt. Uživatel místo přímého použití uvedených přepínačů používá obvykle makra +"\rm", "\it", "\bf", "\bi", "\tt". + +Je možné tyto jednou zavedené fonty kdykoli později změnit do jiné velikosti. +Například po "\def\sizespec{at12pt}\resizeall" bude všech pět variant fontů +připraveno ve velikosti 12pt. Individuálně lze změnit velikost každému fontu +zvlášť příkazem "\resizefont" jehož parametr je fontový přepínač (nikoli +makro). Přepínač změní velikost svého fontu podle makra "\sizespec". +Pozor: makra "\resizefont" a "\resizeall" sice změní velikosti fontů +odpovídajícím přepínačům, ale nenastaví aktuální sazbu novým fontem, takže +bez následného použití přepínače nevidíte výsledek. Je tedy nutno například +psát: "\def\sizespec{at12pt}\resizeall\tenrm". + +Změna velikosti fontů má lokální +platnost, takže třeba makro pro sazbu titulu může vypadat takto: + +{\font\tt=cstt9 +\begtt +\def\titul#1{\centerline{\def\sizespec{at20pt}\resizefont\tenbf\tenbf#1}} +\endtt +\par} + +Makro "\resizeall" lze rozšiřovat o další fontové přepínače mimo uvedených +pět. O toto rozšíření se postará makro "\regfont <přepínač>". Po použití +tohoto makra je "<přepínač>" tzv. \uv{registrovaný}, takže bude měnit +velikost svého fontu po spuštění makra "\resizeall". Fontové +soubory {\tt cavantga.tex}, \dots, +{\tt ctimes.tex} nastavují obvykle jen základních pět variant a žádné nové +přepínače neregistrují. Zavádí-li ale +fontový soubor fonty i pro další varianty, měl by použít "\regfont". + +Fontové soubory {\tt cavantga.tex}, \dots, {\tt ctimes.tex} automaticky načtou +další soubor maker {\tt tx-math.tex}. +Tato makra zavedou do matematické sazby TXfonty. Ty jsou vizuálně +kompatibilní s Times\-Roman a mnoha dalšími fonty. + +Po zavedení makra "tx-math.tex" jsou k dispozici stovky příkazů pro jednotlivé +znaky matematické sazby (nadmnožina znaků z AMS\TeX{}u) a dále jsou +(kromě přepínače "\cal" z plain\TeX{}u) k dispozici +následující přepínače matematických abeced: + +\begtt +\frak % matematická fraktura +\script % skript mnohem zakroucenější než \cal +\bbchar % písmena kreslená dvěma tahy +\bf % bold sans-serif písmo +\bi % bold slanted sans-serif písmo, někdo tím značí vektory +\endtt + +Kompletní soubor matematických fontů je makrem "tx-math.tex" zaveden ve +velikosti 10/7/5pt (základní/indexová/indexindexová velikost). Ovšem tuto +implicitní volbu je možné kdykoli v dokumentu změnit pomocí (například): + +\begtt +\setmathsizes[12/8.4/6]\normalmath +\endtt + +Příkaz "\normalmath" pozmění všechny matematické fonty do potřebných nových +velikostí deklarovaných pomocí "\setmathsizes". Příkaz "\boldmath" dělá +totéž, ale připraví místo \uv{normálních} fontů jejich tučné varianty. Tento +příkaz se hodí použít do maker s nadpisy. Změny fontů mají lokální platnost. + +Kromě "tx-math.tex" je k dispozici analogické makro "ams-math.tex", které +ponechává v matematické sazbě \CS{}fonty a přidává k nim kompletní sadu +\AMS{} fontů. Toto makro nabízí pro práci s fonty (volba matematické abecedy, +změna velikostí a duktu) stejné příkazy jako makro "tx-math.tex". + +Obě makra navíc nabízejí dva přepínače, které mění chování proměnných, +číslic a fontů pro sazbu $\sin$, $\cos$, $\lim$, atd.: + +\begtt +\itvariables % proměnné a \rm z aktuálního textového fontu +\mitvariables % proměné ze speiálního fontu, \rm taky. +\endtt + +Volba "\itvariables" je implicitní v "tx-math.tex", protože se předpokládá, +že \uv{kolem} je textový font se kterým by měly být proměnné v matematice v +souladu. Naopak v "ams-math.tex" je implicitní "\mitvrariables", aby se +využilo mírně modifikované kurzívy vyvinuté speciálně pro matematickou sazbu +v Computer Modern. \uv{Kolem} se totiž předpokládá běžný text v +\CS{}fontech nebo ve vizuálně kompatibilních fontech. + +Kromě souborů {\tt cavantga.tex}, \dots, {\tt ctimes.tex} jsou v balíčku +\csplain{}u připraveny další obdobné, jejichž názvy větčinou začínají na +{\tt cs-}. Například {\tt cs-antt.tex} zavádí fonty Antykwy Toru\'nske. +Přehled o všech takových souborech by se měl objevit na terminálu po +{\tt\char`\\input cs-all}. Toto makro nevykoná nic, jen vypíše seznam +dostupných fontových souborů. Iniciativě k přidání dalších fontových souborů +se meze nekladou. + +\newstop + + +\skrt{% +Po zavedení rodiny \ps{}ových fontů je potřeba dát pozor na +matematickou sazbu. Jedná se o~veškerou sazbu realizovanou ve +zdrojovém textu mezi dolary. Ta i po změně textových fontů pracuje +s~původními \CSfont{}y a Computer Modern fonty. Jedině tak je dosaženo, +že realizace všech matematických symbolů z~plainu zůstává zachována. +% +Napíšete-li po zavedení nového textového fontu v~textu například +číslovku 2 bez použití dolarů, dostanete dvojku z~nového +fontu. Použijete-li ale "$2$", na výstupu bude dvojka z~\CSfont{}ů. +Toto míchání fontů není estetické. Chcete-li se mu aspoň částečně +vyhnout, použijte po zavedení rodiny fontů povel {\tt\char`\\setsimplemath}, +například:} + +{\catcode`/=0 \catcode`[=1 \catcode`]=2 +\begtt +/skrt[\input cbookman \setsimplemath] +\endtt +\relax}% +\skrt{Příkaz zavede i pro fonty, které \TeX{} používá při sazbě mezi dolary +(\TeX{}ová rodina 0 a 1), odkazy na nově použité \ps{}ové fonty. Tento +příkaz je ale potřeba použít s~velkou opatrností, protože bude fungovat +zřejmě jen jednoduchá matematika. Například řecké symboly, které +použité rodiny fontů neobsahují, nenávratně ztratíte. Navíc matematické +symboly a natahovací závorky (\TeX{}ová rodina 2 a 3) zůstávají i +nadále v~Computer Modern, takže se míchání typů fontů zcela nevyhnete.} + +\skrt{Pokud chcete používat složitější matematickou sazbu kombinovanou +s~Post-}\break\skrt{Scriptovými fonty, pak máte dvě možnosti:} + +\skrt{1. Nastavit {\tt\char`\\mathcode} všech matematických + symbolů tak, aby byly + použity například znaky z~PostScriptového fontu Symbol. Matematické + znaky z~tohoto fontu jsou navrženy jako doplněk k~fontu Times Roman, + ale hodí se i k~jiným PostScriptovým fontům. Bohužel, natahovací + závorky a velké operátory (jedna ze specialit \TeX{}u) v~tomto fontu + nejsou, takže tyto objekty je nutné ponechat v~Computer Modern. + Abyste nemuseli {\tt\char`\\mathcode} pracně nastavovat, doporučuji použít + makro OFS~\cit{OFS}.} + +\skrt{2. Zakoupit nějaký komerční matematický font včetně natahovacích + závorek. Vhodný je například MathTimes firmy Y\&Y. + Pro šťastné majitele této sady fontů je v~\csplain{}u + distribuován soubor {\tt cmt.tex}, takže pokud na začátku dokumentu + uvedete} + +{\setbrackets +\begtt +!skrt[\input ctimes] +!skrt[\input cmt] +\endtt +% +\relax}\skrt{pak budete mít i matematickou sazbu v~\uv{Times-Roman stylu} se vším + všudy včetně řeckých symbolů a natahovacích závorek. Jen některé + drobnosti (například skákavé číslice v~plainu dosažené pomocí + "\fam=1") musíte udělat jinak. Přečtěte si manuál k~zakoupené sadě + fontů. +} + +\skrt{Matematické fonty v~\uv{Times-Roman stylu} se dají kombinovat i + s~mnoha textovými \ps{}ovými fonty dynamické antikvy s~dostačujícím + estetickým výsledkem. Podstatně horší je kombinovat dynamickou antikvu + textového \ps{}ového fontu se statickou antikvou Computer Modern. To + je důvod, proč se nákup sady fontů MathTime vyplatí.} +{\hbadness=4000\par} + +\new{Pokud chcete používat rozsáhlé množství fontů sofistikovaným +způsobem v matematické i textové sazbě, můžete +použít balíček OFS~\cit{OFS}.} + + +\newstart + +\subsub UTF-8 kódovaný \csplain{} | UTF-8 kodovany csplain +%-------------------------------- + +Od roku 2012 je doporučeno implicitně generovat \csplain{} se vstupním +kódováním UTF-8 pomocí enc\TeX{}u. Každý znak mimo ASCII je v UTF-8 kódován +dvěma nebo více byty. Tato sekce pojednává o vlastnostech takto generovaného +formátu. Poznáte jej podle toho, že do logu a na terminál napíše: + +\begtt +The utf8->iso8859-2 re-encoding of Czech+Slovak alphabet + activated by encTeX +\endtt + +Vygenerovaný formát zaručí správné zpracování ASCII znaků. Dále je při +výchozím nastavení zaručeno správné zpracování jen znaků české a +slovenské abecedy, tedy znaků: + +\medskip +{\spaceskip=2pt +Á á Ä ä Č č Ď ď É é Ě ě Í í Ĺ ĺ Ľ ľ Ň ň Ó ó Ö ö Ô ô +Ŕ ŕ Ř ř Š š Ť ť Ú ú Ů ů Ü ü Ý ý Ž ž +}\medskip + +Tyto znaky jsou z UTF-8 kódu mapovány na interní jeden byte podle kódování +\CS{}fontů. Dále jsou implicitně mapovány UTF-8 kódy všech znaků, které +mají svou řídicí sekvenci definovanou v plainu nebo v \csplain{}u. Jsou +to tyto znaky: + +{\catcode`/=13 \def/#1/{{\rm \csname#1\endcsname}} +\begtt +plain: \ss /ss/ \l /l/ \L /L/ \ae /ae/ \oe /oe/ \AE /AE/ \OE /OE/ + \o /o/ \O /O/ \i /i/ \j /j/ \aa /aa/ \AA /AA/ + \S /S/ \P /P/ \copyright /copyright/ \dots /dots/ \dag /dag/ \ddag /ddag/ +csplain: \clqq /clqq/ \crqq /crqq/ \flqq /flqq/ \frqq /frqq/ \promile /promile/ +\endtt +\par} + +Pokud je na vstupu jakýkoli jiný UTF-8 kód, implicitně je nemá \csplain{} +mapován, takže se vypíše na terminál a do logu následující varování: + +\begtt +WARNING: unknown UTF-8 code: `X = ^^xx^^xx' (line: ??) +\endtt +% +a do tiskového výstupu se vloží na dané místo černý čtvereček. Uživatel si musí +takový znak dodefinovat. Například po hlášení: + +{\catcode`!=0 +\begtt +WARNING: unknown UTF-8 code: `!~N = ^^c3^^91' (line: 42) +\endtt +\relax}% +si uživatel do záhlaví dokumentu například doplní definici: + +\begtt +\mubyte\Ntilde ^^c3^^91\endmubyte % UTF-8 kód mapován na \Ntilde +\def\Ntilde{{\~N}} % sekvence \Ntilde definována +\endtt +% +Po této úpravě se +při zpracování dokumentu už varování neobjeví a vstupní kód se zpracuje jako +řídicí sekvence "\Ntilde", která expanduje na "\~N", takže v tiskovém +výstupu se objeví~\~N. + +Pokud se řídicí sekvence mapovaná pomocí "\mubyte" objeví v argumentu +"\write" souboru, nebude expandovat, ale promění se při zápisu do souboru +zpětně do odpovídajícího UTF-8 kódu. + +Během "\write" a při zápisu do logu se také zpět na UTF-8 kódy proměňují +interní byte, které byly mapovány. Implicitně tedy jsou to znaky české a +slovenské abecedy vyjmenované výše. Ostatní nemapované interní byte s kódem +větším jak 127 se přepisují podle dvouzobákové konvence např.~takto:~"^^ad". +Jestliže do deklarace dokumentu napíšete +"\xprncodes=1", budou se ostatní nemapované byty vypisovat přímo. + +Příkazy "\mubytein", "\mubyte" a "\endmubyte" jsou součástí enc\TeX{}u a +jsou popsány v jeho dokumentaci. Stručně řečeno +"\mubytein=0" vypíná přechodně použití kódovací tabulky a +"\mubyte token string\endmubyte" zařadí do kódovací tabulky +další údaj: "string" bude na vstupu převeden na interní "token" v~\TeX{}u +a při činnosti "\write" bude "token" zpětně převeden na "string". + +Při použití jiných fontů pomocí "\input ctimes" (atd., viz sekci 4.5) je zavolán +soubor "chars-8z.tex", který mapuje další UTF-8 kódy na řídicí sekvence, +jež jsou pomocí "\chardef" propojeny se znakem fontu. Jsou to tyto znaky: + +{\font\f=ptmr8z +\catcode`/=13 \def/#1/{{\f\char#1}} +\begtt +\euro /134/ \trademark /136/ \registered /138/ \ellipsis /128/ +\textbullet /131/ \sterling /132/ \currency /164/ +\endtt +\par} + +Soubor "chars-8z.tex" navíc předefinovává makra plainu "\P", "\S", +"\dag", "\ddag", "\copyright", "\lslash", "\Lslash" pomocí "\chardef", aby +tyto řídicí sekvence vedly přímo na znak ve fontu. + +V balíčku {\tt enctex.tar.gz} (a podruhé i v {\tt csplain.tar.gz}) jsou +připraveny soubory, které mapují UTF-8 kódy celých bloků UNICODE tabulky na +řídicí sekvence a definují jejich výchozí chování. Můžete použít: + +\begtt +\input utf8lat1 % Latin-1 Supplement U+0080--U+00FF +\input utf8lata % Latin Extended-A U+0100--U+017F +\endtt +% +a možná v budoucnu i další. Po zavedení těchto souborů se nově deklarované +UTF-8 kódy mapují na řídicí sekvenci, např. \"e se mapuje na "\edieresis" a +tato sekvence expanduje na příslušné sestavení akcentu, v tomto příkladě na +{\tt\char`\\\char`\"e}. Na interní byte zůstávají mapovány jen znaky české a +slovenské abecedy. Pokud ale {\it před zavedením těchto souborů\/} použijete +"\input t1code" (přechod na interní kódování T1, tj. podle Corku), pak se na +interní byte mapují také všechny znaky definované v T1 kódování. Pro nově +mapované řídicí sekvence jsou použity definice ze souborů {\tt utf8lat*.tex} +jen tehdy, pokud tyto řídicí sekvence nejsou definovány dříve. + +Pokud předložíte \csplain{}u (generovaném pro UTF-8 kodování vstupu) +dokument kódovaný jinak, než v UTF-8, skoro jistě se dočkáte chybového +hlášení: + +{\font\tt=cstt9 +\begtt +! UTF-8 INPUT IS CORRUPTED ! May be you are using another input encoding. +\endtt +\par} + +Je ovšem možné snadno přejít do módu, při němž UTF-8 kódovaný \csplain{} +pracuje stejně jako \csplain{} s kódováním ISO-8859-2. Stačí na začátek +dokumentu napsat: +\begtt +\mubytein=0 \mubyteout=0 \mubytelog=0 \xprncodes=1 +\endtt +% +Tuto práci vykoná také soubor "utf8off.tex", tj. stačí napsat "\input utf8off". +Tento soubor navíc definuje makro "\clearmubyte", které vymaže +data deklarovaná pomocí "\mubyte...\endmubyte". + +Je dokonce možné mít na vstupu při sazbě jediného dokumentu různé soubory +různě kódované. Není nutné při přechodu z jednoho kódování přepínat na +druhé. Stačí na začátek dokumentu napsat: +\begtt +\input mixcodes +\endtt +a od této chvíle je možné na vstupu střídat texty kódované dle UTF-8, +ISO-8859-2 nebo CP1250 dle libosti. Všechny výstupy pomocí "\write" jsou +kódovány podle UTF-8 a jsou tedy opět připraveny k načtení. + +V předchozím odstavci není zcela přesná formulace \uv{střídat kódování dle libosti}. +Platí to jen pro český text. Slovákům nefunguje \frqq\v l\flqq{} v~CP1250. Pokud jim to +vadí, napíšou "\shyph" před voláním "\input mixcodes". Pak ale zase +nefunguje \frqq ž\flqq{} v~ISO-8859-2. Tyto dva znaky jsou v uvedených dvou kódováních +poněkud v~konfliktu. UTF-8 vstup ale funguje bez problémů. + +\newstop + + +\subsub Použití fontů kódovaných podle Corku (T1 kódování) nebo v Unicode | +%-------------------------------------------------------------------- + Pouziti fontu kodovanych podle Corku nebo v Unicode + +Od verze \csplain{}u "<Feb. 2000>" načítá tento formát při +inicializaci tabulky vzorů dělení nejen v~ISO-8859-2, ale též +v~kódování podle Corku (tzv.~T1 kódování). Tyto tabulky \uv{čekají} na +případ, kdy uživatel bude chtít použít ve svém dokumentu fonty, +jejichž metriky jsou kódované v~T1. Může se totiž stát, že uživatel +nebude chtít připravovat metriky a virtuální fonty pro nově zakoupené +\skrt{\ps{}ové} fonty ručně (pomocí programů "a2ac" a "afm2tfm" nebo pomocí +"fontinst"), ale bude chtít využít již hotové metriky nabízené +v~\TeX{}ových archivech. Tyto hotové metriky jsou ale většinou v~T1 +kódování. + +\newstart + +Od verze \csplain{}u "<Nov. 2012>" načítá tento formát při své inicializaci +tabulky vzorů dělení také v UNICODE, pokud detekuje, že je použit \TeX{}ový +program, který interně dovede pracovat v UNICODE. Takovým \TeX{}ovým +programem může být Lua\TeX{}, Xe\TeX{} nebo Omega. + +\newstop + +Upozorňuji na určitá omezení použití \csplain{}u s~T1 kódovanými fonty: + +\begitems +* Všechny fonty v~celém dokumentu musejí být kódovány jednotně + v~ISO-8859-2 nebo v~T1 \new{nebo v UNICODE}. + V~dokumentu nelze fonty \skrt{obou}\new{těchto} kódování jednoduše míchat. +* \csplain{} {\it implicitně} nastavuje vnitřní kódování do + ISO-8859-2. Změníte-li tuto vlastnost, pak použitý povel v~systému + se už nesmí nazývat {\tt csplain}. +* Změnit vnitřní kódování \TeX{}u příkazem "%&" na prvním řádku + dokumentu je možné ve web2c distribucích \TeX{}u a odvozených. + V~jiných instalacích nemusí být tato vlastnost možná. Proto je + třeba počítat s~tím, že dokument opírající se o~tento příkaz + nemusí být zcela přenositelný na jiné implementace \TeX{}u. +\enditems + + + +Přepnutí na vnitřní kódování podle Corku uděláte příkazem +"\input t1code". \newstart Přepnutí na kódování UNICODE provedete pomocí +"\input ucode". Toto by měl být první příkaz v dokumentu, pak teprve +následuje "\chyph" nebo "\input opmac" nebo načítání fontových souborů. +\newstop + +\skrt{Kromě toho,} \new{Nemáte-li UTF-kódovaný csplain,} +\skrt{se} musíte \new{se} postarat o~to, aby se vstupní +kódování správně konvertovalo na vnitřní kódování \TeX{}u. Například +ve web2c distribuci použijete volbu "-translate-file". +Příklad použití T1 kódovaného fontu: + +\begtt +%&csplain -translate-file=il2-t1 +\input t1code %% Některé definice závislé na kódování +\chyph %% Příkaz nyní zapne tabulku 15 místo tabulky 5 +\font\f=ptmr8t %% Zavedení T1 kódovaného fontu Times-Roman +\f +Tady je český text zpracovaný uvnitř \TeX{}u v kódování T1 +včetně použití správné tabulky pro dělení slov. +\end +\endtt + +Takto připravený soubor \TeX{}ujte na web2c instalaci nikoli povelem +{\tt csplain}, ale raději povelem {\tt tex}, tedy: + +\begtt +tex dokument +\endtt + +Program {\tt tex} z~web2c implementace se podívá do prvního řádku dokumentu +a pokud tam najde dvojici "%&", zavede formát a TCX tabulku (která +pozměňuje xord/xchr vektor) podle toho, co je za touto dvojicí napsáno. +Pokud byste použili skript {\tt csplain} obsahující přepínač +"-translate-file=il2-cs", nebude to fungovat, +protože přepínač na příkazovém řádku má vyšší prioritu než v~dokumentu. +V~novějších implemetacích příkazu {\tt csplain} je použit skript, +který obsahuje přepínač +"-default-translate-file=il2-cs". Ten má prioritu nižší, takže +pak lze při zpracování dokumentu s~konstrukcí "%&" použít i příkaz +{\tt csplain}. + +Do distribuce \csplain{}u jsou zařazeny soubory {\tt dcfonts.tex}, +{\tt ecfonts.tex} \skrt{a pro inspiraci též {\tt ttimes.tex}}. Pokud na +začátku dokumentu například napíšete: + +\begtt +%&csplain -translate-file=il2-t1 +\input ecfonts +\chyph +\endtt +\noindent +převádíte celou sazbu do EC fontů kódovaných podle Corku. V~zaváděném +souboru "ecfonts.tex" je proveden "\input t1code", takže se o~to +přímo v~dokumentu už není potřeba starat. + +\skrt{Při zavádění \ps{}ových fontů (například použitím {\tt ttimes.tex}) +nastávají stejné problémy s~matematickou sazbou, jako při použití +\ps{}ových fontů kódovaných v~ISO-8859-2. Tyto problémy jsou popsány +v~předchozí sekci.} + +\newstart +Pokud dáte "\input t1code" před "\input ctimes", (nebo "\input cavantga", +atd.), budou požadované fonty zavedeny v T1 kódování. Takže k sazbě +Bookmanem v T1 kódování stačí v UTF-8 kódovaném \csplain{}u napsat: + +\begtt +\input t1code \input cbookan +\endtt + +Bohužel T1 kódované fonty jsou generovány programem fontinst, který má ve +svých konfiguračních souborech chybu pro písmena ť a ď. Tato písmena jediná nejsou +v těchto fontech realizovaná jako přímé znaky a jsou poskládána z komponent +naprosto odstrašujícím způsobem. Kdo opraví tuto chybu ve fontinstu, nechť o +tom, prosím, reportuje na příslušných místech, aby mohli správci distribucí +přegenerovat {\tt 8t}~metriky. + +Pokud dáte v 16bitovém \TeX{}u (tj. Xe\TeX, Lua\TeX{} nebo v něčem podobném) +"\input ucode" před "\chyph" a "\input lmfonts", bude čeština uvnitř \TeX{}u +zpracována v Unicode a tištěna Latin Modern Unicode fonty. +Jiné soubory pro čtení fontů zatím pro 16bitový \TeX{} upraveny nejsou. + + +\subsub Vzory dělení slov v různých jazycích a kódováních | +%------------------------------------------------------ + Vzory deleni slov v ruznych jazycich a kodovanich + +Implicitně načítá \csplain{} při generování formátu následující +vzory dělení: + +\begitems +* "\USenglish=0" ... (implicitní vzor z plain\TeX{}u) v ASCII kódování +* "\czILtwo=5" ... čeština v ISO-8859-2 +* "\skILtwo=6" ... slovenština v ISO-8859-2 +* "\czCork=15" ... čeština v T1 kódování +* "\skCork=16" ... slovenština v T1 kódování +* "\czUnicode=115" ... čeština v Unicode (jen, pokud je detekován + Xe\TeX, Lua\TeX, nebo jiný 16bitový \TeX) +* "\skUnicode=116" ... slovenština v Unicode (jen, pokud je detekován + Xe\TeX, Lua\TeX, nebo jiný 16bitový \TeX) +\enditems + +Jednotlivé vzory dělení se v dokumentu zapínají pomocí "\uslang", "\czlang" +a "\sklang". Příkaz "\uslang" zapne také "\nonfrenchspacing" a ostatní +zapínají "\frenchspacing". Jsou zachovány staré názvy těchto přepínačů: +"\ehyph=\uslang", "\chyph=\czlang" a "\shyph=\sklang". Přechod k novým +názvům s aspoň dvěma písmenky pro jazyk je důsledkem nové +možnosti v \csplain{}u použít 54 různých jazyků. + +V roce 2012 byl zcela přepracován soubor "hyphen.lan", který je použit +\csplain{}em pro čtení vzorů dělení slov. Na řádcích 48 až 160 +tohoto souboru jsou za dvojtečkami skryty jazyky a kódování zhruba ve tvaru: + +\begtt +\let\czCork=y % Czech +\let\skCork=y % Slovak +:\let\deCork=y % German +:\let\frCork=y % French +:\let\plCork=y % Polish +:\let\cyCork=y % Welsh +:\let\daCork=y % Danish +... +:\let\saUnicode=y % Sanskrit +:\let\ruUnicode=y % Russian +:\let\ukUnicode=y % Ukrainian +:\let\hyUnicode=y % Armenian +:\let\asUnicode=y % Assamese +\endtt + +Stačí si vybrat jazyky, odstranit příslušnou dvojtečku a znovu vygenerovat +formát \csplain{}. Nebo můžete přidat vzor bez zásahu do souboru +"hyphen.lan" vhodně zvolenou zprávou na příkazovém řádku při generování +formátu. Například:\par\nobreak + +{\font\tt=cstt9 +\begtt +pdftex -ini -enc "\let\plCork=y \let\enc=u \input csplain.ini" +nebo +pdftex -ini -enc "\let\allpatterns=y \let\enc=u \input csplain.ini" + +\endtt + +} +Jakmile je načten vzor dělení pro nový jazyk, je automaticky připraven k +tomu odpovídající přepínač, tedy například "\delang" po načtení "\deCork". +Seznam všech načtených vzorů dělení je v makru "\pattlist". + +Na začátku zpracování dokumentu jsou inicializovány vzory dělení "\..ILtwo". +Vzory dělení typu "\..Cork" budou fungovat až po "\input t1code" a vzory +dělení "\..Unicode" budou fungovat až po "\input ucode". Pozor: \csplain{} +neřeší správné nastavení "\lccode" a "\uccode" v~16bitovém \TeX{}u v rozsahu +větším, než jsou znaky z české a slovenské abecedy. Takže při použití +exotických jazyků si uživatel musí nastavit k tomu správná "\lccode". + +\csplain{} definuje pro každý jazyk s načtenými vzory dělení makro "\lan:<číslo>" jako +"<zkratku jazyka>", například "\lan:5" stejně jako "\lan:15" expandují na +"cz". Programátor maker toho může využít. Programátor maker dále může využít +toho, že makra "\czlang", "\delang" atd. volají makro +"\initlanguage{<zkratka jazyka>}". Toto makro implicitně neudělá nic, ale +programátor maker si je může předefinovat dle svého. Protože je +"\initlanguage" zavolán těsně za "\language=<číslo>" v~kontextu: + +\begtt +\..lang -> \language=<číslo>\relax + \initlanguage{<značka>}\frenchspacing + \lefthyphenmin=<lhm>\righthyphenmin=<rhm>% + \message{<text>} +\endtt +% +je možné, aby programátor maker odebral další inteligenci maker "\..lang" +a převzal je do vlastnívch rukou. Třeba definuje: + +\begtt +\def\initlanguage #1#2#3\message#4{#3\csname lg:#1\endcsname} +\endtt + +Toto řešení přebírá z makra "\..lang" jen nastavení registrů "\lefthyphenmin" a +"\righthyphenmin", ale ruší implicitní "\message" i nastavení +"\frenchspacing". Místo toho se předpokládá, že budou definována makra +"\lg:<značka>", ve kterých budou tyto věci (a možná mnoho dalších jako třeba +nastavení implicitního fontu) řešeny pro každý jazyk individuálně. + +Přepínání mezi kódováními funguje pomocí "\corklangs" ... "\czlang" +(nyní je aktivní vzor dělení "\czCork") a dále třeba ... "\iltwolangs" +... "\czlang" (nyní je aktivní vzor dělení "\czILtwo"). +Makra "\iltwolangs", "\corklangs", a "\unicodelangs" jsou spuštěna při +"\input il2code", "\input t1code" a "\input ucode", takže uživatel to nemusí +řešit. + +Je potřeba si uvědomit, že 8bitovým \TeX{}em sice můžete vynutit načtení +Unicodových vzorů dělení slov, ale bude vám to málo platné, tedy k ničemu. +Dále je potřeba vědět, že v 16bitovém \TeX{}u můžete načíst vzory dělení +"\..ILtwo" a "\..Cork" korektně jen pro češtinu a slovenštinu, protože další +vzory dělení jsou čteny pomocí triku s aktivními znaky, který dekóduje +8bitový vstup. Nicméně typicky v~16bitovém \TeX{}u není inicializován +8bitový vstup, takže se to poláme. + +\newstop + +\subsub Nové řídicí sekvence \csplain{}u oproti Knuthovu plainu | +%----------------------------------------------------------- + Nove ridici sekvence CSplainu + +\bgroup \leftskip=\parindent \parindent=0pt + +\hbox{\skrt{\tt\char`\\austrian}} \skrt{Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + rakouskou němčinu (hodnota 2). + Vzory dělení pro tento jazyk implicitně nejsou zavedeny.} + +\newstart +"\bi" Přejde na tučnou krurzívu. Příkaz doplňuje sadu příkazů "\rm", "\it" a +"\bf" definovanou v plain\TeX{}u. +\newstop + +"\cmaccents"\nobreak Nastaví řídicí sekvence "\^", "\`", "\'", "\v" a + "\"{\tt\char`\"} tak, aby fungovaly stejně, jako + v~originálním plainu (použití primitivu "\accent"). + Sekvence "\r" je nedefinována. Toto je defaultní + nastavení. Pokud slovo obsahuje akcentovaný znak zapsaný + některou z~těchto sekvencí, pak pro ně nefunguje + automatické dělení. + +"\cmaccentsmesage" Způsobí výpis informace do logu a na terminál + o~použití příkazu "\cmaccents". Pokud vás tato zpráva + obtěžuje, nastavte "\let\cmaccentsmesage=\relax" před + vyvoláním příkazu "\cmaccents". + +\newstart +"\corklangs" Inicializace vzorů dělení podle T1 kódování (Cork). \newstop + +"\csaccents"\nobreak Nastaví řídicí sekvence "\^", "\`", "\'", "\v", + "\"{\tt\char`\"} a "\r" tak, aby expandovaly na + odpovídající 8bitové reprezentace znaků podle ISO-8859-2 + (po "\input t1code" pak expandují na kódování podle + Corku). Sekvence "\r u" expanduje na ů. Pokud slovo + obsahuje akcentovaný znak zapsaný některou z~těchto + sekvencí, pak pro ně funguje i automatické dělení slov. + +"\csaccentsmesage" Způsobí výpis informace do logu a na terminál + o~použití příkazu "\csaccents". Pokud vás tato zpráva + obtěžuje, nastavte "\let\csaccentsmesage=\relax" před + vyvoláním příkazu "\csaccents". + +"\clqq" Vytiskne levé české uvozovky (\clqq). + +"\crqq" Vytiskne pravé české uvozovky (\crqq). + +\hbox{"\chyph" \new{={\tt\char`\\czlang}}} + Aktivuje tabulku dělení slov podle registru "\czech" a + nastaví stejnoměrné mezerování za tečkami + (tzv.~"\frenchspacing"). \new{Dále nastavuje + {\tt\char`\\lefthyphenmin=2} a {\tt\char`\\righthyphenmin=3}. Druhý registr + lze změnit na dvojku, vzory dělení jsou na to připraveny.} + +"\czech" \nobreak Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + češtinu (hodnota "\iltwoczech" nebo "\toneczech" podle toho, + zda nebylo nebo bylo použito "\input t1code"). + +\hbox{"\ehyph" \new{={\tt\char`\\uslang}}}\nobreak + Aktivuje tabulku dělení slov podle registru "\USenglish" a + nastaví větší mezerování za tečkami + (tzv.~"\nonfrenchspacing"). Toto nastavení je výchozí. + +\hbox{\skrt{\tt\char`\\english}} +\nobreak \skrt{Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + britskou angličtinu (hodnota 4). + Vzory dělení pro tento jazyk implicitně nejsou zavedeny.} + +"\extrahyphenchar" Alternativní znak spojovníku (-). Kód 156. + Po "\input t1code" není toto makro definováno. + +"\extrahyphens"\nobreak Nastaví rozdělovací znak pro běžné textové fonty na + "\extrahyphenchar". Defaultně je v~plainu jako rozdělovací znak + nastaven znak minus (ASCI~45), což může činit v~českém + textu komplikace. \TeX{} totiž v~případě rozdělovacího znaku + přímo ve vstupním textu může dělit tak, že znak neopakuje + na dalším řádku. Po "\extrahyphens" bude mít dělicí + znak kód 156, což je kód, který se na vstupu nevyskytuje. + Máme tím zaručeno, že ve slovech \uv{je-li} nebude \TeX{} + dělit vůbec. Jinou aplikací je použití speciální metriky + nebo dokonce speciálního tvaru pro "\extrahyphenchar". + +"\flqq" Levé francouzské uvozovky (\flqq), které se v~češtině a + němčině používají vpravo. + +"\frqq" Pravé francouzské uvozovky (\frqq), které se v~češtině a + němčině používají vlevo, tedy \frqq takto\flqq. + +\hbox{\skrt{\tt\char`\\french}} + \skrt{Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + francouzštinu (hodnota 3). + Vzory dělení pro tento jazyk implicitně nejsou zavedeny.} + +\hbox{\skrt{\tt\char`\\german}} + \skrt{Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + němčinu (hodnota 1). + Vzory dělení pro tento jazyk implicitně nejsou zavedeny.} + +\hbox{"\iltwoczech"\new{={\tt\char`\\czILtwo}}} + Konstanta 5 rezervovaná pro číslo tabulky vzorů dělení slov + pro češtinu při kódování fontů podle ISO-8859-2. + +\newstart +"\iltwolangs" Inicializace vzorů dělení podle ISO-8859-2 (implicitní).\newstop + +\hbox{"\iltwoslovak"\new{={\tt\char`\\skILtwo}}} + Konstanta 6 rezervovaná pro číslo tabulky vzorů dělení slov + pro slovenštinu při kódování fontů podle ISO-8859-2. + +"\ogonek" Vytvoří polský akcent pod písmenem: \ogonek a. + +\newstart +"\pattlist" Seznam všech načtených vzorů dělení. \newstop + +"\promile" Vytiskne znak \promile. + +\newstart +"\regfont <přepínač>" Provede registraci fontového přepínače. Tedy přidá +do existujícího makra "\resizefontall" další dva tokeny: +"\resizefont <přepínač>". + +"\resizeall" Provede "\resizefont" podle aktuláně nastaveného "\sizespec" na +sekvence "\tenrm", "\tenit", "\tenbf", "\tenbi" a "\tentt" a případně další +registované fontové přepínače. Příklad:\hfil\break +"\def\sizespec{at12pt}\resizeall \tenrm"\hfil\break +"Nastavená \it velikost 12pt \bf funguje \bi všude." + +"\resizefont <přepínač>"\nobreak Argumentem musí být fontový "<přepínač>", tj. sekvence + dříve deklarovaná pomocí "\font". Tento "<přepínač>" pozmění +po činnosti příkazu "\resizefont" svůj význam: odkazuje na stejný font ale ve velikosti nastavené podle obsahu +makra "\sizespec". Naříklad: "\def\sizespec{at14pt}\resizefont\tenbf". +Od této chvíle je "\tenbf" tučný font (stejný, jako byl původní "\tenbf") +ve velikosti 14pt. Změna významu je lokální. + +"\resizefontskipat"\nobreak Pomocné makro pro "\resizefont". +\newstop + +\hbox{"\shyph"\new{={\tt\char`\\sklang}}} + Aktivuje tabulku dělení slov podle registru "\slovak" a + nastaví stejnoměrné mezerování za tečkami + (tzv.~"\frenchspacing"). + +\newstart +"\sizespec" Makro spolupracující s příkazem "\resizefont". Makro +"\sizespec" je buď prázdné, nebo +obsahuje \uv{{\tt at<dimen>}}, nebo \uv{{\tt scaled<number>}}. Nezapomeňte +na klíčová slova {\tt at} resp. {\tt scaled}. + +\newstop + +"\slovak" Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + slovenštinu (hodnota "\iltwoslovak" nebo "\toneslovak" podle toho, + zda nebylo nebo bylo použito "\input t1code"). + +\newstart +"\tenbi" Font-selector definovaný jako "\font\tenbi=csbxti10". Je totiž +užitečné mít preloadovanou fontovou čtveřici "\tenrm", "\tenit", "\tenbf" a +"\tenbi". +\newstop + +\hbox{"\toneczech"\new{={\tt\char`\\czCork}}} + Konstanta 15 rezervovaná pro číslo tabulky vzorů dělení slov + pro češtinu při kódování fontů podle Corku. + +\hbox{"\toneslovak"\new{={\tt\char`\\skCork}}} + Konstanta 16 rezervovaná pro číslo tabulky vzorů dělení slov + pro slovenštinu při kódování fontů podle Corku. + +\newstart +"\unicodelangs" Inicializace vzorů dělení v Unicode.\newstop + +"\USenglish" Registr rezervovaný pro číslo tabulky vzorů dělení slov pro + americkou angličtinu (hodnota 0). + +"\uv" Makro pro uvozovky. Používá se "\uv{takto}". Makro je + definováno tak, aby se uvnitř jeho argumentu dala použít + verbatim konstrukce. To ale způsobí, že je potlačen + kerning před pravou uvozovkou. Pokud nepoužíváte verbatim + konstrukce v~argumentu uvozovek, doporučuji makro + předefinovat jednoduše na: + +\begtt +\long\def\uv#1{\clqq#1\crqq}. +\endtt + +{\bf Poznámka:} \csplain{} nedefinuje makro pro ,jednoduché` uvozovky, protože + \CSfont{}y neobsahují pro tyto uvozovky speciální znaky. Můžete + ale místo nich použít čárku a apostrof třeba takto: + +\begtt +\long\def\singleuv#1{,#1`} +\endtt +\par\egroup + + + +\newstart +Při generování UTF-8 \csplain{}u se použije enc\TeX, který přidává primitivy +"\mubyte", "\endmubyte", "\mubytein", "\mubyteout", "\mubytelog", +"\specialout", "\noconvert", "\xordcode", "\xchrcode" a "\xprncode". +Během generování je načten soubor {\tt utf8unkn.tex}, který mapuje +neznámé kódy na "\warntwobytes" a "\warnthreebytes" a tyto sekvence definuje +jako makra. Dále definuje makra "\badutfinput", "\missingutfchar" a +"\xprncodes".{\hbadness=4000\par} +\newstop + +\bigskip +\skrt{{\bf Přidání vzorů dělení slov dalších jazyků}} +\par\nobreak\bigskip + + +\skrt{\csplain{} implicitně načítá jen anglické vzory dělení (US) a české a +slovenské. Od verze {\tt <Feb. 2000>} navíc načítá české a slovenské vzory +dělení nejen v~kódování ISO-8859-2, ale i v~kódování podle Corku. +Anglické vzory dělení jsou implicitně aktivní a přepínáme na ně pomocí +{\tt\char`\\ehyph}. České vzory dělení se zapínají pomocí +{\tt\char`\\chyph} a slovenské +pomocí {\tt\char`\\shyph}.} + +\skrt{Pokud potřebujete přidat další jazyk, pak před generováním formátu +\csplain{} editujte soubor {\tt hyphen.lan}. Tam najdete příklady doplnění +vzorů dělení němčiny nebo francouzštiny (stačí odkomentovat +odpovídající řádky). Podle těchto příkladů můžete analogicky zařadit +potřebný další jazyk. Nezapomeňte v~souboru {\tt hyphen.lan} také +definovat přepínač na nové vzory dělení. +Pro němčinu definujeme například přepínač {\tt ghyph} takto:} +{\hbadness=3000\par} + + + +{\catcode`!=\active \def!#1!{\skrt{#1}} +\begtt +!\def\ghyph{\language=\german! + !\lccode`\'=`\'! + !\frenchspacing! + !\lefthyphenmin=2! + !\righthyphenmin=2 }! +\endtt + +} +\skrt{Nakonec přegenerujte formát způsobem popsaným v~sekci 4.2.} + +\skrt{Vzory dělení západoevropských jazyků jsou většinou kódovány podle +ISO-8859-1, přičemž kódování Cork je nadmnožinou tohoto kódování. Je +tedy možné přepnout pomocí {\tt\char`\\input t1code} na začátku dokumentu do +Corku, použít fonty kódované podle Corku a pak přepínat mezi češtinou +a třeba němčinou střídavě pomocí přepínačů +{\tt\char`\\chyph} a {\tt\char`\\ghyph}.}{\hbadness=6500 \par} + +\skrt{Vzory dělení exotických jazyků jsou kódovány ve svém specifickém +kódování, ke kterému musíme sehnat font stejně kódovaný. Po přepnutí +do nového jazyka musíme přepnout i na tento font. Dále je nutno řešit +otázku možné kolize vstupního kódování češtiny/slovenštiny se vstupním +kódováním pro nový jazyk. Je proto bezpečnější si pro speciální znaky +jazyka udělat makra, která expandují na znak podle kódování fontu, a +psát vstupní text pomocí těchto maker.} + + +\subsub \csplain{} a \AMS\TeX | CSplain a AMSTeX +%------------------------- + +\AMS\TeX{} můžete používat v~plainu i \csplain{}u bez nutnosti generovat +kvůli tomu formátový soubor. Máte-li dokument v~\AMS\TeX{}u, napište +jednoduše na jeho začátek: + +\begtt +\input amstex +\endtt +% +a dále můžete dokument zpracovat příkazem \csplain{}. + + +\subsub pdf\TeX{} + \csplain{} = pdf\csplain{} | +%--------------------------------------- + pdfTeX + CSplain = pdfCSplain + +Pokud vygenerujete formát \csplain{} pdf\TeX{}em, je potřeba jej nazvat +jinak, aby byl odlišen od formátu \csplain{} pro originální +\TeX{}. Proto je v~\CSTeX{}u zvoleno jméno "pdfcsplain.fmt". +Dále je potřeba připravit příkaz "pdfcsplain", který spustí +pdf\TeX{} s~formátem "pdfcsplain.fmt" a zajistí případné překódování +na úrovni input procesoru pdf\TeX{}u stejně, jako do dělá příkaz +"csplain". Pokud uživatel nepoužil ve svých makrech +konstrukce měnící sazbu při použití pdf\TeX{}u, měl by dostat +příkazem "pdfcsplain" naprosto stejný výstup jako při použití +příkazu "csplain". Pouze s~tím rozdílem, že výstup nebude v~"dvi" +souboru, ale v~"pdf". + +Ve web2c \TeX{}u a odvozených distribucích lze generovat formát +příkazem + +\begtt +pdftex -ini -fmt pdfcsplain csplain.ini +\endtt +% +a příkaz "pdfcsplain" v~UNIXu implementovat jako skript s~obsahem + +\begtt +pdftex -fmt pdfcsplain -default-translate-file=il2-cs $@ +\endtt + +Toto je pouze příklad implementace. Na jiných operačních systémech a +jiných \TeX{}ových distribucích se situace může trochu lišit. + +Poznamenejme, že v~te\TeX{}u a odvozených distribucích většinou +stačí napsat "pdfcsplain dokument", a pokud jste "pdfcsplain" +ještě nepoužili, vygeneruje se automaticky. + + + +\subsub Historie a budoucnost \csplain{}u | Historie a budoucnost CSplainu +%------------------------------------- + +\csplain{} vznikl v~roce 1992 jako jednoduché a minimální rozšíření +Knuthova \hbox{plainu} používající \CSfont{}y a akceptující 8bitový vstup. +Jeho vytvoření bylo motivováno zařazením do em\TeX{}ové distribuce, +která se připravovala k~rozesílání členům \CS{}TUGu. + +\csplain{} se opíral a stále opírá o~starší makra {\tt hyphen.lan} a +{\tt plaina4.tex}, která už měl Olin Ulrych vytvořena dříve. +\csplain{} v~době svého vzniku načítal české vzory dělení, které +vytvořil Láďa Lhotka heuristicky bez použití slovníků a programu +"patgen". Já jsem pro \csplain{} vytvořil {\tt csplain.ini} a makro +{\tt csfonts.tex}, umožňující při generování formátu číst přímo Knuthovo +makro {\tt plain.tex}, a přitom natáhnout místo CMfontů \CSfont{}y. + +V~roce 1994 byly vzory dělení slov Ládi Lhotky vyměněny za nové české +vzory dělení od Pavla Ševečka, který na to použil slovník a "patgen". +V~rámci své firmy tyto vzory dělení prodává komerčním firmám pro +potřeby DTP programů, jako byly Ventura, PageMaker nebo Quark. Dnes +jsou tyto vzory dělení také například ve Wordu. Aby Pavel Ševeček +odlišil volně šířené vzory dělení pro \CSTUG{} od komerčně šířených, +volně šířené vzory dělení mírně modifikoval. Tvrdí se, že běžný +uživatel nepozná rozdíl v~kvalitě vzorů dělení komerčních a volně +šířených. Ševečkovy vzory dělení slov jsou výrazně kvalitnější než +původní Lhotkovy, a proto jsme u~těchto vzorů dělení zůstali. + +Opuštěním Lhotkových vzorů dělení došlo k~poslední změně +v~\csplain{}u, která může způsobit zpětnou nekompatibilitu: tj. dokumenty +vytvořené v~\csplain{}u před rokem 1994 mohly dopadnout jinak než dnes, +protože některá slova mohla být rozdělena jinak. Od této doby je +\csplain{} fixován a stabilní podobně, jako Knuthův plain. + +Protože jsem autorem názvu \csplain{}, souborů {\tt csplain.ini}, +"csfonts.tex" a množství dokumentace k~\csplain{}u a protože jej od +jeho vzniku udržuji, rozhodl jsem se přísně dbát na zpětnou +kompatibilitu. Změny do \csplain{}u dělám jen takové, které jsou +opravdu nezbytné. To se stává jednou za několik let (viz historické +poznámky v~{\tt csplain.ini}). Změny dělám tak, že pouze přidám další +nejnutnější makra, ale stávající makra a jejich význam nechávám +nezměněna. Uživatelům \csplain{}u ručím, že jejich dokumenty napsané +v~\csplain{}u a opírající se o~neměnné fonty (např. \CSfont{}y nebo +base 35 PostScriptové fonty, metriky z~\CSTeX{}u), budou i v~budoucnu +\csplain{}em formátovány naprosto stejně, jako dnes. + +Abych mohl takovou záruku uživatelům poskytnout, není \csplain{} +zveřejněn pod GNU GPL, ale jedná se o~licenci velmi podobnou Knuthově. +Přesné znění licence je uvedeno na konci souboru {\tt csplain.ini}. +Zhruba řečeno, jedná se o~\uv{patent na název}. \csplain{} můžete svobodně +distribuovat, používat a měnit, ale pokud jej změníte, nesmíte jej +dále distribuovat pod názvem \csplain{}. Změny v~\csplain{}u může dělat jen +tzv.~\uv{současný administrátor \CSTeX{}u}, což jsem zatím stále já. +Pokud bych v~budoucnu toto břímě někomu předal, pak určitě jen takovému +člověku, který má na budoucnost \csplain{}u stejný názor jako já. + +\csplain{} i nadále považuji za minimální rozšíření Knuthova plainu a +nikdy do něj nepřidám žádné složitější makro vylepšující uživatelský +komfort (jako například eplain). Zastávám názor, že uživatel plainu a +\csplain{}u chce mít všechna makra pod svou vlastní kontrolou a raději si +je udělá sám, než aby spoléhal na hotová, ale méně stabilní, řešení. +Uživatel plainu/\csplain{}u si vytváří vlastní stále znovu používaná +makra, která mu musí fungovat ve všech i budoucích verzích +\csplain{}u. Proto se snažím \csplain{} pokud možno neměnit. + +Lákavá je například změna definice uvozovek v~\csplain{}u jednoduše na + +\begtt +\long\def\uv#1{\clqq#1\crqq} +\endtt + +aby fungoval automatický kerning s~oběma stranami uvozovek. Tuto +změnu ale nikdy v~\csplain{}u neudělám, protože není zpětně kompatibilní +se stávajícím řešením. Raději budu psát do omrzení do dokumentace, že +taková jednoduchá definice je asi lepší, než ta z~\csplain{}u, a že si ji +každý může zařadit do svých maker. + +Změnu v~\csplain{}u z~"<Feb. 2000>" považuji za asi největší, kterou +jsem byl ochoten udělat. K~zařazení alternativního kódování Cork +(které samozřejmě není a nikdy nebude v~\csplain{}u implicitní), mě +motivovala skutečnost, že se kolem mě pohybovalo mnoho uživatelů +plainu, kteří rádi používají fonty v~tomto alternativním +kódování. Svým krokem jsem jim umožnil používat \csplain{}, takže si +nemusejí vytvářet své vlastní formáty. + + + +\subtitle Formát \cslatex{} | FORMAT CSLATEX +%%%%%%%%%%%%%%%%%%%%%%%% + +\newstart Významní uživatelé \LaTeX{}u sice v elektronické konferenci v roce 2012 +přiznali, že už \cslatex{} dávno nepoužívají, nicméně se stále přimlouvají, +aby v \CS\TeX{}u zůstal. Nebude ale dále rozvíjen a všem uživatelům je +kladeno silné doporučení, aby přešli na \uv{normální} \LaTeX. Navrhoval jsem +\cslatex{} zrušit úplně (aby to lidi nepletlo), ale nebyl jsem vyslyšen. + +Od roku 2012 napíše \cslatex{} při každém spuštění na terminál a do +logu toto: + +\begtt +**** WARNING ******* CSLaTeX is obsolete, don't use it please. +**** You can use ``normal'' LaTeX+Babel or XeLaTeX+polyglossia. +\endtt + +Pokud použijete \LaTeX{}, pak záhlaví dokumentu může vypadat třeba +takto: + +\begtt +\documentclass[a4paper,12pt,twoside]{article} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[czech]{babel} +\endtt + +Při použití Xe\LaTeX{}u s balíčkem {\tt polyglossia} může +záhlaví dokumentu být například takové: + +\begtt +\documentclass[a4paper,12pt,twoside]{article} +\usepackage{polyglossia} +\setdefaultlanguage{czech} +\usepackage{fontspec} +\usepackage{xunicode} +\endtt + +Následující text až do konce kapitoly bych mohl celý škrtnout, ale +nechám jej beze změny. Čtenář to možná ocení jako materiál ke studiu historie +\CS\TeX{}u. + +\newstop + + +\subsub Různé \LaTeX{}y | Ruzne LaTeXy +%---------------------- + +Do roku 1992 byl \LaTeX{} udržován Leslie Lamportem. Naposledy měl +jeho \LaTeX{} verzi 2.09. Typické pro tento \uv{starý} \LaTeX{} bylo +použití příkazu "\documentstyle" namísto "\documentclass" v~záhlaví +dokumentu. Tato větev \LaTeX{}u není dále udržována a podporována. +Dnes převzali iniciativu nad \LaTeX{}em Němci Frank Mittelbach a +Rainer Sch\"opf a nazvali jej \LaTeXe. Každý půlrok +vytvářejí novou verzi (většinou obsahující jen opravy předchozí verze) +a názvem dávají najevo, že se jedná o~předchůdce \LaTeX{}u~3, na němž +už deset let pracují. Dokument napsaný pro \LaTeXe{} poznáme vesměs +podle toho, že začíná příkazem "\documentclass" místo "\documentstyle". +\LaTeXe{} ovšem také akceptuje příkaz "\documentstyle", +přechází přitom do pokusu o~emulaci starého \LaTeX{}u~2.09, a navíc +uživatele upozorní na to, že použil zastaralé záhlaví dokumentu. + +V~\LaTeX{}u~\twoe{} je zabudovaná \uv{časovaná bomba} s~rozbuškou +na rok a půl. Ta se projeví při generování formátu, nikoli při běžném +provozu. Pokud generujete formát ze zdrojů \LaTeX{}u, které jsou +starší než rok a půl, generování končí chybou a na terminálu se objeví +varování, že máte instalován příliš starý \LaTeX{} a že je vhodné si +obstarat nový. Pokud na toto hlášení odpovíte klávesou Enter, formát +se přesto vygeneruje. + +V~tomto manuálu se budeme dále zabývat jen dnes asi nejpoužívanějším +\LaTeX{}em~\twoe. Pojmem \LaTeX{} tedy budeme rozumět +\LaTeXe. I~za těchto okolností budeme nuceni +rozlišovat mezi třemi \uv{druhy} \LaTeX{}ů: + +\begitems +* vanilla \LaTeX +* babelizovaný \LaTeX +* \cslatex{} +\enditems + +Vanilla \LaTeX{} (nedotčený \LaTeX) vzniká vygenerováním formátu +\LaTeX{} pouze za přítomnosti souborů z~adresáře {\tt latex/base}, tj. při +generování nejsou čteny žádné soubory ovlivňující generování +formátu. V~distribuci tedy zcela chybí tyto soubory: +{\tt fonttext.cfg}, {\tt fontmath.cfg}, +{\tt preload.cfg} a {\tt hyphen.cfg}. +Tento formát obsahuje pouze anglické dělení slov. Pro český nebo +slovenský jazyk není tedy příliš použitelný. Není často používaný. + +Babelizovaný \LaTeX{} vzniká generováním formátu \LaTeX{} za +přítomnosti souborů {\tt fonttext.cfg}, {\tt fontmath.cfg} a +{\tt preload.cfg} z~balíčku generic a {\tt hyphen.cfg} z~balíčku Babel. +Tento formát obsahuje vzory dělení těch jazyků, které jsou v~době +generování formátu uvedeny v~konfiguračním souboru Babelu s~názvem +{\tt language.dat}. Je běžně používaný. + +Formát \cslatex{} vzniká generováním formátu \LaTeX{} za přítomnosti souborů +"fonttext.cfg" a "hyphen.cfg" z~balíčku \cslatex{}. Ostatní +soubory ovlivňující generování formátu mohou chybět nebo být z~balíčku +generic. Obvykle je formát \cslatex{}u nazván {\tt cslatex.fmt} a nikoli +{\tt latex.fmt}, aby bylo možno jej odlišit od běžně používaného +babelizovaného \LaTeX{}u. Z~toho důvodu je v~balíčku \cslatex{}u +k~dispozici soubor {\tt cslatex.ini}, který provede +"\input latex.ltx". \cslatex{} obsahuje vzory dělení anglického, +českého a slovenského jazyka. Navíc příkaz "cslatex" musí zajistit +konverzi ze vstupního kódování (podle použitého systému) na +vnitřní kódování ISO~8859-2 na úrovni vstupního preprocesoru +\TeX{}u. Tento princip je tedy shodný s~\csplain{}em. + +Je patrno, že absolutní jistotu o~tom, jaký \LaTeX{} vlastně +používáme, získáme jen pečlivým pročtením logu po vygenerování +formátu. Koncept, kdy vlastnosti formátu jsou závislé na obsahu +nějakých dodatečných souborů v~distribuci v~době generování +formátů, se mi nelíbí, ale nelze proti tomu nic dělat. Takto +to navrhli tvůrci \LaTeX{}u a je to tedy jejich věc. Důsledek tohoto +rozhodnutí je, že pokud řekneme: \uv{používám \LaTeX}, nikdy není +zcela přesně řečeno, co se tím vlastně myslí. Tím se tento koncept +diametrálně liší od Knuthova plainu nebo též \csplain{}u. + +Co se stane, pokud jsou například v~\TeX{}ové distribuci přítomny +hned dva soubory {\tt hyphen.cfg}~-- jeden z~balíčku Babel a druhý +z~balíčku \cslatex{}? Není-li taková situace v~distribuci řešena speciální +konfigurací, není definováno, který z~těchto souborů se vlastně načte, +a tudíž není dopředu známo, jaký vygenerujeme \LaTeX. + +V~novějších web2c distribucích \TeX{}u lze konfigurovat způsob +prohledávání {\tt texmf} stromu podle názvu použitého programu nebo +podle názvu použitého (resp. generovaného) formátu. Nejčastěji jsou +tyto rozdílnosti konfigurovány v~souboru {\tt web2c/texmf.cnf}. +Tam je (mimo jiné) řečeno: + +\begtt +% cstex, from Petr Olsak +TEXINPUTS.cslatex= .;$TEXMF/tex/{cslatex,csplain,latex,generic,}// +TEXINPUTS.csplain= .;$TEXMF/tex/{csplain,plain,generic,}// +TEXINPUTS.pdfcslatex= \ + .;$TEXMF/{pdftex,tex}/{cslatex,csplain,latex,generic,}// +TEXINPUTS.pdfcsplain= \ + .;$TEXMF/{pdftex,cstex,tex}/{csplain,plain,generic,}// +\endtt +% +což znamená, že pokud použijeme nebo generujeme formát \cslatex{}, pak se +vstupní soubory přednostně čtou z~adresáře {\tt tex/cslatex} a {\tt +tex/csplain} a teprve potom v~ostatních adresářích. Takže {\tt +hyphen.cfg} a {\tt fonttext.cfg} si ini\TeX{} vezme přednostně +z~adresáře {\tt tex/cslatex}. Při provozu \cslatex{}u pak bude stylový soubor +{\tt czech.sty} nebo {\tt slovak.sty} při použití formátu \cslatex{} +přečten z~adresáře {\tt tex/csplain} a nikoli z~adresáře +{\tt tex/generic/babel}, kde se nalézá soubor stejného jména, ovšem +pro balík Babel. + +Aby se hledací algoritmy přizpůsobily názvu generovaného formátu, je +nutné tento formát při generování \cslatex{}u explicitně specifikovat na +příkazový řádek. Nestačí tedy napsat: + +\begtt +$ tex -ini cslatex.ini +\endtt +% +ale musíme psát + +\begtt +$ tex -ini -fmt cslatex cslatex.ini +\endtt +% +Při provozu formátu pak stačí psát + +\begtt +$ tex -fmt cslatex dokument +\endtt +% +Ve web2c distribuci jsou k~babelizovanému \LaTeX{}u v~konfiguračním +souboru {\tt web2c/texmf.cnf} uvedeny následující řádky: + +\begtt +TEXINPUTS.latex = .;$TEXMF/tex/{latex,generic,}// +TEXINPUTS.pdflatex = .;$TEXMF/{pdftex,tex}/{latex,generic,}// +TEXINPUTS = .;$TEXMF/tex/{generic,}// +\endtt +% +což znamená, že formát přednostně hledá vstupní soubory v~adresáři +{\tt tex/generic} a tam je podadresář {\tt babel}. Dokonce je babel +upřednostněn i v~případě, kdy neuvedeme na příkazové řádce +žádný název formátu. + +S~uvedenou konfigurací je možné bezproblémové soužití babelizovaného +\LaTeX{}u s~\cslatex{}em v~jediné distribuci. \cslatex{} pak obvykle voláme +skriptem {\tt cslatex}, který provede {\tt tex -fmt cslatex}, zatímco +babelizovaný \LaTeX{} voláme skriptem {\tt latex}, což spustí +{\tt tex -fmt latex}. + +Pokud nelze ve vaší \TeX{}ové distribuci konfigurovat prohledávací +algoritmy podle názvu formátu, pak je možné soužití babelizovaného +\LaTeX{}u s~\cslatex{}em za předpokladu, že budete dodržovat +následující zásady: + +\begitems +* Babelizovaný \LaTeX{} vygenerujte v~době, kdy není v~distribuci +přítomen \cslatex{}. Tak máte jistotu, že ini\TeX{} nenajde soubor +{\tt hyphen.cfg} z~\cslatex{}u, ale z~balíku Babel. + +* \cslatex{} pak vygenerujte nad adresářem {\tt cslatex}. +Aktuální adresář má totiž ve všech distribucích \TeX{}u přednost před +ostatními adresáři v~{\tt texmf} stromu. Proto si ini\TeX{} přečte soubory +{\tt fonttext.cfg} a {\tt hyphen.cfg} z~balíčku \cslatex{}. + +* Po instalaci \cslatex{}u do {\tt texmf} stromu je nutno ještě vymazat +soubory + +\begtt +tex/generic/babel/czech.sty +tex/generic/babel/slovak.sty +\endtt +% +protože soubory s~těmito názvy jsou v~{\tt texmf} stromu +dvojmo. Přitom v~balíčku Babel je nikdy nevyužijete, pokud budete psát +korektní záhlaví dokumentu pro babelizovaný \LaTeX{} (o~tom pojednám +podrobněji v~následující sekci). Na druhé straně soubory +{\tt czech.sty} a {\tt slovak.sty} z~\cslatex{}u budete potřebovat velmi +často, takže tyto soubory nemažte. +\enditems + + +\subsub Záhlaví \LaTeX{}ového dokumentu | Zahlavi LaTeXoveho dokumentu +%-------------------------------------- + +Pokud používáte \cslatex{}, pak záhlaví dokumentu může mít tvar + +\begtt +\documentclass{article} +\usepackage{czech} % nebo \usepackage{slovak} +... další příkazy záhlaví dokumentu +\begin{document} +... +\end{document} +\endtt + +Jestliže zapomenete na "\usepackage{czech}" nebo "\usepackage{slovak}", +pak v~dokumentu nebudou fungovat akcentovaná písmena, nebude zapnuto +české ani slovenské dělení slov a automaticky generované názvy +(kapitoly, sekce, obrázky,~...) nebudou přeloženy do národního jazyka. +V~tomto případě tedy \cslatex{} bude pracovat stejně jako vanilla \LaTeX{}. + +Pokud naopak používáte babelizovaný \LaTeX{}, pak záhlaví dokumentu +může mít tvar + +\begtt +\documentclass{article} +\usepackage[czech]{babel} % nebo \usepackage[slovak]{babel} +\usepackage[T1]{fontenc} +\usepackage[kódování-vstupu]{inputenc} +... další příkazy záhlaví dokumentu +\begin{document} +... +\end{document} +\endtt + +Všimněte si jiného způsobu volání stylového souboru "czech" nebo "slovak". +V~tomto případě se slovo "czech" či "slovak" zapíše pouze jako volba balíčku +"babel". Prakticky je to realizováno načtením souboru "czech.lfd" nebo +"slovak.lfd". Pro fungování Babelu tedy není vůbec nutná existence +souboru "czech.sty" nebo "slovak.sty". Tyto soubory v~balíčku Babel +sice existují, ale jejich funkce spočívá pouze v~tom, že \uv{vynadají} +uživateli za nesprávné použití příkazu "\usepackage" a dále načítají +odpovídající "lfd" soubor. + +Volba "[czech]" nebo "[slovak]" v~balíčku Babel ještě nemusí zajistit +přepnutí na odpovídající dělení slov. K~tomu je navíc potřeba, aby byl +babelizovaný \LaTeX{} s~těmito vzory dělení už vygenerován. + +Na rozdíl od \cslatex{}u není v~babelizovaném \LaTeX{}u řešena +synchronizace vstupního kódování dokumentu s~vnitřním kódováním +\LaTeX{}u. \LaTeX{} implicitně pracuje s~vnitřním +kódováním podle CM fontů (tzv.~"OT1"), což pro většinu jazyků není +užitečné. Je tedy třeba při použití babelizovaného \LaTeX{}u přepnout +do vnitřního kódování podle Corku (tzv.~"T1"), protože v~tomto +kódování jsou načteny vzory dělení. Použijeme tedy balíček fontenc +s~volbou "[T1]". Pak se automaticky použijí též fonty v~tomto kódování. +Babelizovaný \LaTeX{} nepodporuje (na rozdíl od \cslatex{}u) žádné jiné +vnitřní kódování vhodné pro češtinu nebo slovenštinu. + +Dále je potřeba v~babelizovaném \LaTeX{}u na vnitřní kódování "[T1]" +navázat vstupní kódování dokumentu. Pokud například máte dokument +napsán v~kódování ISO~8859-2, pak je potřeba použít balíček inputenc +s~volbou "[latin2]". Pokud máte dokument v~kódování MS~Windows CP~1250, +napište volbu "[cp1250]". + + +\subsub Vlastnosti \cslatex{}u | Vlastnosti CSLaTeXu +%-------------------------- + +Uvedeme podrobně rozdíly mezi vanilla \LaTeX{}em a \cslatex{}em. + +Oba formáty deklarují vnitřní kódování CM fontů jako implicitní +(tzv.~"OT1") a oba načítají ještě deklaraci kódování podle +Corku (tzv.~"T1"). \cslatex{} navíc načítá deklaraci vnitřního kódování +podle \CSfont{}ů (tzv.~"IL2"). + +\cslatex{} má ve svém souboru "hyphen.cfg" u~příkazu "\DeclareLanguage" +pro jazyky czech a slovak možnost použít kromě volby "IL2" ještě volbu +"T1". V~novějších distribucích \cslatex{}u jsou již obě volby implicitně +napsány. V~takovém případě se při generování formátu načtou vzory +dělení češtiny a slovenštiny nejen v~kódování "IL2", ale +také v~kódování "T1". \cslatex{} dále definuje mechanismy přepínání mezi +těmito vzory dělení poté, co uživatel přepne vnitřní kódování +z~"T1" na "IL2" nebo naopak standardními \LaTeX{}ovými prostředky. +Kvůli tomu je v~\cslatex{}u předefinováno interní makro \LaTeX{}u +"\DeclareFontEncoding", protože vanilla \LaTeX{} nepředpokládá, +že je po přepnutí kódování nutné přepnout i vzory dělení slov. + +V~\cslatex{}u je navíc definováno makro "\splithyphens" a +"\standardhyphens". Po použití makra "\splithyphens" se +nastaví znak~"-" jako aktivní a funguje podobně jako +"\discretionary{-}{-}{-}". Znamená to, že slova jako +\uv{je-li} se rozdělí správně česky: \uv{je-/-li}. Spojovník se +opakuje na následujícím řádku. Makro navíc složitě ošetřuje výskyt +"--" a "---", který tiskne \uv{normálně} jako za sebou následující +znaky s~kódem~45, které se promění v~ligaturu pomlčky nebo dlouhé +pomlčky. Makro "\standardhyphens" dává vše do původního stavu, +tj. po jeho použití znak~"-" není aktivní. (Uživatelé \csplain{}u mohou +pro tyto potřeby použít makro podle~\cit{tbn} na straně~217.) + +Příkaz "cslatex" musí také zajistit konverzi z~kódování +češtiny/slovenštiny obvyklé v~použitém systému do vnitřního +kódování ISO~8859-2 alias~"IL2". +Ve web2c distribuci \TeX{}u je proto ve skriptu +"cslatex" resp.~dávce "cslatex.bat" použit přepínač +"-default-translate-file". Pro systémy MS~Windows je vedle tohoto +přepínače použita hodnota "cp1250cs", zatímco pro UNIXové systémy se +používá hodnota "il2-cs", což nastavuje konverzi \uv{jedna ku jedné}. +V~jiných distribucích se musí implementovat konverze na úrovni +vstupního procesoru \TeX{}u způsobem závislým na použité +distribuci. Například v~em\TeX{}u je možné použít TCP tabulky. + + +\subsub Vlastnosti stylových souborů {\tt czech.sty} a {\tt slovak.sty} | +%-------------------------------------------------------------- + Vlastnosti stylovych souboru + +V~této sekci budu z~důvodu stručnosti mluvit o~češtině a souboru +"czech.sty", ale to samé samozřejmě platí i pro slovenštinu a stylový +soubor "slovak.sty". + +Načtení souboru "czech.sty" z~\cslatex{}u pomocí +"\usepackage{czech}" způsobí následující změny: + +\begitems +* Nastaví se vnitřní kódování \LaTeX{}u na "IL2", takže se + implicitně použijí \CSfont{}y. +* Inicializuje se české dělení slov v~kódování "IL2". +* Mezerování se nastaví na "\frenchspacing", tj. rovnoměrné mezerování + mezi slovy i za tečkami. +* Nastaví se české názvy pro jména \uv{Kapitola}, \uv{Obsah} atd. + Viz následující tabulka. +* Makro "\today" expanduje na český datum. +* Definují se makra "\clqq" a "\crqq" pro dvojité české uvozovky, + a to i jejich nouzová varianta pro případ, kdy není použito + kódování "IL2". Definují se též makra + "\clq" a "\crq" pro jednoduché české uvozovky. +* Definuje se makro "\uv" jako "\def\uv#1{\clqq#1\crqq}". +* Definují se přepínače "\csprimeson" a "\csprimesoff" (popis viz níže). +\enditems + +Tabulka automaticky generovaných slov \LaTeX{}u, která jsou změněna po +načtení "czech.sty" na české názvy: + +\begtt +Původní název czech.sty slovak.sty +------------------------------------------------------------- +Preface Předmluva Predhovor +References Reference Literatúra +Abstract Abstrakt Abstrakt +Bibliography Literatura Literatúra +Chapter Kapitola Kapitola +Appendix Příloha Dodatok +Contents Obsah Obsah +List of Figures Seznam obrázků Zoznam obrázkov +List of Tables Seznam tabulek Zoznam tabuliek +Index Rejstřík Register +Figure Obrázek Obr. +Table Tabulka Tabuľka +Part Část Časť +encl Příloha Príloha +cc Na vědomí cc. +To Komu Pre +Page Strana Str. +see viz viď +see also viz také viď tiež +\endtt + +Kromě toho styl "czech.sty" akceptuje následující volby: + +\bgroup\medskip\leftskip=\parindent \parindent=0pt +"T1" místo implicitního vnitřního kódování \LaTeX{}u~"IL2" + se použije kódování "T1". + +"IL2" nemusíte psát, je to implicitní volba. + +"OT1" použije se vnitřní kódování podle CM fontů. Pak samozřejmě + nefunguje dělení slov češtiny a slovenštiny. + +"split" zapne "\splithyphens". + +"nocaptions" výstup makra "\today" a automaticky generovaná slova zůstanou + v~angličtině. + +"olduv" použije se stará definice makra "\uv", která umožňuje + použít v~argumentu verbatim konstrukce. +%"primeson" zapne "\csprimeson". V současné verzi "czech.sty" není +% tato volba implementována, ale počítáme s ní do budoucí verze. +\medskip\par\egroup + +Například "\usepackage[split,olduv]{czech}" zapne navíc zdvojování +spojovníku při rozdělení a definuje makro "\uv" tak, že jsou možné +verbatim konstrukce uvnitř argumentu. + +Nyní vysvětlím vlastnosti přepínačů "\csprimeson" a "\csprimesoff". +Po po\-užití příkazu "\csprimeson" jsou přiděleny znakům +\uv{"`"} a \uv{"'"} aktivní +kategorie, aby "``takto po anglicku''" zapsané uvozovky se převedly na +\uv{takové} uvozovky. Rovněž "`jednoduché'" anglické uvozovky +jsou pak vytištěny ,jednoduše`. Makro "\csprimesoff" vrací vše do +původního stavu, kdy jsou uvedené znaky neaktivní. Po načtení +"czech.sty" je implicitně nastaveno "\csprimesoff". + +Uvedený popis chování stylového souboru "czech.sty" se týká jen +případu, kdy je tento stylový soubor načten z~\cslatex{}u. Pokud je +načten z~babelizovaného \LaTeX{}u, pak se provede "\input czech.lfd", +takže veškeré definice \uv{češtiny} jsou v~režii balíku Babel. Tam +například vůbec není definováno makro "\uv". Pokud je "czech.sty" +načten z~\csplain{}u, pak se provede "\chyph", definuje se "\csprimeson", +"\csprimesof" a makro "\today" expanduje na datum po česku. Je-li +načten "czech.sty" z~originálního plainu, pak se provede totéž jen +s~tím rozdílem, že místo "\chyph" se objeví na terminálu varování +o~nemožnosti přepnout na české vzory dělení. + + +\subsub PostScriptové fonty v~\cslatex{}u | PostScriptove fonty v CSLaTeXu +%------------------------------------- + +Při práci s~PostScriptovými fonty v~\cslatex{}u stačí použít standardní +nástroje NFSS. Například pro zapnutí do fontů rodiny Times~Roman stačí +napsat do záhlaví dokumentu "\usepackage{times}". Protože \cslatex{} při +"\usepackage{czech}" implicitně pracuje +s~vnitřním kódováním podle ISO~8859-2, použijí se v~tomto případě +virtuální fonty z~balíčku "cspsfonts.tar.gz". Z~toho důvodu jsou +v~balíčku \cslatex{}u přítomny potřebné "fd" soubory. Následující tabulka +ukazuje parametry příkazu "\usepackage" pro rodiny fontů ze +standardní skupiny 35~PostScriptových fontů. + +\begtt +Rodina fontů parametr +-------------------------- +Avantgarde Book avant +Bookman bookman +Helvetica helvet +New Century newcent +Palatino palatino +Times Roman times +\endtt + + +\subsub Použití fontů kódovaných podle Corku (T1 kódování) v~\cslatex{}u | +%-------------------------------------------------------------------- + Pouziti fontu kodovanych podle Corku v CSLaTeXu + +Máte-li vzory dělení v~\cslatex{}u načteny i pro kódování T1 +(viz příkaz "\DeclareLanguage" v souboru "hyphen.cfg"), pak můžete +místo implicitního vnitřního kódování "IL2" použít kódování "T1". +V~takovém případě se automaticky použijí místo \CSfont{}ů fonty kódované +podle Corku. Vnitřní kódování "T1" inicializujete zápisem: + +\begtt +\usepackage[T1]{czech} % nebo \usepackage[T1]{slovak} +\endtt + +Protože ale input procesor \TeX{}u při použití příkazu "cslatex" +konvertuje vstupní kódování dokumentu na ISO~8859-2, je v~tomto +případě nutné navázat na to další konverzí pomocí balíčku inputenc takto: + +\begtt +\usepackage[latin2]{inputenc} +\endtt + +Zde je potřeba vždy psát "[latin2]", ať je vstupní kódování dokumentu +jakékoli, protože vstupní procesor \TeX{}u nám toto kódování převedl +na ISO~8859-2. + +Po zapnutí vnitřního kódování na "T1" lze použít PostScriptové fonty +stejným způsobem jako předtím (například "\usepackage{times}"). Nyní +se ale použijí metriky dodávané v~mezinárodních distribucích \TeX{}u a +kódované podle Corku. + + +\subsub pdf\TeX{} + \cslatex{} = pdf\cslatex{} | +%--------------------------------------- + pdfTeX + CSLaTeX = pdfCSLaTeX + +V~případě spojení \cslatex{}u s~pdf\TeX{}em platí vše naprosto stejně, +jako bylo řečeno v~sekci \uv{pdf\TeX + \csplain{} = pdf\csplain{}}. +Nahraďte v~této sekci slovo \csplain{} slovem \cslatex{} a slovo +pdf\csplain{} slovem pdf\cslatex{} a přečtěte si tuto sekci ještě jednou. + + +\subsub Historie a budoucnost \cslatex{}u | Historie a budoucnost CSLaTeXu +%------------------------------------- + +\cslatex{} vytvořil zhruba v~roce 1992 Jiří Zlatuška. Od něj pochází +myšlenka načtení vzorů dělení stejného jazyka v~různých kódováních a +předefinování vnitřního \LaTeX{}ového makra "\DeclareFontEncoding". +Na své implementaci \TeX{}u tehdy provozoval mimo jiné fonty +kódované v~KOI-8, takže přepínání vnitřního kódování \LaTeX{}u si +vlastně udělal pro svoje potřeby. +Jiří Zlatuška je také autorem maker "\splithyphens" a +"\standardhyphens". Veškerá makra napsal dobře +dokumentovaná pro použití v~systému docstrip. Svou práci zveřejnil pod +licencí GPL mimo jiné podle jeho slov proto, že pokud to bude někoho +zajímat, tak to může dále udržovat a zvelebovat podle svých vlastních +představ. On sám se kvůli své zaneprázněnosti v~jiné oblasti +tímto problémem později zřejmě nezabýval. + +Po schůzce tvůrců \CSTeX{}u v~roce 1993 převzal starost o~\cslatex{} +podle dohody Zdeněk Wagner, který vytvořil definice kódování +"IL2". Vytvořil také pro \cslatex{} definiční soubory "fd" jednak +pro \CSfont{}y a jednak pro PostScriptové fonty z~balíčku +"cspsfonts.tar.gz". Od něj také pochází implementace \cslatex{}u pro +\LaTeX{}~2.09. V~em\TeX{}ové distribuci \CSTeX{}u je stále tato +implementace obsažena (pod označením latex209). + +Soubor "czech.sty" má asi podstatně delší historii než \cslatex{}. Pochází +z~dílny Olina Ulricha. který se zřejmě inspiroval podobným stylovým +souborem pro německý jazyk. Olin rovněž vytvořil makra "\csprimeson" a +"\csprimesoff". Zdeněk Wagner pak převzal Olinův stylový soubor +a upravil jej pro provoz v~\cslatex{}u. Slovenskou část včetně vzorů +dělení slov vytvořila Janka Chlebíková. Soubor "slovak.sty" je +přesnou kopií souboru "czech.sty" s~výjimkou slovensky +špecifických částí. + +V~duchu licence GPL převzal zhruba v~roce 1997 údržbu \cslatex{}u +Jaroslav \hbox{Šnajdr}. Udělal několik úprav stylových souborů "czech.sty" a +"slovak.sty" včetně přechodu na novou definici uvozovek, uvnitř +jejichž argumentu nefungují verbatim konstrukce. Tím kuriózně +způsobil, že \cslatex{}em od této doby nejde bez chyb formátovat český +překlad úvodu do \LaTeX{}u, který je pod názvem balíčku +"csuvodlat.tar.gz" součástí dokumentace \CSTeX{}u. Je to názorná +ukázka toho, co může způsobit změna kódu, která nerespektuje zpětnou +kompatibilitu. Pan Šnajdr rovněž napsal "html" dokumentaci +k~\cslatex{}u, která popisuje instalaci \cslatex{}u ze zdrojových souborů +použitím docstripu. Použijete-li ale balíček "cslatex.tar.gz", +pak nemusíte docstrip aplikovat, protože vedle zdrojových souborů +jsou tam už přítomny i všechny soubory, které vznikají po aplikaci +docstripu. + +Já osobně jsem o~\LaTeX{} a tím pádem \cslatex{} jevil od začátku +malý zájem, protože celý projekt je závislý na \LaTeX{}u samotném. +Nemám tedy jistotu, jaké změny v~něm současný \LaTeX{}-team udělá a jaké +budou existovat do budoucna potíže se zpětnou kompatibilitou. To je +zásadní odlišnost od Knuthova plainu a \TeX{}u samotného. +Raději jsem se tedy do \LaTeX{}ových věcí nemíchal. + +V~roce 1999 jsem nicméně přidal pár řádek maker do souboru +"czhyphen.tex" tak, aby byl použitelný v~babelizovaném \LaTeX{}u. +Do té doby totiž tato větev \LaTeX{}u používala Lhotkovy +vzory dělení, zatímco v~\cslatex{}u jsme už dávno měli daleko +kvalitnější Ševečkovy vzory dělení. Tyto novější vzory dělení jsou +totiž napsány za použití \TeX{}ových sekvencí, což je sice nezávislé +na kódování češtiny, ale balíček Babel to implicitně nedokáže strávit +a očekává vzory dělení v~kódování "T1". Upravený soubor jsem +nazval Babelovsky: "czhyph.tex", zatímco v~\CSTeX{}u zůstává původní +soubor "czhyphen.tex". Sjednocení názvů těchto souborů by stejně +nevyřešilo nejednotnost vývoje \cslatex{}u a babelizovaného \LaTeX{}u. + +Na výborové schůzi v~roce 1999 jsem dostal za úkol prověřit +možnost spojení babelizovaného \LaTeX{}u s~\cslatex{}em. Neustálé +dotazy začínajících uživatelů, kteří si pletou tyto dva \LaTeX{}y, nás +utvrzují v~tom, že by se pro sloučení mělo něco udělat. + +Analyzoval jsem proto makra Babelu a udělal návrh na možné zapracování +funkcionality \cslatex{}u do Babelu. Domnívám se, že \cslatex{} klidně +může přestat existovat, ale babelizovaný \LaTeX{} musí bezpodmínečně +převzít všechny vlastnosti \cslatex{}u tak, aby dokumenty dříve +zpracovávané \cslatex{}em byly naprosto stejně a bez jediné úpravy +zpracované novým babelizovaným \LaTeX{}em. Kvůli tomuto požadavku +musí babelizovaný \LaTeX{} umět načítat vzory dělení stejného jazyka +ve více kódováních, jako to nyní dělá \cslatex{}. Dospěl jsem +k~závěru, že čistým řešením tohoto problému je jedině zásah do jádra +\LaTeX{}u samotného, aby dokázal při změně kódování fontů přepnout +automaticky i vzory dělení. Zlatuška kvůli tomu předefinoval makro +jádra \LaTeX{}u "\DeclareFontEncoding". Tato záplata, či jinak řečeno +odmítnutí původního kódu tohoto makra, je na úrovni Babelu podle mého +názoru velmi nečisté řešení. Skutečnost, že přepínání vzorů dělení při +přepnutí kódování fontů \LaTeX{}ové jádro neřeší, považuji totiž za +chybu \LaTeX{}u. V~roce 1999 jsem tedy požádal \LaTeX{}-team, aby +zapracoval změnu v~duchu Zlatuškova návrhu do \LaTeX{}ového jádra. +Můj návrh nebyl \LaTeX{}-teamem akceptován. Za těchto +okolností nejsem schopen zapracovat funkcionalitu \cslatex{}u do +Babelu, protože to prostě nejde. Uživatelé \LaTeX{}u se budou muset +nadále potýkat s~tím, že jejich oblíbený formát trpí určitou +schizofrenií. + +Společně se sloučením \cslatex{}u s~Babelem jsem připravoval zásadní +revizi stylů "czech.sty" a "slovak.sty" -- v~podstatě jsem měl +v~úmyslu jejich totální přepsání. Tyto stylové soubory obsahují +množství reliktů z~dob minulých, plno zcela nepoužívaných větví ve +složitém větvení pomocí "\if" a stávají se totálně nepřehlednými. +Protože ale ke sloučení \cslatex{}u s~Babelem nakonec nedošlo, upustil +jsem zatím od plánu pracovat na těch stylových souborech. +Není ale vyloučeno, že k~tomu dojde v~budoucnosti. V~takovém případě +počítám s~tím, že makra "\splithyphens" a "\standardhyphens" +přesunu z~formátu do stylového souboru, kam přirozeně patří. +Dokumenty, které tato makra používají, a přitom nemají v~záhlaví +"\usepackage{czech}" ani "\usepackage{slovak}", pak nebudou fungovat. +Předpokládám, že takových dokumentů není mnoho, protože \cslatex{} a +stylové soubory jsou většinou používány současně. + +Protože pan Šnajdr se přestal \cslatex{}em zabývat, byl jsem nucen +v~roce 2002 zanést do stylových souborů jednu opravu podle požadavku +pana Kubena. Neznamená to ale, že bych se ujal iniciativy nad \cslatex{}em. +Jak jsem už vysvětlil, jsem ochoten převzít iniciativu jen tehdy, +když bude \LaTeX{}ové jádro umět přepínat mezi různě kódovanými +vzory dělení stejného jazyka. Přitom členové \LaTeX{}-teamu jsou toho +názoru, že to možná bude zapracováno až do \LaTeX{}u~3. + +\reference + +\bib cstex +WWW stránka \CSTeX{}u {\tt http://petr.olsak.net/cstex/}. + +\bib cstex +WWW stránka \csplain{}u {\tt http://petr.olsak.net/csplain.html}. + +\bib cstex +WWW stránka makra OPmac {\tt http://petr.olsak.net/opmac.html}. + + +\bib texbook +Donald Knuth. {\it The \TeX{}book}. Addison Wesley Publishing Company. +Eleventh printing, revised, May 1991, +ISBN 0-201-13447-0 + +\bib tst +Petr Olšák. {\it Typografický systém \TeX}. Konvoj, Brno~2000, +ISBN~80-85615-91-6 + +\bib tbn +Petr Olšák. {\it \TeX{}book naruby}. Konvoj, Brno~2001, +ISBN~80-7302-007-6. + +\bib prvni +Petr Olšák. {\it První setkání s~\TeX{}em}. Volně šířený dokument ve +formátech "tex", "ps", "pdf" na +\url{ftp://math.feld.cvut.cz/pub/cstex/doc/prvni.*}, 22~stran. + +\bib putovani +Petr Olšák. {\it Putování písmene ř z klávesy na papír}. +Zpravodaj \CS{}TUGu, 3/1997, strany 109--118. + +\bib enctex +Petr Olšák. {\it Rozšíření \TeX{}u enc\TeX}. Rozšíření ve formě +změnového souboru k~"tex.web" je volně šířeno na +\url{ftp://math.feld.cvut.cz/pub/olsak/enctex/}. + +\bib a2ac +Petr Olšák. {\it Program {\tt a2ac}}. Program včetně zdrojových kódů +v jazyce~C je volně šířen na +\url{ftp://math.feld.cvut.cz/pub/olsak/a2ac/}. + +\bib cstrip +Petr Olšák. {\it Test {\tt cstrip}}. Test je nepovinnou součástí +\CSTeX{}u. Je volně šířen na +\url{ftp://math.feld.cvut.cz/pub/cstex/base/cstrip.tar.gz}. + +\bib OFS +Petr Olšák. {\it Makro OFS}. \TeX{}ové makro OFS pro práci s +rozsáhlými kolekcemi fontů je volně šířeno na +\url{ftp://math.feld.cvut.cz/pub/olsak/ofs/}. + +\bye + + diff --git a/Master/texmf-dist/doc/cstex/jemny.errata b/Master/texmf-dist/doc/cstex/jemny.errata new file mode 100644 index 00000000000..44d393bc47e --- /dev/null +++ b/Master/texmf-dist/doc/cstex/jemny.errata @@ -0,0 +1,15 @@ + + ERRATA dokumentu "Jemny uvod do TeXu" (cesky preklad) + ===================================================== + +Protoze vystavovany dokument zatim nechavame v podobe, jak byl +publikovan v roce 1993, nejsou v nem opraveny nektere nasledujici +veci. + +Znaceni: strana_pocet-radku-zdola nebo strana^pocet-radku-shora. + +v_17: Cestina a slovenstina v CSTeXu -> Preplnene a nenaplnene ramecky +38_10: 1 pica (cc) -> 1 cicero (cc) + + + diff --git a/Master/texmf-dist/doc/cstex/jemny.pdf b/Master/texmf-dist/doc/cstex/jemny.pdf Binary files differnew file mode 100644 index 00000000000..6cea9b34024 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/jemny.pdf diff --git a/Master/texmf-dist/doc/cstex/jemny.tar.gz b/Master/texmf-dist/doc/cstex/jemny.tar.gz Binary files differnew file mode 100644 index 00000000000..bdd1ff8f812 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/jemny.tar.gz diff --git a/Master/texmf-dist/doc/cstex/lic-gpl.eng b/Master/texmf-dist/doc/cstex/lic-gpl.eng new file mode 100644 index 00000000000..60549be514a --- /dev/null +++ b/Master/texmf-dist/doc/cstex/lic-gpl.eng @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Master/texmf-dist/doc/cstex/opmac-d.pdf b/Master/texmf-dist/doc/cstex/opmac-d.pdf Binary files differnew file mode 100644 index 00000000000..3c591cee1fa --- /dev/null +++ b/Master/texmf-dist/doc/cstex/opmac-d.pdf diff --git a/Master/texmf-dist/doc/cstex/opmac-d.tex b/Master/texmf-dist/doc/cstex/opmac-d.tex new file mode 100644 index 00000000000..95d241e0f0a --- /dev/null +++ b/Master/texmf-dist/doc/cstex/opmac-d.tex @@ -0,0 +1,2170 @@ +%% OPmac -- Olsak's PlainTeX macros +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Tech-documentation, Petr Olsak, 2012 + +\input utf8off \clearmubyte + +% This file is encoded in ISO-8859-2 because +% UTF-8 encTeX has a conflict with DocByTeX + +\def\projectversion{Dec. 2012} +\def\headtitle{OPmac} + +\widowpenalty=10000 +\clubpenalty=10000 + +\emergencystretch=2em +\hbadness=2200 + +\showboxbreadth=1500 \showboxdepth=2 + +\def\csplain{\CS plain} +\def\CS{CS} + +\input docby.tex + +\setlinecomment{\percent} \noactive{\nb\percent} \noactive{\percent\cbrace} +\noactive{\nb fontdimen} + +\title OPmac -- roziujc makra plain\TeX{}u + +\author Petr Olk + +\centerline{\ulink[http://www.olsak.net/opmac.html]% + {www.olsak.net/opmac.html}} + +\def\db{\dg\nb} +\def\du#1{\api{\nb#1}} +\let\quotehook=\langleactive +\def\insdef#1 {\ifirst{docby.tex}{def\nb#1 }{^^B\cbrace}{++}} +\def\inssdef#1 {\ifirst{docby.tex}{def\nb#1}{\empty}{+-}} +\bgroup + \catcode`\[=1 \catcode`]=2 \catcode`\{=12 \catcode`\}=12 + \gdef\obrace[{] \gdef\cbrace[}] +\egroup +\def\indexhook{% +% Kontroln sekvence oznaen ipkou ($\succ$) jsou +% uivatelskmi pkazy. Ostatn kontroln sekvence jsou +% v~OPmac intern. + Tun je oznaena strana, kde je slovo + dokumentovno, pak nsleduje seznam vech stran, na kterch se slovo + vyskytuje. +% Uivatelsk pkazy maj v seznamu strnek podtren slo, +% co je strnka, kde je pkaz vyloen na uivatelsk rovni. + \medskip} +\def\nn#1 {\noactive{\nb#1}} \nn insert \nn undefined + +\def\cnvbookmark#1{\lowercase{\lowercase{#1}}} +\def\bookmarkshook{\lo e \lo s \lo c \lo r \lo z \lo y + \lo a \lo i \lo e \lo u \lo u \lo o \lo n } +\def\lo #1#2{\lccode`#1=`#2} + + +\dotoc \bookmarks + +\sec vod +%%%%%%%%% + +OPmac je balk jednoduchch doplujcch maker k plain\TeX{}u umoujc +uivatelm zkladn La\TeX{}ovou funkcionalitu: zmny velikosti psma, +automatickou tvorbu obsahu a rejstku, prci s {\tt bib} databzemi, +referencemi, monost proloen referenc hyperlinkovmi odkazy atd. + + +\sec Uivatelsk dokumentace +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Uivatelsk dokumentace je zatm v souboru "opmac-u.tex" a "opmac-u.pdf". +Do tohoto msta ji zahrnu pozdji a prolinkuji ji s technickou dokumentac. + + +\sec Technick dokumentace +%%%%%%%%%%%%%%%%%%%%%%%%%% + +Tato st dokumentace je urena pro tvrce maker, kte se chtj zde +uvedenmi makry inspirovat a ppadn je pizpsobit svmu poadavku. +Pedpokld se znalost \TeX{}u, tj. napklad aspo zbn orientace +v~\TeX{}booku naruby. Na tuto knihu je na mnoha mstech odkazovno pod +zkratkou TBN. + + +\subsec Zkladn makra +%%%%%%%%%%%%%%%%%%%%%% + +Na zatku souboru "opmac.tex" zjistme, zda nen soubor ten podruh. V +takovm ppad ten odmtneme. Ptme se na to, zda je definovno makro \db +OPmacversion, kter vzpt definujeme. Je-li nkdo pekvapen, pro jsem +nepouil "\expandafter\endpinput\fi", me si prostudovat TBN, stranu~358, +heslo "\endinput". + +\ifirst {opmac.tex}{OPmacversion}{\empty}{+-} + +Dva pracovn registry: +\dgn \nb tmpnum +\dgn \nb tmpdim + +\inext {newcount}{\empty}{+-} + +OPmac nebude nikdy hlsit chyby. asto ale bude pst pomoc \db opwarning +na terminl varovn. + +\inext {warning}{\empty}{+-} + +Makro \db addto "<makro>{<tokeny>}" pid na konec "<makra>" dan "<tokeny>". + +\inext {addto}{\empty}{+-} + +V OPmac budeme pracovat se seznamem \db protectlist, kter bude obsahovat +makra, je chceme mt tzv. robustn, tj. chceme, aby se pi "\write" v output +rutin neexpandovala. Kadmu makru v~seznamu pedchz "\doprotect", take +seznam "\protectlist" vypad takto: + +\def\begtthook{\langleactive} +\begtt +\doprotect<makro1> \doprotect<makro2> ... +\endtt + +\def\begtthook{} +Seznam budeme spoutt v output rutin s tm, e "\doprotect" tam bude mt +vznam makra, kter zad, aby jeho parametr zskal vznam "\relax". +Tm bude zabrnno jeho expanzi. +Naprogramujeme \db addprotect "<makro>", kter zad vloen "<makra>" do seznamu. + +\inext {protectlist}{\empty}{+-} + +Nkter makra budou fungovat jen v pdf\TeX{}u pi nastavenm "\pdfoutput=1". +Pipravme si tedy test \db ifpdftex, kter pak pouijeme pi ten souboru +"opmac.tex". Test nikdy nebudeme vkldat do maker, take pi ten souboru +"opmac.tex" u mus bt jasn, zda bude vstup smrovn do DVI nebo PDF. +Pozdj zmna "\pdfoutput" me zpsobit pote. + +\inext {ifpdftex}{\empty}{+-} + +Makra \db sdef a \db sxdef umouj pohodln definovat kontroln sekvence +ohranien pomoc "\csname...\endcsname". + +\inext {sdef}{\empty}{+-} + +Makro \db adef umon nastavit znak na aktivn a rovnou ho definovat, co +normln uvnit maker nen jednoduch (TBN str. 25 a 26). +Vyuijeme toho, e "~" je aktivn znak a pomoc +"\lccode" a "\lowercase" jej pepeme na poadovan znak. Dostaneme tm +aktivn token s poadovanou ASCII hodnotou a tento token definujeme. +Pomoc \db lccodetiezero vrtme po piazen (tj. po proveden definice) +"\lccode" vlnky na pvodn hodnotu. + +\inext {adef}{\empty}{+-} + +Makrem \db isdefined "{<jmno>}\iftrue" se ptme, zda je definovan +"\csname<jmno>\endcsname". To zvren pipojen "\iftrue" makro seere, +ale uivatel ho pe zejmna z toho dvodu, aby mu tato konstrukce fungovala +uvnit vnoench "\if..\fi" + +\inext {isdefined}{^^B\cbrace}{++} + +Makro \db isinlist "<list>{<tokeny>}\iftrue" zjist, zda "<tokeny>" jsou +(jako string) obsaeny v~makru "<list>". Pitom seere "\iftrue" ze stejnch +dvod, jak je uvedeno ped chvl. + +\inext {isinlist}{^^B\cbrace}{++} + +Makro \db isnextchar "<znak>{<co dlat pi ano>}{<co dlat pi ne>}" +pracuje ponkud odlin od pedchozch maker. Zjist, zda nsledujc znak +je "<znak>" a pokud ano, vykon vnitek prvn zvorky, jinak vykon vnitek +druh zvorky. Pomoc "\futurelet" ulo zkouman znak do "\next" a spust +\db isnextcharA. + +\inext {isnextchar}{\empty}{+-} + +Pedefinujeme makro \db uv z \csplain{}u. Tam je toto makro navreno tak, aby +mohlo mt za svj parametr verbatim text. Dsledkem toho nefunguje sprvn +kerning. Povauji za lep mt sprvn kerning a ppadn uvozovn verbatim +text eit teba pomoc "\clqq...\crqq". + +\inext {def\nb uv}{}{+-} + +Knuth v souboru "plain.tex" zanechal dic sekvenci "\\" v provizornm stavu +(cvien: podvejte se v jakm). Domnvm se, e je lep ji dt jednoznan +vznam "\undefined". Nkterm uivatelm toti me OPmac pipomnat +La\TeX{} a nen tedy vyloueno, e je napadne pst "\\". Mli by na to +dostat jednoznanou odpov: {\tt undefined control sequence}. + +\inext {undefined}{}{+-} + +Do pracovnho souboru urenho k novmu naten budeme chtt vloit +komente za znakem procento. K tomu potebujeme mt procento jako obyejn +znak kategorie 12. Na tento znak se v naem kdu peklop otaznk, Take +\db percent expanduje na znak procento s kategori 12. + +\inext {percent}{}{+-} + +Makro plain\TeX{}u "\," +funguje jen v matematick sazb. Uivatel bude chtt makro asto +pout napklad mezi slem a jednotkou v textovm mdu: "5\,mm", take +makro pedefinujeme. + +\inext {kern}{}{+-} + + +\subsec Globln parametry +%%%%%%%%%%%%%%%%%%%%%%%%%% + +Zakeme vdovy a sirotky a dle nastavme registry pro listingy tiskovho +materilu na smysluplnj hodnoty, ne jsou implicitn. + +\inext {widowpenalty}{\empty}{+-} + +Nsledujc makra a registry ovlivn chovn klovch maker OPmac zpsobem, +jak je popsno v~komentch. Mnoh z tchto maker a registr byly zmnny v +uivatelsk dokumentaci. +\dgn \nb iindent +\dgn \nb ttindent +\dgn \nb ttskip +\dgn \nb ttpenalty +\dgn \nb tthook +\dgn \nb intthook +\dgn \nb iiskip +\dgn \nb bibskip +\dgn \nb tabstrut +\dgn \nb tabiteml +\dgn \nb tabitemr +\dgn \nb vvkern +\dgn \nb hhkern +\dgn \nb multiskip +\dgn \nb colsep +\dgn \nb mnoteindent +\dgn \nb mnotesize +\dgn \nb picdir +\dgn \nb bibtexhook +\dgn \nb chaphook +\dgn \nb sechook +\dgn \nb secchook +\dgn \nb cnvhook +\dgn \nb pghook + +\inext {newdimen}{\count=7 \empty}{+-} + + + +\subsec Loga +%%%%%%%%%%%% + +V logu \db OPmac je pomoc "\thefontscale" zvteno psmeno O. Logo \db CS je +pepsno beze zmny z CS\TeX{}u. Tm snadno vytvome i logo \db csplain. + +\inext {def\nb OPmac}{\empty}{+-} + +Troufm si tvrdit, e logo \db LaTeX (akoli je plain\TeX{}ist asi moc +nebudou potebovat) je v~nsledujcm kdu daleko lpe eeno, ne v +samotnm La\TeX{}u. Pot toti ve spoluprci s makrem \db slantcorr +i se sklonem psma pi usazovn zmenenho A. + +\inext {LaTeX}{\empty}{+-} + +Loga se obas mohou vyskytnout v nadpisech. Zabezpeme je tedy proti +rozboen pi zpisu do REF souboru. + +\inext {addprotect}{\empty}{+-} + + +\subsec Velikosti font, dkovn +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\csplain{} od verze "<Nov. 2012>" definuje makro +\db resizefont "<fontselector>", kter zmn +velikost fontu danho svm pepnaem a tento zmnn font si ponech +stejn pepna. Zmna velikosti je dna obsahem makra \db sizespec. +Tam me bt napklad napsno "at13pt" nebo "scaled800". +Dle CSplain definuje makro +\db resizeall, kter zmn velikost +font s registrovanmi pepnai. Registrovn se provd makrem +\db regfont. Implicitn jsou registrovny pepnae + "\tenrm", "\tenit", "\tenbf", "\tenbi", a "\tentt". +Do novch velikost tedy pjdeme se starmi nzvy pepna +"\ten<nco>" a to slovo "ten" budeme chpat jen jako historick relikt, +kter nm ovem napov, e kontroln sekvence je fontovm pepnaem. + +OPmac si zjist, zda je definovan "\regfont". Pokud ne, upozorn na starou +verzi \csplain{}u na terminlu a potebn makra si definuje. Je to kopie +kdu ze souboru "csfontsm.tex" z balku \csplain{}. + +\inext {regfont}{\empty}{+-} + +Implicitn jsou zavedeny \CS{}fonty, take k nim pidme AMS fonty z +"ams-math.tex", kter vizuln odpovdaj. Pozdji si me uivatel zavst +jin makro (nap. "tx-math.tex") a zavede si teba i jin textov fonty. To nezmn +vlastnosti maker v OPmac, pokud nov soubory maker sprvn pedefinuj +makra "\setmathsizes[<text>/<script>/<scriptscript>]", "\normalmath" a +"\boldmath". + +\inext {ams-math}{\empty}{+-} + +Po naten souboru ams-math disponujeme makry \db regtfm na registraci +rznch metrik pro rzn designovan velikosti font a \db whichtfm, kter +expanduje na svj parametr nebo na metriku, kter je registrovna pro +velikost \db dgsize. Registrace metrik \CS{}font je rovn provedena +v souboru {\tt ams-math.tex}. Jak bylo eeno, +makro "\resizefont<fontselector>" \csplain{}u zmn +velikost fontu "<fontselector>" podle obsahu makra "\sizespec" (viz soubor +{\tt csfontsm.tex}). Toto makro "\resizefont" vol pomocn makro \db +resizefontskipat na odstrann \uv{sizespec} z nzvu metriky. Toto pomocn +makro je v OPmac pedefinovno s vyuitm "\whichtfm", take kdy ped +volnm makra "\resizefont" pipravme sprvnou "\dgsize", \TeX{} pouije +metriku designovanou na poadovanou velikost: + +\inext {resizefontskip}{\empty}{+-} + +Makra "\typosize", "\fontsizex", "\textfontsize", +"\setbaselineskip" poaduj zpis parametru bez jednotky. +Jednotkou je \db ptunit, kter je nastavena na 1pt. Uivatel me +jednotku zmnit (nap. "\ptunit=1mm" pi nvrhu plaktu). Dle \db fontdim +je registr, kter udv aktuln velikost psma. + +\inext {ptunit}{\empty}{+-} + +asto budeme potebovat odstranit jednotku "pt" ve vpisu "\the<dimen>". +Provedeme to pomoc "\expandafter\ignorept\the<dimen>". Protoe "\the" +vyrb znaky pt s kategori 12, je makro \db ignorept definovno trikem pes +"\lowercase". Z otaznku vznikne p kategorie 12 a z vykinku vznikne t. + +\inext {lccode}{\empty}{+-} + +Makra \db typosize a \db typoscale zmn velikosti a nastavuj +vchoz font "\tenrm" a vchoz +matematiku "\normalmath". Nehrajeme si na OFS nebo NFSS, kter se sna ctt +naposledy nastaven duktus a variantu. Uivatel si variantu psma a tun +duktus pro matematiku mus nastavit a po zavoln makra na zmnu velikosti fontu. + +\inext {typosize}{\empty}{+-} + +Makro \db fontsizex "[<velikost>]" pedpokld svj parametr bez jednotky. +Psmeno x v nzvu zna, e makro nen v uivatelsk dokumentaci. Uivatel +toti me pout "\typosize[<velikost>/]" a teba ho napadne si njak +vlastn makro "\fontsize" definovat. +Je-li parametr "<velikost>" przdn, makro "\fontsizex" neudl nic. +Jinak pomoc "\textfontsize" nastav +velikost textovch font. Dle zavol +"\setmathsizes[\fontsize/.7\fontsize/.5\fontsize]", ovem v parametru mus +odstranit jednotky a parametr pichyst pro makro "\setmathsizes" +expandovan. Pkazem "\normalmath" nakonec nastav matematick fonty do +nov velikosti. + +\inext {fontsizex}{^^B\cbrace}{++} + +Makro \db textfontsize "[<velikost>]" pedpokld svj parametr bez +jednotky. Pipoj jednotku "\ptunit", nastav "\dgsize" a "\sizespec" a +zavol "\resizeall", co je makro definovan v \csplain{}u, kter postupn +vol "\resizefont" na vechny registrovan fonty. + +\inext {textfontsize}{^^B\cbrace}{++} + +Makro \db setbaselineskip "[<velikost>]" pedpokld parametr bez jednotky. +Pipoj jednotku "\ptunit" a nastav "\baselineskip" bez dodaten +prunosti. Nastav dal registry, kter s "\baselineskip" souvisej. +Zmrn nen nastavena "\topskip", "\splittopskip", +"\above/belowdisplayskip". Tyto parametry (globln pro cel dokument) by si +ml uivatel nastavit sm. + +\inext {setbaselineskip}{^^B\cbrace}{++} + +Makro \db withoutunit "\makro<dimen>" odstran jednotku z "<dimen>" a takto +upraven slo vlo do parametru "\makro", kter oekv daj bez jednotky +v~hranat zvorce. + +\inext {withoutunit}{\empty}{+-} + +Makra \db fontscalex "<factor>", \db textfontscale "<factor>" a +\db scalebaselineskip "<factor>" +pepotaj "<factor>" podle aktulnho "\fontdim" resp. "\baselineskip" +na absolutn jednotku a zavolaj odpovdajc makro definovan ped chvl. + +\inext {fontscalex}{\count=3 ^^B\cbrace}{++} + +Makro \db thefontsize si alokuje aktuln font do sekvence \db thefont a +tento nov fontov pepna podrob zmn velikosti "\resizefont". +Makro \db thefontscale pepot parametr na absolutn velikost a zavol +"\thefontsize". + +\inext {thefontsize}{\count=2 ^^B\cbrace}{++} + +Plain\TeX{}ov \db magstep m na konci "\relax", take nefunguje jako pouze +expandujc makro. My ale "\magstep" oekvme v parametrech pkaz +"\typoscale" a podobnch, proto v "\magstep" je nahrazeno "\relax" mn +drsnm "\space". To separuje seln parametr dostaten. + +\inext {magstep}{\empty}{+-} + +Makro \db em pepn kontextov do odpovdajc varianty a ve spoluprci s +makrem "\additcorr" pidv italickou korekci. Makro \db additcorr +si pomoc "\lastskip" zapamatuje posledn mezeru, pak ji odstran, vlo +italickou korekci a nakonec vrt tu odstrannou mezeru. + +\inext {def\nb em}{\empty}{+-} + +Fontov makra zabezpeme proti rozkladu v parametru "\write". + +\inext {addprotect}{\empty}{+-} + + +\subsec Texty ve vce jazycch +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Makro \db mtext "<znaka>" je zkratkou za \uv{multilingual text}. +Toto makro si podle znaky a aktulnho jazyka (dle registru "\language") +vyhled, jak text m vypsat. + +\inext {mtext}{\empty}{+-} + +Jednotliv texty definujeme pomoc "\sdef{mt:<znaka>:<jazyk>}" takto: + +\inext {chap:en}{\empty}{+-} + +Nkter texty jsou zapsny pomoc "\v" notace. Je lep udlat to takto +ne vytvoit soubor "opmac.tex" zvisl na kdovn. Aby byla tato notace +sprvn interpretovna, spustme "\csaccents", co je makro \csplain{}u. +Pokud nkdo pouv OPmac s jinm formtem, ne \csplain, neprovede se nic, +protoe konstrukce "\csname csaccents\endcsname" se v takovm ppad perod v +"\relax". Makro "\csaccents" spustme jen tehdy, pokud je u uivatel +nespustil ped "\input opmac". To poznme podle toho, zda je definovan +sekvence "\r". + +\inext {}{}{+-} + +CSplain od verze "Nov. 2012" pipravuje nsledujc +makra, kter konvertuj slo "\language" na znaku jazyka pro vechny +jazyky, kter maj nataeny vzory dlen slov. +Pro jistotu (pokud je pouita star verze CSplainu) tuto koverzi +\uv{naume} i makro OPmac: + +\inext {sdef}{\empty}{+-} + + + +\subsec REF soubor +%%%%%%%%%%%%%%%%%% + +OPmac pouv pro vechny poteby (obsah, reference, citace, rejstk, +poznmky na okraji) +jedin soubor "\jobname.ref" (tzv. REF soubor). +Navc, pokud nen poteba, vbec tento soubor +nezakld. asto toti budeme chtt dlat s OPmac jen jednoduch vci a je +navn pod na disku kvli tomu uklzet smet. + +Je poteba deklarovat souborov deskriptory \db reffile a \db testin: + +\inext {newwrite}{\empty}{+-} + +Do souboru zapisujeme makrem \db wref "\<sekvence>{<data>}", kter vlo do +"\reffile" dek obsahujc "\<sekvence><data>". +Implicitn ale nen "\reffile" zaloeno, take implicitn hodnota tohoto +makra je \db wrefrelax, tedy nedlej nic. + +\inext {wrefrelax}{\empty}{+-} + +Makro \db inputref spustme na konci ten souboru "opmac.tex", tedy v +situaci, kdy u budeme mt definovny vechny kontroln sekvence, kter se v +REF souboru mohou vyskytnout. Nyn si toto makro jen pipravme. +Makro ov existenci souboru "\jobname.ref" a pokud existuje, provede +"\input \jobname.ref". V takovm ppad po naten REF souboru jej oteve +k~zpisu a piprav "\wref" do stavu, kdy toto +makro bude ukldat data do souboru. + +\inext {inputref}{^^B\cbrace}{+-} + +Makro \db openref kdekoli v dokumentu si vynut zaloen souboru +"\jobname.ref". Toto makro neprovede nic, je-li REF soubor u zaloen. To +pozn podle toho, e makro "\wref" nem vznam "\wrefrelax". Jestlie soubor +jet nen zaloen, makro jej zalo, pedefinuje "\wref" a vlo prvn +dek do souboru. Tm je zarueno, e pi ptm \TeX{}ovn dokumentu +je soubor neprzdn, take jej OPmac rovnou pete a znovu zalo na zatku +sv innosti. Nakonec se "\openref" zasebevrad, aby se nemuselo pi +opakovanm voln obtovat vykonvat njakou prci. Prce u je toti +hotova. + +\inext {openref}{^^B\cbrace}{++} + +Pro zpisy do REF souboru pouvme tuto konvenci: prvn kontroln sekvence +na dku je vdy tvaru "\X<nzev>", take mme pehled, kter kontroln sekvence +pochz z REF souboru. + + + +\subsec Lejblky a odkazy +%%%%%%%%%%%%%%%%%%%%%%%%% + +K vytvoen zptnho odkazu provedeme ti kroky (v tomto poad): + +\begitems +\item* V mst "\label[<lejblk>]" si zapamatujeme "<lejblk>". +\item* V dob vygenerovn sla (sekce, kapitoly, caption, atd.) + propojme "<lejblk>" s tmto slem. Provedeme to + pomoc "\sxdef{lab:<lejblk>}{<slo>}". +\item* V mst "\ref[<lejblk>]" vytiskneme "\csname lab:<lejblk>\endcsname", + tedy "<slo>". +\enditems + +To je zkladn idea pro zptn odkazy. V takovm ppad nepotebujeme REF +soubor. Pokud ale chceme dopedn odkazy, je poteba pout REF soubor +zhruba takto: + +\begitems +\item* V dob vygenerovn sla (sekce atd.) navc ulome informaci + "\Xlabel{<lejblk>}{<slo>}" do REF souboru. +\item* V dob ten REF souboru (tedy na zatku dokumentu) provede "\Xlabel" + piazen pomoc "\sdef{lab:<lejblk>}{<slo>}". +\item* Nyn me pijt "\ref[<lejblk>]" + se svm "\csname lab:<lejblk>\endcsname" kdekoli v dokumentu. +\enditems + +Pejdeme od idej k implementaci. +Makro \db label "[<lejblk>]" si pouze zapamatuje "<lejblk>" do makra \db +lastlabel, aby s touto hodnotou mohlo pozdji pracovat makro, kter automaticky +generuje njak slo. + +\inext {def\nb label}{\empty}{+-} + +Makro, kter automaticky generuje njak slo, m za kol zavolat +\db wlabel "<slo>". Toto makro propoj "\lastlabel" a "<slo>" tak, e +definuje sekvenci "\lab:\lastlabel" jako makro s hodnotou "<slo>". +Krom toho zape expandovan "\lastlabel" i "<slo>" do +REF souboru (jen, je-li oteven, zptn reference toti funguj i bez +souboru). Nakonec vrt makru "\lastlabel" jeho pvodn nedefinovanou +hodnotu, tj.~lejblk +u byl pouit. Dal makro automaticky generujc slo zavol "\wlabel", +kter nyn neprovede nic (pokud tedy uivatel nenapsal dal +"\label[<lejblk>]"). + +\inext {wlabel}{^^B\cbrace}{++} + +\goodbreak +Makro \db ref "[<lejblk>]" zkontroluje definovanost "\lab:<lejblk>". +Je-li to pravda, vytiskne "\lab:<lejblk>" (krz reflink, aby to bylo +ppadn klikac). Jinak vytiskne dva otaznky a pedpokld, e v tomto +ppad jde o dopednou referenci. Vynut si tedy oteven REF souboru +zavolnm "\openref". + +\inext {ref}{^^B\cbrace}{++} + +Makro \db pgref "[<lejblk>]" dl podobnou prci, jako "\ref", jen s makrem +"\""pgref:<lejblk>". Toto makro je definovno a pi znovunaten REF +souboru makrem \db Xlabel, protoe ke sprvnmu uren sla strnky +potebujeme asynchronn "\write". + +\inext {pgref}{\empty}{+-} + + + +\subsec Kapitoly, sekce, podsekce +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Fonty pro titul, kapitoly a sekce \db titfont, +\db chapfont, \db secfont a \db seccfont +jsou definovny jako odpovdajc zvten a nastaven tunho duktu. +Ten je nastaven pomoc \db bfshape jako "\bf" a navc je ztotonn +"\tenit" s "\tenbi", take kdy nyn uivatel nape "\it", dostane tunou +kurzvu. + +\inext{titfont}{\empty}{+-} + +Pro slovn kapitol, sekc a podsekc potebujeme tae: + +\dgn \nb chapnum \dgn \nb secnum \dgn \nb seccnum + +\inext{newcount}{\empty}{+-} + +Makro pro titul \db tit pot s tm, e bude titul na vce dcch. Sz ho +tedy jako odstavec s~prunmi "\leftskip" a "\rightskip". Pkaz "\unskip" +tsn za parametrem "#1" odstran mezeru z konce dku, kter tam obvykle +je. Teprve pot je nadpis dn centrovn. + +\inext{tit}{^^B\cbrace}{++} + +Makra \db chap, \db sec a \db secc nastav odpovdajc tae, dle vytvo +slovn pro tisk (sestvajc z vce sel) v makrech \db thechapnum, +\db thesecnum a \db theseccnum a zavolaj odpovdajc makro "\printchap", +"\printsec" a "\printsecc". +Pot zavol "\wlabel" na +propojen ppadnho labelu s slem kapitoly/sekce/podsekce a +pomoc \db wcontents ulo do "\reffile" potebn data pro obsah.\par\vskip-1pt + +\inext{chap}{\empty}{+-} + +Text titulu sekce a jej slo jsou vloeny do "\mark", take tyto daje +mete pout v plovoucm zhlav. Tato vlastnost nen dokumentovna v +uivatelsk sti, protoe je ponkud technitjho charakteru. Makro \db +insertmark "\thesecnum{<text>}" vlo do "\mark" data ve formtu +"{<secnum>} {<text>}", take je mono je pout pmo expanz nap. +"\firstmark", nebo je oddlit a zpracovat zvlṻ. Parametru "<text>" je +zabrnna expanze pomoc protaen tohoto parametru pes "\toks", viz TBN +str. 54 dole a strany 55--57. Pkaz "\mark" se toti sna o expanzi. + +\inext{insertmark}{\empty}{+-} + +Pklad pouit plovoucho zhlav v "\headline": + +\begtt +\headline{\expandafter\domark\firstmark\hss} +\def\domark#1#2{\llap{\it\headsize #1. }\rm\headsize #2} +\def\headsize{\thefontsize[10]} +\endtt + +Makro "\headsize" v tto ukzce zaru, e bude mt zhlav vdy +poadovanou velikost. Bez toho ta zruka nen, pokud tedy uivatel v sazb +dokumentu std velikosti psma. Output rutina toti me pijt nhle, +teba v okamiku, kdy je zapnut jin velikost psma. + +Pokud chcete kombinovat na levch a pravch strnkch plovouc zhlav z +kapitol a sekc, inspirujte se v TBN na stranch 259 a 260. + +Makra \db printchap, \db printsec a \db printsecc vytisknou slo a titul +kapitoly, sekce resp. podsekce. Pkazem "\firstnoindent" dvaj najevo, +e nsledujc odstavec nebude mt odstavcovou zarku. + +\inext {printchap}{\count=3 ^^B\cbrace}{++} + +Makro \db afternoindent potla odstavcovou zarku pomoc pechodnho +naplnn "\everypar" kdem, kter odstran box vznikl z "\indent" a +vyprzdn pomoc \db wipeepar registr "\everypar". +Makro \db firstnoindent je ztotonno s +"\afternoindent", ale uivatel me pst "\let\firstnoindent=\relax". +Pak bude "\afternoindent" pracovat jen za verbatim vpisy. + +\inext{afternoindent}{firstnoindent}{++} + +Nechceme, aby se nm odstavce tvoen z titul kapitol a sekc rozdlily do +vce stran. Proto msto pkazu "\par" je pouito \db nbpar. +Konen uivatel me oddkovat napklad v titulu pomoc \db nl. +Tomuto makru pozdji v "\output" rutin zmnme vznam na mezeru. + +\inext{nbpar}{\empty}{+-} + + +\subsec Popisky, rovnice +%%%%%%%%%%%%%%%%%%%%%%%% + +Nejprve deklarujeme potebn tae: +\dgn \nb tnum \dgn \nb fnum \dgn \nb dnum + +\inext{newcount}{\empty}{+-} + +Vchoz hodnoty maker, kter se vypisuj v mst generovanho sla jsou: + +\inext{thetnum}{\empty}{+-} + +Makro \db caption "/<typ> " zvedne ta "\<typ>num" o jedniku, +dle nastav prun mezery s odsazenm "\iindent" a s centrovnm poslednho +dku (viz TBN str.~234), propoj pomoc "\wlabel" slo s ppadnm +lejblkem, vytiskne slovo Tabulka/Obrzek v zvislosti na jazyku makrem +"\mtext", vytiskne slo "\the<typ>num" a zpracuje odstavec s nastavenmi +"\leftskip", "\rightskip". Pedefinuje "\par" tak, e prvn vskyt przdnho +dku ukon skupinu a tm se vechna nastaven vrt do pvodnho stavu. + +\inext{caption}{^^B\cbrace}{++} + +Makro \db eqmark zvedne "\dnum" o jedniku. +V display mdu pak pouije primitiv "\eqno", za kterm +nsleduje "\thednum". V internm mdu (v boxu) vytiskne jen "\thetnum". +V obou ppadech propoj ppadn lejblk s slem pomoc makra "\wlabel". + +\inext{eqmark}{\empty}{+-} + +\subsec Odrky +%%%%%%%%%%%%%%% + +Odsazen kad dal vnoen rovn odrek bude o "\iindent" vt. +Jeho hodnota je nastavena na "\parindent" v dob ten {\tt opmac.tex}. +Jestlie uivatel pozdji zmn "\parindent", ml by odpovdajcm zpsobem +zmnit "\iindent". Krom toho deklarujeme ta pro odrky \db itemnum. + +\inext{newcount}{\empty}{+-} + +Makro \db begitems vlo "\iiskip", zahj novou skupinu, pronuluje "\itemnum", +zvt odsazen o~"\iindent" a pomoc "\adef" definuje hvzdiku jako +aktivn makro, kter provede "\startitem". Makro \db enditems ukon +skupinu a vlo "\iiskip". + +\inext{begitems}{\empty}{+-} + +Makro \db startitem ukon ppadn pedchoz odstavec, posune ta, zahj +prvn odstavec jako "\noindent" a vyoupne doleva text definovan v +\db printitem, kter je implicitn nastaven makrem "\begitems" na +\db normalitem. + +\inext{startitem}{\empty}{+-} + +Makro \db style "<znak>" pete "<znak>" a rozvine jen na makro +"\item:<znak>". Tato jednotliv makra jsou definovna pomoc "\sdef". +Nen-li makro "\item:<znak>" definovno, pouije se "\normalitem". + +\inext{style}{\empty}{+-} + +tvereek kreslme jako "\vrule" odpovdajcch rozmr makrem +\db fullrectangle "{<dimen>}". + +\inext{fullrectangle}{\empty}{+-} + +Pro pevod mezi numerickou hodnotou tae a pslunm psmenem a, b, c +atd. je vytvoeno makro \db athe "<number>". + +\inext{athe}{\empty}{+-} + + +\subsec Tvorba obsahu +%%%%%%%%%%%%%%%%%%%%% + +Do \db toclist budeme ukldat data pro obsah. +Pomoc \db ifischap se budeme ptt, zda v dokumentu jsou kapitoly. + +\inext{toclist}{\empty}{+-} + +V dob ten REF souboru vlome veker data obsahu do makra "\toclist" +tak, e v tomto bufferu budeme mt za sebou sekvence "\tocline" nsledovan pti +parametry. Makra \db Xchap, \db Xsec a \db Xsecc +maj parametry "{<slo>}{<text>}{<strana>}" a jsou definovny nsledovn: + +\inext{Xchap}{\empty}{+-} + +Makro \db tocline "{<odsazen>}{<font>}{<slo>}{<text>}{<strana>}" vytvo +dek obsahu. dek tiskneme jako odstavec, protoe "<text>" me bt teba +del. Registr "\leftskip" nastavme jako souin "<odsazen>" krt "\iindent". +Pokud se v dokumentu vyskytuj kapitoly, odsadme jet o dal "\iindent". +Registr "\rightskip" nastavme na 2"\iindent", aby del "<text>" se zalomil +dv ne v mst, kde jsou strnkov slice. Konec odstavce se strnkovou +slic pak vythneme mimo tento rozsah pomoc "\hskip-2\iindent". Odstavec +pru v "\tocdotfill", protoe tento vplnk m vt prunost ne +"\parfillskip". Registr "\parfillskip" m "1fil", zatmco "\tocdotfill" m +prunost "1fill". Makro \db tocdotfill je implementovno pomoc "\leaders" +jako opakovan teky, kter budou lcovat pod sebou. + +\inext{tocline}{\empty}{+-} + +Makro \db maketoc jednodue spust "\toclist", Pokud je "\toclist" przdn, +upozorn o tom adekvtnm zpsobem na terminl. + +\inext{maketoc}{\empty}{+-} + + +\subsec Sestaven rejstku +%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Slovo do rejstku vlome pomoc \db iindex "{<heslo>}". Protoe vskyt +slova na strnce nen v dob zpracovn znm, je nutn pout REF soubor s +asynchronnm "\write". + +\inext{iindex}{\empty}{+-} + +Nyn naprogramujeme ten parametru makra +\db ii "<slovo>,<slovo>,...<slovo> ". Vzhledem k tomu, e za +ptomnosti zkratky "@" budeme potebovat projt seznam slov oddlench rkou +v~parametru jet jednou, zapamatujeme si tento seznam do "\tmp". + +\inext{leavevmode}{\empty}{+-} + +Makro \db iiA sejme vdy jedno slovo ze seznamu. Podle przdnho parametru +poznme, e jsme u konce a nedlme nic. Pi vskytu "<slovo>=@" (poznme to +podle shodnosti parametru s \db iiatsign \unskip), +spustme "\iiB", jinak vlome daj o slov do rejstku pomoc "\iindex". +Nakonec makro "\iiA" vol rekurzivn samo sebe. + +\inext{iiA}{\empty}{+-} + +Makro \db iiB rovn sejme vdy jedno slovo ze seznamu a na konci vol +rekurzivn samo sebe. Toto makro ovem za pouit makra \db iiC prohod poad +prvnho podslova ped prvnm lomtkem se zbytkem. Nen-li ve slov lomtko, +pozn to makro "\iiC" podle toho, e parametr "#2" je przdn. V takovm ppad +neprovede nic, nebo slovo je u zaneseno do rejstku v makru "\iiA". + +\inext{iiB}{\empty}{+-} + +Makro \db iid "<slovo> " pole slovo do rejstku a souasn je zopakuje do +sazby. Pomoc "\futurelet" a \db iiD zjist, zda nsleduje teka nebo rka. Pokud +ne, vlo mezeru. + +\inext{iid}{\empty}{+-} + +Pi ten REF souboru se vykonvaj makra \db Xindex "{<heslo>}{<strana>}", +kter postupn vytvej makra tvaru "\,<heslo>", ve kterch je shromaovn +seznam strnek pro dan "<heslo>". +Krom toho kad makro "\,<heslo>" je vloeno do seznamu \db iilist. +Na konci ten +REF souboru tedy mme v~"\iilist" seznam vech hesel jako dic sekvence (to +zabere nejm msta v \TeX{}u). Kad +"\,<heslo>" na konci ten REF souboru obsahuje dva daje ve svorkch, prvn daj +obsahuje pomocn data a druh obsahuje seznam strnek. Tedy "\,<heslo>" je makro +s obsahem "{<pomocn-data>}{<seznam-strnek>}". + +Seznam strnek nen jen tup seznam vech strnek, na kterch se objevil +zznam "\ii" pro dan slovo. Nkter strnky se toti mohou opakovat a my je +chceme mt jen jednou. Pokud strnky jsou souvisle za sebou: 13, 14, 15, 16, +chceme navc takov seznam nahradit zpisem 13--16. Makro +"\Xindex{<heslo>}{<strana>}" je z tohoto dvodu ponkud sofistikovanj. + +\ilabel [Xindex:first] {firstdata} +\ilabel [Xindex:second] {seconddata} + +\inext{Xindex}{\empty}{+-} + +innost makra "\Xindex" si vysvtlme za chvli podrobnji. Nejprve ovem +definujeme pomocn makro \db firstdata "\,<heslo>"~"\<cs>", kter expanduje na +"\<cs>"~"<prvn-datov-daj-hesla>&". Je-li teba "\,aa" definovno jako +"{prvni}{druhy}", pak "\firstdata"~"\,aa"~"\cosi" expanduje na "\cosi"~"prvni&". +Tm mme monost vyzskat data z makra. Podobn makro +\db seconddata "\,<heslo>"~"\<cs>" expanduje na +"\<cs>"~"<druh-datov-daj-hesla>&". + +\inext{firstdata}{\empty}{+-} + +Ne se pustme do vkladu makra "\Xindex", vysvtlm, pro pro hesla rejstku +tvom jednu dic sekvenci, kter je makrem se dvma datovmi daji. +Mohl bych jednodueji pracovat se dvma rznmi dicmi sekvencemi, +nap. "\,<heslo>" a "\:<heslo>". Dvod je prost: etm pam \TeX u. D se toti +oekvat, e poet hesel v rejstku meme potat na tisce a je rozdl +alokovat kvli tomu tisce kontrolnch sekvenc nebo dvojnsobn mnostv +takovch sekvenc. + +V makru "\Xindex" teme "\firstdata" na dku \cite[Xindex:first] +a "\seconddata" na dku \cite[Xindex:second]. +ten je provedeno makry \db XindexA a \db XindexB. Prvn sek dat je tvaru +"<posledn-strana>/<stav>" a druh sek dat obsahuje rozpracovan seznam strnek. +Podvme-li se na definice "\XindexA" a "\XindexB", shledme, e seznam strnek +bude uloen v "\tmp", dle "<posledn-strana>" bude v "\tmpa" a "<stav>" je v +"\tmpb". + +\inext{XindexA}{\empty}{+-} + +Rozliujeme dva stavy: "<stav>=+", pokud je seznam strnek zakonen konkrtn +strnkou. Tato konkrtn strnka je uloena v "<posledn-strana>". Druhm +stavem je "<stav>=-", kdy je seznam strnek ukonen "--" (pesnji obsahem +makra \db iiendash, kter mete snadno pedefinovat) a v tomto ppad +"<posledn-strana>" obsahuje posledn strnku, na kter byl zjitn vskyt +hesla. Tato strana nemus bt v~seznamu strnek explicitn uvedena. + +Makro "\Xindex{<heslo>}{<strana>}" tedy postupn vytv seznam stran +zhruba takto: + +\def\begtthook{\langleactive} +\begtt +if (prvn vskyt \,<heslo>) { + zalo \,<heslo> do iilist; + <seznam-stran> = "<strana>"; <stav> = +; <posledni-strana> = <strana>; + return; +} +if (<strana> == <posledni-strana>) return; +if (<stav> == +) { + if (<strana> == <posledni-strana>+1) { + <seznam-stran> += "--"; + <stav> = - ; + } +else { + <seznam-stran> += ", <strana>"; + <stav> = + ; + } + else { + if (<strana> > <posledni-strana>+1) { + <seznam-stran> += "<posledni-strana>, <strana>"; + <stav> = + ; + } + } +} +<posledn-strana> = <strana>; +\endtt + +\def\begtthook{} +Makro \db makeindex nejprve definuje pechodn vznam rekurzivnho +"\act" tak, aby byly uzaveny seznamy strnek (tj. aby seznam nekonil +znakem "--") a do prvn +datov oblasti kadho makra typu "\,<heslo>" vlo konverzi textu "<heslo>" do +tvaru vhodnm pro abecedn azen eskch slov. +Pomoc "\expandafter \act \iilist \relax" se +poadovan innost vykon pro kad prvek v "\iilist". +Dle makro "\makeindex" provede seazen "\iilist" podle abecedy +makrem "\dosorting" a nakonec provede tisk jednotlivch hesel. K tomu elu +znovu pechodn pedefinuje "\act" a pedlo mu "\iilist". + +\ilabel [mkindex:od] {firstdata} +\ilabel [mkindex:do] {after\nb act} +\ilabel [mkindex:orippx] {orippx} + +\inext{makeindex}{^^B\cbrace}{++} + +Makro \db printiipages sebere z "<druhho-datovho-daje>" seznam strnek a +jednodue je vytiskne. + +\inext{printiipages}{\empty}{+-} + +Makro \uv{prepare index item} \db prepii "\,<heslo>" odstran prostednictvm +\db prepiiA z nzvu kontroln sekvence backslash a rku a zbytek tiskne pomoc +"\printii". Pokud ale je "\,<heslo>" uloeno v~seznamu "\iispeclist", pak se +expanduje sekvenci s nzvem "\\,<heslo>", ve kter je uloeno, co se +m msto hesla vytisknout. Data tchto vjimek jsou pipravena makrem "\iis" + +\inext{prepii}{\empty}{+-} + +Kontroln otzka: pro se nedotazujeme jednodue na to, zda je +"\\,<heslo>" definovan dic sekvence? Odpov: museli bychom ji +sestavit pomoc "\csname...\endcsname", ale to zalo do \TeX{}ov pamti +novou dic sekvenci pro kad heslo v rejstku. My se sname poet +tchto dicch sekvenc redukovat na minimum. Potme s tm, e obyejnch +hesel bude tisce a vjimek jen pr destek. + +Makro \db iis "<heslo> {<text>}" vlo dal daj do slovnku vjimek pro +hesla v rejstku. Pesnji: vlo "\,<heslo>" do \db iispeclist a definuje +sekvenci "\\,<heslo>" jako "<text>". + +\inext{iis}{\empty}{+-} + +Makro \uv{print index item} \db printii "<heslo>&" vytiskne jeden daj do +rejstku. Makro projde prostednictvm \db printiiA jednotliv podslova +oddlen lomtkem a pepe je do rejstku oddleny mezerou. Pitom +kontroluje, zda se podslova rovnaj odpovdajcm podslovm z pedchozho +hesla, kter je uloeno v \db previi. Pokud ano, msto podslova vlo \db +iiemdash, co je pomlka. Na konci innosti se spust makro \db printiiB, +kter nastav "\previi" na \db currii (nov slovo se pro dal zpracovn stv +pedchozm) a vytiskne seznam strnek. Makrem \db everyii +(implicitn je przdn) dovolme uivateli vstoupit do procesu tisku hesla. +Me napklad pst "\def\everyii{\indent}", pokud chce. + +\ilabel [printii:iindent] {iindent} +\inext{printii}{\empty}{+-} + +Makro \db iiparparams nastavuje parametry sazby odstavce v rejstku. Vlevo +budeme mt "\leftsip" rovn "\iindent", ale prvn dek posuneme o +"-\iindent" (viz dek kdu~\cite[printii:iindent]) take prvn dek je +vystren doleva. Vpravo mme prunou mezeru, aby se seznam sel stran mohl +rozumn lmat, kdy je moc dlouh. Makro "\iiparparams" si mus poznait do +makra \db orippx pvodn daje mnnch hodnot. Nen mon se toti schovat +do skupiny, protoe rejstk je obvykle titn pomoc +"\begmulti...\endmulti" a toto makro obas ukonuje plnn boxu a spout +"\flushcolumns". Kdybychom mli "\makeindex" ve skupin, pak by pi +"\flushcolumns" dolo ke ken skupin. Na konci prce "\makeindex" na +dku \cite[mkindex:orippx] je makro "\orippx" zavolno a tm jsou parametry +odstavce vrceny do pvodn podoby. + +\inext{iiparparams}{\empty}{+-} + +Pomocn makro \db scanprevii "<expanded-previi>&" se podv do "\previi", +odloupne z nj sek ped prvnm lomtkem a tento sek definuje jako +"\tmpa". + +\inext{scanprevii}{}{+-} + +Vchoz hodnota "\previi" ped zpracovnm prvnho slova v rejstku je +przdn. + +\inext{previi}{\empty}{+-} + + +\subsec Abecedn azen rejstku +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Nejprve se zamme na vytvoen makra +"\isAleB"~"\,<heslo1>"~"\,<heslo2>", kter rozhodne, zda je "<heslo1>" azeno za +"<heslem2>" nebo ne. Vsledek zkoumn meme provit pomoc "\ifAleB". + +Pro porovnn dvou daj vyaduje norma dva prchody. V prvnm (primrn +azen) se rozliuje jen mezi psmeny A B C D E F G H Ch I J K L M N O P Q +R S T U V W X Y Z . Pokud jsou hesla z tohoto pohledu stejn, pak se +provede druh prchod (sekundrn azen), ve kterm jsou azena +neakcentovan psmena ped pehlasovan ped rkovan ped hkovan ped +stkovan ped kroukovan a dle s nejni prioritou mal psmena ped +velk. Pipravme si tedy dv sady "\lccode" dvojic: pro prvn prchod a pro +druh. Porovnvan hesla zkonvertujeme pomoc "\lowercase" pi nastaven +"\lccode" odpovdajcho prchodu. Pak takto zkonvertovan hesla teprve +zaneme porovnvat. + +Makro \db setprimarysorting piprav "\lccode" znak esk a slovensk +abecedy pro prvn prchod a \db setsecondarysorting pro druh prchod. +Makro "\setprimarysorting" expanduje \db sortingdata +a pedhod ped takto expandovan data "\act". +Povimneme si, e pro prvn prchod dostanou stejn "\lccode" vechny znaky +na spolenm dku makra "\sortingdata", zatmco v druhm prchodu budou mt +vechny znaky z tohoto makra rozdln "\lccode", ve vzestupnm poad. +Je to tm, e v makru "\setprimarysorting" se zved "\tmpnum" jen v mst +rky, zatmco v "\setsecondarysorting" se "\tmpnum" zved pro kad znak. +Nejni hodnotu m mezera vyznaen v "\sortingdata" pomoc "{ }". +Tm je zarueno, e krat slovo je azeno dv ne del slovo se stejnm +zatkem, obsahujc cel krat slovo (ten~tuk$\prec$tento). +Je sice pravda, e ASCII hodnota mezery je jet men, ale my musme +mezeru nkam oupnout na jin kd ne 32, jinak by nm ji nepeetlo +makro s~neseparovanm parametrem. Ovem my budeme chtt mezeru pest. + +\ilabel [sorten] {sort:en} +\ilabel [lan] {lan:} +\ilabel [chsorting] {chsorting} + +\inext{sortingdata}{\count=3 ^^B\cbrace}{++} + +Jednm z problm eskho azen je dvojhlska ch. Tu potebujeme +promnit v jedin znak. Pro poteby azen promnme ch v "^^T", Ch v "^^U" +a CH v "^^V". Udlme to nsledujcm okultnm kdem, kter definuje makro +\db preparesorting "\,<heslo>". Toto makro piprav pomoc do "\tmpb" +"<heslo>" zkonvertovan krz "\lowercase", +ovem nejprve je dvojhlska ch nahrazena jednm znakem. +Makro \db chsorting je implicitn nedefinovan, co znamen, e pracujeme s +dvojhlskou ch. Na dku \cite[sorten], \cite[lan] a \cite[chsorting] je ovem nastaveno +"\chsorting" jako "n", co je vzkaz, e dvojhlsku ch nechceme +interpretovat. + +\inext{bgroup}{\empty}{+-} + +Tento kd je bohuel obtnji iteln, protoe makra "\iiscanch" a dal +potebuj mt separtor "ch" ve stavu, kdy jednotliv psmena maj "\catcode" 12. +Pracujeme toti s vstupem primitivu "\string", kter bohuel ve (a na +mezeru) bal do token s kategori 12. Proto je cel kd obalen do +"\bgroup", "\egroup" a "\lowercase". Tam jsou znaky 4, 5, 6, 7, +kter maj kategorii 12, oupnuty na c, h, C, H. Po tomto deifrovn tedy +vidme, e makro \db iiscanch je definovno takto: + +\begtt +\gdef\iiscanch #1ch#2\relax{#1\if$#2$\else^^T\iiscanch #2\relax\fi} +\iiscanch Schz hrch, kter bych hzel na stnu.ch\relax +\endtt + +Uveden pklad expanduje postupn na + +\begtt +#1<-S +#2<-z hrch, kter bych hzel na stnu.ch +=> s^^T\iiscanch #2\relax + +#1<-z hr +#2<-, kter bych hzel na stnu.ch +=> s^^Tz hr^^T\iiscanch #2\relax + +#1<-, kter by +#2<- hzel na stnu.ch +=> s^^Tz hr^^T, kter by^^T\iiscan #2\relax + +#1<- hzel na stnu. +#2<- +=> s^^Tz hr^^T, kter by^^T hzel na stnu. +\endtt +a to nahrad vechny vskyty dvojhlsky ch znakem "^^T". Analogicky pracuj +makra \db iiscanCh a \db iiscanCH. Makro \db preparesortingA nakonec zavol +vechna ti makra, take mme nahrazeny vechny dvojhlsky ch, Ch i CH. + +V rmci optimalizace rychlosti jsou ped algoritmem na setdn seznamu +vechna hesla jednorzov zkonvertovan podle pravidel prvnho prchodu +azen a tato data jsou uloena v prvnm datovm daji hesla (ve druhm mme +seznam strnek). Nen tedy nutn dlat konverzi pi kadm porovnvn dvou +hesel. Ovem, pokud porovnn hesel vyjde bez rozdlu, je poteba provst +druh prchod azen (sekundrn azen). Ten nastavujeme jednotliv jen pro +takov dvojice hesel, kde to je poteba. Pravdpodobnost, e to je vbec +nkdy poteba, je miziv. Data pro primrn azen jsou tedy u pipravena na +dcch \cite[mkindex:od] a \cite[mkindex:do] v makru "\makeindex". + +V eskm azen se nem pihlet na interpunkn znaky (teka, stednk, +otaznk, atd.). Hesla mme adit tak, jako kdyby tam tyto znaky nebyly. +Kdyby se dv hesla podle tohoto pravidla neliila, norma pedepisuje nasadit +cca tvrt prchod, ve kterm se tyto znaky rozli. tvrt prchod +implementovn nen: hesla lic se jen interpunknmi znaky, jsou v OPmac +pi azen nerozliiteln, tj. jsou azena v poad, v jakm vstupuj do +rejstku. Ignorovn interpunknch znak je provedeno tak, e vem +tmto znakm je pidlen makrem \db setignoredchars "\lccode" teky a +teka je pi zpracovn v~"\setprimarysorting" a "\setsecondarysorting" odstranna +makrem \db removedot. + +\inext{removedot}{\empty}{+-} + +Pipravme si "\newif", kterm ohlsme vsledek porovnn dvou hesel: + +\inext{newif}{\empty}{+-} + +Makro \db isAleB "\,<heslo1>"~"\,<heslo2>" spust\hfil\break +"\testAleB"~"<zkonvertovan heslo1>&\relax"~"<zkonvertovan heslo2>&\relax"~% +"\,<heslo1>"~"\,<heslo2>". + +\inext{isAleB}{^^B\cbrace}{++} + +Idea makra \db testAleB lexikograficky porovnvajc dv slova je v tom, e ze +dvou string v~parametru oddlench "\relax" postupn odlupuje vdy +prvn znak "#1" a "#3" z kadho stringu a ten porovnv a samozejm pi rovnosti +rekurzivn zavol samo sebe. Pokud jsme se dostali na konec bez rozhodnut, co +je men, narazme na znak "&". V takovm ppad pestoupme do +sekundrnho prchodu. + +\inext{testAleB}{^^B\cbrace}{++} + +Makro \db testAleBsecondary "\,<heslo1>"~"\,<heslo2>" zalo skupinu, v n +nastav "\lccode" dle sekundrnho azen a pomoc "\preparesorting" +piprav zkonvertovan data do "\tmpa" a "\tmpb". Na chvosty tchto dat +pidm nulu a jedniku, aby porovnn vdy njak dopadlo, a spustm +\db testAleBsecondaryX, co pracuje obdobn, jako "\testAleB". + +\inext{testAleBsecond}{\count=2 ^^B\cbrace}{++} + +Nyn meme pomoc "\isAleB\,<heslo1>\,<heslo2>\ifAleB" rozhodnout, kter +ze dvou danch parametr m bt azen dve. Sta tedy u jen naprogramovat +celkov azen seznamu. Toto makro vychzejc z algoritmu mergesort +vytvoil mj syn Miroslav. Makro bylo poprv pouito v DocBy\TeX{}u, co je +nstroj, kterm je napklad pozena i tato dokumentace. + +Makro \db dosorting pomoc pomocnho makra "\act" dopln za kad daj v +"\iilist" rku a dle pedlo makru "\mergesort" jako parametr obsah +"\iilist" ukonen "\end,\end", vyprzdn "\iilist" a spust "\mergesort". + +\inext{dosorting}{\empty}{+-} + +Makro \db mergesort pracuje tak, e bere ze vstupn fronty vdy dvojici +skupin +poloek, kad skupina je zatdn. Skupiny jsou od sebe oddleny +rkami. Tyto dv skupiny spoj do jedn a zatd. Pak pejde na +nsledujc dvojici skupin poloek. Jedno zatdn tedy vypad +napklad takto: dv skupiny: "eimn,bdkz," promn v~jedinou +skupinu "bdeikmnz,". V tomto pklad jsou poloky jednotliv psmena, +ve skutenosti jsou to kontroln sekvence, kter obsahuj cel slova. + +Na potku jsou skupiny jednoprvkov ("\iilist" oddluje kadou +poloku rkou). Makro "\mergesort" v tomto ppad projde seznam a vytvo +seznam zatdnch dvoupolokovch skupin, uloen zptn v +"\iilist". V dalm prchodu znovu vyvrhne "\iilist" do vstupn +fronty, +vyprzdn ho a startuje znovu. Nyn vznikaj typolokov zatdn +skupiny. Pak osmipolokov~atd. V~zvru (na dku~\cite[konecsortu]) +je prvn skupina cel setdn a druh obsahuje "\end", tj. +vechny poloky jsou u setdn v prvn skupin, take sta +ji uloit do "\iilist" a ukonit innost. Pomoc \db gobbletoend +odstranme druh "\end" ze vstupnho proudu. + +\noactive{dvojice} +\ilabel [merge:porovnani] {isAleB} +\ilabel [merge:trojka] {mergesort p1+} +\ilabel [merge:p1] {ifx,} +\ilabel [merge:p2] {fif\nb mergesort\cbrace} +\ilabel [konecsortu] {empty\nb iilist} +\inext {def\nb mergesort }{^^B\cbrace}{++} + +{\def\quotehook{\catcode`\<12} +Jdro "\mergesort" vidme na dcch~\cite[merge:porovnani] +a~\cite[merge:trojka]. Makro "\mergesort" sejme ze vstupnho proudu +do "#1" prvn poloku prvn skupiny, do "#2" zbytek prvn skupiny a do +"#3" prvn poloku druh skupiny. Je-li "#1<#3", je do vstupnho +zatdnho seznamu "\indexbuffer" vloen "#1", ze vstupnho proudu je +"#1" odebrn a "\mergesort" je zavoln znovu. V ppad "#3<#1" +je do "\indexbuffer" vloen "#3", ze vstupnho proudu je "#3" odebrn a +"\mergesort" je zavoln znovu. dky~\cite[merge:p1] +a~\cite[merge:p2] e ppady, kdy je jedna ze skupin przdn: +je poteba vloit do "\indexbuffer" zbytek neprzdn skupiny a pejt +na dal dvojici skupin. Ostatn dky makra se vyrovnvaj se +skutenost, e zpracovn narazilo na zarku "\end,\end" a je tedy +poteba vystartovat dal prchod. +\par} + + +\subsec Vce sloupc +%%%%%%%%%%%%%%%%%%%% + +Makro pro sazbu do vce sloupc je pevzato z TBN, kde je podrobn +vysvtleno na stranch 224 a~245. Zkladn mylenka makra spov v tom, e +se napln jeden velk "\vbox" (box6) jednm sloupcem a "\endmulti" jej +rozlom do sloupc poadovan vky a str do sazby. Nen k tomu nutno +mnit vstupn rutinu. Makro z TBN je zde v OPmac ve dvou vcech pepracovno: +\begitems +\item * Dslednj balancovn sloupc vyluujc monost ztrty sazby + a umoujc mt sazbu s nezlomitelnmi mezerami mezi dky. +\item * Makro m kumulovanou sazbu a umouje pi rozshlm mnostv + tiskovho materilu pechodn pejt do reimu \uv{vyprazdovn}. +\enditems + +Makra \db begmulti, \db endmulti, \db corrsize, \db makecolumns a \db +splitpart pracuj zhruba tak, jak je popsno v TBN. + +\ilabel [mul:endgraf] {endgraf} +\ilabel [mul:balance] {last balancing} +\ilabel [mul:relax] {relax\cbrace} +\ilabel [mul:prevgraf] {prevdepth} + +\inext{corrsize}{\count=2 \empty}{+-} + +Vstup rozlomen sazby do sloupc probh ve dvou reimech: kdy je teba +sloupci zaplnit celou strnku, pouijeme "\makecolumns". Toto makro nee +otzku, e me v kumulovanm boxu~6 zbt njak sazba, protoe se +pedpokld, e lmn bude pokraovat na dal stran. Pokud ale +je na aktuln stran vcesloupcov sazba ukonena, pouijeme +propracovanj \db balancecolumns. Toto makro si zazlohuje materil +z~boxu~6 do boxu~7 a jme se zkoueti rozlomit box~6 na sloupce s +vkou "\dimen0". Pokud ale po rozlomen nen vchoz box~6 zcela przdn, makro +zvt krapnek (o 0,2"\baselineskip") poadovanou vku, vrt se k~zlohovan +sazb v boxu~7 a zkus rozlomit znovu. To opakuje tak dlouho, dokud je box~6 +przdn. + +\inext{balancecolumns}{^^B\cbrace}{++} + +Kdy je sazba plnna do boxu~6, me ji bt tak moc, e tento box +pekro maximln vku boxu, kter je v \TeX{}u bohuel +omezena na cca pt metr +(16383~pt). Proto na dku~\cite[mul:endgraf] je pedefinovn "\par", kter +pit do "\dimen0" celkovou vku postupn kumulovan sazby. Jakmile tato +vka doshne "0.9\maxdimen", pedefinujeme makro +"\balancecolumns" na "\flushcolumns" a spustme pedasn "\endmulti". Toto makro +vyprzdn box pomoc opakovanho "\splitpart", ovem nevyprzdn ho cel. +Jen tu st, kter zapln cel strnky. Jakmile bude chtt +"\splitpart" pejt k~vybalancovn sazby pomoc +"\balancecolumns" na dku \cite[mul:balance], spust se msto bnho +"\balancecolumns" makro \db flushcolumns. Toto makro ignoruje zbytek innosti +"\endmulti" a po "\relax" na dku \cite[mul:relax], take vysko z +trojit zanoenho "\if". Mus tedy vrtit pslun mnostv "\fi" a dle +vystartuje nov "\setbox6=\vbox". Uvnit tohoto boxu nejprve vysype zbytek +boxu~6, pomoc "\unskip\unskip" odstran "\vfil" a "\vskip-\prevdepth", +kter tam vloil "\endmulti" na dku~\cite[mul:prevgraf], +vrt se k zlohovanmu vznamu makra \db ibalancecolumns +a znovu definuje "\par" obdobnm zpsobem jako v~"\begmulti". +Pak pokrauje ve ten sazby. + +\inext{flushcolumns}{\empty}{+-} + + +\subsec Barvy +%%%%%%%%%%%%% + +Deklarujeme \db ifpgcolor, co budeme potebovat v makru "\locpgcolor". +Dle deklarujeme \db lastpage. Tento registr budeme prbn zvtovat pi +ten REF souboru v makru "\Xpage" a na konci ten REF souboru tedy bude +obsahovat slo posledn strany. + +\inext{ifpgcolor}{\empty}{+-} + +Od verze pdf\TeX{}u 1.40 nabz tento program primitivy +"\pdfcolorstackinit" a "\pdfcolorstack". Makra v OPmac tyto +primitivy nepouvaj, protoe: + +\begitems +\item * een v OPmac jsem vytvoil a pouil podstatn dv, ne si programtoi + pdf\TeX{}u vbec vimli, e existuje problm s pechzenm barev na nov + strnky. +\item * Primitivy "\pdfcolorstackinit" a "\pdfcolorstack" stle nejsou dokumentovan. +\item * Barevn een v "pdftex.def" pro La\TeX{} nepovauji za koncepn + sprvn, protoe se sna pomoc "\aftergroup" vytvoit zdn, e + barvy funguj lokln uvnit skupiny. To je zbyten komplikace + navc, kter jde proti pirozenosti nastavovn barev v PDF souboru. +\enditems + +Barvy se v PDF pepnaj pomoc PDF specil "<num> <num> <num> <num> k" +(pro text a plochy) a "<num> <num> <num> <num> K" pro linky. Pro oba typy +barev pipravme barevn makra \db Blue, \db Red, \db Brown, \db Green, \db +Yellow, \db Cyan, \db Magenta, \db White, \db Grey, \db LightGrey, \db Black. +Uivatel si me definovat dal. + +\inext{Blue}{\empty}{+-} + +Problm barev v PDF je, e od vskytu specilu pro barvu jsou zmnn barvy +a po jin vskyt takovho specilu nebo po konec strany. Na kad nov +stran zan sazba v barv ern. Nm ovem nkdy me obarven text petci +na dal stranu. Pak ale musme v "\output" rutin (v makru "\prepage") +nastavit barvu, kter petekla. Ovem jak poznme, e nco peteklo do dal +strany? Jedin pomoc REF souboru a asynchronnho "\write". Proto makro \db +setcmykcolor nevkld do PDF jen poadovan specil, ale taky ukld o sob +informaci do REF souboru. Jakmile se pi ten REF souboru objev "\Xpage", +zkontrolujeme, zda naposledy nastaven barva byla ern. Pokud ne, dme +pokyn makru "\prepage" prostednictvm makra "\pg:<slo strany>", aby +aktivovalo hned po "\headline" barvu naposledy nastavenou. To je tedy +zkladn idea, nyn implementace: + +\inext{ifpdftex}{\count=2 \empty}{+-} + +Makro \db pdfK m implicitn hodnotu "k" (barva pro texty a plochy) a +pechodn pi pouit \db linecolor m hodnotu "K". Prv nastavenou barvu +pak makro "\setcmykcolor" ulo do REF souboru. +Jen tehdy, kdy je explicitn +znmo, e barva nepetee do dal strany, je mon pout ped pouitm +pepnae barvy prefix \db locpgcolor, kter potla v takovm ppad tisk +informac do REF souboru. Nsledn budou potlaeny zpisy informac do REF souboru +vech barevnch pepna a po "\Black" vetn. Dal barevn pepnae (po +"\Black") se chovaj u normln. +Toto opaten je zde jen proto, aby byl REF soubor +ponkud men a pehlednj i v ppad, kdy navrhujeme bohat barevn dokument. + +Makra \db Xpdfcolork a \db XpdfcolorK udruj pi ten REF souboru +informaci o naposledy vloen barv v makrech \db pdflastcolork a +\db pdflastcolorK (nzev koresponduje typu barvy). + +\inext{Xpdfcolork}{\empty}{+-} + +Output rutina vkld na kad strnce do REF souboru +\db Xpage "{<slo strany>}". +Toto makro pi ten REF souboru kontroluje, zda byla naposledy pouita +na pedchzejc stran barva ern. Pokud ne, pid do makra +"\pg:<slo strany>" pokyn pro nastaven barvy ve tvaru +\db setpgcolor "<k nebo K>{<sla barvy>}". +Toto makro se spust v output rutin na stran "<slo strany>" +za "\headline", ale ped sestavenm boxu s textem. + +\inext{Xpage}{\empty}{+-} + +Makro \db draft vlo do "\headline" box nulov vky a ky "\draftbox", +kter vystr svou edou sazbu ven ze svho rozmru a je titn dv, ne +jakkoli jin materil na strnce. + +\inext{draft}{\empty}{+-} + +V makru \db draftbox "{<text>}" je "<text>" otoen o 55 stup, zvten +desetkrt a vytitn v barv "\LightGrey". K tomu jsou +vyuity PDF transformace souadnic. + +\inext{draftbox}{\empty}{+-} + + +\subsec Klikac odkazy +%%%%%%%%%%%%%%%%%%%%%% + +Makro \db destactive "[<typ>:<lejblk>]{<vka>}" zalo cl odkazu jen tehdy, kdy +je "<lejblk>" neprzdn. Ve vertiklnm mdu se nalep na pedchoz box +dky "\prevdepth=-1000pt" a po vloen boxu s clem vrt hodnotu +"\prevdepth" do pvodnho stavu, aby nsledujc box byl sprvn dkovn. +V horizontlnm mdu post vlo "\destbox". Makro +\db destbox "[<typ>:<lejblk>]{<vka>}" vytvo box nulov vky a z~nj +vystr nahoru cl klikacho odkazu vzdlen od a o "<vka>". Intern +pouije pdf\TeX{}ov primitiv "\pdfdest" s parametrem "xyz", co +charakterizuje obvyklou monost chovn PDF prohlee pi odskoku na cl. +Podrobnji viz manul k~pdf\TeX{}u. + +\inext{dest}{\empty}{+-} + +V uivatelsk dokumentaci je zmnno msto "\destactive" makro \db dest +se stejnmi parametry. Toto makro je implicitn przdn a tedy nein. +Teprve "\hyperlinks" je pinut k innosti. + +Klikac text vytvo makro \db link "[<typ>:<lejblk>]{<barva>}{<text>}". +Makro pouv +pdf\TeX{}ov primitiv "\pdfstartlink", ve kterm je vymezena vka a hloubka +aktivn plochy. Nakonec pepne na poadovanou "<barvu>" (pokud nen ern), +vytiskne aktivn "<text>" a pepne zpt na ernou barvu. Pdf\TeX{}ov primitiv +"\pdfendlink" ukon sazbu aktivnho textu. + +\inext{link}{^^B\cbrace}{++} + +Makro \db urllink "[<typ>:<lejblk>]{<text>}" pracuje +analogicky jako "\link". Jen navc pidv nkter +atributy do PDF vstupu a pracuje s barvou "\urlcolor". + +\inext{urllink}{^^B\cbrace}{++} + +Makro \db url "{<odkaz>}" vysz "<odkaz>" strojopisem, piem znak "/" je +na pechodnou dobu aktivn a definovn jako "\\". Toto makro pi sestavovn +externho odkazu zptn expanduje na normln "/", ale pi sazb expanduje +na "\discretionary", aby bylo mon v nm rozdlit sazbu do vce dk. + +\inext{url}{\empty}{+-} + +Makra \db toclink, \db pglink, \db citelink, \db reflink, \db ulink, kter se +specializuj na urit typ linku, implicitn nedlaj nic: + +\inext{toclink}{\empty}{+-} + +Ovem po pouit makra \db hyperlinks "{<barva-lok>}{<barva-url>}" se +uveden makra "\toclink", "\pglink", "\citelink" a "\reflink" probouzej k +ivotu: + +\inext{hyperlinks}{\empty}{+-} + +Pdf\TeX{}ov primitivy pro klikac odkazy dovoluj dopravit do PDF dal +atributy odkazu za slovem "attr". Tam je mon dt najevo, e chceme vidt +aktivn plochy ve form rmek. To zad makro \db pdfborder "{<typ>}", kter +expanduje na nic, pokud nen kontroln sekvence "\<typ>border" definovna. +Jinak expanduj na "arrt" "/C" s obsahem podle "\<typ>border". + +\inext{pdfborder}{\empty}{+-} + +Pokud je dokument zpracovn do DVI vstupu, je vhodn ve zmnn makra +deaktivovat: + +\inext{ifpdftex}{\empty}{+-} + + +\subsec Outlines -- obsah v zloce PDF dokumentu +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Hlavn problm implementace strukturovanho obsahu do zloky PDF dokumentu +spov v~tom, e pi vkldn jednotlivch poloek obsahu je nutno znt +poet pmch potomk kad poloky (v~rmci stromov struktury poloek), +ovem tito pm potomci budou zaazeni pozdji. OPmac tento problm e +dvma prchody nad daty, kter jsou vytvoeny pro tisk obsahu, tj. v makru +"\toclist". V prvnm prchodu spot potebn potomky a ve druhm +prchodu zaad vechny poloky postupn jako \uv{outlines} do zloky. +Pipomeneme si, e v "\toclist" se nachz seznam maker tvaru +"\tocline{<odsazen>}{<font>}{<slo>}{<text>}{<strana>}". +Makro \db outlines "{<rove>}" nejprve nastav "\tocline" na hodnotu +"\outlinesA" a projde "\toclist". Pak je nastav na hodnotu "\outlinesB" a +znovu projde "\toclist". + +\inext{def\nb outlines}{^^B\cbrace}{++} + +V makru \db outlinesA "{<odsazen>}{<font>}{<slo>}{<text>}{<strana>}" +potme potomky. Makro je navreno tak, aby bylo +snadno roziteln na libovolnou rove hloubky stromu, nicmn pro poteby +OPmac sta hloubka ti (kapitoly, sekce, podsekce). rove uzlu peteme v +parametru "<odsazen>". Pro kapitolu je "<odsazen>"=0, pro sekci je +"<odsazen>"=1 a pro podsekci je "<odsazen>"=2. +Pedstavme si vedle sebe adu counter +"\count0:\count1:\count2". Pi sekvennm ten jednotlivch uzl stromu +si kad uzel zvt v tto pomysln ad hodnotu svho +counteru o~jedniku. Kapitoly zvtuj "\count0", sekce "\count1", podsekce +"\count2". Sta tedy zvtit "\count<odsazen>". ada counter pak +jednoznan uruje zpracovvan uzel. +Uzly pro kapitoly maj pidlenu kontroln sekvenci "ol:\the\count0" +a uzly pro sekce maj pidlenu kontroln sekvenci +"ol:\the\count0:\the\count1". Jsou to makra, jejich obsahem je poet +potomk danho uzlu. Makrem \db addoneol "<csname>" zvtme obsah dan +kontroln sekvence o~jedniku. Pkazem "\ifcase<odsazen>" eme, ktermu +rodii je teba zvednout tuto hodnotu. Pi nule (kapitola) nikomu, +nebo dan uzel nem rodie. Pi "<odsazeni>"=1 zvtme o +jedniku poet potomk nadazen kapitole a pi "<odsazeni>"=2 nadazen +sekci. Asi by bylo pehlednj na zatku definovat vechny potebn +sekvence "ol:<nco>" a nastavit jim hodnotu~0. Ovem etme pamt i asem, +take zakldme sekvenci "ol:<nco>" teprve v makru "\addoneol" a to tehdy, +kdy je ji poprv poteba zvtit o~jedniku. + +\inext{outlinesA}{\count=2 ^^B\cbrace}{++} + +V makru \db outlinesB "{<odsazen>}{<font>}{<slo>}{<text>}{<strana>}" +vkldme jednotlivou poloku obsahu do zloek pomoc pdf\TeX{}ovho +primitivu\hfil\break +"\pdfoutline goto name{<lejblk>} count<potomci> {<text>}". +slo "<potomci>" je opateno znamnkem mnus prv tehdy, kdy chceme, aby +poloka ve vchozm stavu nezobrazovala sv potomky, ale jen trojhelnek. +Potomci se zobraz a po kliknut na trojhelnek. V makru \db outlinelevel +mme makrem "\outlines" pipravenu rove rozeven, kterou si uivatel +peje. Nejprve pitenm "\count<odsazen>" dostaneme adu +"\count0:\count1:\count2" do stejnho stavu, jako v pedchozm prvnm prchodu +a mme tm jednoznan pidlen uzel stromu. +Do "\tmpnum" vlome daj o potu potomk danho uzlu. K tomu je poteba +rozvtvit vpoet pkazem "\ifcase", protoe pro rznou rove uzlu mme +daj v~rzn definovanm makru. Pkazem "\protectlist" zastavme expanze +ppadnch maker registrovanch pomoc "\addprotect" a definujeme vlnku jako +mezeru (v zloce vypad lp ne vlnka). Dle pomoc "\setcnvcodesA" +expandujeme "\toasciidata". Pomoc "\setlccodes\toasciidata" pipravme +"\lccode" znak tak, aby "\lowercase" odstranil hky a rky. To +vzpt provedeme, ale nejprve jet do toho me promluvit uivatel v makru +"\cnvhook", kter je implicitn nastaveno na makro przdn. + +\ilabel [outlines:setlccodes] {setlccodes} + +\inext{outlinesB}{^^B\cbrace}{++} + +Makro \db setcnvcodesA zkontroluje podle definovanosti "\r", zda je zapnut +"\csaccents" a pokud je, expanduje "\toasciidata". +Makro \db toasciidata potebujeme expandovat, protoe +neobsahuje pm zpis znak. Dvod je zejm, nechceme, aby se +soubor {\tt opmac.tex} stal zvisl na pouitm kdovn. + +\inext{setcnvcodesA}{\count=2 ^^B\cbrace}{++} + +Na dku \cite[outlines:setlccodes] +se makro \db setlccodes spust jako "\setlccodes AAAAa...{}{}". +Toto makro si odloupne dva parametry "xy", provede "\lccode`x=`y" a +v~rekurzivnm cyklu pokrauje v~innosti, dokud nenaraz na "{}{}". + +\inext{setlccodes}{\empty}{+-} + +Makro \db insertoutline "{<text>}" vlo jedinou poloku do zloky. Pro +tuto poloku se pedpokld nulov poet potomk. Vyuit: uivatel me +takto odkzat na zatek nebo konec dokumentu. + +\inext{insertoutline}{\empty}{+-} + +Pokud je dokument zpracovn do DVI vstupu, je vhodn ve zmnn makra +deaktivovat: + +\inext{ifpdftex}{\empty}{+-} + + + +\subsec Verbatim +%%%%%%%%%%%%%%%% + +Verbatim vpisy budou odsazeny o "\ttindent". Je nastaven na hodnotu +"\parindent" v dob ten souboru a spolen s "\parindent" by ml +uivatel zmnit i "\ttindent". ta \db ttline sluje dky bnho verbatim vstupu, +ta \db viline sluje dky souboru tenho pomoci "\verbinput". Souborov +deskriptor \db vifile bude piazen souboru v makru "\verbinput". + +\inext{newcount}{\empty}{+-} + +Makra \db setverb, \db begtt "...\endtt" jsou dokumentovna v TBN, str. 29. + +\inext{setverb}{testparA}{++} + +Makro "\begtt" oich na konci sv innosti, zda se nachz pod "\endtt" +przdn dek (alias "\par"). K tomu slou makra \db testparA (pesko +mezeru, kter za "\endtt" vdy je), \db testparB (pete nsledujc znak +pomoc "\futurelet") a \db testparC (oet, zda tento nsledujc znak je +"\par"). + +\inext{testparA}{\empty}{+-} + +Makro \db activettchar pracuje podobn, jako makro "\adef". Navc +potebuje pout nov naten znak ve sv aktivn kategorii jako separtor +vymezujc konec parametru. + +\inext{activettchar}{\empty}{+-} + +Makro \db verbinput si pomoc "\tmpa" ov, zda minule byl ten stejn +soubor. Pokud ne, oteve soubor "#2" ke ten pomoc "\openin" a ulo do +\db vifilename jmno naposledy otevenho souboru. Dle zkontroluje pomoc +"\ifeof", zda je mon ze souboru st. Pokud ne, vype se varovn a +pomoc \db skiptorelax se pesko zbytek obsahu makra a po "\relax", +take se neprovede nic dalho. Je-li soubor spn oteven nebo byl-li +oteven ji minule, pust se makro "\verbinput" do prozkoumn parametru +"#1" zapsanho v zvorce ped jmnem souboru. + +\inext{verbinput}{\empty}{+-} + +Clem vyhodnocen parametru v zvorce makra "\verbinput" jsou dva daje: \db +vinolines bude obsahovat poet dk, kter je od zatku souboru nutno +peskoit, ne se m zahjit pepisovn dk a \db vidolines bude +obsahovat poet dk, kter se maj pepsat ze souboru do dokumentu. +Psmena "vi" na zatku tchto nzv pedstavuj zkratku pro "verbinput". +Vyeten parametru ukonenho textem "+\relax" se v makru \db +viscanparameter vtv na ppad, kdy parametr obsahuje symbol "+" a pouije +se pak \db viscanplus. Druh ppad, kdy uivatel nenapsal symbol plus +(take parametr "#2" makra "\viscanparameter" je przdn) je dle +vyeten v makru \db viscanminus. Ob makra si oddl do svch parametr +prvn a druhou slici (kad z nich me bt przdn) a nastav podle +zdokumentovanch pravidel pro zpis parametru odpovdajc intern daje +"\vinolines" a "\vidolines". Vychz pitom z pedpokladu, e registr +"\viline" obsahuje slo naposledy petenho dku (nebo nulu, jsme-li na +zatku souboru). + +\inext{viscanparameter}{\count=3 ^^B\cbrace}{++} + +Makro \db doverbinput provede samotnou prci: pesko "\vinolines" dk a +pepe "\vidolines" dk. To provede v prvnm a druhm cyklu "\loop". Ne +se k tmto cyklm dostane, mus udlat jist ppravn prce. Nejprve odete +od "\vinolines" poet u petench dk, protoe pi opakovanm ten +stejnho souboru jej neotevrme znova, jen peskome pslun men poet +dk. Pokud ale se uke, e rozdl je zporn (je poteba se v souboru +vracet dozadu), makro znovuoteve soubor ke ten pomoc "\openin" a uprav +podle toho pslun daje o dcch. Pak zahj skupinu, dle pomoc +"\setverb" nastav specilnm znakm kategorii 12 a pomoc "\adef{ }{ }" +nastav mezee aktivn kategorii (bude expandovat na neaktivn mezeru jako +"\space") a tak nastav kategorii 12 znaku, kter byl deklarovn pomoc +"\activettchar". Piprav odsazen podle "\ttindent" a spust uivatelsk +"\tthook". Je-li poteba tisknout sla dk, piprav si na to font +"\sevenrm", kter m velikost rovnu 0,7 nsobku zkladn velikosti. A pust se do +zmnnch dvou cykl "\loop". V obou cyklech se me stt, e narazme +neekan na konec souboru. To je oeteno testem "\ifeof\vifile" a nslednou +pravou tae "\tmpnum" tak, abychom okamit vyskoili z cyklu. Druh +cyklus obsahuje jet jeden speciln rys: peje-li si uivatel st a do +konce souboru, je nastaveno "\vidolines" na nulu a ped zahjenm cyklu je +ta "\tmpnum" nastaven na "-1". Uvnit cyklu je pak zajitno, e v tomto +ppad nen ta zvtovn o jedniku. Po ukonen prce v tchto dvou +cyklech je ukonena skupina, vloena mezera "\ttskip" a makrem "\testparB" +se ov, zda nsleduje przdn dek. + +\inext{doverbinput}{^^B\cbrace}{++} + +V prvnm cyklu "\loop" v tle makra "\doverbinput" se opakovan vol +\db vireadline, co je makro, kter pete dal dek ze souboru. V druhm +cyklu se opakovan vol "\vireadline" nsledovan \db viprintline. Toto +makro vytiskne peten dek do dokumentu. Ped dkem me bt v "\llap" +vytitno slo dku. Zle na hodnot "\ttline". Je to naprogramovno v +souladu s uivatelskou dokumentac. + +\inext{vireadline}{\empty}{++} + + +\subsec Jednoduch tabulka +%%%%%%%%%%%%%%%%%%%%%%%%%% + +Tabulku makrem "\table" vytvome jako "\vbox", ve kterm je "\halign". Je +tedy poteba nast deklaraci typu "{llc|rr}" a pevst ji na deklaraci pro +"\halign". Tato deklarace obsahuje znak "#" a tento znak se obtn pidv +do tla maker. Nashromdme tedy postupn deklaraci pro "\halign" do +registru typu "\toks", kter je nazvan \db tabdata. Dle definujeme intern +\db tabstrutA, kter bude obsahovat uivatelv "\tabstrut", ovem pechodn +budeme toto makro mnit. Tak deklarujeme ta \db colnum, ve kterm budeme +mt po peten deklarace uloen poet sloupc tabulky. +Dle bhem skenovn "<deklarace>" vytvome makro \db +ddlinedata, kter bude obsahovat "&\dditem &\dditem ..." (poet tchto dvojic +bude roven $n-1$, kde $n$ je poet sloupc). Pokud je v deklaraci dvojit +svisl ra, bude v makru "\ddlinedata" na pslunm mst jet "\vvitem". +Makro "\ddlinedata" pak pouijeme v "\crli" a v "\tskip", +Strek Phoda to me pout jinde a jinak. Konen makro \db vvleft je +neprzdn, pokud pln vlevo tabulky je dvojit ra. + +\inext{newtoks}{\empty}{+-} + +Makro \db table "{<deklarace>}{<data>}" vypad takto: + +\inext{table}{\empty}{+-} + +Makro \db scantabdata postupn te znak po znaku z deklarace "\table" a podle +petenho znaku ukld do "\tabdata" odpovdajc sek skuten deklarace pro +"\halign". Vol pitom "\addtabvrule" nebo "\addtabitem{\tabdeclare<znak>}". + +\inext{scantabdata}{^^B\cbrace}{++} + +OPmac peddefinuje ti "<znaky>" pro "<deklaraci>", sice "<znaky>" "c", "l", "r" +v makrech \db tabdeclarec, \db tabdeclarel, \db tabdeclarer. + +\inext{tabdeclarec}{\empty}{+-} + +Makro \db unsskip vkldan na konec kad datov poloky odebere mezeru, +pokud m nenulovou zkladn velikost. Uivatel toti nkdy dvaj kolem +datovch poloek mezery a nkdy ne, pitom chtj, aby se jim to chovalo +stejn. Je nron si pamatovat, e mezery ped polokou jsou +ignorovny primitivem "\halign", ale mezery za polokou jsou podstatn. Tak +radji i mezery za polokou udlme nepodstatn. + +\inext{unsskip}{}{++} + +Pklad: po deklaraci: "{|cr||cl|}" makro "\scantabdata" vytvo: + +\begtt +tabdata: \vrule\tabiteml\hfil#\unsskip\hfil\tabitemr + &\tabiteml\hfil#\unsskip\tabitemr \vrule\kern\vvkern\vrule + &\tabiteml\hfil#\unsskip\hfil\tabitemr + &\tabiteml#\unsskip\hfil\tabitemr\vrule +ddlinedata: &\dditem &\dditem\vvitem &\dditem &\dditem +\endtt + +Makra \db addtabitem, \db addtabdata a \db addtabvrule vlo do "\tabdata" a +"\ddlinedata" poadovan daj. Makro "\addtabitem" pozn podle "\colnum=0", +zda vkld data pro prvn sloupec (nepidv~"&") nebo pro dal sloupce +(pidv~"&"). Makro "\addtabvrule" pozn podle "\tmpa", zda ped +nm pedchz dal "\vrule". Pokud ano, vlo dodatenou mezeru +"\kern\vvkern" a pid "\vvitem" do "\ddlinedata". + +\inext{addtabitem}{\empty}{+-} + +Ne se pustme do vkladu dalch maker, pedvedeme pklad, ve kterm je +definovno dal psmeno "P" pro "<deklaraci>". Psmeno "P" vymez +tabulkovou poloku, je m stanovenou ku a del text se lme +do vce dk. Je mon si vyzkouet teba tento kd: + +\begtt +\newdimen\Pwidth +\def\tabdeclareP {\enskip\vtop{\hsize=\Pwidth \rightskip=0pt plus1fil + \baselineskip=1.2em \lineskiplimit=0pt \noindent ##\tabstrut}\enskip} + +\Pwidth=3cm \table{|c|P|}{\crl + aaa & Tady je del textk, kter se nevejde na jeden dek. \crl + bb & A tady je taky je nco delho. \crl} +\endtt + +Pusme se nyn do rozboru maker na ukonen dk. +Makro \db crl pid ru pomoc "\noalign". Makro \db crll pid dvojitou +ru pomoc "\noalign". + +\inext{crl}{\empty}{+-} + +Makro \db crli provede "\cr" a dle se vno do dku tabulky, ve kterm +klade postupn nsledujc +"\omit\tablinefil &\omit\tablinefil &..." +Pitom v mst dvojit vertikln ry naklade navc "\tabvvline". +Makro \db tablinefil vlo natahovac ru na ku cel poloky a makro +\db tabvvline vlo dv "\vrule" vzdleny od sebe o "\vvkern". Tm vznik +petrzen msto v postupn tvoen lince. Ke sprvnmu nakladen uvedench +povel pouije makro "\crli" obsah makra "\ddlinedata" a vlevo pidv +"\vvleft". Ped sputnm makra "\ddlinedata" definuje odpovdajcm +zpsobem \db dditem a \db vvitem. + +\inext{crli}{\empty}{+-} + +Makro \db tskip prostednictvm \db tskipA pechodn vyprzdn "\tabstrut" +pedefinovnm "\tabstrutA" a tak vyprzdn "\dditem" a "\vvitem", aby +po pouit "\ddlinedata" vznikl dek tabulky s przdnmi polokami. +dek je vypodloen strutem stanoven vky "\tmpdim". +Nakonec je poteba vrtit "\tabstrutA" do pvodnho stavu. + +\inext{tskip}{\empty}{+-} + +Globln zmna ek vech linek tvoench pomoc "\vrule" a "\hrule" je +provedena makry \db rulewidth a \db rulewidthA. Mylenka je dokumentovna v +TBN na str.~328. +\dgn \nb orivrule +\dgn \nb orihrule + +\inext{orihrule}{\empty}{+-} + +Makro \db frame "{<text>}" vlo vnj "\vbox{\hrule..\hrule}". +V nm se nachz dal box "\hbox{\vrule\kern\vvkern..\kern\vvkern\vrule}" +a v nm "\vbox{\kern\hhkern..\kern\hhkern}". +Nejvce uvnit je pak "\hbox{<text>}". To by pro sazbu rmovanho textu +stailo, nicmn my jet eme pravu vslednho boxu tak, aby ml a +ve stejnm mst jako je a textu. Proto ulome "\hbox{<text>}" do boxu0 +a zmme mu hloubku. V promnn "\tmpdim" spotme celkovou hloubku +vslednho boxu. Ve vpotu pitme vku "\hrule", kter nemus bt +0.4pt. Proto si jej vku zmme v boxu1. Ve vnjm "\vbox"u po +nakreslen spodn "\hrule" se pak vracme pomoc "\kern-\tmpdim" na rove +a a zde umstme strut hloubky "\tmpdim", aby sazba smrem dol +nepenvala, ale byla obsaena v~hloubce vslednho boxu. + +\inext{frame}{\empty}{+-} + + +\subsec Vloen obrzku +%%%%%%%%%%%%%%%%%%%%%%% + +Nejprve deklarujeme \db picw. + +\inext{picw}{\empty}{+-} + +Makro \db inspic je zkratka za pouit primitiv "\pdfximage", +"\pdfrefximage" a "\pdflastximage". Kdo si to m pod pamatovat. +Nen-li aktivovn PDF vstup, napeme jen varovn a neprovedeme nic. +Pokud budeme pracovat se stejnmi obrzky v jednom dokumentu, bude +vhodn monosti primitiv vyut naplno. + +\inext{ifpdftex}{\empty}{+-} + + +\subsec PDF transformace +%%%%%%%%%%%%%%%%%%%%%%%% + +Makro \db pdfscale "{<vodorovn>}{<svisle>}" pracuje jednodue: + +\inext{pdfscale}{\empty}{+-} + +Na druh stran makro \db pdfrotate "<hel>" vytvo +"\pdfsetmatrix{"$\cos\varphi\enspace\sin\varphi\enspace + {-}\sin\varphi\enspace\cos\varphi$"}", +co nen jednoduch, protoe funkce $\cos$, $\sin$ nejsou v \TeX{}u +implementovny. Balek "trig.sty" nabz vyhodnocovn tchto funkc pomoc +Taylorovch polynom, nicmn OPmac nechce bt zvisl na balcch a tak +chce ukzat alternativn zpsob implementace. Makro "\pdfrotate" pracuje +zhruba takto: je-li argument 0, neprovede nic, je-li argument 90, provede +otoen o~90 stup. V ostatnch ppadech zavol makro \db pdfrotateA, +kter rozlo argument na celou "#1" a zlomkovou "#2" st. V dal sti +na dcch~\cite[rot:360] a \cite[rot:smallsin] se +zabv jen celmi stupni. Nejprve pomoc prvnho a druhho "\loop" posune +argument o cel nsobky 360 stup tak, e pot je argument mezi +0 a 360 stupni, a pitom se hodnoty funkc $\sin$ a $\cos$ nezmnily. +Ve tetm "\loop" postupn sniuje argument o 90 stup a pitom dl rotaci +o 90 stup tak dlouho, a mme argument mezi nulou a devadesti. +Je-li dle argument vt ne 44 stup, otome se o 45 a snme argument +o 45. Je-li dle argument vt ne 22, otome se o 22 a snme argument o +22. Nyn mme argument v mnoin $\{0, 1, 2, 3, \ldots, 22\}$. Pro kad +prvek z tto mnoiny argument mme pedpipraveny hodnoty funkc +$\cos$ a $\sin$ v makrech \db smallcos a \db smallsin. Pouijeme je pro +zvrenou rotaci. Tm mme sazbu otoenou o cel stupn. +Dal st makra na dcch \cite[rot:174532] a \cite[rot:else] +e jemn dotoen podle zlomkov sti argumentu. V intervalu nula a +jeden stupe aproximujeme funkci $\cos$ konstantn jednikou a funkci $\sin$ +linern funkc $x\cdot \pi/180$. V danm rozmez je to velmi dobr +aproximace. + +\ilabel [rot:360] {360} +\ilabel [rot:smallsin] {smallsin} +\ilabel [rot:174532] {174532} +\ilabel [rot:else] {else\space\space\space\space} + +\inext{pdfrotate}{\empty}{+-} + +Pro ppad, e nepracujeme s PDF vstupem, definujeme klov primitivy +pdf\TeX{}u jako makra, kter nedlaj nic. + +\inext{ifpdftex}{\empty}{+-} + + + +\subsec Poznmky pod arou a na okraji strnek +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Makro \db fnote pedpokld, e sprvn slo poznmky na dan strnce je +pipraveno v makru "\fn:<slo>", kde "<slo>" je celkov slo poznmky nap +celm dokumentem sledovan globlnm taem \db fnotenum. +Makro ohls svou existenci do REF souboru zznamem "\Xfnote" (bez +parametru). Dle vytiskne znaku pomoc "\fnmarkx" a ve skupin pejde na +men sazbu a zavol plain\TeX{}ov makro "\vfootnote", kter vlo sazbu +pomoc tzv. insertu (TBN, kapitola~6.7). Plain\TeX{}ov nastaven tto +tdy insertu nen makrem OPmac nijak mnno. + +\inext{fnotenum}{^^B\cbrace}{++} + +Makro \db fnotemark pite lokln k "\fnotenum" svj parametr a vytiskne +odpovdajc znaku. Cel prce makra probh ve skupin, take po ukonen +makra se "\fnotenum" vrt do sv pvodn hodnoty. + +\inext{fnotemark}{^^B\cbrace}{++} + +Makro \db fnotetext teprve zvedne ta "\fnotenum" globln a vytiskne +poznmku pomoc plain\TeX{}ovho "\vfootnote". + +\inext{fnotetext}{^^B\cbrace}{++} + +Makro \db fnmarkx vytiskne otaznk nebo \db thefnote. Pedpokld se, e si +uivatel pedefinuje "\thefnote" k obrazu svmu. Lokln slo poznmky na +strnce m pipraveno v makru \db locfnum. + +\inext{fnmarkx}{\empty}{+-} + +Pi ten REF souboru se pro kadou stranu pete nejprve "\Xpage", co +je makro, kter pronuluje \db fnotenumlocal. +Makru \db Xfnote tedy sta pozvednout +"\fnotenumlocal" o jedniku a pomoc +"\sxdef" si tuto hodnotu zapamatovat v makru "\fn:<slo>". + +\inext{Xfnote}{\empty}{+-} + +Registr \db mnotenum. +globln sluje okrajov poznmky a pln podobnou funkci, jako registr +"\fnotenum" pro podrov poznmky. + +\inext{mnotenum}{\empty}{+-} + +Makro \db mnote ve vertiklnm mdu zalo box nulov vky pomoc +"\mnoteA" a vycouv na pvodn msto sazby pomoc "\vskip-\baselineskip". V +odstavcovm mdu toto makro nalep box nulov vky pod prv vytvoen +dek v odstavci. Vme, e "\vadjust" nalep svj materil bez mezery pod +tento dek. My ovem potebujeme vycouvat nahoru na a dku. To nejde +snadno provst, protoe hloubka dku je promnliv. Proto do je dku +vloen "\strut" a pedpokld se, e nyn m dek hloubku "\dp\strutbox" a +o tento rozmr makro vycouv nahoru. Vlo poadovan box vky nula na +rovni a a pak se vrt na pvodn msto. + +\inext{mnote}{^^B\cbrace}{++} + +Makro \db mnoteA si zjist, zda je v makru "\mn:<slo>" uloen primitivn +pkaz "\left" nebo "\right". Podle toho pozn, zda m umstit poznmku +doleva nebo doprava. Rovn d o sob vdt do REF souboru vloenm +sekvence "\Xmnote" (bez parametru). Sazba mus v obou ppadech vyprodukovat +box nulov vky i hloubky. Proto je "\vtop", uvnit kterho je text poznmky +zpracovn, vloen pechodn do boxu0 a je mu pronulovna hloubka. Nulov +vka je zazena pomoc "\vbox to0pt{\vss\box0}". Vlastn sazbu poznmky +zahajujeme pomoc "\noindent" s tm, e je pipraven prun "\leftskip" nebo +"\rightskip" podle toho, zda poznmku klademe vlevo nebo vpravo. +Pi kladen vlevo musme pout "fill", abychom peprali natahovac mezeru z +"\parfillskip". + +\inext{mnoteA}{^^B\cbrace}{++} + +Makro \db Xmnote pracuje bhem ten REF souboru a vyuv toho, e makro +"\Xpage" nastavuje slo prv procesovan strany do registru "\lastpge". +Take sta pout "\sxdef" nsledujcm zpsobem: + +\inext{Xmnote}{\empty}{+-} + +Makro \db fixmnotes "<token>" pedefinuje v cyklu vechny definovan +kontroln sekvence "\mn:<slo>" tak, e budou obsahovat "<token>". +Tm toto makro zlikviduje prci makra "\Xmnote", ale o to nm prv jde v +ppad, kdy chceme mt poznmky na jednoznan dan stran. + +\inext{fixmnotes}{\empty}{+-} + + +\subsec Bibliografick reference +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Nejprve uvedeme deklarace deskriptoru \db auxfile a ta +\db bibnum a \db lastcitenum. + +\inext{auxfile}{\empty}{+-} + +Makro \db cite "[<lejblk1>,<lejblk2>,...]" si prostednictvm \db citeA +zavol "\rcite{<lejblk>}" pro kadou jednotlivou poloku oddlenou rkou ve +svm parametru. Makro "\citeA" v sob skrv fintu: parametr nem jedin, +ale dva "#1#2". Protoe prvn z nich je neseparovan, ignoruj se ppadn +mezery za rkou a "#1" obsahuje prvn psmeno "<lejblku>". Uvnit makra +mnme \db citesep, co je rka a mezera, kter se m mezi daji +vytisknout. Makro \db nocite "[<lejblk1>,<lejblk2>,...]" je definovno +stejn, jen piprav jin vznam makra "\docite", krz kter budeme tisknout +v "\rcite" potebn daj. Veker +innost maker "\cite" a "\nocite" probh uvnit skupiny. + +\inext{cite}{\empty}{+-} + +Makro \db rcite "{<lejblk>}" e zhruba eeno nsledujc vci: + + +\begitems +\item * Zjist, zda je definovn "\csname bib:<lejblk>\endcsname". Pokud ano, + vytiskne jeho hodnotu, pokud ne, vytiskne do textu otaznky a na terminl + varovn. Tato kontroln sekvence zane bt znm po pouit + "\bib[<lejblk>]" nebo "\bibitem{<lejblk>}". Tato makra ulo + odpovdajc informaci do REF souboru, odkud ji pi opakovanm \TeX{}ovn + vyzvedneme. Je to klasick innost, kterou provozujeme i u ostatnch + kovch referenc. +\item * Ulo o sob zprvu do bufferu "\citelist". To pouijeme + v makrech "\usebibtex" nebo "\usebbl". +\enditems + +Makro "\rcite" je naprogramovno zhruba takto + +\def\begtthook{\langleactive} +\begtt +function rcite(<lejblk>) { + if (<lejblk> == '*') { <zapi do> \citelist '*'; return; } + if (\bib:<lejblk> == nedef) { + <zapi do> \citelist <lejblk>; + <na terminl:> "Warning, cite [label] unknown"; + <do tiskovho vstupu:> "??"; + \bib:<lejblk> = empty; + return; + if (\bib:<lejblk> == empty) { + <do tiskovho vstupu:> "??"; + return; + } + if (\bib:<lejblk> kon znakem '&') { + <zapi do> \citelist <lejblk>; + <odstra znak & z obsahu makra> \bib:<lejblk>; + } + <tiskni obsah makra> \bib:<lejblk>; +} +\endtt + +\def\begtthook{\langleactive} +Vklad kdu: Protoe chceme etit pamt bufferu "\citelist", zapisujeme +tam kad "<lejblk>" jen jednou. Zda se nedeklarovan "<lejblk>" vyskytl +poprv poznme podle nedefinovan hodnoty "\bib:<lejblk>". Zda se vyskytl +pozdji znovu poznme podle toho, e m hodnotu "empty". Zda se deklarovan +"<lejblk>" vyskytl poprv poznme podle znaku "&" v jeho obsahu. + +Nvrh kdu v C-like notaci nyn pevedeme do maker v \TeX{}u: + +\inext{rcite}{^^B\cbrace}{++} + +Asi nejzajmavj vychytvka v tomto makru se tk testu na znak "&". +Implicitn pi ten REF souboru se do makra "bib:<lejblk>" ulo +"\bibnn{<hodnota>}&". Pkaz "\if" za sebou totln expanduje ve +nsledujc, take nejprve naraz na "&", pak se obsah "bib:<lejblk>" +expanduje prostednictvm \db bibnn "{<hodnota>}" na nic a za tmto +\uv{nic} se zjev druh znak "&", kter se tedy pilep na ten prvn. +Ano, je pravda, e tyto dva znaky jsou stejn. +Odstrann tohoto znaku probh znovu totln expanz, +tentokrt "\bibnn" prvn parametr "<hodnota>" zopakuje a druh parametr +se znakem "&" zahod. + +Ne se pustme do vkladu makra "\docite", pipravme si makra \db printcite +"<poloka>" a \db printdashcite "<poloka>". Prvn z nich tiskne jednu +poloku oddlenou od ppadn +dal rkou, druh tiskne poloku, ped kterou pedchz pomlka +vyznaujc interval poloek. Pointa makra "\printcite" je v tom, e si samo +po prvnm zavoln piprav separtor "\citesep" (kter je na zatku +innosti "\cite" przdn), take pi opakovanm voln "\printcite" se +vytiskne i poadovan separtor. Pomlka v "\printdashcite" je schovna do +"\hbox", aby nedochzelo tsn za n ke zlomu dku. + +\inext{printcite}{\empty}{+-} + +Makro \db docite "<poloka>" vytiskne otaznky pi przdnm parametru a jinak +vytiskne prostednictvm "\printcite" jednu "<poloku>". Krom toho e pi +nenulovm "\lastcitenum" sluovn po sob nsledujcch sel poloek do +interval. Naposledy vytitnou poloku uchovv v registru "\lastcitenum". +Pi ptm zavoln zvt "\lastcitenum" o jedniku a srovn ji s +"<polokou>". Jsou-li si rovny, jde o nsledujc poloku v ad a takovou +poloku netiskneme, nicmn si jej hodnotu uchovme v "\tmpb". Pokud je +mezi souvislou adou poloek dra, tj. "\lastcitenum" se nerovn +"<poloce>", pak dovytiskneme pedchoz interval pomoc +"\printdashcite{\the\tmpb}" a nsledn vytiskneme i "<poloku>". +Makro \db shortcitations jednodue nastavuje "\lastcitenum" na nenulovou +hodnotu a tm probud k ivotu hlavn st makra "\docite". + +\inext{docite}{\empty}{+-} + +Nsleduje kd makra \db bib "[<lejblk>]", kter prostednictvm +\db wbib "{<lejblk>}{<hodnota>}" vlo do REF souboru propojen daje o +tom, jak m "<lejblk>" piazeno slo v seznamu literatury. +Makro "\wbib" pipoj ped "\wref" pkaz "\immediate" prv tehdy, kdy +"\wref" je ve stavu, kdy skuten zapisuje do souboru REF. +Makro \db Xbib pracuje pi ten souboru REF a dl to, co jsme si ekli u +dve: nastav hodnotu makra "\bib:<lejblk>" na "\bibnn{<hodnota>}&". + +\inext{bib}{\empty}{+-} + +Makro \db addcitelist "{<lejblk>}" pid do \db citelist daj ve tvaru +"\lcite[<lejblk>]". Hranat zvorky jsou pouity proto, aby fungoval test +"\isinlist\citelist{[<lejblk>]}". Jak uvidme za chvli, makro +"\addcitelist" zmn bhem innosti makra "\usebibtex" svj vznam na +\db writeaux, aby ppadn pouit "\cite" a za "\usebitex" rovnou +zapisovalo do AUX souboru. Podobn makro "\addcitelist" zmn v makru +"\usebbl" svj vznam \db writeXcite "{<lejblk>}", +aby v ptm prchodu \TeX{}em +mlo makro "\usebbl" pehled i o vskytech "\cite", kter jsou napsny +pozdji, ne "\usebbl". + +\inext{addcitelist}{\empty}{+-} + +Ne se pustme do vkladu maker "\usebibtex", "\genbbl" a "\usebbl", uvedeme +strun popis innosti Bib\TeX{}u. Pkaz "bibtex <dokument>" zpsob, +e program {\tt bibtex} se podv do souboru "<dokument>.aux" a tam si vm +sekvenc \db bibdata "{<bib-bze>}", \db bibstyle "{<bib-style>}" a \db +citation "{<lejblk>}". Na zklad toho nsledn pete soubor +"<bib-bze>.bib" se zdrojovmi zpisy bibliografickch daj. +Pro konverzi tchto zdrojovch zpis do vstupnho souboru "<dokument>.bbl" +pouije stylov soubor "<bib-style>.bst". Nen-li mezi sekvencemi +"\citation" uvedeno "\citation{*}", program {\tt bibtex} zahrne do vstupu +jen ty bibliografick daje, kter maj "<lejblk>" shodn s nkterm z +"<lejblk>" uvedench v parametrech sekvenc "\citation". Kad sekvence +"\citation{<lejblk>}" v souboru "<dokument>.aux" typicky odpovd jednomu +pouit pkazu "\cite[<lejblk>]". + +Makro \db usebibtex "{<bib-bze>}{<bst-styl>}" oteve soubor AUX +prostednictvm \db openauxfile "{<bib-bze>}{<bst-styl>}". Nape tam tedy +poadovan data pro Bib\TeX{}. Dle z "\citelist" pepe do AUX souboru +lejblky ve formtu "\citation{<lejblk>}". Nakonec se uvnit skupiny pust do +ten souboru BBL prostednictvm makra "\readbblfile". + +\inext{usebibtex}{\count=2 ^^B\cbrace}{++} + +Makro \db readbblfile "{<soubor>}" vyzkou, zda je "<soubor>.bbl" pipraven +ke ten. Pokud ne, pod o tom odpovdajc zprvu na terminl. Jinak +nastav ta "\bibnum" na nulu a (vdomo si toho, e je sputno ve +skupin) pust se do loklnch re-definic La\TeX{}ovch konstrukc, kter se +typicky v BBL souborech pouvaj. Nastav "\leftskip" na "\iindent" a +spust "\bibtexhook". Konen nate soubor BBL. + +\inext{readbblfile}{^^B\cbrace}{++} + +V BBL souboru se vyskytuj povely \db bibitem. Za kadm z nich se mon +objev parametr v~hranat zvorce "[<znaka>]" a nsledn je uveden +"{<lejblk>}". Pak na dalch dcch jsou bibliografick data jednoho +zznamu ukonen przdnm dkem. Objev-li se "[<znaka>]", dv tm +Bib\TeX{} najevo, e se m tato "<znaka>" pout msto bnho slovn +zznam. Nsleduje kd, kter takov daje pete, vytiskne a vlo do REF +souboru o tom zprvu prostednictvm "\wref{<lejblk>}{<hodnota>}". +Rozliuj se dva reimy tisku: nen-li ptomna "[<znaka>]" (makro "\tmpa" +je przdn), pak pomoc "\llap" vytiskneme "[<slo>]". Jinak se posuneme o +"-\iindent" a tiskneme "[<znaku>]" nsledovanou mezerou. Pak se vytisknou +dal daje bibliografickho zznamu. +\dgn\nb bibitemB \dgn\nb bibitemC \dgn\nb bibitemD + +\inext{bibitem}{^^B\cbrace}{++} + +Makro \db genbbl "{<bib-bze>}{<bst-style>}" oteve AUX soubor a zape do +nj daje potebn pro Bib\TeX{} vetn "\citation{*}". Pot se makro pokus +pest vstup z Bib\TeX{}u pomoc "\readbblfile". V tomto ppad pracuje +"\bibitem" ve zvltnm reimu, kdy netiskne "<hodnoty>", ale "<lejblky>". +Z toho dvodu je pedefinovno makro "\bibitemC". + +\inext{genbbl}{^^B\cbrace}{++} + +Makro \db usebbl "/<typ> <bbl-file>" spust jin makro s nzvem "\bbl:<typ>". +Ti takov makra jsou definovna pomoc "\sdef". Prvn "\bbl:a" je +jednoduch: prost projde BBL soubor a vytiskne daje z~nj. +Druh makro "\bbl:b" projde BBL +soubor v reimu, pi kterm jsou bibliografick data kadho zznamu (a po +przdn dek alias "\par") petena do parametru "#2" makra "\bibitemC". +Cel daj je pak vytitn jen za pedpokladu, e "[<lejblk>]" je ptomen +v seznamu "\citelist". Tet makro "\bbl:c" pracuje jako druh a na to, e +daj netiskne, ale zapamatuje si ho do makra "\bb:<lejblk>". Po takovm +projit BBL souboru jet projde "\citelist", kde se "\lcite[<lejblk>]" +promn v "\bb:<lejblk>", take se zznam vytiskne. Nyn ale v poad, v +jakm jsou "<lejblky>" zaazeny do "\citelist". + +\inext{usebbl}{\count=3 ^^B\cbrace}{++} + +Za zmnku stoj jet prce uvedench maker s "\citelist". Ped vskytem makra +"\usebbl" se lejblky z "\cite" a "\nocite" hromad v "\citelist". Ovem +dal "\cite" a "\nocite" se mohou vyskytovat za pkazem "\usebbl". Pokud +se tak stane, pracuje "\addcitelist" nyn ve vznamu "\writeXcite" a ulo +potebnou informaci do REF souboru. Pi dalm \TeX{}ovn se tato informace +pete makrem \db Xcite "{<lejblk>}" z REF souboru takto: + +\inext{Xcite}{}{++} + +\noindent To tedy znamen, e se ulo do seznamu "\citelistB". Konen +makra "\bbl:b" a "\bbl:c" si dva seznamy "\citelist" a "\citelistB" ped svou +innost spoj do seznamu jedinho nazvanho "\citelist". + + +\subsec prava output rutiny +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Msto pvodnho makra "\plainoutput" pouv OPmac makro \db opmacoutput. + +\inext{opmacoutput}{}{++} + +OPmac mn output rutinu proti originln "\plainoutput" jen v nejnutnjch vcech. +e tyto dva problmy: + +\begitems +\item * Msto pmho "\shipout" nech nejprve box sestavit jako "\box0", + pak provede "\protectlist" a pak provede "\shipout\box0". +\item * Mezi "\makeheadline" a "\pagebody" vkld "\prepage". +\enditems + +Prvn prava zabrn expanzi maker pidanch pomoc "\addprotect" v dob +prce pkazu "\shipout", tedy v dob, kdy expanduj parametry "\write". +Tmto makrm je pidlen prostednictvm \db doprotect "<makro>" +pro tento okamik vznam "\relax". Je poteba jet +vysvtlit, pro bylo nutn sestavit nejprve "\box0" a teprve pot jej poslat +ven pomoc "\shipout". Je to z toho dvodu, e v dob sestavovn "\box0" +jsou expandovna "\headline" a "\footline" a pro ten ppad jet chceme, +aby vechna makra sprvn expandovala. + +\inext{opmacoutput}{\empty}{+-} + +Druh prava vkld makro \db prepage, kter zajist tisk strnkov slice +do "\reffile" (to je docela uiten) a krom toho nastav sprvnou barvu +textu strany pomoc PDF specilu. + +\inext{prepage}{\empty}{+-} + +Kdy budou barvy pechzet na dal stranu, jist nechceme mt obarvenu +strnkovou slici. Je tedy poteba do \db footline vloit "\Black". Kdy +bude uivatel mnit velikost font v dokumentu, jist nechce mt +strnkovou slici pokad jinak velkou. Proto je do "\footline" vloeno +"\thefontsize". Je nastaveno pevn na 10pt. Pedpokldme, e pokud bude +nkdo chtt jinak velkou strnkovou slici, jednodue si "\footline" +nastav podle svho. Jinak je "\footline" shodn s pvodnm nastavenm +v~plain\TeX{}u. + +\inext{footline}{\empty}{+-} + + +\subsec Okraje +%%%%%%%%%%%%%% + +V registrech \db pgwidth a \db pgheight budeme mt po zavoln "\setpagedimens" +ku a vku strany. V~registru \db shiftoffset budeme mt ppadn rozdl +okraj mezi levou a pravou strnkou. + +\inext{pgwidth}{\empty}{+-} + +Makro \db margins "/<typ> <formt> (<lev>,<prav>,<horn>,<doln>)<jednotka> " +si nastav registry "\pgwidth" a "\pgheight" prostednictvm "\setpagedimens" a dle v +souladu s uivatelskou dokumentac nastav potebn okraje. V makru "\tmp" +je schovna jednotka, kterou uivatel taky me zapomenout napsat. V~takovm +ppad vypeme varovn a doplnme jednotku "mm". Jakmile mnme +"\hoffset" nebo "\voffset", nastavme je nejprve na "-1in" (tm se dostaneme +na okraj papru) a pak budeme poadovanou velikost okraje k tmto registrm +pidvat. Nemohu za to, e Knutha napadla takov ne pli podaen mylenka +dt vchoz bod sazby kamsi doprosted papru umstn pomoc ujetch +jednotek. Za zmnku stoj jet dv mylenky. Makro \db rbmargin +"\h(v)offset\h(v)size{<okraj>}" provede vpoet hodnoty "\hoffset" nebo +"\voffset" v ppad, e je dna protj hodnota okraje ne je okraj pmo +nastaviteln pomoc "\h(v)offset". +A konen posun okraje pi pechodu z prav na levou strnku "\shiftoffset" +potme jako "\pgwidth"~"-"~"\hsize"~"-"~"2*<lev>" co d stejnou hodnotu jako +"<prav>-<lev>". Zmna "\hoffset" o tuto hodnotu je provedena v makru +"\pghook", tedy v "\output" rutin, schovna do skupiny, take po ukonen +"\output" rutiny se vrt "\hoffset" na pvodn hodnotu. + +\inext{margins}{\empty}{+-} + +Makro \db setpagedimens "<formt> " spust +\db setpagedimensA "<ka> <vka>/" a k tomu mus +dopedu vyexpandovat obsah makra "\pgs:<formt>". To provedeme pomoc t +"\expandafter". + +\inext{setpagedimens}{\empty}{+-} + +Jednotliv "<formty>" papru je poteba deklarovat. + +\inext{sdef}{\empty}{+-} + +Makro \db magscale "[<factor>]" zvt/zmen sazbu nastavenm +registru "\mag" a definuje dosud przdn makro \db trueunit hodnotou +"true", aby pozdji pi innosti makra "\setpagedimensA" zstaly zachovny +rozmry strnek. Pokud ale je makro "\magscale" sputno a po nastaven +velikosti strnek, jsou tyto velikosti dodaten korigovny na \uv{true} +jednotky pomoc makra \db truedimen. + +\inext{trueunit}{\empty}{+-} + + +\subsec Zvr +%%%%%%%%%%%%% + +Nakonec pomoc "\inputref" peteme REF soubor (pokud existuje) a vrhneme se +na zpracovn dokumentu, kter nm pipravil uivatel. Peji dobr pozen. + +\inext{inputref}{\empty}{+-} + +\doindex + + +\bye + + diff --git a/Master/texmf-dist/doc/cstex/opmac-u.pdf b/Master/texmf-dist/doc/cstex/opmac-u.pdf Binary files differnew file mode 100644 index 00000000000..b5103bc1c31 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/opmac-u.pdf diff --git a/Master/texmf-dist/doc/cstex/opmac-u.tex b/Master/texmf-dist/doc/cstex/opmac-u.tex new file mode 100644 index 00000000000..bd679271be8 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/opmac-u.tex @@ -0,0 +1,1511 @@ +%% OPmac -- Olsak's PlainTeX macros +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% User documetation +% This file is encoded in UTF-8 + +\chyph % use (pdf)csplain +\input opmac + +\typosize[11/13] + +\catcode`<=13 +\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}} + +\activettchar" + +\insertoutline{OBSAH} \outlines{0} \hyperlinks{\Blue}{\Green} + + +\tit OPmac -- rozšiřující makra plain\TeX{}u +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\centerline{\it Petr Olšák, listopad, prosinec 2012} + +\bigskip +\centerline{\url{http://petr.olsak.net/opmac.html}} + +\def\thesecnum{}\printsec{\unskip Obsah} \maketoc + + +\sec Úvod +%%%%%%%%% + +OPmac je balík jednoduchých doplňujících maker k plain\TeX{}u umožňující +uživatelům základní \LaTeX{}ovou funkcionalitu: změny velikosti písma, +automatickou tvorbu obsahu a rejstříku, práci s {\tt bib} databázemi, +referencemi, možnost proložení referencí hyperlinkovými odkazy atd. + +Hlavní zásady balíku OPmac jsou: + +\begitems +* V jednoduchosti je síla. +* Makra nejsou univerzální, ale jsou čitelná a srozumitelná. +* Uživatel si makra může snadno předefinovat k obrazu svému. +\enditems + +Každé makro je napsáno s cílem co největší srozumitelnosti pro lidi, kteří +to budou chtít číst a měnit. Troufám si říci, že balík nabízí čtenáři +inspiraci, jak se programují \TeX{}ová makra. Z~kódu maker je cítit jistá +elegance. Technická část dokumentace k OPmac by tedy mohla sloužit jako učebnice +programování \TeX{}ových maker. +To je zásadní rozdíl od koncepce \LaTeX{}u. Když se člověk podívá +do \LaTeX{}ového souboru "latex.ltx", vystřeví se na něj množství zavináčů a +makra, ze kterých je často cítit topornost a mnohdy nepochopení vnitřní +koncepce \TeX{}u. Skoro nikdo se v~tom nevyzná. Soubor "latex.ltx" obsahuje +8000 řádků a schopnosti \LaTeX{}u jsou navíc ukryty v~desítkách různých +dalších makro souborech, zatímco v~OPmac vidíte vše pohromadě a názorně. +Navíc v některých věcech OPmac výrazně překračuje možnosti \LaTeX{}u: +generování rejstříků bez externího programu, práce s~předgenerovanou +databází bibliografických záznamů, listingy externích souborů. + +Balík OPmac nabízí podobně jako \LaTeX{} autorům textů {\it rozhraní}, tj. +smluvenou sadu značek na vymezení struktury dokumentu. Je jiná, než v +\LaTeX{}u, možná nabídne napsat zdrojový text článku poněkud přehledněji a +oku více lahodícím způsobem. Balík OPmac ovšem neřeší typografický vzhled +dokumentu. Bez doplňujících maker vyleze jednoduchý střízlivý dokument. +Předpokládá se, že autor dodatečných plain\TeX{}ových maker ušije vzhled +dokumentu na míru konkrétnímu požadavku. + +Makro OPmac ponechává implicitní fonty \csplain{}u a načítá +soubor {\tt ams-math.tex}, takže funguje kompletní matematická sazba +v~libovolné velikosti. Jsou k dispozici rozšiřující matematické +abecedy a dále stovky nových kontrolních sekvencí umožňujících uživateli +přístup ke speciálním matematickým symbolům. +Není ovšem vyloučeno, že uživatel +po načtení {\tt opmac.tex} zavede jiné fonty a použije jiný balíček typu +{\tt *-math.tex}, například {\tt tx-math.tex}. Příklad začátku dokumentu: + +\begtt +\input opmac % zavedení makra OPmac +\chyph % zapnutí češtiny +\input lmfonts % použití Latin Modern fontů +\typosize[12/14] % nastavení základní velikosti sazby +\endtt + +Makro OPmac potřebuje ke své činnosti \csplain{} optimálně ve verzi aspoň +"Nov.2012". Po vynaložení menšího úsilí funguje OPmac i v plain\TeX{}u +samotném. + +Uživatelům OPmac nabízím konzultace po emailu a uvítám hlášení o chybách. +Pojďme společnými silami tomu odstranit případné mouchy a mušky. + + +\sec Velikosti fontů a řádkování +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Všechna makra popsaná v této sekci nastavují změny ve fontech a dalších +parametrech jen lokálně, takže po ukončení skupiny se nastavení vrací k původním +hodnotám. + +Makro "\typosize[<velikost fontu>/<řádkování>]" nastaví velikost textových i +matematických fontů a řádkování. Je-li některý z parametrů prázdný, makro +nastaví jen údaje plynoucí z neprázdného parametru. +Parametry neobsahují jednotku, jednotka pt se doplní v~makru. Příklady + +\begtt +\typosize[10/12] % to je implicitní nastavení +\typosize[11/12.5] % font velikosti 11pt, řádkování 12.5pt +\typosize[8/] % font velikosti 8pt, řádkování nezměněno. +\endtt + +Začátek dokumentu tedy může vypadat takto: + +\begtt +\input opmac \typosize[11.5/13] % sazba v písmu 11.5pt s řádkováním 13pt +\endtt + +Makro "\typoscale[<faktor-font>/<faktor-řádkování>]" zvětší nebo zmenší velikost +textových i matematických fontů resp. řádkování <faktor> krát aktuální +velikost fontů resp. řádkování. +Faktor je celé číslo, přitom 1000 znamená +jedničku (jako za slovem "scaled" v~příkazu "\font"). Je-li parametr +prázdný, je to stejné, jako by byl roven 1000. + +\begtt +\typoscale[800/800] % fonty i řádkování se zmenší na 80 % +\typoscale[\magstep2/] % \magstep2 je 1440, tj. fonty se zvětší 1,44krát +\endtt + +Tato makra můžeme použít pro nadpisy nebo poznámky s tím, že velikost bude +relativní vzhledem k základnímu písmu celého dokumentu. + +Pokud zavedete font příkazem "\font\prepinac=<metrika> <nic-nebo-at-nebo-scaled>", +pak "\prepinac" přepíná do pevně stanoveného fontu, který není ovlivněn +makry na nastavování velikosti. Ale co není, může být. Stačí font +registrovat pomocí "\regfont\prepinac" a nyní i "\prepinac" přepíná do fontu +podle velikosti nastavené pomocí "\typosize" nebo "\typoscale". Příklad: +\par\nobreak + +\begtt +\font\zapfchan=pzcmi8z \regfont\zapfchan +\typosize[20/] Taky \zapfchan přepne do Zapf-Chancery ve velikosti 20pt. +\endtt + +Při inicializaci \csplain{}u je registrováno pět fontových přepínačů +ukrytých v makrech "\rm", "\it", "\bf", "\bi", "\tt". Takže tato makra +implicitně nastavují font do stanovené velikosti. + +Na místo "\typosize" a "\typoscale" je možno použít +makra na změnu velikosti jen textových fontů +"\textfontsize[<velikost-fontu>]" a "\textfontscale[<faktor>]". +Tato makra nemění matematické fonty ani řádkování. + +Makra "\thefontsize[<velikost-fontu>]" nebo "\thefontscale[<faktor>]" +změní velikost jen aktuálního fontu, nemění +žádné jiné fonty a nemění řádkování. +Tato makra používají interní fontový přepínač "\thefont". Je možné si jej +\uv{vypůjčit} příkazem "\let" pro pozdější použití: + +\begtt +\tenrm \thefontscale[700]\let\sevenrm=\thefont \tenrm +\endtt +% +Díky přepínači "\tenrm" na konci ukázky sazba dále pokračuje neškálovaným +fontem, ovšem škálovaný font máme uložen v přepínači "\sevenrm". + +Všechna zde uvedená makra na změnu velikosti fontů jsou vybavena +inteligencí: hledají metriku, která má svou designovanou velikost nejblíže +požadované velikosti. Takže při požadavku na velikost 13pt se použije metrika +"csr12 at13pt", zatímco při velikosti 7.5pt se použije metrika +"csr8 at7.5pt". Data pro tuto inteligenci jsou přečtena ze souboru +"ams-math.tex", kde je najdete u příkazů "\regtfm". + +Poslední poznámka se týká makra "\em", které sice nepřepíná velikost fontů, +ale přepíná jejich variantu. Je to kontextové makro, které pracuje v +závislosti na aktuálně zvoleném fontu. Implicitně přepíná na "\it". Pokud +ale je aktuálním fontem "\it", přepne na "\rm". Je-li aktuálním fontem "\bf" +přepne na "\bi" a obráceně. Makro navíc správně doplní italické korekce ke +slovu před jeho použitím a za jeho použitím. Takže se o italické korekce +není nutno starat. Příklad: + +\begtt +To je {\em zdůrazněný} text. % jako: To je {\it zdůrazněný\/} text. +\it To je {\em zdůrazněný} text. % jako: To je\/ {\rm zdůrazněný} text. +\bf To je {\em zdůrazněný} text. % jako: To je {\bi zdůrazněný\/} text. +\bi To je {\em zdůrazněný} text. % jako: To je\/ {\bf zdůrazněný} text. +\endtt + + +\label[cleneni] +\sec Členění dokumentu +%%%%%%%%%%%%%%%%%%%%%% + +Dokument se může skládat z kapitol, kapitola ze sekcí a sekce z podsekcí. +Titul dokumentu vyznačte pomocí "\tit <titul><prázdný řádek>", kapitolu +zahajte "\chap<titul><prázdný-řádek>" a podobně novou sekci zahajte +"\sec<titul><prázdný-řádek>" a podsekci +"\secc<titul><prázdný-řádek>". +Takže třeba: + +\begtt +\chap Brouci + +\sec Chrousti + +\secc O nesmrtelnosti chroustů + +Bla bla bla bla ... +Bla bla bla a ještě bla. +\endtt + +Kapitoly se automaticky číslují jedním číslem, sekce dvěma čísly (číslo +kapitoly.sekce) a podsekce třemi čísly. Pokud dokument neobsahuje kapitoly, +číslo kapitoly chybí, tj. sekce má jedno číslo a podsekce dvě. + +Implicitní vzhled nadpisů kapitol, sekcí a podsekcí je definován v +makrech "\printchap", "\printsec" a "\printsecc". Můžete se na obsah těchto +maker podívat do technické dokumentace nebo do "opmac.tex". Můžete se těmi +makry inspirovat a třeba je předefinovat podle vlastního typografického návrhu. + +První odstavec za titulem kapitoly, sekce a podsekce není odsazen. Pokud jej +chcete mít odsazen jako ostatní odstavce, napište "\let\firstnoindent=\relax". + +Jestliže je název kapitoly, sekce nebo podsekce příliš dlouhý, rozlomí se do +řádků. V takovém případě je někdy lepší rozdělit název do řádků manuálně. +K tomu slouží makro "\nl", které odřádkuje v místě použití (newline). +Toto makro se navíc v obsahu chová jako mezera. + + +\label[cislovani] +\sec Další číslované objekty a odkazy na ně +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Kromě kapitol, sekcí a podsekcí se automaticky číslují ještě rovnice a +popisky pod obrázky a pod tabulkami. + +Pokud na konci display módu je uvedeno +"\eqmark", tato rovnice bude číslovaná. Formát číslování je implicitně jediné +číslo uzavřené v kulaté závorce resetované při každém zahájení nové sekce. +Příklad: "$$ a^2 + b^2 = c^2 \eqmark $$" vytiskne +$$ + a^2 + b^2 = c^2 \eqmark +$$ + +Je-li potřeba očíslovat jedním číslem více rovnic sestavených pomocí +"\eqalignno", pak použijte "\eqmark" v posledním sloupci, například takto: + +\begtt +$$ + \eqalignno{a^2+b^2 &= c^2 \cr + c &= \sqrt{a^2+b^2} & \eqmark \cr} +$$ +\endtt +Ukázka dává tento výsledek: + +\label[vypocet] +$$ + \eqalignno{a^2+b^2 &= c^2 \cr + c &= \sqrt{a^2+b^2} & \eqmark \cr} +$$ + +Dalšími číslovanými objekty jsou popisky. +Popisek pod obrázky je potřeba uvést slovem "\caption/f" a popisek pod +tabulkami slovem "\caption/t". Pak následuje text popisku ukončený +prázdným řádkem. Příklad: + +\begtt +\hfil\table{rl}{věk & hodnota \crl\noalign{\smallskip} + 0--1 & neměřitelná \cr + 1--6 & projevující se \cr + 6--12 & výrazná \cr + 12--20 & extrémní \cr + 20--40 & mírnější \cr + 40--60 & různá \cr + 60--$\infty$ & umírněná} % vytvoření tabulky +\par\nobreak\medskip +\caption/t Závislost závislosti na počítačích na věku. +\endtt +% +Tato ukázka vytvoří: + +\label[zkouším] +\medskip +\hfil\table{rl}{věk & hodnota \crl\noalign{\smallskip} + 0--1 & neměřitelná \cr + 1--6 & projevující se \cr + 6--12 & výrazná \cr + 12--20 & extrémní \cr + 20--40 & mírnější \cr + 40--60 & různá \cr + 60--$\infty$ & umírněná} +\par\nobreak\medskip +\caption/t Závislost závislosti na počítačích na věku. +\medskip + +Vidíme, že makro "\caption/t" doplnilo slovo \uv{Tabulka} následované číslem. +Toto číslo přebírá číslo sekce a za tečku doplňuje ještě číslo +tabulky. Podobně se chová "\caption/f", jen místo slova \uv{Tabulka} se v textu +zjeví slovo \uv{Obrázek}. Obrázky a tabulky jsou číslovány nezávisle. +Popisek je centrován. Je-li popisek delší na více řádcích, je centrován +poslední řádek. + +Způsob číslování lze změnit jinou definicí makra "\thednum" (pro +rovnici), "\thetnum" (pro tabulky) a "\thefnum" (pro obrázky). Makro OPmac +je definuje implicitně takto: + +\begtt +\def\thednum{(\the\dnum)} +\def\thetnum{\thesecnum.\the\tnum} +\def\thefnum{\thesecnum.\the\fnum} +\endtt + +Makro OPmac vloží slovo \uv{Tabulka} v závislosti na nastaveném jazyce +příkazem "\chyph", "\shyph", "\ehyph". Při "\shyph" dostaneme \uv{Tabuľka} a +při "\ehyph" máme \uv{Table}. Podobně se chovají slova +\uv{Obrázek/Obrázok/Figure} a \uv{Kapitola/Kapitola/Chapter}. +Jiná automaticky generovaná slova OPmac nepoužívá. + +Předefinovat tato slova lze pomocí "\sdef", jak ukazuje následující příklad, +který zamění celá slova za zkratky. + +\begtt +\sdef{mt:t:cz}{Tab.} \sdef{mt:t:sk}{Tab.} \sdef{mt:t:en}{Tab.} +\sdef{mt:f:cz}{Obr.} \sdef{mt:f:sk}{Obr.} \sdef{mt:f:en}{Fig.} +\endtt + +\LaTeX{}oví uživatelé jsou zvyklí, že jim tabulky a obrázky plavou v +dokumentu, přičemž inklinují k horní části stránky. To se při použití OPmac +implicitně neděje, ale je možno plavání zařídit +pomocí plain\TeX{}ového makra "\topinsert" resp. "\midinsert". Například: + +\begtt +\topinsert + \hfil\table{rl}{...} % vytvoření tabulky + \medskip + \caption/t Závislost závislosti na počítačích na věku. + \par +\endinsert +\endtt + +Na automaticky číslované objekty je nutno se občas v textu odkazovat. +Protože dopředu nevíme, pod jakým číslem se rovnice, sekce, tabulka atd. +vytiskne, je potřeba použít interní lejblíky k označkování odkazovaných +objektů. K tomu slouží makro "\label[<lejblík>]", které musí předcházet +makru, jež generuje číslo. Není nutné, aby "\label" předcházel těsně danému +makru. Tedy například: + +\begtt +\label[chroust] \sec O nesmrtelnosti chroustů + +\label[zavislaci] +\hfil\table{rl}{...} % vytvoření tabulky +\caption/t Závislost závislosti na počítačích na věku. + +\label[pythagoras] +$$ a^2 + b^2 = c^2 \eqmark $$ + +Nyní můžeme hovořit o~sekci~\ref[chroust] na straně~\pgref[chroust] nebo +taky o~rovnici~\ref[pythagoras] na straně~\pgref[pythagoras]. Dále bude +potřeba upozornit na tabulku~\ref[zavislaci] na straně~\pgref[zavislaci], +která shrnuje jistý druh závislosti. +\endtt + +Text z ukázky vytvoří zhruba toto: \uv{Nyní můžeme hovořit o sekci 2.1 +na straně 13 nebo taky o rovnici (1) na straně 15. Dále bude +potřeba upozornit na tabulku 1.3.1 na straně 42, +která shrnuje jistý druh závislosti.} + +Jestliže se v textu vyskytují dopředné reference (tj. odkazujeme na objekt, +který ještě není vytištěn) nebo text odkazuje na stránky ("\pgref"), je nutné +\TeX{}ovat dokument dvakrát. + + +\sec Odrážky +%%%%%%%%%%%% + +Jednotlivé myšlenky je občas potřeba vypíchnout odrážkami. Prostředí s +odrážkami se vymezuje sekvencemi "\begitems" a "\enditems". Uvnitř tohoto +prostředí je hvězdička aktivním znakem, který zahajuje odrážky. Prostředí s +odrážkami je možné vnořit do sebe. Pomocí "\style <znak>" hned za slovem +"\begitems" je možné vymezit některé z předdefinovaných vzhledů odrážek: + +\begtt +\style o % malý puntík +\style O % velký puntík $\bullet$ (implicitní volba) +\style - % spojovník +\style n % odrážky číslované 1., 2., 3., ... +\style N % odrážky číslované 1), 2), 3), ... +\style i % odrážky číslované (i), (ii), (iii), (iv), ... +\style I % odrážky číslované I, II, III, IV, ... +\style a % odrážky s písmeny a), b), c), ... +\style A % odrážky s písmeny A), B), C), ... +\style x % malý čtvereček +\style X % velký čtvereček +\endtt + +Příklad: + +\begtt +\begitems \style n +* Tady je první myšlenka. +* A tady druhá, která je rozdělena na + \begitems \style a + * podmyšlenku + * a hned následuje další podmyšlenka, + * poslední podmyšlenka. + \enditems +* Tady je třetí myšlenka. +\enditems +\endtt +% +vytvoří následující výstup: + +\begitems \style n +* Tady je první myšlenka. +* A tady druhá, která je rozdělena na + \begitems \style a + * podmyšlenku + * a hned následuje další podmyšlenka, + * poslední podmyšlenka. + \enditems +* Tady je třetí myšlenka. +\enditems + +Chcete-li uvnitř prostředí s odrážkami vytisknout hvězdičku, pište~"\char`\*". + +Pomocí "\sdef{item:<písmeno>}{<text>}" si můžete dodefinovat vzhled odrážek +podle svých představ. Implicitní odrážku můžete předefinovat pomocí +"\def\normalitem{<text>}". + +Jednotlivá prostředí s odrážkami se odsazují podle +velikosti registru "\iindent", který je nastaven na hodnotu "\parindent" v +době čtení souboru "opmac.tex". Pokud později změníte "\parindent", +doporučuji na stejnou hodnotu nastavit "\iindent". +Vertikální mezera nad a pod prostředím s odrážkami je řízena makrem +"\iiskip". + + +\sec Tvorba obsahu +%%%%%%%%%%%%%%%%%% + +Makro "\maketoc" vytiskne v místě svého použití obsah dokumentu bez nadpisu, +jen jednotlivé řádky obsahu. Odsazení jednotlivých řádků je nastaveno na +násobky registru "\iindent". Často je potřeba dokument \TeX{}ovat vícekrát, +než se obsah zjeví a než se stránkové číslice srovnají správně, protože po +prvním zjevení obsahu se mohou stránky posunout jinam. + +Nadpis pro obsah většinou nebudeme psát pomocí "\chap" nebo "\sec", protože +by se údaj o~obsahu dostal do obsahu, což obvykle není žádoucí. Je proto +potřeba použít vnitřního makra "\printsec" a před jeho použitím vyprázdnit +obsah "\thesecnum", abychom neměli tuto sekci číslovanou. Takže obsah +vyrobíme třeba takto: + +\begtt +\def\thesecnum{}\printsec{\unskip Obsah}\maketoc +\endtt + +Tituly kapitol, sekcí a podsekcí zapisuje OPmac pro účely sestavení obsahu do +externího souboru "*.ref". Může se stát, že uživatel v těchto textech +použije nějaké komplikované makro, které se pak v souboru \uv{rozsype} do +takového stavu, že nejde vzápětí přečíst. V takovém případě je potřeba +makro zabezpečit proti expanzi při zápisu do souboru pomocí +deklarace "\addprotect\makro". Takto deklarované makro je pak zabezpečené +proti expanzi do "*.ref" souboru. Například OPmac deklaruje: + +\begtt +\addprotect~ \addprotect\TeX \addprotect\thefontsize \addprotect\em +\endtt +% +a mnoho dalších. Není možné ale předvídat všechno, co může uživatel +nacpat do titulu sekce nebo kapitoly. Pokud se tedy \uv{rozsype} +REF soubor, je potřeba si tímto způsobem zabezpečit používané makro. + + +\sec Sestavení rejstříku +%%%%%%%%%%%%%%%%%%%%%%%% + +Makro pro zanášení slov do rejstříku je navrženo s ohledem na optimalizaci +počtu úhozů na klávesnici. Autor už napsal své dílo, má daný termín +odevzdání a nyní ho čeká úmorná práce vyhledávání slov v textu, které by +měly přijít do rejstříku, a jejich vyznačování. Je třeba mu tuto práci co +nejvíce usnadnit. + +Pro zanesení slova do rejstříku slouží makro "\ii". Je to zkratka za +\uv{insert to index}. +Jeho parametr je <slovo> bez mezery ukončené mezerou (obecnější tvar parametru +uvedeme později). Toto slovo se přepíše do rejstříku, ve kterém jsou všechna +takto deklarovaná slova seřazena podle abecedy a jsou k nim připojena čísla +stránek, na kterých bylo použito odpovídající makro "\ii <slovo>". +Příklad: + +\begtt +Tady mluvím o jistém +\ii bazmek +bazmeku, který provokoval moji zvědavost. +\endtt + +Makro "\ii" viditelně neudělá v sazbě nic. Přilepí se na následující slovo (v +našem příkladě slovo \uv{bazmeku}) jako skrytá značka. Číslo strany, +kde se ta značka objeví, bude v rejstříku vedle slova \uv{bazmek}. + +Je-li "\ii" zapsáno ve vertikálním módu, zahájí se v daném místě odstavec, +aby se mohla neviditelná značka z "\ii" nalepit na následující slovo. Pokud +si to z nějakých důvodů nepřejete, použijte interní variantu makra +"\iindex{<slovo>}", která nezahajuje odstavec. + +Pokud se v rejstříku má objevit stejné slovo jako v textu, není nutno je psát +dvakrát. Stačí použít makro "\iid" (zkratka za "\ii" double): + +\begtt +Hlavní zásady jsou \iid nestrannost , \iid pravdomluvnost a \iid odvaha . +\endtt +% +To povede ke stejnému výsledku jako + +\begtt +Hlavní zásady jsou \ii nestrannost nestrannost, +\ii pravdomluvnost pravdomluvnost a \ii odvaha odvaha. +\endtt +% +Povšimněte si, že čárky a tečky jsou odstrčeny od dublovaného slova, protože +mezera je ukončovací znak parametru "\iid". Do textu se mezera vrátí právě +tehdy, když nenásleduje tečka nebo čárka. V našem příkladě před spojkou \uv{a} +mezera ve výsledku je, ale před tečkou nebo čárkou mezera není. + +Vlastnosti makra "\iid" jsou tímto popsány zcela. Vraťme se k makru "\ii", +které poskytuje další možnosti. + +Parametr "\ii" je vždy ukončen mezerou. Může obsahovat čárky (bez mezer), +které naznačují, že se do rejstříku dává více slov: + +\begtt +{\bf Definice.} +\ii lineární~prostor,vektorový~prostor +{\em Lineárním prostorem} (nebo též vektorovým prostorem) rozumíme ... +\endtt +% +Dostaneme totéž jako při "\ii lineární~prostor \ii vektorový~prostor " +a tato ukázka demonstruje ještě jednu věc: je-li potřeba do parametru "\ii" +dostat mezeru, pište vlnku. + +Pokud se v rejstříku objeví hesla skládající se z více slov, obvykle chceme, +aby u~hesla, které opakuje první slovo, se toto slovo +v rejstříku nevypisovalo opakovaně, ale +aby bylo nahrazeno pomlčkou. Například: +\par\nobreak +\medskip +\hbox{\indent lineární podprostor 12, 16, 18, 29}\nobreak +\hbox{\indent \space --- prostor 12, 16--32, 51}\nobreak +\hbox{\indent \space --- závislost 18--20, 34} +\medskip + +\noindent Při takovém požadavku pište místo vlnky mezi slovy lomítko. Příklad: + +\begtt +\ii lineární/prostor,vektorový/prostor +\endtt + +Někdy je vhodné kromě hesla lineární/prostor zařadit i heslo +prostor/lineární. Aby se to nemuselo psát dvakrát, je k dispozici zkratka +"@" napsaná za čárku na konci parametru: + +\begtt +\ii lineární/prostor,vektorový/prostor,@ +% je totéž jako \ii lineární/prostor,vektorový/prostor +% \ii prostor/lineární,prostor/vektorový +\endtt + +Počet lomítek v hesle pro rejstřík není omezen. Můžete tedy vytvořit +víceúrovňový rejstřík. Nicméně je třeba vědět, že zkratka "@" nevytváří +všechny permutace, ale jen prohazuje první údaj před lomítkem se všemi +ostatními. Takže "\ii a/b/c,@" je totéž jako "\ii a/b/c" "\ii b/c/a". + +Samotný rejstřík vznikne v místě příkazu "\makeindex". Rejstřík obsahuje +data z předchozího zpracování dokumentu \TeX{}em, takže je potřeba +\TeX{}ovat aspoň dvakrát. Makro "\makeindex" abecedně seřadí data v rejstříku +podle českých a slovenských pravidel řazení a upraví odkazy na stránky +(aby se stránky neopakovaly a inklinovaly k zápisu ve tvaru 26--28). Makro +"\makeindex" se nestará o prostředí, do kterého sazbu vyvrhne, ani o nadpis. +To musíme udělat sami. OPmac nabízí pro sazbu do více sloupců makra +"\begmulti <počet-sloupců> ... \endmulti". Příklad: + +\begtt +\sec Rejstřík\par +\begmulti 3 \makeindex \endmulti +\endtt + +Do rejstříku musejí být zařazena jen \uv{čistá} slova, která neobsahují makra +expandující na primitivní příkazy \TeX{}u. Pokud chcete vytisknout v rejstříku +něco komplikovanějšího, můžete sestavit slovník výjimek pomocí +maker "\iis <heslo><mezera>{<tisk>}" +(název makra můžeme číst jako "\ii" speciální). +Funkci si vysvětlíme na příkladu: + +\begtt +\iis chikvadrat {$\chi$-kvadrát} +\iis relax {{\tt \char`\\relax}} +\iis Geodelova/věta/o~neúplnosti {G\"odelova/věta/o~neúplnosti} +\iis věta/o~neúplnosti/Geodelova {věta/o~neúplnosti/G\"odelova} +\endtt +% +Lze pak psát "\ii relax" nebo "\ii chikvadrat" nebo +"\ii Geodelova/věta/o~neúplnosti,@". +OPmac abecedně řadí podle těchto hesel, ale když dojde +na potřebu heslo vytisknout do rejstříku, vytiskne místo těchto hesel +materiál, +který je uveden na pravé straně slovníku. +Příklad ukazuje, že tím lze +řešit nejen tisk hesel, která je potřeba ošetřit +speciálními makry (v příkladu slovo relax), ale také +výjimky abecedního řazení (písmeno "\"{\tt\char`\"o} +nemáme v české abecedě, kdoví, kam by se to zařadilo). +% +Slovník výjimek je možný zapsat kamkoli před "\makeindex", +typicky se píše na začátek dokumentu. + +Výjimku z řazení dvojhlásky ch (například ve slově mochnátý, tj. mnohonohý) +je možné zařídit pomocí tečky, která má stejně jako ostatní interpunční +znaky, nulovou řadicí platnost (OPmac hesla řadí, jakoby tam interpunkce +nebyla). Takže třeba takto: +\begtt +... \ii moc.hnátý ... +\iis moc.hnátý {mochnátý} +\endtt +% +Je-li při zpracování "\makeindex" zapnutý anglický jazyk (implicitní +nastavení nebo po přepínači +"\ehyph"), pak se ch neinterpretuje jako dvojhláska. Ostatní pravidla řazení +zůstávají nezměněna. + +Pro různé speciální znaky můžete využít znak "@", který se řadí před celou +abecedou. Speciální znak pak nahradíte až ve slovníku výjimek. +Takže třeba "\ii Ernst~@~Young" pro řazení a +"\iis Ernst~@~Young {Ernst \& Young}" pro tisk. + + +\sec Barvy, vodoznaky +%%%%%%%%%%%%%%%%%%%%% + +Makra uvedená v této sekci nastavují barvy jen při použití pdf\TeX{}u a při +výstupu do PDF. Jinak tato makra neudělají nic. + +Barvu textu můžete nastavit pomocí přepínačů "\Blue", "\Red", "\Brown", +"\Green", "\Yellow", "\White", "\Grey" a "\Black". Je potřeba si uvědomit, že tyto +přepínače pracují globálně nezávisle na skupině uvnitř boxu i mimo, prostě +kdekoli. Barvu jinou než černou je potřeba nakonec vypnout přepínačem +"\Black". Pokud barvu jinou než černou zapnete na některé stránce a text v +této barvě přeteče do stránek dalších, při opakovaném \TeX{}ování se objeví +správná barva i na následujících stránkách. Tuto skutečnost si totiž +\TeX{} musí ujasnit prostřednictvím pomocného souboru s odkazy. + +Společně s barvou textu tyto přepínače zapínají i barvu větších ploch +vytvořených pomocí "\hrule" a "\vrule". Ve specifikaci formátu PDF je +nicméně ještě jeden přepínač barev nezávislý na barvě textu a větších ploch. +Jsou to barvy linek, které mají tloušťku menší než 1pt. Tento \uv{druh +barvy} se přepíná stejnými přepínači "\Blue", ..., "\Black" ovšem +před tímto přepínačem musí bezprostředně předcházet slovo "\linecolor". +Takže "\linecolor\Red" zapne barvu linek na červenou, ale barva textu +zůstane původní. Nebo "\Black" vrátí do normálu barvu textu, zatímco +"\linecolor\Black" způsobí, že také linky budou dále černé. + +\def\podbarvi#1#2#3{\setbox0=\hbox{#3}\leavevmode + \rlap{#1\strut\vrule width\wd0}#2\box0\Black} + +Kromě uvedených barevných přepínačů si můžete \uv{namíchat} v režimu CMYK +i barvy vlastní. Stačí se inspirovat, jak jsou uvedené přepínače +definovány:\par\nobreak + +\begtt +\def\Red{\setcmykcolor{0.0 1.0 1.0 0}} +\def\Brown{\setcmykcolor{0 0.67 0.67 0.5}} +... +\endtt +% +Následuje příklad, kterým vytvoříme \podbarvi\Yellow\Brown{podbarvený text:} + +\begtt +\def\podbarvi#1#2#3{\setbox0=\hbox{#3}\leavevmode + \rlap{#1\strut\vrule width\wd0}#2\box0\Black} + \podbarvi\Yellow\Brown{Tady je hnědý text na žlutém pozadí.} +\endtt + +{\bf Vodoznakem} je míněn šedý text opakující se na každé stránce, +který je vytištěn pod obvyklým textem. Například OPmac nabízí makro +"\draft", které způsobí, že každá stránka obsahuje šikmo napsaný veliký šedý +nápis DRAFT. Můžete se inspirovat v technické dokumentaci, jak je to +uděláno. + + +\label[klikani] + +\sec Klikací odkazy +%%%%%%%%%%%%%%%%%%% + +Pokud napíšete na začátek dokumentu "\hyperlinks{<color-in>}{<color-out>}", pak +se v dokumentu při výstupu do PDF stanou klikacími: + +\begitems +* čísla generovaná pomocí "\ref" a "\pgref", +* čísla kapitol, sekcí, podsekcí a stránek v obsahu, +* čísla nebo značky generované pomocí "\cite" (odkazy na literaturu), +* texty tištěné pomocí makra "\url". +\enditems + +Poslední z uvedených odkazů je externí a bude mít barvu <color-out>, zatímco +ostatní čísla jsou interními odkazy a budou mít barvu <color-in>. Příklad: + +\begtt +\hyperlinks{\Blue}{\Green} % vnitřní odkazy modré, URL zelené +\endtt + +Je možné zobrazit rámečky ohraničující aktivní plochu pro klikání. Tyto +rámečky jsou viditelné jen v PDF prohlížeči, při tisku na tiskárně se +nezobrazují. Stačí těmto rámečkům \uv{namíchat} barvu (tentokrát RGB) a +definovat některé ze sekvencí "\pgborder", "\tocborder", "\citeborder", +"\refborder" a "\urlborder". První část jména kontrolní sekvence +určuje, jakých odkazů se to týká. Příklad: + +\begtt +\def\tocborder{1 0 0} % odkazy v obsahu vlevo budou mít červený rámeček +\def\pgborder{0 1 0} % odkazy na stránky budou mít zelený rámeček +\def\citeborder{0 0 1} % odkazy na publikace budou mít modrý rámeček +\endtt +% +Implicitně tato makra nejsou definována, což znamená, že se rámečky netvoří. + +Manuálně je možno vytvořit cíl odkazu makrem +"\dest[<typ>:<lejblík>]{<výška>}" +a klikací text makrem "\link[<typ>:<lejblík>]{<color>}{<text>}". +Parametr <typ> je typ odkazu (toc, pg, cite, ref nebo další). Parametr +<výška> určuje vzdálenost cíle nad účařím. Protože PDF prohlížeče většinou +lícují horní hranu okna přesně s místem cíle, je potřeba cíl umístit poněkud výše, +abychom viděli i odkazovaný text. + +Makro "\url" vytiskne odkaz do internetu. Příklad: "\url{http://petr.olsak.net}" +vytvoří \url{http://petr.olsak.net}. Text je psán strojopisem a může se +lámat do řádků za lomítky. Je-li nastaveno "\hyperlinks", stává se tento +text aktivním vnějším odkazem. + +Obsah dokumentu se dá přesunout do levé záložky PDF prohlížeče tak, že klikáním na +něj se přechází v~dokumentu na požadované místo. Ve specifikaci PDF se tomu +říká \uv{outlines}. Makro, které uvedenou věc zařídí, se jmenuje +"\outlines{<úroveň>}". Záložky budou implicitně rozevřeny do <úrovně> +včetně. Takže při <úroveň>=0 jsou +vidět jen úrovně kapitol, při <úroveň>=1 vidíme i sekce a při +<úroveň>$\geq$2 vidíme rozevřeno všechno. Bohužel písmo v záložkách typicky +nezvládá správně česká a slovenská písmena. Proto OPmac konvertuje texty do +záložek tak, že tam jsou bez hacku a carek. Chcete-li vypnout tuto konverzi, +napište "\def\toasciidata{}". + +Samotný řádek do záložek vložíte makrem +"\insertoutline{<text>}". Text v~tomto případě nepodléhá konverzi. +V sazbě se neobjeví nic, jen se stane cílem, když uživatel na záložku +s~<textem> klikne. Obsah se do záložek vloží celý během činnosti makra +"\outlines", takže další řádky vložené pomocí "\insertoutline" tomuto +obsahu předcházejí nebo následují podle toho, zda předcházejí nebo následují +místu, kde je použito "\outlines". + + +\sec Verbatim texty +%%%%%%%%%%%%%%%%%%% + +Vytisknout část textu verbatim \uv{tak jak je} bez interpretace +speciálních znaků lze +v prostředí vymezeném makry "\begtt" a "\endtt". Příklad: + +{\def\tthook{\adef/{\string\endtt}} +\begtt +\begtt +Tady je vše + napsáno bez interpretace speciálních znaků, jakými + jsou mezera, %, $, \, ~, ^, _, {, }, #, &. +/ +\endtt +} +Ve výstupu se objeví: + +\begtt +Tady je vše + napsáno bez interpretace speciálních znaků, jakými + jsou mezera, %, $, \, ~, ^, _, {, }, #, &. +\endtt +% +Není-li za "\endtt" prázdný řádek, nemá následující odstavec výchozí +odsazení. + +Je-li před zahájením "\begtt" nastaven registr "\ttline" na nezápornou +hodnotu, bude makro číslovat řádky. První řádek má číslo "\ttline+1" +a po práci makra se registr "\ttbline" posune na číslo posledního +vytištěného řádku. Takže v~dalším prostředí "\begtt" ... "\endtt" +číslování pokračuje tam, kde přestalo. Implicitně je "\ttline=-1", +takže číslování neprobíhá. + +Levé odsazení každého řádku v "\begtt...\endtt" je nastaveno na "\ttindent". +Tento registr má výchozí hodnotu rovnu "\parindent" (v době čtení souboru +"opmac.tex"). Vertikální mezera nad a pod verbatim výpisem je vložena +makrem "\ttskip". + +Makro "\begtt" zahájí skupinu a v ní nastaví všem speciálním znakům plain\TeX{}u +kategorii 12. Pak spustí makro "\tthook", které +je implicitně prázdné. V něm je možno nastavit další kategorie znaků podle +potřeby. Definici aktivních znaků je potřeba udělat +pomocí "\adef<znak>{<text>}". Normální "\def" nefunguje, důvod je +vysvětlen v~TBN, str.~26. Příklad: + +{\def\tthook{\adef/{\string\endtt}} +\begtt +\def\tthook{\adef!{?}} +\begtt +Nyní se každý vykřičník promění v otazník. Že nevěříte? Vyzkoušejte! +/ +\endtt +} +Jednou definovaný "\tthook" funguje ve všech verbatim výpisech, dokud jej +nepředefinujete jinak. Tipy: +\par\nobreak +\begtt +\def\tthook{\typosize[9/11]} % jiná velikost verbatim výpisů +\def\tthook{\ttline=0} % všechny výpisy číslovány od jedničky +\def\tthook{\adef{ }{\char`\ }} % místo mezer budou vaničky +\endtt + +Verbatim lze tisknout i v řádku uvnitř odstavce. Pomocí "\activettchar<znak>" si +uživatel zvolí znak, který bude aktivní a bude zahajovat i končit verbatim +výpisy uvnitř odstavce. Verbatim výpis se v odstavci nikdy nerozlomí (je v +boxu). Autor makra OPmac obvykle nastavuje +"\activettchar"{\tt\char`\"}, takže pak může psát třeba toto: + +\begtt +Je-li před zahájením "\begtt" nastaven registr "\ttline" na nezápornou... +\endtt +% +Znak nastavený pomocí "\activettchar" má lokální platnost a ruší se také +pozdějším nastavením "\activettchar" na jinou hodnotu. Při zahájení každého +řádkového verbatim výpisu se spustí makro "\intthook", které je implicitně +prázdné. {\bf Upozornění:} deklaraci "\activettchar<znak>" proveďte až po přečtení všech +makrosouborů. Důvod: "\activettchar" nastavuje <znak> jako aktivní, což může při +čtení souborů maker vadit. + +Verbatim listingy je možné tisknout z externího souboru. Například + +\begtt +\verbinput (12-42) program.c +\endtt +% +vytiskne ve stejné úpravě, jako při použití "\begtt", ... "\endtt", +řádky 12 až 42 ze souboru "program.c". +Parametry v kulaté závorce mohou vypadat také takto: + +\begtt +\verbinput (-60) program.c % výpis od začátku souboru do řádku 60 +\verbinput (61-) program.c % výpis od řádku 61 do konce souboru +\verbinput (-) program.c % výpis celého souboru +\verbinput (70+10) program.c % čtení od řádku 70, přečteno bude 10 řádků +\endtt + +V dalších ukázkách OPmac čte od řádku, který následuje za naposledy +přečteným řádkem souboru z předchozího volání "\verbinput". Je-li soubor +čten poprvé, začíná číst prvním řádkem. Tento prvně čtený +řádek je označen v komentářích jako "n". + +\begtt +\verbinput (+10) program.c % čtení deseti řádků od řádku n +\verbinput (+) program.c % čtení od řádku n do konce souboru +\vebrinput (-5+7) program.c % vynechá 5 řádků, od n+5 tiskne dalších 7 +\verbinput (-3+) program.c % vynechá 3 řádky, tiskne do konce souboru +\endtt +% +Narazí-li čtení na konec souboru dřív, než je vytištěno vše, co si žádá +uživatel, přepis souboru je ukončen a žádná chyba se nezjeví. + +Výpisy provedené makrem "\verbinput" jsou ovlivněny registrem +"\ttindent" a makrem "\tthook" stejně, jako prostředí "\begtt"\dots"\endtt". +Při "\ttline"{\tt\char`\<-1} se netisknou čísla řádků. Je-li "\ttline=-1", čísluje se podle +řádků souboru. Je-li "\ttline" nezáporné, čísluje se od "\ttline+1". + + +\sec Jednoduché tabulky +%%%%%%%%%%%%%%%%%%%%%%% + +\LaTeX{}oví uživatelé jsou zvyklí při vymezení pravidel zarovnávání v +tabulce používat deklarace typu "{cclr}". Každé písmeno vymezí jeden sloupec +v tabulce, přitom písmeno "c" znamená centrovaný sloupec, "l" je sloupec +zarovnaný doleva a "r" sloupec zarovnaný doprava. +Podobnou možnost deklarace jednoduchých tabulek nabízí +OPmac v makru "\table{<deklarace>}{<data>}". Příklad: + +\begtt +\table{||lc|r||}{\crl + Měsíc & zboží & cena\hfil \crli \tskip.2em + leden & noťas & 14 kKč \cr + únor & skejt & 2 kKč \cr + červenec & jachtička & 3,4 MKč \crl} +\endtt + +Uvedený příklad povede na následující výsledek: + +\medskip +\hfil\table{||lc|r||}{\crl + Měsíc & zboží & cena\hfil \crli \tskip.2em + leden & noťas & 14 kKč \cr + únor & skejt & 2 kKč \cr + červenec & jachtička & 3,4 MKč \crl} +\medskip + +Ve skutečnosti výsledek nebude uprostřed řádku, ale tam, kam "\table" +napíšete. Kromě písmen "c", "l", "r" se v <deklaraci> mohou objevit znaky +\uv{svislítko}, které vymezují svislou čáru mezi sloupci. + +V datové části musí být tolik sloupců, kolik jich bylo deklarováno. +Jsou odděleny znakem "&" nebo symbolem pro konec řádku "\cr". Z toho vyplývá, +že na každém řádku musí být v datové části o jeden znak "&" méně, než je počet sloupců. +Nedodržíte-li toto pravidlo, \TeX{} se pomstí chybovou hláškou + +\begtt +! Extra alignment tab has been changed to \cr +\endtt +% +nebo vytvoří nedomrlou tabulku. Místo symbolu pro konec řádku "\cr" je možno +použít "\crl" (přidá jednoduchou vodorovnou čáru) nebo "\crll" (přidá dvojitou +čáru), "\crli" (přidá čáru přerušenou svislými dvojitými linkami, +tj.~{\bf i}nterrupted) a +"\crlli" (přidá dvojitou čáru přerušenou svislými dvojitými linkami). +Těsně za "\cr", "\crl" atd. může následovat "\tskip<dimen>", +což vytvoří vertikální mezeru velikosti <dimen>, přitom se nepřeruší svislé +čáry v tabulce. + +Za povšimnutí stojí, že v ukázce u slova \uv{cena} je připojeno +"\hfil", což vloží pružnou mezeru vpravo od položky. Protože sloupec "r" +obsahuje implicitní stejnou pružnou mezeru vlevo, je slovo \uv{cena} centrováno, +zatímco ostatní údaje ve sloupci jsou zarovnány +napravo. + +Makro "\table" pracuje s předdefinovanými hodnotami, které můžete změnit, +pokud chcete dosáhnout jiný vzhled tabulky: + +\begtt +\def\tabiteml{\enspace} % co vkládá vlevo každé datové položky +\def\tabitemr{\enspace} % co vkládá vpravo každé datové položky +\def\tabstrut{\strut} % podpěra vymezující výšku řádků +\def\vvkern{1pt} % velikost mezery mezi dvojitou svislou linkou +\def\hhkern{1pt} % velikost mezery mezi dvojitou vodorovnou linkou +\endtt + +Vyzkoušejte si tabulku po "\def\tabiteml{}\def\tabitemr{}". Sloupce budete +mít na sebe nalepeny bez mezer. Příklad definice "\tabstrut": + +\begtt +\def\tabstrut{\vrule height11pt depth3pt width0pt} +\endtt +% +Tento příklad vymezuje v tabulce vzdálenost mezi účařím 14pt, z toho +11pt je rezervováno pro přetahy nad účařím a 3pt pro přetahy pod +účařím. Vyskytne-li se větší písmeno, zvětší to v~daném místě řádkování. + +OPmac definuje "\strut" závislý na zvoleném řádkování (při použití příkazu +"\typosize") zhruba takto: + +\begtt +\def\strut{\vrule height.709<baselineskip> depth.291<baselineskip> width0pt} +\endtt + +Tip: vyzkoušejte si +"\def\tabiteml{$\enspace} \def\tabitemr{\enspace$}". Ty dolary způsobí, že +každá datová položka bude zpracována v matematickém módu. Makro "\table" se +nyní podobá \LaTeX{}ovému prostředí "array". + +Makro "\frame{<text>}" vytvoří rámeček kolem <textu> s vnitřními okraji +o~velikostech "\vvkern" a "\hhkern". Například "\frame{ahoj}" vytvoří \frame{ahoj}. +Povšimněte si, že účaří rámovaného textu zůstalo nezměněno. Pokud chcete mít +tabulku s dvojitými čarami, je výhodné ji vytvořit po stranách +a nahoře a dole s~jednoduchými čarami a celou ji zabalit do "\frame": + +\vbox{ +\begtt +\frame{\table{|c||l||r||c|}{\crl + \multispan4\vrule\hss\bf Nadpis\hss \vrule\tabstrut \crl + \noalign{\kern\hhkern}\crli + první & druhý & třetí & čtvrtý \crlli + sedmý & osmý & devátý & desátý \crli}} +\endtt +\par\removelastskip\vskip-8.3ex +\hfill\frame{\table{|c||l||r||c|}{\crl + \multispan4\vrule\hss\bf Nadpis\hss \vrule\tabstrut \crl + \noalign{\kern\hhkern}\crli + první & druhý & třetí & čtvrtý \crlli + sedmý & osmý & devátý & desátý \crli}} +} +\medskip + +Kromě předdefinovaných znaků "c,l,r,|" se může v "<deklaraci>" objevit +libovolný další symbol, stačí připravit +"\def\tabdeclare<symbol>{<vlevo>##<vpravo>}". V technické dokumentaci je +příklad deklarace položky "P", která se při delším textu láme do více řádků. + +Tloušťka všech čar je v \TeX{}u implicitně 0,4pt. OPmac umožňuje tuto +implicitní tloušťku nastavit jinak pomocí "\rulewidth=<šířka>", například +"\rulewidth=1.5pt". + +Další příklad použití makra "\table" najdete v sekci~\ref[cislovani]. +Pokud potřebujete vytvořit komplikovanější tabulky, nezbude než prostudovat +TBN, kapitolu čtvrtou. + + +\sec Vkládání obrázků +%%%%%%%%%%%%%%%%%%%%% + +Nejprve je potřeba nastavit šířku obrázku do registru "\picw" a pak je možné +použít makro "\inspic <jméno>.<přípona>". Obrázek se vloží jako "\hbox" dané +šířky "\picw". Registr "\picw" si ponechá svou hodnotu, takže další obrázek +bude mít stejnou šířku, pokud ji nezměníte. +Přípony souboru s obrázkem mohou být: "png", "jpg", "jbig2", "pdf". + +Obrázek je vyhledán v adresáři "\picdir". Toto makro je implicitně prázdné, +tj. obrázek je vyhledán v aktuálním adresáři. + +O umístění obrázku v sazbě se musíte postarat vlastními prostředky. +Například: + +\begtt +\picw=.5\hsize \centerline{\inspic hodiny.jpg }\nobreak\medskip +\caption/f Hodiny na brněnském náměstí Svobody. +\endtt + +Makro není vhodné použít při opakovaném použití stejného obrázku v dokumentu +(opakující se grafika na každé straně nebo obrázek jako +odrážka ve výčtu položek). V takovém případě je vhodnější natáhnout obrázek +do PDF dokumentu jen jednou pdf\TeX{}ovým příkazem "\pdfximage" a dále +opakovat jeho zobrazení na různých místech dokumentu pomocí "\pdfrefximage". +Dokumentace k pdf\TeX{}u řekne víc. + +Makro "\inspic" pracuje jen v pdf\TeX{}u při výstupu do PDF. Pokud máte +nastaven výstup do DVI, +můžete použít makro "epsf.tex". Vzhledem k omezeným možnostem (obrázek jen +ve formátu EPS) není tento způsob práce s obrázky v makru OPmac podporován. + +Chcete-li \uv{programovat} obrázky přímo ve zdrojovém textu \TeX{}u, lze +použít plain\TeX{}ové rozhraní vynikajícího makra Ti{\em k}Z, se kterým je OPmac +kompatibilní. + +\sec PDF transformace +%%%%%%%%%%%%%%%%%%%%% + +Veškerá sazba v pdf\TeX{}u může podléhat lineární transformaci, která je +daná transformační maticí +"\pdfsetmatrix{<a> <b> <c> <d>}". Tato matice se v lineární algebře +zapisuje do dvou řádků: +$$ + \pmatrix{a&c\cr b&d}, \quad \hbox{např. zvětšení: } + \pmatrix{s_1&0\cr 0&s_2}, \quad \hbox{nebo rotace: } + \pmatrix{\cos\varphi&\ -\sin\varphi \cr \sin\varphi&\ \hphantom-\cos\varphi}. +$$ +Pdf\TeX{}ové primitivy "\pdfsetmatrix", "\pdfsave" a "\pdfrestore" bohužel +nejsou v dokumentaci pdf\TeX{}u uvedeny, tak je musím dokumentovat aspoň +zde. Příkaz "\pdfsave" uloží stávající transformační matici a aktuální bod +sazby. V době konání příkazu "\pdfrestore" se matice vrátí do původní podoby +a aktuální bod sazby v té době musí být na stejném místě, jako byl v~době +"\pdfsave", jinak se nám sazba rozjede a pdf\TeX{} nadává. Toho se dá +docílit např. pomocí "\pdfsave...\rlap{<text>}\pdfrestore". +Transformační matice se nastavují pomocí "\pdfsetmatrix". Opakované použití +"\pdfsetmatrix" způsobí pronásobení transformační matice novou maticí, +takže to funguje jako skládání zobrazení. OPmac nabízí dvě užitečná makra +"\pdfscale{<vodorovně>}{<svisle>}" a "\pdfrotate{<úhel>}". Parametr "<úhel>" +je interpretován ve stupních. Tato makra provedou odpovídající +"\pdfsetmatrix". + +Aplikujeme-li více matic za sebou, je potřeba vědět, že výchozí text +prochází transformací jednotlivých matic \uv{odzadu dopředu}, takže +například: + +\begtt +První: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore + % text1 je zvětšen dvakrát a překlopen podél svislé osy, + % dále je otočen o 30 stupňů doleva a konečně je vytištěn. +druhý: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore + % text2 je otočen o 30 stupňů doleva, dále zvětšen a překlopen + % podél svislé osy, nakonec vytištěn. +třetí: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}% + \pdfrestore % nejprve zkosení, pak otočení o 15.3 stupňů doprava +\endtt + +\bigskip +Ukázka dává následující výsledek. První: + \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore +druhý: + \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore +třetí: + \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}% + \pdfrestore +\bigskip\bigskip + + + +\sec Poznámky pod čarou a na okraji +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +{\bf Poznámku pod čarou} +vytvoříte pomocí "\fnote{<text>}". V místě tohoto zápisu +v textu se objeví automaticky generovaná značka a pod čarou dole na stránce +je tato značka zopakovaná a vedle ní je <text>. + +Značka je implicitně definovaná jako číslo v exponentu +následované závorkou. Číslování poznámek je na každé stránce započato +jedničkou. Čísla jsou vygenerována správně až po +opakovaném \TeX{}ování. Při prvním zpracování jsou místo čísel otazníky. + + +Implicitní značkování je možné změnit předefinováním makra "\thefnote". +Například po + +\begtt +\def\thefnote{\ifcase\locfnum\or + *\or**\or***\or$^{\dag}$\or$^{\ddag}$\or$^{\dag\dag}$\fi} +\endtt +% +bude první poznámka mít hvězdičku, druhá dvě hvězdičky atd. Uvedená +definice předpokládá, že na jedné stránce nebudete mít více než 6 poznámek. + +Makro "\fnote" je možné zapsat jen v běžném textu odstavce, nikoli v boxu +(například v~tabulce). Chcete-li odkazovat třeba z tabulky, je nutné v +tabulce vytvořit jen značky a mimo tabulku (ovšem tak, aby to neuteklo na +jinou stránku) zapíšete texty poznámek. K vytvoření značky použijte +"\fnotemark<číslo>" a text (bez značky) vytvoří "\fnotetext{<text>}". +Příklad: + +\begtt +{\typoscale[/1200]\table{||lc|r||}{\crl + Měsíc & zboží & cena\hfil \crli \tskip.2em + leden & noťas\fnotemark1 & 14 kKč \cr + únor & skejt\fnotemark2 & 2 kKč \cr + červenec & jachtička\fnotemark3 & 3,4 MKč \crl}} +\par\nobreak \fnotetext{notebook}\fnotetext{scateboard}\fnotetext{jachta} +\endtt +% +Čísla za slovy "\fnotemark" jsou vztažena vzhledem k jedné tabulce a nemusejí +souviset se skutečným číslem poznámky. Například, je-li na stejné stránce nad +tabulkou z ukázky normální "\fnote", bude mít vytištěno číslo 1, +odkazy v tabulce budou mít čísla~2, 3, 4 a případná další poznámka pod +tabulkou na stejné stránce obdrží číslo 5. + +{\bf Poznámku na okraji stránky} vytvoříte pomocí řídicí sekvence +"\mnote{<text>}". Poznámka je vlevo (na pravou zarážku) na sudé stránce a je +vpravo (na levou zarážku) na liché stránce. Tuto vlastnost mají poznámky až +po opakovaném \TeX{}ování. Při prvním \TeX{}ování jsou všechny poznámky vpravo. +Chcete-li mít poznámky i při opakovaném \TeX{}ování jen vpravo nebo jen +vlevo, pište do úvodu dokumentu "\fixmnotes\right" nebo "\fixmnotes\left". + +Řídicí sekvenci "\mnote{<text>}" můžete napsat do odstavce nebo před +odstavec. S odstavcem samotným to nic neudělá. Řádek odstavce, kde je +"\mnote" vložena jako neviditelná značka, je na stejné úrovni, jako první +řádek textu poznámky. + +Text poznámky je od sazby odsazen o "\mnoteindent" a maximální šířka +poznámky je "\mnotesize". Text poznámky se rozlomí do více řádků, aby +nepřesáhl "\mnotesize". + +Není ošetřen případ, kdy je "\mnote" víceřádková a je umístěna na úroveň +například posledního řádku strany. Pak text poznámky přečuhuje poněkud +dolů ze strany. Je tedy nutné "\mnote" použít jen na velmi krátké poznámky a +případně si tento jev pohlídat a ošetřit před definitivní sazbou manuálně. + + +\sec Bibliografické údaje +%%%%%%%%%%%%%%%%%%%%%%%%% + +Pomocí "\cite[<lejblík>]" nebo "\cite[<lejbík1>,<lejblík2>,<lejblík3>]" +(atd.) vytvoříme v textu odkazy na položky v seznamu literatury. V seznamu +literatury je třeba uvést záznamy, které mají odkazované lejblíky. Tyto +záznamy dostanou v seznamu automaticky vygenerovaná čísla a sekvence "\cite" +se pak promění na číselné odkazy, například [27] nebo [18,~24,~42] (atd.). +Souvislé řady čísel [1,~2,~3,~5,~6] se promění v~intervaly [1--3,~5--6~] +jen tehdy, když je v úvodní deklaraci dokumentu napsáno "\shortcitations". + +Seznam literatury je možné vložit do dokumentu třemi různými +způsoby: + +\begitems +* Manuálně: pomocí jednotlivých položek "\bib[<lejblík>]" přímo v dokumentu. +* S využitím Bib\TeX{}u makrem "\usebibtex{<bib-báze>}{<bst-styl>}". +* Využitím jednou vygenerované databáze makrem "\usebbl/<typ> <bbl-báze>". +\enditems + +Jednotlivé způsoby jsou níže probrány podrobněji. + +\medskip\noindent +{\bf Manuálně vložený seznam literatury} v dokumentu vypadá například takto: + +\begtt +\bib[tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. +\bib[tst] P. Olšák. {\it Typografický systém \TeX.} + 269~s. Praha: CSTUG, 1995. +\endtt +% +Výše uvedená ukázka dá následující výstup: +\medskip +\bib[tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. +\bib[tst] P. Olšák. {\it Typografický systém \TeX.} + 269~s. Praha: CSTUG, 1995. + +\medskip\noindent +{\bf Využití Bib\TeX{}u.} Předpokládá se, že uživatel disponuje souborem +"<bib-báze>.bib", ve kterém jsou nashromážděny bibliografické údaje ve +formátu, v jakém je čte program Bib\TeX{}. V~\TeX{}ové distribuci jistě +najdete nějaký "*.bib" soubor, tak se do něj podívejte. Lejblíkem je první +údaj u~každého bibliografického záznamu. Soubor "<bib-báze>.bib" by měl +obsahovat bibliografické údaje, které jsou nadmnožinou toho, co potřebuje +uživatel vypsat ve svém dokumentu. +Na místo, kde budete chtít vypsat seznam +literatury, vložte následující pokyn: + +\begtt +\usebibtex{<bib-báze>}{<bst-styl>} +\endtt + +Parametr "<bib-báze>" je jméno souboru bez přípony ".bib", ve kterém jsou +připraveny bibliografické záznamy. Parametr "<bst-styl>" je jméno +stylového souboru bez přípony ".bst", který použije Bib\TeX{} pro konverzi ze zdroje +"<bib-báze>.bib" do výstupu "<dokument>.bbl". Tento výstup pak bude makrem +"\usebibtex" přečten a vložen do dokumentu. Typicky používané <bst-styly> +jsou "plain", "alpha", "apalike", "ieeetr", "unsrt". +Styl "alpha" způsobí, že se místo čísel začnou zjevovat v dokumentu zkratky, +a to jednak v seznamu literatury a jednak v místě výskytu příkazů "\cite". +V takovém případě pochopitelně "\shortcitations" nefunguje a pokud byste se +o něj pokusili, tak makro havaruje. +Existují desítky, možná stovky dalších ".bst" stylů, viz internet. + + +Při prvním zpracování dokumentu \TeX{}em makro "\usebibtex" připraví vstupní +pokyny pro Bib\TeX{} do souboru "<dokument>.aux" a zjistí, že soubor +"<dokument>.bbl" zatím neexistuje. To dá najevo na terminálu: + +\begtt +WARNING: .bbl file doesn't exist. Use the ``bibtex <dokument>'' command. +\endtt + +Přejděte tedy na příkazový řádek a napíšeme "bibtex <dokument>". Tím se +spustí program Bib\TeX{}, který přečte ze souboru "<dokument>.aux" vstupní +pokyny (kterou otevřít ".bib" databázi, který ".bst" styl a jaké lejblíky +jsou požadovány) a na základě toho vygeneruje soubor "<dokument>.bbl", který +obsahuje výběr jen těch záznamů, které byly uživatelem citovány pomocí +"\cite". Soubor "<dokument>.bbl" je navíc zkonvertovaný z +".bib" formátu do formátu čitelného \TeX{}em. +Tato konverze je řízena stylem ".bst". + +Když znovu \TeX{}ujete dokument, makro "\usebibtex" v tomto případě shledá, +že soubor "<dokument>.bbl" existuje, načte jej a vytvoří seznam literatury. +Seznam obsahuje jen citované položky. Druhé spuštění \TeX{}u obvykle +nestačí, protože příkazy "\cite" jsou typicky dopřednými referencemi, takže +zatím nemají ponětí o přiřazení čísel k "<lejblíkům>" v seznamu literatury. +To se dozvědí až v~místě použití "\usebibtex", což je typicky na konci +dokumentu. Takže teprve třetí \TeX{}ování dá vše do pořádku. + +Seznam literatury obsahuje po použití Bib\TeX{}u jen citovaná dílka. Pokud +chcete do seznamu zařadit další položky, které nejsou v textu explicitně +odkazovány příkazem "\cite", použijte "\nocite[<lejblík>]". Toto makro dá +Bib\TeX{}u pokyn, aby do seznamu zahrnul i položku s~<lejblíkem>, ale v +místě použití tohoto makra se nevytiskne nic. Konečně pomocí "\nocite[*]" dáváme +Bib\TeX{}u vzkaz, že chceme mít v seznamu literatury celou ".bib" databázi. + +Zdroj bibliografických záznamů může být ve více ".bib" souborech. V +takovém případě stačí jejich názvy oddělit čárkou: +"\usebibtex{<bib-báze1>,<bib-báze2>}{<bst-styl>}". + +Někdy se stane, že autoři ".bib" databází nebo ".bst" stylů neopustili při +tvorbě těchto souborů \LaTeX{}ový způsob myšlení a občas jim uklouzne nějaká +\LaTeX{}ová konstrukce z prstů až do počítače. Odtud se dostane do +čteného ".bbl" souboru a náš plain\TeX{} si s~tím nebude vědět rady. K tomu +slouží seznam "\bibtexhook", kde můžete uvést definice těchto \LaTeX{}ových +konstrukcí. Tyto definice budou mít lokální platnost jen při čtení ".bbl" +souboru. Například + +\begtt +\def\bibtexhook{\def\emph##1{{\em##1}}\def\frac##1##2{{##1\over##2}}} +\endtt + +\noindent +{\bf Využití jednou vygenerované databáze.} Tvorba seznamů +literatury Bib\TeX{}em má jistou nevýhodu. Pokud později do dokumentu +vložíte další "\cite[<lejblík>]", musíte veškerou anabázi s bib\TeX{}em +provést znovu. A protože v současné době probíhá inflace odborných publikací +způsobená tím, že se podle kvanta publikací a citací daňový poplatník +rozhodl odměňovat vědce, je každé zjednodušení práce s bibliografickými +záznamy přínosné. +Makro OPmac navrhuje řešení, při kterém stačí použít Bib\TeX{} pro mnoho nových +článků jen jednou. + +\begitems \style n +* Vytvořte si zvláštní dokument "<mojebáze>.tex", do kterého napíšete: +\begtt +\input opmac \genbbl{<bib-báze>}{<bst-styl>} \end +\endtt +* Po \TeX{}ování dokumentu "<mojebáze>.tex" spusťte "bibtex <mojebáze>". + Tím se vytvoří soubor "<mojebáze>.bbl". +* Zpracujte \TeX{}em soubor "<mojebáze>.tex" ještě jednou. Vytvoří se + seznam veškeré literatury, který byl v souboru "<bib-báze>.bib", přitom každá + položka je označena svým <lejblíkem>. Vytiskněte si tento výstup a + dejte si jej na nástěnku. +* Uložte soubor "<mojebáze>.bbl" někam, kde jej umí přečíst \TeX{} bez ohledu + na to, v kterém pracujete adresáři. +* Přejděte k editaci svého dokumentu, pište "\cite" nebo "\nocite" podle potřeby a + v místě seznamu literatury dejte sekvenci "\usebbl/<typ> <mojebáze> ". + Údaj <typ> má tyto možnosti: +\begtt +\usebbl/a <mojebáze> % vypsat kompletně celou <mojebaze> (a=all), +\usebbl/b <mojebáze> % jen \(no)cite údaje řadit dle <mojebaze> (b=base), +\usebbl/c <mojebáze> % jen \(no)cite řadit podle pořadí citace (c=cite). +\endtt +\removelastskip +\enditems + + +Kroky 2 až 4 budete muset opakovat pouze tehdy, když budete chtít přidat do +"<mojebáze>.bbl" další údaj, tj. po upgradu souboru "<bib-báze>.bib". +Prudí-li různí odběratelé vaší vědecké činnosti požadavky na různé +"<bst-styly>", stačí si vygenerovat +podle různých stylů různé soubory typu "mybbl-plain.bbl", +"mybbl-ieeetr.bbl". + + +\sec Matematická sazba +%%%%%%%%%%%%%%%%%%%%%% + +Následující text popisuje vlastnosti souboru maker "ams-math.tex" (resp. +"tx-math.tex" při použití některých PostScriptových fontů). Toto makro je +makrem OPmac načítáno, takže uvedené vlastnosti jsou k dispozici též +uživatelům OPmac. + +V matematické sazbě (mezi dolary) nefungují přepínače textových fontů +deklarovaných příkazem "\font". Místo toho se tam přepíná mezi tzv. {\it +matematickými abecedami}. Jakmile začnete psát písmena +mezi dolary bez použití přepínače, je použita implicitní matematická abeceda +"\mit". Celkově jsou k dispozici následující abecedy: + +{\def\tthook{\catcode`\$=3 \catcode`/=0 \medmuskip=0mu}% +\begtt +\mit % matematická kurzíva $abc-xyz,ABC-XYZ$ +\it % textová kurzíva $/it abc-xyz,ABC-XYZ$ +\rm % textová antikva $/rm abc-xyz,ABC-XYZ$ +\cal % jednoduché cal. znaky $/cal ABC-XYZ$ +\script % kroucenější cal. znaky $/script ABC-XYZ$ +\frak % fraktura $/frak abc-xyz,ABC-XYZ$ +\bbchar % zdvojené tahy $/bbchar ABC-XYZ$ +\bf % sans serif bold $/bf abc-xyz,ABC-XYZ$ +\bi % sans serif bold slanted $/bi abc-xyz,ABC-XYZ$ +\endtt +} + +Dále jsou v matematické sazbě k dispozici stovky symbolů dostupných pomocí +"\<něco>", například "\alpha" $\alpha$, "\geq" $\geq$, "\sum" $\sum$, +"\sphericalangle" $\sphericalangle$, "\bumpeq", $\bumpeq$. Seznam všech těchto symbolů +najdete v dokumentaci k AMS\TeX{}u, která se typicky jmenuje "amsguide.ps". + +Matematická sazba funguje v nastavené velikosti písma podle "\typosize" nebo +"\typoscale". V~nadpisech se doporučuje použít boldifikovanou sadu všech +fontů, která se zapíná pomocí makra "\boldmath". Například: + +\begtt +\def\nadpis#1\par{\centerline{\typosize[17/]\bf\boldmath #1}} +\nadpis Tady je nadpis včetně vzorce $\int_a^b f(x) {\rm d}x$ +\endtt + +Makro "ams-math.tex" nastavuje jako implicitní abecedu matematickou kurzívu, +která je mírně jinak kreslena než kurzíva textová. Naopak makro +"tx-math.tex" nastavuje jako implicitní abecedu textovou kurzívu převzatou z +\uv{okolního} textového fontu. Ta se ve vzorečcích spolu s~textovým fontem +bude esteticky snášet daleko lépe. Chcete-li toto implicitní chování změnit, +je možné použít následující globální přepínače: + +\begtt +\itvariables % implicitní abeceda bude textová kurzíva, +\mitvariables % implicitní abeceda bude matematická kurzíva. +\endtt + +\sec Okraje +%%%%%%%%%%% + +Plain\TeX{} nastavuje levý okraj 1~in a šířku sazby ("\hsize") nastavuje +tak, aby i pravý okraj při formátu papíru \uv{letter} byl 1\,in. Také horní a +dolní okraj (do kterého přesahuje záhlaví a stránková číslice) jsou +nastaveny na 1~in při formátu papíru \uv{letter} a tím je určena výška sazby +("\vsize"). \csplain{} dělá totéž, tj. okraje jsou 1~in, ale formát papíru +je~A4.\fnote + {Přesněji: \csplain{} nastavuje výšku sazby {\tt\char`\\vsize=239.2mm}, což vede + k~dolnímu okraji o 7\,mm většímu než 1\,in.} +OPmac umožňuje toto nastavení změnit příkazem:\par\nobreak + +\begtt +\margins/<pg> <formát> (<levý>,<pravý>,<horní>,<dolní>)<jednotka> +například: +\margins/1 b5 (2,2,2,2)cm % nastaví všechny okraje na 2 cm pro papír b5. +<pg>... 1 = shodné okraje pro všechny stránky, +<pg>... 2 = okraje pro liché stránky, sudé mají prohozeny <levý>/<pravý>, +<formát>... a3, a4, a5, b5, letter nebo uživatelem definovaný, +<levý>,<pravý>,<horní>,<dolní>... velikosti okrajů, +<jednotka>... mm, cm, in, pt, pc, bp, dd, cc. +\endtt + +Každý z parametrů <levý>, <pravý>, <horní>, <dolní> může být prázdný. +Jsou-li prázdné oba <levý> i <pravý>, je zachováno nastavení "\hsize" a +levý i pravý okraj je stejný. Je-li jen jeden z parametrů +<levý>, <pravý> prázdný, zůstává zachováno "\hsize" a neurčený okraj se +dopočítá. Jsou-li <levý> i <pravý> neprázdné, jsou oba okraje určeny +a je podle nich upraveno "\hsize". +Analogické pravidlo platí pro <horní>, <dolní> v souvislosti +s~výškou sazby "\vsize". Například + +\begtt +\margins/2 a4 (,18,,)mm % vnější okraj na dvojstraně 2*a4 je 18mm + % \hsize, \vsize beze změny. +\endtt + +Uživatel může před použitím "\margins" definovat vlastní <formát> papíru pomocí +příkazu "\sdef{pgs:<formát>}{<šířka> <výška>}". +Opmac například implicitně definuje: + +\begtt +\sdef{pgs:a4}{(210,297)mm} \sdef{pgs:letter}{(8.5,11)in} +\sdef{pgs:b5}{(176,250)mm} +\endtt + +Celou sazbu na úkor okrajů je možno zvětšit/zmenšit příkazem +"\magscale[<factor>]". Například "\magscale[500]" zmenší sazbu na polovinu. +Při této změně zůstává na místě \uv{Knuthův bod}, tj. bod o souřadnicích +1\,in, 1\,in od horního a levého okraje. Sazba samotná je zalomena zcela +stejně. Jednotky +použité v dokumentu jsou od této chvíle relativní. Například po +"\magscale[2000]" je použitá jednotka v dokumentu "1mm" ve skutečnosti "2mm". +Makro "\magscale" ponechává nezměněny jen rozměry stránek dané formátem +stránek (a4, a3, atd.). Možnost použití +makra: "\magscale[1414] \margins/1 a4 (,,,)mm" umístí sazbu, která je určena +pro tisk na a5, doprostřed stránky a4 a odpovídajícím způsobem ji zvětší, +aby se to korektorům lépe četlo. + + +\sec Poslední strana +%%%%%%%%%%%%%%%%%%%% + +Číslo poslední strany dokumentu (to nemusí být počet stran) je uloženo při +opakovaném zpracování \TeX{}em v~registru "\lastpage". K tomu musí být +otevřen soubor REF s daty pro křížové odkazy, rejstřík a obsah. Pokud +pracujete s těmito daty, je soubor REF automaticky otevřen. Pokud ne, +můžete si vynutit jeho otevření příkazem "\openref". +Není-li soubor REF otevřen, je hodnota registru "\laspage" rovna nule. +Příklad využití: + +\begtt +\footline={\hss \rm \thefontsize[10]\the\pageno/\the\lastpage \hss} +\endtt + +\vfill\break + +\sec Shrnutí +%%%%%%%%%%%% + +Klíčová makra balíku OPmac jsou stručně shrnuta v následujícím výpisu. + +\def\tthook{\adef!{\string\endtt}\adef&{\kern.25em}} +\begtt +\tit <Název titulu (ukončený prázdným řádkem)> +\chap <Název kapitoly (ukončený prázdným řádkem)> +\sec <Název sekce (ukončený prázdným řádkem)> +\secc <Název podsekce (ukončený prázdným řádkem)> + +\maketoc % generování obsahu +\ii <heslo>,<heslo> % vložení hesel do rejstříku +\makeindex % generování rejstříku + +\label[<lejblík>] % deklarace před cílem odkazu +\ref[<lejblík>] % odkaz na kapitolu, sekci nebo podsekci +\cite[<lejblík>] % odkaz do seznamu literatury +\pgref[<lejblík>] % odkaz na stránku + +\caption/t % číslovaný popisek tabulky +\caption/f % číslovaný popisek obrázku +\eqmark % číslovaná rovnice + +\begitems % začátek výčtu položek +\enditems % konec výčtu položek +\begtt % začátek verbatim výpisu +! % konec verbatim výpisu +\activettchar <znak> % inicializace znaku pro in-text verbatim +\verbinput % verbatim výpis ze souboru +\begmulti % začátek vícesloupcové sazby +\endmulti % konec vícesloupcové sazby + +\bib[<lejblík>] % položka v seznamu literatury +\cite[<lejblík>] % místo, odkud se odkazuje do seznamu literatury +\usebibtex{<bib-báze>}{<bst-styl>} % použití bibTeXu pro seznam literatury +\genbbl{<bib-báze>}{<bst-styl>} % předgenerování seznamu literatury +\usebbl/? <bbl-báze> % použití předgenerované databáze, ? je z {a,b,c} + +\typosize[<font-velikost>/<řádkování>] % nastavení velikosti sazby +\typoscale[<faktor-font>/<faktor-řádkování>] % škálování velikosti sazby +\thefontsize[<velikost>] \thefontscale[<faktor>]& % velikost aktuálního fontu + +\inspic <soubor>.<přípona> % vložení obrázku, přípony: jpg, png, pdf +\table{<pravidlo>}{<data>} &% makro pro tabulku +\frame{<text>} % orámovaný text + +\fnote{<text>} % poznámka pod čarou (lokální číslování na každé stránce) +\mnote{<text>} % poznámka na okraji (pravém nebo levém podle stránky) + +\hyperlinks{<barva-in>}{<barva-out>} % v PDF budou odkazy klikací +\outlines{<úroveň>} & % PDF bude mít záložku s obsahem + +\magscale[<faktor>] % zvětšení/zmenšení sazby beze změny zlomu +\margins/<pg> <formát> (<levý>,<pravý>,<horní>,<dolní>)<jednotka> % okraje +\endtt + + +\end + diff --git a/Master/texmf-dist/doc/cstex/prvni.pdf b/Master/texmf-dist/doc/cstex/prvni.pdf Binary files differnew file mode 100644 index 00000000000..70c8c469296 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/prvni.pdf diff --git a/Master/texmf-dist/doc/cstex/prvni.tex b/Master/texmf-dist/doc/cstex/prvni.tex new file mode 100644 index 00000000000..a4586a93708 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/prvni.tex @@ -0,0 +1,1562 @@ + +% První setkání s TeXem +%%%%%%%%%%%%%%%%%%%%%%%% +% (C) 1999 Petr Olšák + +% format: csplain, kódování ISO-8859-2 + +% Tento dokument můžete vytisknout pro vlastní potřeby nebo jej +% elektronicky dále šířit v nezměněné podobě jako soubory prvni.tex, +% prvni.ps a prvni.pdf + +\chyph +\magnification\magstep1 +\advance\vsize by\baselineskip + +%% Varianta pro pdftex +\ifx\pdfoutput\undefined + \def\zalozka#1{} +\else + \def\zalozka#1{% + \global\advance\secnum by1 + \pdfdest num\secnum fitbh + {\let~=\space \def\TeX{TeX}% + \pdfoutline goto num\secnum count 0 {#1}}} + \pdfinfo{ + /Author (Petr Olsak) + /CreationDate (D:20121212) + /ModDate (D:20121212) + /Creator (TeX) + /Producer (pdfTeX) + /Title (Prvni setkani s TeXem) + /Subject (manual) + /Keywords (TeX) } + \pdfcatalog{/PageMode /UseOutlines} + \pdfcompresslevel=9 +\fi + +%% Vzhled dokumentu +\parindent=11pt +\lineskiplimit=-4pt +\emergencystretch=2em +\raggedbottom + +%% Deklarace registrů +\newcount\bibnum +\newcount\footnum +\newcount\secnum + +% Fonty +\input cpalatin +\font\tentt=cstt10 \hyphenchar\tentt=-1 +\font\cmit=csti10 +\font\mflogo=logo10 +\font\showtt=cstt9 +\font\tencsr=csr10 +\font\titulfont=\fontname\tenbf\space scaled\magstep2 +\font\bigfont=\fontname\tenbf\space scaled\magstep5 +\font\scriptm=\fontname\tenrm\space at7pt +\scriptfont0=\scriptm + +%% Základní makra +\def\sekce #1\par{\removelastskip\penalty0\zalozka{#1}\nobreak\bigskip + \noindent{\titulfont #1}\par\nobreak\medskip} +\def\bod{\item{$\triangleright$}} +\def\bib{\parindent=22pt\global\advance\bibnum by1 + \par\hang\indent\llap{[\the\bibnum]\hskip11pt}\ignorespaces} + +%% Čárka místo tečky v matematice: +\mathcode`\.="013B +\def\doteq{\buildrel\hbox{.}\over=} + +%% Verbatim prostředí \begtt...\endtt, "...". +{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }} +\def\setverb{\def\do##1{\catcode`##1=12}\dospecials} +\def\begtt{\medskip\hbox\bgroup\vrule\vbox\bgroup\hrule + \smallskip\bgroup \setverb \catcode`\"=12 \activespace + \baselineskip=.9\baselineskip + \def\par{\leavevmode\strut\endgraf} + \obeylines \startverb} +{\obeylines \catcode`\|=0 \catcode`\\=12 + |gdef|startverb#1^^M#2\endtt{% + |showtt#2|egroup|smallskip|hrule|egroup|vrule|egroup|medskip}} +\def\"{"} \catcode`\"=13 +\def"{\leavevmode\hbox\bgroup\let"=\egroup\setverb\obeyspaces\tt} + +%% Prostředí ukázek +\def\beguk{\medskip\hbox\bgroup\vrule\vbox\bgroup\hrule\medskip + \leftskip=\parindent \rightskip=\parindent \relax} +\def\enduk{\medskip\hrule\egroup\vrule\egroup\medskip} + +%% Tabulky +\def\begtable{$$\vbox\bgroup + \let\par=\cr \obeylines \halign\bgroup &##\hfil\qquad\cr} +\def\endtable{\egroup\egroup$$} +\abovedisplayskip=\abovedisplayshortskip +\def\tabline{\noalign{\smallskip\hrule}} +\def\.{\hphantom{0}} + +%% Výčtová prostředí +\def\begitems{\medskip\bgroup} +\def\enditems{\par\egroup\medskip} + +%% 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}} +\def\AMS{$\cal A\kern-.166em\lower.5ex\hbox{$\cal M$}\kern-.075em S$} +\def\twoe{$2_{\textstyle\varepsilon}$} + +%% Poznámky pod čarou +\let\orifootnote=\footnote +\def\footnote{\global\advance\footnum by1\orifootnote{$^{\the\footnum}$}} + +%% Pomocné +\def\url#1{{\tt #1}} +\let\pp=\noindent +\let\,=\thinspace + +%% Titulní strana +\bgroup \nopagenumbers \pageno=0 +\null\vfill +{\baselineskip=40pt +\centerline{\bigfont První setkání s~\TeX{}em} +\centerline{\bigfont Petr Olšák} +} +\vskip 0pt plus2fill\break +\parindent=0pt \parskip=\bigskipamount +\null\vfil +Autor programu \TeX{} je profesor Donald Knuth. +\par +\TeX{} je ochranná známka American Mathematical Society. +\par +Ostatní v manuálu použité názvy programových produktů, firem +apod. mohou být ochrannými známkami nebo registrovanými ochrannými +známkami příslušných vlastníků. +\vfill +Copyright $\copyright$ RNDr. Petr Olšák, 1999, 2012 +\par +Tento text si můžete vytisknout pro vlastní potřeby. Je k~dispozici +společně s~balíkem \CS\TeX{} na +\url{ftp://math.feld.cvut.cz/pub/cstex/doc} +ve zdrojovém textu ({\tt prvni.tex}), PostScriptu ({\tt prvni.ps}) a ve +formátu PDF ({\tt prvni.pdf}). Můžete jej také distribuovat, ale pouze +v~nezměněné elektronické podobě. +\bigskip\break +\egroup +\pageno=1 + + + +\sekce Úvod +%%%%%%%%%%% + +Tento manuál je koncipován jako \uv{první seznámení s~programem \TeX{}% + \footnote{Název \TeX{} se čte \uv{tech}, nikoli \uv{teks}.} +na jeden večer}. Měl by umožnit začátečníkovi porozumět +základním principům \TeX{}u. Manuál obsahuje ukázku jednoduchého dokumentu, +který by si měl čtenář sám přepsat do svého počítače a na něm \TeX{} +vyzkoušet. Je to dobrý první krok do pestrého světa tohoto programu plného +zajímavých možností. Ukázka by měla též naznačit užitečnost dobrého návrhu +značkování vstupního textu tak, aby byl oddělen obsah dokumentu od jeho +formy. Předvedená ukázka také ilustruje základní principy rozšíření \TeX{}u +(plain nebo \LaTeX). Tím může uživatel hned na prvním dokumentu rozhodnout, +které \TeX{}ové rozšíření je bližší jeho srdci a podle toho vybrat další +literaturu pro doplňující studium. + +Předpokládáme, že čtenář má určité důvody proč použít \TeX{}, takže se zde +nebudeme zdržovat výčtem jeho výhod, rozepisovat obšírně jeho historii a +nebudeme polemizovat o~užitečnosti či neužitečnosti dávkového či +interaktivního systému na přípravu sazby. + + +\sekce \TeX\ a jeho okolí +%%%%%%%%%%%%%%%%%%%%%%%%% + +\TeX{} je formátor. Je to program, kterému předložíme vstupní text +dokumentu v~\uv{holé} textové podobě doplněný textovými +značkami, které vymezují strukturu dokumentu nebo dávají \TeX{}u pokyny +o~způsobu formátování dokumentu. Bývá obvyklé (ale není to nutné) +pojmenovat tento soubor s~použitím přípony {\tt.tex}, například +\hbox{\tt dokument.tex}. Na výstupu pak po zpracování \TeX{}em dostaneme +tzv.~{\tt dvi} soubor%, + \footnote{Odvozeno z~anglického \uv{device independent}~-- na + zařízení nezávislý}, +který obsahuje definitivní informace o~použitých fontech a o~umístění +jednotlivých znaků na stránce. Tento soubor má název odvozený od názvu +vstupního souboru, ale má příponu {\tt.dvi}% + \footnote{Často se používá modifikace \TeX{}u, která vytváří přímo PDF + soubor.}. +Lze jej prostřednictvím +vhodného programu prohlédnout na obrazovce (vidíme, jak bude dokument +skutečně vypadat), nebo jej vytisknout na tiskárně. + +\TeX{} tedy čte na svém vstupu soubor s~dobře definovanou syntaxí jazyka +značek a na výstupu je rovněž soubor s~úplným popisem sazby. \TeX{} +jako takový je nezávislý na operačním systému. Vývoj samotného \TeX{}u +je zastaven, takže pro uživatele nehrozí nebezpečí vzniku dalších +nekompatibilních verzí. Další programy \uv{okolo \TeX{}u} tvoří +dohromady tzv.~implementaci \TeX{}u a umožní s~\TeX{}em rozumným +způsobem pracovat. + +Začínající uživatel se samozřejmě hlavně ptá po způsobu, jak může +v~konkrétním operačním systému s~konkrétní \TeX{}ovou implementací +s~tímto programem pracovat, jak jej spustit, jakými tlačítky se ovládá +textový editor, jaké nabídky jsou k~dispozici, co nad kterým obrázkem udělá +myš. Ptá se tedy po uživatelském rozhraní. Jednotlivé manuály o~\TeX{}u +tradičně odkazují na tzv.~\uv{místní příručku} (Local Guide), která by +měla toto rozhraní popisovat. Tato příručka je závislá na použitém +operačním systému, na použité implementaci \TeX{}u, na vybraném textovém +editoru a někdy též na administrátorovi systému, který konfiguruje některé +věci specificky pro větší pohodlí uživatelů. Ani v~tomto manuálu nejsou +uvedeny podrobnosti o~uživatelském rozhraní. + +V~graficky orientovaných operačních systémech je většinou možné otevřít +současně v~jednom okénku textový editor, ve kterém uživatel píše nebo +modifikuje vstupní text a ve vedlejším okénku prohlížeč výstupního +{\tt dvi} souboru. Po modifikaci vstupního textu a spuštění \TeX{}u +(nejlépe klávesovou zkratkou přímo z~editoru) se během pár sekund +projeví změna v~prohlížeči výsledného dokumentu. + +Textový editor, ve kterém připravujeme nebo modifikujeme vstupní texty +dokumentů, nesmí ukládat na disk žádné skryté formátovací informace +implementované jen pro tento editor (jako například změna fontu, měkké +konce řádku apod.). To dělají tzv.~textové procesory, které v~případě +práce s~\TeX{}em většinou nepoužíváme. + +Zvyklosti ve značkování dokumentu jsou vesměs závislé na použitém {\it +formátu} \TeX{}u, který modifikuje jeho chování. Říkáme, že je +dokument napsán ve formátu {\it \LaTeX}, pokud je někde na začátku +vstupního textu dokumentu uvedena značka "\documentclass" nebo +"\documentstyle". Pokud tam tuto značku nenajdeme, můžeme +předpokládat, že je dokument napsán ve formátu {\it plain}, v~případě +česky psaného dokumentu pak ve formátu {\it csplain}. Tento manuál je +například napsán ve formátu csplain a je uložen v~souboru +{\tt prvni.tex}. Může se stát, že nějaký dokument je napsán ve formátu +\AMS\TeX{} nebo v~jiném méně používaném formátu. Tím se ale zde nebudeme +zabývat. Rozdíl mezi plainem a \LaTeX{}em a smysl použití formátů vyplyne +až z~dalšího textu. + +Následující tabulka ukazuje způsoby spuštění \TeX{}u. Předpokládáme, +že je k~dispozici operační systém, který umožňuje uživateli zadávat +pokyny z~příkazového řádku. Tím nevylučujeme, že nelze některé +popisované činnosti implementovat do nějaké uživatelské nabídky +konkrétního uživatelského rozhraní. Uvažujme, že je +vstupní text dokumentu připraven v~souboru {\tt dokument.tex}. + +\begtable + příkazový řádek & komentář + \tabline + "tex dokument" & anglický dokument, formát plain + "csplain dokument" & český nebo slovenský dokument, formát csplain + "pdfcsplain dokument" & český, slovenský dokument s výstupem do PDF + "latex dokument" & formát \LaTeX, jazyk je deklarován v~dokumentu +\endtable + +Všimneme si, že v~příkazovém řádku píšeme za jméno formátu název vstupního +souboru a že příponu {\tt.tex} nemusíme psát. Dobře instalovaná +implementace \TeX{}u by měla podle jména formátu spustit \TeX{} modifikovaný +právě tímto formátem. + +Pokud nemáme ve své implementaci \TeX{}u formát csplain, je to špatné +znamení. Nebudeme totiž schopni zpracovat ani tento manuál ani +ukázku, která je v~něm obsažena. V~takovém případě lze doporučit +poohlédnout se po \CS\TeX{}u, který najdeme například na +\url{http://petr.olsak.net/cstex.html}. + +K~prohlédnutí dokumentu se používají různé programy (tzv.~dvi~prohlížeče)% + \footnote{Nebo PDF prohlížeče při výstupu sazby do PDF}. +Volba prohlížeče závisí na použitém operačním systému a na implementaci +\TeX{}u. V~UNIXu je nejčastější program {\tt xdvi} (stačí napsat +"xdvi dokument"). V~MS Windows se používá {\tt windvi}, {\tt dviwin} +nebo {\tt yapp}. V~DOSu se setkáme nejčastěji s~programem {\tt dviscr} +z~implementace em\TeX{}. Pro OS/2 má em\TeX{} \uv{okenní} variantu +prohlížeče {\tt dvipm}. + +Na PostScriptovou tiskárnu vytiskneme {\tt dvi} dokument programem {\tt dvips}, +příkazový řádek: "dvips -Ptiskarna dokument". +Při výstupu do PDF souboru stačí vytisknout dokument z PDF prohlížeče. + + +\sekce Jdeme na to +%%%%%%%%%%%%%%%%%% + +Nejprve zkusíme v~nějakém textovém editoru vytvořit soubor {\tt pokus.tex}, +který obsahuje zkušební větu: + +\begtt %-------------------------------------------------------------- +Ahoj světe! +\bye +\endtt %-------------------------------------------------------------- + +Pokud zpracujeme tento soubor \TeX{}em s~formátem csplain +(připomínáme, že je možné použít povel {\tt csplain pokus}), +dostaneme výstupní soubor {\tt pokus.dvi}. Navíc +\TeX{} uloží informaci o~zpracování do souboru {\tt pokus.log}. Výsledný +{\tt dvi} soubor si můžeme prohlédnout prohlížečem. Dostaneme +očekávaný výsledek: + +\beguk %------------------------------------------------------------- +\tencsr Ahoj světe! +\enduk %------------------------------------------------------------- + +\pp Přitom dole na stránce je ještě vytištěno číslo strany:~1. +Povelem {\tt pdfcsplain pokus} dostaneme tentýž výsledek, ale +výstupem je PDF soubor. + +Pokud zkusíme tentýž soubor zpracovat \TeX{}em s~formátem plain +(příkazový řádek {\tt tex pokus}), výstup bude zmršený: \uv{Ahoj svte!}. +Vidíme, že textový soubor s~akcenty nelze jednoduše vnutit originálnímu +americkému \TeX{}u, ale místo formátu plain je potřeba použít modifikovaný +csplain. + +Kdybychom chtěli tentýž soubor zpracovat \TeX{}em s~formátem \LaTeX{} +(krátce říkáme, že soubor zpracováváme \LaTeX{}em), obdržíme chybové +hlášení: + +\begtt %-------------------------------------------------------------- +! LaTeX Error: Missing \begin{document}. + +See the LaTeX manual or LaTeX Companion for explanation. +Type H <return> for immediate help. + ... + +l.1 A + hoj světe! +? +\endtt %-------------------------------------------------------------- + +Vidíme tedy, že soubor není vhodně připraven ke zpracování \LaTeX{}em. +Chybí mu "\begin{document}". Později ukážeme, že mu chybí více věcí, ale +v~tuto chvíli raději zůstaneme u~csplainu. Komunikaci s~\TeX{}em při +chybovém hlášení ukončíme odesláním znaku {\tt x}. Chceme-li, aby +\TeX{} chybu ignoroval a pokračoval ve zpracování dokumentu, stačí na +otazník odpovědět \uv{Enter} (v~tomto příkladě, kdy dokument vhodný +pro csplain chceme zpracovat \LaTeX{}em, se pouze dočkáme další +zavlečené chyby). + +Zkusíme si nyní přepsat do počítače následující poněkud rozsáhlejší +dokument. Soubor nazveme třeba {\tt mujprvni.tex} a vytvoříme jej +libovolným textovým editorem. Pokud je čtenář od přírody \uv{lenivý}, může +se místo zdlouhavého přepisování pokusit najít text ukázky ve vstupním +souboru {\tt prvni.tex} tohoto manuálu a přenést jej do svého souboru +{\tt mujprvni.tex} jako blok v~textovém editoru. + +Možná nám může připadat část označená jako \uv{oblast definic} hodně +nepochopitelná, skoro jako porucha na lince. Přesto se zatím pokusíme +překonat odpor k~této poruše a důsledně všechny znaky přepíšeme. +\TeX{} se nám za to odvděčí silnými možnostmi, které budeme postupně +odhalovat. + +Nemusíme se obtěžovat přepisováním textů, schovaných za znakem "%", protože +tímto znakem je zahájen komentář, který končí koncem řádku a který je při +zpracování \TeX{}em ignorován. V~každém případě ale nevynechávejme prázdné +řádky v~ukázce a věnujme pozornost obsahu části označené jako \uv{vlastní +text}, kde jsou vyjmenovány základní jevy, se kterými se při pořizování +textů pro \TeX{} budeme neustále setkávat. + +\begtt %============================================================= +%%%%%%%% Zde začíná "oblast definic" pro tento dokument %%%%%%%%%%% + +\chyph % inicializace českého dělení slov v csplainu +\font\titulfont=\fontname\tenbf\space scaled \magstep2 % větší font +\def\bod{\item{$\bullet$}} % definice zkratky \bod pro výčet +\def\nadpis#1\par{ % definice nadpisu: + \removelastskip\bigskip % odmaže poslední vert. mezeru a přidá vlastní + \indent{\titulfont #1} % odsazený text nadpisu větším fontem + \par\nobreak\medskip} % konec řádku, zakázaný zlom, menší mezera +\let\itemskip=\medskip % kolem výčtu prvků bude menší mezera \medskip + +%%%%%%%% Zde začíná "vlastní text" dokumentu %%%%%%%%%%%%%%%%%%%%%%%% + +\nadpis Můj první dokument + +Zkouším napsat první text v~\TeX u. Tento odstavec musí být +tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. + +Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky +vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. +Vyzkoušíme si nyní několik věcí. + +\itemskip +\bod Budeme používat české \uv{uvozovky}, které se liší od ``anglických''. + Uvědomíme si, že použití "těchto znaků" je úplně špatně! +\bod Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě~-- + a dlouhou pomlčkou---ta se používá v~anglických dokumentech. +\bod Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l + (písmene el) a 0 (nulu) od O~(písmene~O). +\bod Zkusíme přepnout do {\bf polotučného písma}, nebo do + {\it kurzívy}. Také vyzkoušíme {\tt strojopis}. +\bod Všimneme si, že ve slovech grafika, firma, apod. se písmena + f a i automaticky proměnila v~jediný znak fi (srovnáme to + s~nesprávným f\/i). +\bod Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. + Ve slově \uv{Tento} je například písmeno~e těsněji přisazeno + k~písmenu~T, aby se mezery mezi písmeny opticky jevily stejnoměrné. +\bod Vypravíme se na malou exkurzi do matematiky: $a^2 + b^2 = c^2$. + Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), + zatímco správně má být $-1$. +\bod Protože \% uvozuje komentář a \$ přepíná do matematické sazby, + musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu. +\itemskip + +\nadpis Závěr + +To by pro začátek stačilo. Příkazem {\tt\char`\\bye} ukončíme své pokusy. +\bye +\endtt %============================================================= + +Po zpracování tohoto dokumentu formátem csplain si můžeme prohlédnout +prohlížečem {\tt dvi} souboru následující výsledek: + +\beguk %============================================================= +\parindent=20truept +\baselineskip=12truept +\font\tenbf=csbx10 at10truept \font\tenit=csti10 at10truept +\font\tentt=cstt10 at10truept +\font\tenrm=csr10 at10truept \tenrm +\font\symbol=cmsy10 at10truept +\font\mmi=cmmi10 at10truept \font\sevenrm=csr7 at7truept +\textfont0=\tenrm \scriptfont0=\sevenrm +\textfont1=\mmi \textfont2=\symbol +\font\titulfont=csbx10 scaled\magstep1 % větší font +\def\bod{\item{$\bullet$}} % definice zkratky \bod pro výčet +\def\nadpis#1\par{ % definice nadpisu: + \removelastskip\bigskip % odmaže poslední vert. mezeru a přidá vlastní + \indent{\titulfont #1} % odsazený text nadpisu větším fontem + \par\nobreak\medskip} % konec řádku, zakázaný zlom, menší mezera +\bigskipamount=12truept \medskipamount=6truept +\let\itemskip=\medskip % kolem výčtu prvků bude menší mezera \medskip + +\nadpis Můj první dokument + +Zkouším napsat první text v~\TeX u. Tento odstavec musí být +tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. + +Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky +vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. +Vyzkoušíme si nyní několik věcí. + +\itemskip +\bod Budeme používat české \uv{uvozovky}, které se liší od ``anglických''. + Uvědomíme si, že použití \"těchto znaků\" je úplně špatně! +\bod Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě~-- + a dlouhou pomlčkou---ta se používá v~anglických dokumentech. +\bod Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l + (písmene el) a 0 (nulu) od O~(písmene~O). +\bod Zkusíme přepnout do {\bf polotučného písma}, nebo do + {\it kurzívy}. Také vyzkoušíme {\tt strojopis}. +\bod Všimneme si, že ve slovech grafika, firma, apod. se písmena + f a i automaticky proměnila v~jediný znak fi (srovnáme to + s~nesprávným f\/i). +\bod Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. + Ve slově \uv{Tento} je například písmeno~e těsněji přisazeno + k~písmenu~T, aby se mezery mezi písmeny opticky jevily stejnoměrné. +\bod Vypravíme se na malou exkurzi do matematiky: $a^2 + b^2 = c^2$. + Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), + zatímco správně má být $-1$. +\bod Protože \% uvozuje komentář a \$ přepíná do matematické sazby, + musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu. +\itemskip + +\nadpis Závěr + +To by pro začátek stačilo. Příkazem {\tt\char`\\bye} ukončíme své pokusy. +\enduk %============================================================= + +Všimněme si, že v~příkladu je důsledně oddělena forma od obsahu dokumentu. +V~části označené \uv{vlastní text} jsou použity značky "\nadpis", +"\bod" a "\itemskip", které ohraničují logické části dokumentu (vymezení +nadpisu, uvedení další položky ve výčtu prvků, obklopení skupiny výčtu prvků) +a nepopisují žádné konkrétní formátovací informace (volba fontu, velikost +fontu, velikost mezer nad a pod nadpisem, tvar puntíku ve výčtu prvků +apod.). + +Značky vymezující strukturu dokumentu jsou definovány v~části \uv{oblast +definic}. Zde je řečeno, jaký bude mít nadpis font, jak bude +v~textu umístěn a jak bude vypadat formátování výčtu prvků. Podrobnější +rozbor těchto definic uvedeme za chvíli. + +Toto oddělení formy od obsahu se v~mnoha případech začátečníkům nedaří. +Přímo v~textu jejich dokumentů se vyskytují značky jako "\vskip12mm" +(vertikální mezera 12\,mm), "\vfill\break" (vynucené ukončení strany) a mnoho +dalších nešvarů. My se pokusíme hned z~počátku se takovým věcem pokud možno +vyhnout. V~sekci \uv{změna vzhledu dokumentu} uvidíme, že se nám to bohatě +vyplatí. + + +\sekce Vysvětlení použitých značek v~příkladu +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Jednotlivé značky, které řídí formátování a vymezují strukturu dokumentu +jsou vesměs ve tvaru "\slovo". Tyto značky se nazývají +{\it řídicí sekvence\/} a někdy též budeme hovořit o~{\it příkazech}, +protože jimi přikazujeme, aby \TeX{} něco vykonal. + +Řídicí sekvence v~příkladu rozdělíme na dvě skupiny. 1.~ty, co jsou +definovány v~samotném \TeX{}u nebo v~použitém formátu (v~našem případě +ve formátu {\tt csplain}). 2.~řídicí sekvence, které jsme definovali sami. + +Začneme rozborem druhé skupiny řídicích sekvencí: + +\begitems +\bod "\nadpis" je sekvence, která za sebou očekává text nadpisu a pak + prázdný řádek. +\bod "\titulfont" je přepínač pro větší velikost fontu pro nadpis. + Je definován na řádku začínajícím příkazem "\font" a použit v~definici + řídicí sekvence "\nadpis". +\bod "\bod" je sekvence, která uvozuje položku ve výčtu prvků. Promění se + v~nějakou grafickou realizaci zarážky (zde puntík) a způsobí odsazení + textu položky. +\bod "\itemskip" vytvoří vertikální mezeru, která oddělí výčet prvků + od ostatního textu. Použije se na začátku i na konci výčtu. +\enditems + +Ostatní řídicí sekvence jsou definovány v~použitém formátu nebo přímo +zabudovány v~\TeX{}u. Uživatel se s~nimi bude postupně seznamovat +studiem vhodné literatury. Zde uvedeme velmi stručně jen ty nejdůležitější +řídicí sekvence, abychom usnadnili pochopení příkladu. + +\begitems +\bod "\chyph". Tato řídicí sekvence inicializuje české vzory dělení slov a + je definována pouze ve formátu csplain. V~případě českých textů + bychom ji nikdy neměli vynechat! Analogicky "\shyph" inicializuje + slovenské vzory dělení slov. Bez těchto příkazů \TeX{} pracuje + implicitně s~anglickými vzory dělení. +\bod "\font" zavede z~instalace \TeX{}u do dokumentu další font. + Struktura parametrů příkazu bude vysvětlena v~sekci o~fontech. +\bod "\def" definuje novou řídicí sekvenci (zde "\bod" a "\nadpis"). + Za řídicí sekvencí může následovat formální popis parametrů nové + sekvence a pak následuje ve složených závorkách tělo definice. + V~ní je popsáno, co se při použití nové řídicí sekvence má vykonat. +\bod "\item" zahájí výčtovou položku (odsazením textu) a převezme + za sebou ve složených závorkách parametr, který popisuje vzhled puntíku. +\bod "\bullet" vytvoří v~matematickém módu černý puntík: $\bullet$. +\bod "\bigskip" vytvoří vertikální mezeru velikosti jednoho řádku a + "\medskip" velikosti poloviny řádku. "\indent" odsadí další text + o~velikost odstavcové zarážky. +\bod Řídicí sekvence "\par" je explicitní ukončení odstavce. \TeX{} ji + interně vytváří v~místě každého prázdného řádku. Ve formálním popisu + parametru za "\def\nadpis" má ale "\par" pouze vymezovací + účinek. Formální popis parametru v~našem příkladě čteme takto: + nově definovaná řídicí sekvence "\nadpis" převezme za sebou text + až po první výskyt "\par" (tedy až po první výskyt prázdného řádku) + a uloží jej do \uv{proměnné} s~označením "#1". +\bod "\let" čteme česky nechť. Tento příkaz ztotožní význam nové + řídicí sekvence (v~našem příkladě "\itemskip") s~předlohou (v~tomto + příkladě "\medskip"). +\enditems + +V~naší ukázce jsme použili též některé speciální \TeX{}ovské znaky. +Vysvětlíme si nyní stručně jejich význam. + +\begitems +\bod Znak "~" znamená nedělitelnou mezeru. Je zde použita za neslabičnými + předložkami a před jednopísmennými ukázkami, aby se v~těchto místech + nerozdělil řádek. Při pořizování textu nemusíme psát za neslabičnými + předložkami vlnku \uv{ručně}. Vlnky tam lze doplnit později jednoduchými + programy, které bývají součástí \TeX{}ovských instalací. +\bod Znaky "{ }" mají v~\TeX{}u tři mírně odlišné významy. +\itemitem{1.} Obklopují těla definic za příkazem "\def", jak již bylo řečeno. +\itemitem{2.} Obklopují parametry některých řídicích sekvencí (viz + například text {\tt uvozovky}, který je parametrem řídicí sekvence + "\uv", nebo text "$\bullet$", který je parametrem řídicí sekvence + "\item". +\itemitem{3.} Samotné znaky "{ }" vymezují jisté skupiny, ve kterých je + veškeré přiřazení a nastavení lokální. Skupiny se často používají pro + vymezení platnosti přepínačů písma (viz "\bf", "\it", "\tt" a + "\titulfont"). +\item{} Závorky "{ }" musí vzájemně párovat, což je důležité zejména ve + vymezovacích významech~(ad~1 a~2). Proto třeba tělo definice + "\bod" obsahuje text "\item{$\bullet$}" a je ukončeno až druhou + závorkou~"}". +\bod Znak "%" uvozuje komentář až do konce řádku. +\bod Znak "$" přepíná do {\it matematického módu} a zpět. V matematickém + módu \TeX{} sestavuje sazbu poněkud odlišným způsobem (všimneme + si, že například proměnné $a$, $b$ jsou v matematickém módu + automaticky sázeny kurzívou). +\bod Znak "^" v~matematickém módu uvozuje horní index (exponent). +\enditems + +\sekce Změna vzhledu dokumentu +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Předvedeme, v~čem spočívá výhoda oddělení obsahu +dokumentu od formy. Předpokládejme, že nám nějaký zkušenější kolega +pomůže s~přípravou definic pro náš dokument. Předpokládejme dále, že onen +kolega má na věc poněkud jiný typografický názor a začne věci předělávat. +V~editoru modifikuje definice a ve vedlejším okénku v~prohlížeči se průběžně +mění náš první dokument skoro k~nepoznání. Přitom kolega +{\it vůbec nemusí\/} zasáhnout do vlastního textu dokumentu. + +Především se mu nelíbí rodina fontů Computer Modern, která je +v~\TeX{}u implicitně nastavena. Mnoho instalací \TeX{}u obsahuje +nástroje pro práci s~dalšími, zejména PostScriptovými, fonty. Máme-li +takovou instalaci, můžeme napsat na začátek dokumentu třeba +"\input cbookman" a máme celý dokument v~rodině Bookman. Příkaz "\input" +zavádí do dokumentu externí soubor definic, zde soubor s~názvem {\tt +cbookman.tex}. Tento soubor obsahuje příkazy "\font" na zavedení +skupiny fontů Bookman a nastaví je jako implicitní. + +Kolega se dále rozhodl vkládat mezi každý odstavec drobnou vertikální mezeru +a místo puntíků pro výčty chce použít čtverečky, které ve větší velikosti +zařadí i do nadpisů. Konečně velikost fontu pro nadpis se mu zdá příliš +velká (místo "\magstep2" v~řádku "\font" použije \uv{menší} "\magstep1"). +Výsledek jeho snažení v~\uv{oblasti definic} dopadne třeba takto: + +\begtt %============================================================= +\chyph % inicializace českého dělení slov v csplainu +\magnification\magstep1 % celý dokument bude 1,2 krát větší +\input cbookman \setsimplemath % použité písmo: Bookman i v matematice +\font\titulfont=\fontname\tenbf\space scaled \magstep1 % větší font +\newdimen\indskip \indskip=15pt % výčty budou odsazeny 15pt +\def\ctverecek#1{\noindent % čtvereček proměnné velikosti v místě \indskip + \hbox to\indskip{\vrule height#1pt depth0pt width#1pt\hss}} +\def\bod{\par\hangindent=\indskip \ctverecek{4}} % definice zkratky \bod +\def\nadpis#1\par{ % definice nadpisu: + \removelastskip\bigskip % odmaže poslední vert.mezeru a přidá vlastní + \ctverecek{7}{\titulfont #1} % nadpis odsazený čtverečkem + \par\nobreak} % konec řádku, zakázaný zlom, žádná mezera +\parskip=\medskipamount % mezi odstavci bude mezera jako \medskip +\parindent=0pt % odstavce nebudou odsazeny zarážkou +\let\itemskip=\relax % žádné další mezery mezi výčty +\endtt %============================================================= + +Náš dokument vypadá pak následovně: + +\beguk %============================================================= +\input cbookman % použité písmo: Bookman +\font\mmi=\fontname\tenit +\font\sevenrm=\fontname\tenrm\space at 7pt +\textfont0=\tenrm \scriptfont0=\sevenrm +\textfont1=\mmi + +\font\titulfont=\fontname\tenbf\space scaled \magstep1 % větší font +\newdimen\indskip \indskip=15pt % výčty budou odsazeny 15pt +\def\ctverecek#1{\noindent % čtvereček o proměnné velikosti v místě \indskip + \hbox to\indskip{\vrule height#1pt depth0pt width#1pt\hss}} +\def\bod{\par\hangindent=\indskip \ctverecek{4}} % definice zkratky \bod +\def\nadpis#1\par{ % definice nadpisu: + \removelastskip\bigskip % odmaže poslední vert. mezeru a přidá vlastní + \ctverecek{7}{\titulfont #1} % nadpis odsazený čtverečkem + \par\nobreak} % konec řádku, zakázaný zlom, žádná mezera +\parskip=\medskipamount % mezi odstavci bude mezera jako \medskip +\parindent=0pt % odstavce nebudou odsazeny zarážkou +\let\itemskip=\relax % žádné další mezery mezi výčty + +\nadpis Můj první dokument + +Zkouším napsat první text v~\TeX u. Tento odstavec musí být +tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. + +Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky +vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. +Vyzkoušíme si nyní několik věcí. + +\itemskip +\bod Budeme používat české \uv{uvozovky}, které se liší od ``anglických''. + Uvědomíme si, že použití \"těchto znaků\" je úplně špatně! +\bod Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě~-- + a dlouhou pomlčkou---ta se používá v~anglických dokumentech. +\bod Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l + (písmene el) a 0 (nulu) od O~(písmene~O). +\bod Zkusíme přepnout do {\bf polotučného písma}, nebo do + {\it kurzívy}. Také vyzkoušíme {\tt strojopis}. +\bod Všimneme si, že ve slovech grafika, firma, apod. se písmena + f a i automaticky proměnila v~jediný znak fi (srovnáme to + s~nesprávným f\/i). +\bod Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. + Ve slově \uv{Tento} je například písmeno~e těsněji přisazeno + k~písmenu~T, aby se mezery mezi písmeny opticky jevily stejnoměrné. +\bod Vypravíme se na malou exkurzi do matematiky: $a^2 + b^2 = c^2$. + Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), + zatímco správně má být $-1$. +\bod Protože \% uvozuje komentář a \$ přepíná do matematické sazby, + musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu. +\itemskip + +\nadpis Závěr + +To by pro začátek stačilo. Příkazem {\tt\char`\\bye} ukončíme své pokusy. +\enduk %============================================================== + +Kdyby náš kolega chtěl, implementoval by třeba automatické číslování +položek, automatické číslování nadpisů, generování obsahu a další věci. +Vysvětlení nových řídicích sekvencí, které kolega použil, bohužel +překračuje rámec tohoto úvodního dokumentu. + +Definice lze umístit do jiného souboru než vlastní text dokumentu. +Na začátku dokumentu pak soubor definic načteme příkazem "\input". +Nebo naopak, hlavní bude soubor definic, ze kterého se příkazem "\input" +postupně načítají jednotlivé kapitoly rozsáhlejšího díla. + + +\sekce Stojíme na křižovatce +%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +V~předchozím příkladě jsme ilustrovali důležitou vlastnost \TeX{}u~-- +schopnost měnit vzhled dokumentu jen výměnou některých definic. Kromě toho +ale tyto definice také musejí navazovat na úmluvu, jakými značkami bude +autor vymezovat strukturu svého dokumentu. Kdyby autor použil místo značky +"\nadpis" značku "\section", \TeX{} by nám při zpracování dokumentu vynadal: + +\begtt %-------------------------------------------------------------- +! Undefined control sequence. +l.14 \section + Můj první dokument +? +\endtt %-------------------------------------------------------------- + +\pp tedy: nedefinovaná řídicí sekvence. Odpovíme-li na otazník pouhým +stiskem klávesy Enter, \TeX{} tuto sekvenci zcela ignoruje a pracuje dál. +Žádného zvýraznění nadpisu bychom se nedočkali. Je tedy vidět, +že je hodně důležité ujasnit si, jaké značkování struktury dokumentu +použijeme. + +V~této souvislosti si musíme odpovědět jednu důležitou otázku. Chceme se +naučit jazyk definic \TeX{}u na takové úrovni, jako náš imaginární kolega +z~předchozího příkladu? Budeme raději sami kontrolovat každý detail vzhledu +dokumentu prostřednictvím vlastních definic, než abychom přebírali hotová +řešení odjinud? +Pokud na tyto otázky odpovíme \uv{ano}, pak je pro nás +výhodné použít formát plain (pro české a slovenské dokumenty jen mírně +modifikovaný formát csplain), který definuje jen minimum základních +řídicích sekvencí. O~další řídicí sekvence stejně jako o~modifikaci +vzhledu dokumentu podle našich představ se musíme postarat sami.% + \footnote{Po zveřejnění makra OPmac (\url{http://petr.olsak.net/opmac.html}) + uvedená věta o nutnosti plain\TeX{}isty vše si programovat vlastními silami + není zcela pravdivá. + I tito uživatelé mohou použít \uv{hotové řešení} OPmac, ale + mají možnost snadno do jeho maker nahlédnout a upravit si je k obrazu + svému.} +V~takovém případě si můžeme sami rozhodnout, jaké značky pro vymezení +struktury dokumentu použijeme, protože si pro ně nakonec uděláme vlastní +definice. + +Na druhé straně, pokud rádi přebíráme hotová řešení, pokud nechceme +zbytečně pronikat do problematiky jazyka definic \TeX{}u, pokud se +spokojíme s~už připravenými šablonami vzhledu dokumentu (tzv. styly), +pokud jsme ochotni se místo tří set základních příkazů \TeX{}u učit +zhruba tisíc uživatelských značek pro \LaTeX, bude pro nás +výhodné použít raději formát \LaTeX{}. + +\LaTeX{} doporučuje určité značkování struktury dokumentu. Například se +předpokládá členění na kapitoly (značka "\chapter") a na sekce (značka +"\section"). Každý dokument by měl začít záhlavím uvozeným sekvencí +"\documentclass" (u~staré verze \LaTeX{}u se můžeme setkat ještě se +sekvencí "\documentstyle"). Parametrem této sekvence by měl být název +základního stylového souboru (souboru definic upravujících vzhled +dokumentu). Nejčastěji bývá tímto parametrem "book" (formát knihy) +nebo "article" (formát článku). Doplňkové stylové soubory se načítají pomocí +sekvence "\usepackage". Vlastní text dokumentu musí být uzavřen mezi +značkami "\begin{document}" a "\end{document}". Často se vyskytují další +značky "\begin" a "\end" vymezující v~\LaTeX{}u jistá prostředí (například +prostředí pro výčtové položky). + +Vraťme se k~našemu příkladu a přepišme jej do značkování podle \LaTeX{}u. + +\begtt %============================================================= +\documentclass{article} % základní styl bude "odborný článek" +\usepackage[utf8]{inputenc} % je nutno specifikovat kódování dokumentu +\usepackage[T1]{fontenc} % požadujeme LaTeXovské fonty s akcenty +\usepackage[czech]{babel} % voláme styl czech z Babelu +\begin{document} + +\section{Můj první dokument} + +Zkouším napsat první text v~\TeX u. Tento odstavec musí být +tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. + +Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky +vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. +Vyzkoušíme si nyní několik věcí. + +\begin{itemize} +\item Budeme používat české \uv{uvozovky}, které se liší od ``anglických''. + Uvědomíme si, že použití "těchto znaků" je úplně špatně! +\item Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě~-- + a dlouhou pomlčkou---ta se používá v~anglických dokumentech. +\item Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l + (písmene el) a 0 (nulu) od O~(písmene~O). +\item Zkusíme přepnout do {\bf polotučného písma}, nebo do + {\it kurzívy}. Také vyzkoušíme {\tt strojopis}. +\item Všimneme si, že ve slovech grafika, firma, apod. se písmena + f a i automaticky proměnila v~jediný znak fi (srovnáme to + s~nesprávným f\/i). +\item Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. + Ve slově \uv{Tento} je například písmeno~e těsněji přisazeno + k~písmenu~T, aby se mezery mezi písmeny opticky jevily stejnoměrné. +\item Vypravíme se na malou exkurzi do matematiky: $a^2 + b^2 = c^2$. + Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), + zatímco správně má být $-1$. +\item Protože \% uvozuje komentář a \$ přepíná do matematické sazby, + musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu. +\end{itemize} + +\section{Závěr} + +To by pro začátek stačilo. Příkazem \verb|\bye| ukončíme své pokusy. +\end{document} +\endtt %-------------------------------------------------------------- + +Poznamenejme, že zavedení doplňkového stylu {\tt czech} způsobí aktivaci +českých vzorů dělení slov a písma s~českými znaky. Bez použití tohoto stylu +pracuje \LaTeX{} implicitně s~anglickými vzory dělení slov a s~písmy, která +neobsahují háčkovaná a čárkovaná písmena. + +Upozorňujeme, že v~současné době je \LaTeX{}ů několik druhů. Už +zmíněný \uv{starý \LaTeX} (tzv.~verze 2.09), ve kterém se +struktura záhlaví dokumentu mírně lišila. Dále je pro potřeby +českých dokumentů nutné rozlišovat mezi \LaTeX{}em a \CS\LaTeX{}em +(druhý jmenovaný je dnes považován zastaralý). +\LaTeX{} implementuje +český a slovenský jazyk pomocí balíku maker \uv{Babel} nebo +\uv{polyglossia}, zatímco \CS\LaTeX{} měl k tomu vlastní stylový soubor. +\CS\LaTeX{} byl u nás mnoho let používán jako jistá +modifikace \LaTeX{}u. Váče uvedená ukázka předpokládá \LaTeX{} s balíčkem +Babel. + +Výsledek po zpracování našeho dokumentu \LaTeX{}em v~tomto manuálu +pro stručnost neuvádíme. Kdo chce, může si sám \LaTeX{} +vyzkoušet. Nelíbí se nám, že za čísly v~nadpisech nejsou tečky? +Zavedeme do dokumentu prostřednictvím "\usepackage" další doplňkový +styl, který toto výchozí chování základního stylu {\tt article} +upraví. Nelíbí se nám, že jsou mezi jednotlivými položkami ve výčtu +velké mezery a položky jsou až příliš odsazeny? Použijeme v~dokumentu +další doplňkový styl. Nelíbí se nám, že je použito písmo Computer +Modern? Napišme třeba "\usepackage{times}". + +Otázka ale je, kdo pro nás tyto doplňkové styly (neboli doplňující sady +definic pro \TeX) bude připravovat. Velké množství stylů na všechno možné +lze nalézt ve veřejných archivech \TeX{}ovského softwaru. \LaTeX{} nám tedy +při jednoduchých šablonovitých požadavcích na vzhled dokumentu umožňuje +zůstat v~roli autora, který pořizuje text. Nemusíme umět poměrně složitý +jazyk definic \TeX{}u. + +Pokud nám žádná z~možností nabízených stylů nevyhovuje, musíme se pokusit +tyto styly modifikovat podle své potřeby. To ale může být už hodně +komplikované. Záleží znovu na nás, zda rádi modifikujeme zdrojové kódy +cizích programů nebo si raději napíšeme programy vlastní. Pokud píšeme +raději programy vlastní, asi nám bude spíše vyhovovat jednodušší výchozí +formát plain (csplain). + +Jestliže jsme se rozhodli pracovat raději v~plainu, pak lze k~dalšímu +studiu doporučit následující literaturu: + +\begitems +\bib Michael Doob. {\it Jemný úvod do \TeX{}u}. Třetí vydání českého + překladu, \CS{}TUG 1993. Knížka je rovněž volně k~dispozici ve + zdrojových textech jako {\tt jemny.tex} v~archivu + {\tt ftp://math.feld.cvut.cz/pub/cstex/doc/jemny.tar.gz}. + Anglický originál je volně šířen jako {\tt gentle.tex}.% + \footnote{Připravuji nový text \uv{\TeX, \CS plain, OPmac -- příručka + pro pragmatiky}, který by mohl původní Doobův text nahradit.} + +\bib Petr Olšák. {\it \TeX{}book naruby}. Konvoj 1997. Celý text knihy je + volně k~dispozici ve formátu {\tt pdf} + na \url{http://math.feld.cvut.cz/olsak/tbn.html}. +\enditems + +Vyhovuje-li nám více \LaTeX, pak je možné sáhnout po těchto manuálech: + +\begitems +\bib Jiří Rybička. {\it \LaTeX{} pro začátečníky}. Druhé, upravené vydání, + Konvoj 1999. +\bib Tobias Oetiker. {\it Ne příliš stručný úvod do systému + \LaTeX{} \twoe}. Text je šířen volně včetně zdrojových textů a je + přeložen do mnoha jazyků. Do češtiny přeložil Michal Kočer. + {\tt ftp://math.feld.cvut.cz/pub/cstex/doc/lshort2e.tar.gz} +\bib Leslie Lamport. {\it\LaTeX---A Document Preparation System---User's + Guide and Reference Manual}. Ad\-di\-son-Wes\-ley, Reading, MA, + USA, 2nd ed. 1994. +\bib Michel Goossens, Frank Mittelbach, Alexander Samarin. + {\it The \LaTeX{} Companion}. Druhé vydání, Addisson Wesley 1994. +\bib Michel Goossens, Sebastian Rahtz, Frank Mittelbach. + {\it The \LaTeX{} Graphics Companion: Illustrating Documents with + \TeX{} and PostScript}. Addisson Wesley 1997. +\enditems + +Pokud budeme používat \LaTeX{} a budeme chtít rozumět použitým stylovým +souborům, můžeme použít knihu [2]. Popisuje totiž vnitřní algoritmy +\TeX{}u, což jsou informace, které využijeme jak v~plainu tak v~\LaTeX{}u. + +Pro úplnost ještě citujme dva tituly. První z~nich je základní biblí +k~\TeX{}u od samotného autora \TeX{}u (česká alternativa [2] ji poměrně +dobře nahrazuje) a druhý titul obsahuje informace o~\TeX{}ových +souvislostech, tj. popis spolupracujících programů v~běžných distribucích, +implementace fontů, vkládání obrázků apod. + +\begitems +\bib Donald E. Knuth. {\it The \TeX{}book}. Mnohonásobné vydání. Addison + Wesley, 1986--{\tt*}. Díl~A~z~pětidílné monografie k~\TeX{}u a \mf{}u + \uv{Computers \& Typesetting}. +\bib Petr Olšák. {\it Typografický systém \TeX}. \CS{}TUG 1995. +\enditems + +Další text v~tomto manuálu se věnuje základům \TeX{}u, které bývají +shodné při použití většiny formátů. Ukázky budeme pro jednoduchost +nadále zkoušet ve formátu csplain, protože jinak bychom museli kolem +vlastního textu ukázky přidat zmíněné \uv{obkladové řádky} závislé na +použitém \uv{druhu} \LaTeX{}u. + + +\sekce Technické pozadí formátů +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +V~předchozím textu jsme na mnoha místech hovořili o~formátech \TeX{}u +(plain, \LaTeX{}, csplain), ale zatím jsme pořádně neřekli, co to je. + +Formát je binární soubor (v~\TeX{}ové implementaci má příponu {\tt.fmt}), +který zahrnuje: + +\begitems +\bod výchozí sadu definic, která rozšiřuje vestavěné řídicí sekvence + o~další, pro uživatele většinou snadněji použitelné, +\bod výchozí nastavení vnitřních parametrů \TeX{}u (například šířka + odstavce nebo velikost odstavcové zarážky), +\bod výchozí fonty, které budou v~dokumentu použity, pokud uživatel + nespecifikuje jiné, +\bod vzory dělení vybraných jazyků, podle kterých \TeX{} dělí slova při + zalamování odstavce. +\enditems + +Až na vzory dělení lze vše ostatní ve vlastním dokumentu pomocí +\TeX{}ových definic dodatečně měnit. Pro načtení vzorů dělení +jednotlivých jazyků má \TeX{} speciální řídicí sekvenci "\patterns", +která funguje jen při vytváření formátu. Existuje ještě jedna řídicí +sekvence, která má smysl pouze při generování formátu: "\dump". Tento +příkaz způsobí uložení \uv{nabytých vědomostí} +\TeX{}u z~jeho vnitřní paměti do binárního formátového souboru {\tt *.fmt} +a ukončí činnost \TeX{}u. Tento soubor se může později při startu +\TeX{}u načíst, a \TeX{} tím začíná se svými znalostmi z~místa, kde +naposledy načítání definic skončil v~době příkazu "\dump". + +Příkazy "\patterns" a "\dump" umí speciální varianta \TeX{}u zvaná +ini\TeX{}. V~nových implementacích \TeX{}u není tato varianta +reprezentována samostatným programem, ale vyvolá se prostřednictvím +přepínače {\tt -i} nebo {\tt -ini}. Například k~vygenerování formátu +plain lze postupovat takto: + +\begtt +> tex -ini plain +* \dump +\endtt + +\TeX{} zde ve variantě ini\TeX{} načetl soubor definic plain.tex a uložil +nabyté vědomosti do souboru {\tt plain.fmt}. Nyní lze formátový soubor +použít: + +\begtt +> tex &plain document +\endtt + +V~běžných \TeX{}ových distribucích je implementována nějakým způsobem +zkratka, která uživateli umožní místo {\tt tex \&plain} psát pouze +{\tt tex} a třeba místo {\tt tex \&latex} psát pouze {\tt latex}. + + +\sekce Speciální znaky +%%%%%%%%%%%%%%%%%%%%%% + +V~této sekci popíšeme chování speciálních vstupních znaků, které +nejsou \TeX{}em většinou slepě přepisovány do výstupu, ale \TeX{} na +ně určitým způsobem zareaguje. + +Jedním takovým speciálním znakem je "\" (zpětné lomítko). Pokud za ním +následuje písmeno, \TeX{} přečte řídicí sekvenci typu "\slovo" +ukončenou prvním znakem, který není písmeno (separátorem). Je-li +tímto separátorem mezera, pak se na výstupu neobjeví. Ostatní +separátory nejsou na rozdíl od mezery ignorovány. +Vyzkoušejte si: + +\begtt %---------------------------------------------------------- +Zkouším \TeX. % Tečka je separátor sekvence \TeX, který se vytiskne +Píšu v \TeX u % Separátorem je mezera před u, která se netiskne +\TeX je formátor. +\endtt %---------------------------------------------------------- + +Z~posledního řádku ukázky dostáváme nesprávný výsledek: \TeX je formátor. +Projevila se totiž další vlastnost \TeX{}u: jednu mezeru i více mezer +za sebou považuje za mezeru jedinou a ta v~našem příkladě funguje jako +separátor, který mizí. Proto se často používají \uv{zbytečné skupiny}, +jejichž závorky mají funkci separátoru řídicí sekvence: + +\begtt %----------------------------------------------------------- +Píšu v \TeX{}u. \TeX{} je formátor. +Nebo raději píšu v {\TeX}u a používám {\TeX} jako formátor. +\endtt %----------------------------------------------------------- + +Pokud za zpětným lomítkem následuje něco jiného, než písmeno +(například "\$"), je řídicí sekvence tvořena jen tímto znakem. +Mezery za takovými jednoznakovými sekvencemi zůstávají +zachovány: + +\begtt %----------------------------------------------------------- +Pracuji se 100\% nasazením. +\endtt %----------------------------------------------------------- + +Vidíme, že dalším speciálním znakem v~\TeX{}u je mezera. Jak jsme před +chvílí uvedli, více mezer za sebou se chová jako mezera jediná. + +Všechny mezery na začátku řádku jsou ignorovány až po první znak, který +není mezera. Toho můžeme využít pro zlepšení přehlednosti našich +vstupních textů (viz naše ukázka s~výčtem prvků). + +Konec řádku je v~\TeX{}u interpretován jako mezera, která se vytiskne, +pokud není separátorem řídicí sekvence. Pokud si mezeru z~konce +řádku nepřejeme, můžeme ji \uv{zamaskovat} komentářovým znakem: + +\begtt %----------------------------------------------------------- +Toto je + zvrácený +pří% +klad v~\TeX +u. +\endtt %----------------------------------------------------------- + +Prázdný řádek vytvoří interní příkaz "\par", který ukončuje +odstavec. Není-li co ukončovat, "\par" nedělá nic. Proto více +prázdných řádků pod sebou se chovají stejně jako jeden prázdný +řádek. I~toho lze využít pro zvýšení přehlednosti zdrojových textů. + +V~následující tabulce je přehled všech znaků, které bývají +nastaveny jako speciální: + +\begtable + "\" & uvozuje řídicí sekvenci + mezera & speciální vlastnosti popsány výše + konec řádku & speciální vlastnosti popsány výše + "{" & zahájení skupiny, parametru nebo definice + "}" & konec skupiny, parametru nebo definice + "$" & přepínač matematického módu + "&" & separátor používaný v tabulkách + "#" & označení parametru v definicích + "^" & konstruktor mocniny v matematickém módu + "_" & konstruktor indexu v matematickém módu + "~" & nedělitelná mezera + "%" & zahajuje na řádku komentář +\endtable + +Speciální význam každého znaku lze v~\TeX{}u nastavit pomocí určitých +definic. Výše uvedená tabulka tedy není v~ničem definitivní. +Uvedený seznam speciálních znaků bývá takto nastaven ve +formátech plain, csplain i \LaTeX. + +Pokud chceme vytisknout souvislejší část textu bez speciální +interpretace, musíme těmto znakům jejich speciální funkce odebrat. +V~\LaTeX{}u se pro tyto účely používá \LaTeX{}ové prostředí vymezené +příkazy "\begin{verbatim}" a "\end{verbatim}". Vše mezi těmito příkazy% + \footnote{s výjimkou sekvence čtrnácti znaků + \uv{{\tt \char`\\end\char`\{verbatim\char`\}}}} +se vytiskne tak, jak je napsáno ve vstupním textu. Uvedené prostředí +vždy ukončí odstavec a zahájí tisk textu bez speciální interpretace. +Pokud chceme mít bez speciální interpretace jen část textu uvnitř +odstavce, použijeme v~\LaTeX{}u příkaz "\verb|text bez svislé čáry|" +nebo třeba "\verb+text bez znaku plus+". + +V~plainu ani v~csplainu hotové řešení na vypnutí speciální +interpretace znaků nenajdeme. Můžeme se inspirovat dvojicí "\begtt" +a "\endtt" ve zdrojovém textu tohoto manuálu. + +Pokud chceme vytisknout jen jednotlivé speciální znaky, měli bychom +vědět, jakou sekvencí to zařídit. Pro znaky používané v~běžném textu +("$", "&", "#" a "_") jsou ve všech formátech připraveny řídicí +sekvence "\$", "\&", "\#" a "\_". Tím požadovaný znak vytiskneme +v~libovolném fontu. Výjimkou je znak \$, který se v~kurzívě +Computer Modern fontu mění v~libru: {\cmit\$}. Je to taková malá +kuriozita \TeX{}u. + +S~ostatními speciálními znaky to tak jednoduché není. V~implicitně +nastaveném fontu Computer Modern totiž tyto znaky vesměs nemají ve +fontu svůj odpovídající obraz. Například na pozici 92 bychom měli +najít podle normy ASCII znak~"\" (zpětné lomítko), ale místo něj tam +najdeme znak~`` (obrácené uvozovky). Nemile nás překvapí i jinak +obyčejný znak "<" (symbol pro relaci je menší), který nemá ve fontu +svůj obraz a místo něho dostaneme do výstupu < (obrácený +vykřičník). Pokud chceme, aby se do výstupu věrně dostal znak, který +známe z~tabulky ASCII, musíme použít variantu fontu "\tt" (strojopis), +nebo jinou rodinu fontu, která má fonty v~kódování přesně podle +ASCII. Následující tabulka ukazuje všechny běžné ASCII znaky, které +mají v~Computer Modern jiný obraz: + +\begtable + kód znaku & "\tt" (strojopis) & Computer Modern + \tabline + \.60 & "<" & \tencsr < + \.62 & ">" & \tencsr > + \.92 & "\" & \tencsr \char92 + 123 & "{" & \tencsr -- + 124 & "|" & \tencsr --- + 125 & "}" & \tencsr \char125 +\endtable + +Znak z~dané pozice ve fontu vytiskneme pomocí příkazu "\char kód". +Například "\char92" nám vytiskne ve strojopisu "\" a v~antikvě +Computer Modern {\tencsr\char92}. Pokud si nepamatujeme číselnou +hodnotu ASCII kódu nějakého znaku, můžeme místo ní použít konstrukci +"`\znak", takže například "`\\" vrátí číslo 92. Proto při tisku +zpětného lomítka píšeme "{\tt\char`\\}". + +Budeme-li chtít vytisknout některý ze znaků "< > \ { | }", musíme si +uvědomit, jaký význam daný znak reprezentuje. Většinou se jedná +o~matematické symboly, takže pro ně použijeme odpovídající řídicí +sekvence v~matematickém módu (mezi dvěma dolary). Relace \uv{je menší}, +\uv{je větší} a symbol pro absolutní hodnotu lze dokonce +v~matematickém módu napsat přímo, zatímco v~textovém módu mimo +strojopis se promění ve španělskou interpunkci nebo pomlčku. +Následující tabulka udává doporučený způsob zápisu příslušných +znaků podle jejich významu: + +$$\vbox{\let\par=\cr \obeylines \halign{&#\hfil\quad + význam znaku & jak jej zapsat & jak se vytiskne + \tabline + relace \uv{je menší} & "$a < b$" & $a < b$ + relace \uv{je větší} & "$a > b$" & $a > b$ + uzavřený interval & "$\langle a,b\rangle$" & $\langle a,b\rangle$ + ASCII znaky "< >" & "{\tt < >}" & "< >" + rozdíl množin & "$A\setminus B$" & $A\setminus B$ + ASCII znak "\" & "{\tt\char`\\}" & "\" + Množinové závorky & "$M = \{a,b,c\}$" & $M = \{a,b,c\}$ + ASCII znaky "{ }" & "{\tt\char`\{ \char`\}}" & "{ }" + absolutní hodnota & "$|x|$" & $|x|$ + ASCII znak "|" & "{\tt |}" & {\tt|} + vlnka jako akcent & "\~a" & \~a + samostatný akcent & "\~{}" & \~{} + ASCII znak "~" & "{\tt\char`\~}" & "~" + stříška jako akcent & "\^a" & \^a + ASCII znak "^" & "{\tt\char`\^}" & "^" +}}$$ + +V~\LaTeX{}u lze místo konstrukcí "{\tt\char`\znak}" použít +jednoduššího "\verb|znak|". Ovšem příkaz "\verb", který odebírá znaku +jeho speciální funkci a zapíná tisk ve strojopisu, nemusí fungovat +všude. Například jej nelze použít jako argument jiného příkazu +("\section", "\uv", apod.). + +\sekce Rozměrové jednotky používané v~\TeX u a typografii +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Z~historických důvodů v~typografii stále přežívají měrné jednoty +rozdílné od soustavy SI. Základní měrnou jednotkou, která se používá +v~anglosaských zemích, je jednotka point ({\tt pt}), která má rozměr +asi třetinu milimetru. Dvanáctinásobek je pica (čteme pajka, {\tt +pc}). Jednotkou, která se používala v~Evropě, je \uv{Didotův bod} +({\tt dd}), který je větší než point, ale zhruba taky měří třetinu +milimetru. Dvanáctinásobek tohoto bodu je cicero ({\tt cc}). +V~počítačových programech pro sazbu se používá počítačový bod +({\tt bp}), který je jen velmi nepatrně větší. 72 počítačových bodů se +přesně vejde do jednoho palce ({\tt in}, inch používaný především +v~Americe). + +Všechny tyto jednotky je možné použít v~\TeX{}u jako dvoupísmenové zkratky, +jak ukazuje následující tabulka. Navíc lze použít jednotky odvozené +z~metru. + +\begtable + "pt" & monotypový bod & $1\,{\tt pt} = 1/72.27\,{\tt in} \doteq % + 0.35146\,{\tt mm}$ + "pc" & pica & $1\,{\tt pc} = 12\,{\tt pt}$ + "bp" & počítačový bod & $1\,{\tt bp} = 1/72\,{\tt in}$ + "dd" & Didotův bod & $1\,{\tt dd} = 1238/1157\,{\tt pt}$ + "cc" & cicero & $1\,{\tt cc} = 12\,{\tt dd}$ + "in" & palec (inch, coul) & $1\,{\tt in} = 25.4\,{\tt mm}$ + "cm" & centimetr & $1\,{\tt cm} = 10\,{\tt mm}$ + "mm" & milimetr & $1\,{\tt mm} \doteq 2.84528\,{\tt pt}$ + "sp" & jednotka \TeX{}u & $1\,{\tt sp} = 1/65536\,{\tt pt}$ + "em" & velikost písma & závislé na aktuálním písmu + "ex" & výška malého x & závislé na aktuálním písmu +\endtable + +Velikost písma se měří zhruba jako celková výška řádku, který obsahuje +všechny znaky písma (mimo akcentované verzálky, tj. neuvažujeme v~takovém +řádku háčky a čárky nad velkými písmeny). Zhruba to také odpovídá +šířce velkého písmene M (odtud jednotka {\tt em}). Bohužel, na jednotlivých +písmech není nic společného, co by se dalo vždy jednoduše změřit a přesně +říci, že právě to je ona velikost písma. + + +\sekce Práce s~fonty +%%%%%%%%%%%%%%%%%%%% + +Implicitní fonty, které jsou v~každé implementaci \TeX{}u k~dispozici +a které jsou nezávislé na použitém operačním systému, jsou fonty +rodiny Computer Modern. Běžná antikva v~této rodině má název {\tt +cmr10}. To je zkratka pro \uv{Computer Modern Roman ve velikosti 10pt}. +Fonty Computer Modern bývají už načteny ve formátu a pro +jednotlivé varianty (antikva, kurzíva, polotučné, strojopis) bývají +připraveny přepínače "\rm", "\it", "\bf", "\tt". + +Fonty Computer Modern neobsahují akcentovaná písmena (s~háčky a čárkami). +Proto jsou ve formátu csplain místo nich implicitně načteny tak zvané +\CS{}fonty, které rozšiřují Computer Modern fonty o~písmena s~akcenty +z~české a slovenské abecedy. Běžná antikva v~této rodině má název +{\tt csr10}. \LaTeX{} také implicitně pracuje s~rodinou Computer Modern, +pomocí dodatečných stylů se dá přinutit k zavedení dalších fontů. Používá k +tomu zabudovaný balík makrer NFSS, který uživatele totálně odstíní od +primitivního příkazu "\font". + +Ve všech formátech (v~\LaTeX{}u navzdory jeho NFSS konceptu) +můžete zavést nový přepínač pro nové písmo +pomocí příkazu "\font". Ten má následující syntaxi: + +\begtt +\font\přepínač=název-fontu nepovinné parametry zvětšení +\endtt + +Například + +\begtt +\font\titulfont=csr10 scaled \magstep2 +\endtt + +\pp zavede do \TeX{}u font csr10 (tedy běžnou počeštěnou antikvu +odvozenou z~Computer Modern) ve zvětšení $1.44$ krát normální +velikost, která je 10 bodů. Tento font se pak v~textu aktivuje +přepínačem "\titulfont". Proč zrovna koeficient $1.44$? To je +koeficient, pro který byla v~\TeX{}u vytvořena zkratka +"\magstep2". Následující tabulka shrnuje všechny zkratky typu +"\magstep", které jsou definovány ve všech běžně používaných +formátech. + +\begtable + sekvence & koeficient & implementováno jako + \tabline + "\magstep0" & 1:1 (žádné zvětšení) & 1000 + "\magstep1" & $1.2$ & 1200 + "\magstep2" & $1.2^2 = 1.44$ & 1440 + "\magstep3" & $1.2^3 = 1.728$ & 1728 + "\magstep4" & $1.2^4 = 2.0736$ & 2074 + "\magstep5" & $1.2^5 = 2.48832$ & 2488 + "\magstephalf" & $\sqrt{1.2}\doteq1.095445$ & 1095 +\endtable + +Odstupňování jednotlivých velikostí písma pomocí mocnin čísla $1.2$ bývá +v~typografii dobrým zvykem. + +Ve sloupci \uv{implementováno jako} vidíme, že koeficient se za slovem +{\tt magstep} (stejně jako na mnoha dalších místech v~\TeX{}u) zadává jako +celé číslo odpovídající tisícinásobku uvažované hodnoty. Chceme-li tedy +použít font dvojnásobně velký, použijeme {\tt scaled~2000} a při požadavku +na poloviční velikost píšeme {\tt scaled~500}. + +Kromě koeficientu zvětšení (slovo {\tt scaled}) můžeme chtít zvětšit +font bez ohledu na jeho původní velikost do námi požadované velikosti. +K~tomu se používá slovo {\tt at}, například: + +\begtt %-------------------------------------------------------------- +\font\prvni=csr10 at 20pt +\font\druhy=csr10 scaled 2000 +\endtt %-------------------------------------------------------------- + +Oba řádky této ukázky zavádějí stejný font ve stejném zvětšení. + +Rodina písma Computer Modern (a jeho odvozeniny, například \CS{}fonty) +obsahuje různé velikosti stejné varianty písma, přitom tyto +alternativy nejsou jen stejnoměrným násobením všech rozměrů. +Doporučuje se, zvláště v~menších velikostech písma, používat +implicitní velikost písma a dále ji nezmenšovat ani nezvětšovat. +Implicitní velikost písma je označena číslem v~názvu +fontu, tj. například {\tt csr10} má implicitní velikost 10\,pt a +{\tt csr5} má velikost 5\,pt. Srovnáme výsledek tohoto příkladu: + +\begtt %-------------------------------------------------------------- +\font\zvetseny=csr5 at10pt +\font\normalni=csr10 +\normalni Tady je přirozená velikost písma 10 bodů +\zvetseny a tady je písmo navržené pro pět bodů zvětšeno na 10 bodů. +\endtt %-------------------------------------------------------------- + +Na výstupu dostaneme: + +\beguk %-------------------------------------------------------------- +\font\zvetseny=csr5 at10truept +\font\normalni=csr10 at10truept +\baselineskip=12truept +\normalni Tady je přirozená velikost 10 bodů +\zvetseny a tady je písmo navržené pro pět bodů zvětšeno na 10 bodů. +\enduk %-------------------------------------------------------------- + +Přepnout písmo dokumentu do jiné rodiny fontů znamená postarat se o~změnu +významu všech přepínačů jednotlivých variant písma ("\rm", "\bf", "\it" a +"\tt") a nezapomenout na vhodnou změnu fontu též v~nadpisech a v~dalších +velikostech písma, které jsou v~dokumentu použity. Jednoduché definice +alternativních přepínačů najdeme pro csplain v~následujících souborech: + +\begtable + soubor & Rodina fontů + \tabline + "cavantga.tex" & Avantgarde Book + "cbookman.tex" & Bookman + "chelvet.tex" & Helvetica + "cncent.tex" & New Century + "cpalatin.tex" & Palatino + "ctimes.tex" & Times Roman +\endtable + +Tyto rodiny fontů jsou instalovány v~každém výstupním PostScriptovém +zařízení, takže s~těmito fonty můžeme v~\TeX{}u pracovat, aniž bychom je +museli mít zakoupené. \TeX{} samotný totiž pracuje pouze s~metrickými +informacemi k~fontům a do výstupu vkládá pouze odkazy na fonty. Metrické +informace jsou obvykle k~dispozici zdarma. Pokud budeme tisknout na +PostScriptovém zařízení, pak jsme s~cenou PostScriptového modulu tyto fonty +vlastně koupili a můžeme v~nich tisknout \TeX{}ové dokumenty. Pokud budeme +tisknout na zařízení bez PostScriptu, pak je vhodné PostScriptový kód +zpracovat volně dostupným programem Ghostscript, který má v~sobě zahrnuty +volně dostupné alternativy k~uvedeným základním fontům. Rozdíl mezi +alternativou a draze koupeným fontem přitom ani moc nepoznáme. + +Chceme-li například přepnout do písma Bookman, stačí napsat do dokumentu +"\input bookman". Takovou věc jsme už ilustrovali na našem příkladě +v~předchozím textu. + +Podíváme-li se do souborů {\tt cbookman.tex} a dalších, které najdeme +v~instalaci \TeX{}u někde v~adresáři {\tt csplain}, zjistíme, že zde nejsou +předefinovány přímo přepínače "\rm", "\bf", "\it" a "\tt", ale že se zde +místo nich pracuje s~přepínači "\tenrm", "\tenbf", "\tenit" a "\tentt". +To jsou totiž v~plainu (i csplainu) skutečné přepínače \uv{nejnižší +úrovně}. Pro uživatele se pak definují značky "\rm", "\bf", "\it" a "\tt" +s~dalším přihlédnutím na chování těchto značek v~matematickém módu. +Například "\bf" je definováno takto: + +\begtt %-------------------------------------------------------------- +\def\bf{\tenbf \fam\bffam} +\endtt %-------------------------------------------------------------- + +Je-li tedy předefinován přepínač "\tenbf", bude se od této chvíle chovat +jinak i značka "\bf". Kód "\fam\bffam" zde nebudeme rozebírat, protože +překračuje rámec tohoto úvodního textu. Spokojíme se s~tím, že v~textovém +módu nemá tento kód žádný vliv a v~matematickém módu cosi udělá. + +Příkaz "\fontname\přepínač\space" se promění zpět v~původní název +fontu ukončený mezerou. Tato vlastnost byla použita v~našem příkladu, +kde jsme zaváděli větší font pomocí této konstrukce: + +\begtt %--------------------------------------------------------------- +\font\titulfont=\fontname\tenbf\space scaled \magstep2 % větší font +\endtt %--------------------------------------------------------------- + +Výhodou tohoto zápisu je fakt, že nemusíme znát název fontu, stačí si +zapamatovat základní přepínače "\tenrm", "\tenbf", "\tenit" a "\tentt". +Názvy fontů se nejenom těžko pamatují, ale také se mohou změnit, +pokud před takovou konstrukcí použijeme "\input cbookman" nebo něco +podobného. + +V~\LaTeX{}u asi takové obraty nebudeme potřebovat, protože o~zavedení +potřebných fontů pro různé velikosti se \LaTeX{} stará sám. Pro +přepínání mezi rodinami fontů používáme v~\LaTeX{}u příkaz +"\usepackage" a následuje ve složených závorkách jedno ze slov +{\tt avantgar}, {\tt bookman}, {\tt helvet}, {\tt newcent}, +{\tt palatino}, {\tt times}. Písmeno {\tt c} na začátku názvu rodiny +fontů (na rozdíl od csplainu) nepíšeme. + +Možná nás začne zajímat, jaké fonty máme v~\TeX{}ové instalaci +připraveny k~použití. Stačí udělat menší průzkum v~adresáři {\tt tfm} +(odvozeno od zkratky \TeX{} font metrics) a podívat se do jednotlivých +podadresářů na názvy přítomných souborů. To jsou současně názvy fontů, +které jsou použitelné v~příkaze "\font". Chceme rychle vědět, jak který +font vypadá? Napišme na příkazový řádek + +\begtt %----------------------------------------------------------------- +tex testfont +\endtt %----------------------------------------------------------------- + +\TeX{} se nás vyptá na název fontu, který zadáme bez přípony +{\tt.tfm}. Pak nás požádá o~instrukci, co s~načteným fontem má dělat. +Nejlépe je odpovědět "\table\end" a podívat se na tabulku znaků +testovaného fontu třeba pomocí "xdvi testfont". + + + +\sekce Umístění sazby na papíře +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Při poznávání \TeX{}u si jistě velmi brzo položíme otázku, jak je +možné změnit velikost okrajů, neboli jak umístit sazbu na papíře. + +V~plainu jsou implicitně nastaveny velikosti okrajů jeden palec +z~každé strany papíru amerického formátu Letter. Takové formáty papíru +u~nás většinou nerostou, takže plain nám na papíru A4 udělá jen levý a +horní okraj velikosti jeden palec a pravý okraj bude menší a spodní +větší. + +V~csplainu jsou implicitně nastaveny velikosti okrajů jeden palec +z~každé strany pro formát A4. Sazba je tedy v~csplainu mírně užší a +vyšší, než v~plainu. Sazbu přitom měříme bez případného záhlaví a bez +stránkových číslic. + +Po zavedení makra OPmac v~plainu nebo csplainu je možné +okraje pohodlně nastavit makrem "\margins". Jak to udělat je popsáno v +dokumentaci k OPmac. Níže je uveden postup nastavení okrajů v \TeX{}u na +úrovni \TeX{}u samostného bez použití maker. + +Umístění sazby měříme vzhledem k~počátku, který se nalézá na papíře +1~palec od levého okraje a 1~palec od horního okraje. Levý horní roh +sazby se kryje s~tímto počátkem, pokud jsou nastaveny registry +"\hoffset=0pt" a "\voffset=0pt". Levý horní roh sazby se posune +doprava o~hodnotu "\hoffset" a dolů o~hodnotu "\voffset". Při +záporných hodnotách těchto registrů se sazba posunuje samozřejmě doleva +respektive nahoru. + +Šířka sazby (přesněji šířka zpracovávaného odstavce) se nastaví pomocí +registru "\hsize". Výška sazby na stránce se nastaví pomocí "\vsize". +V~následující ukázce jsou uvedeny hodnoty, které nastavuje plain. + +\begtt +\voffset=0in % velikost horního okraje = \voffset + 1 palec +\hoffset=0in % velikost levého okraje = \hoffset + 1 palec +\hsize=6.5in % šířka řádku, 165.1mm +\vsize=8.9in % výška sazby, 266mm +\endtt + +Formát csplain má registry "\hoffset" a "\voffset" také nulové, ale +šířku a výšku sazby nastavuje odlišně: + +\begtt +\hsize= 159.2 mm % šířka řádku v csplainu (šířka A4 - 2in) +\vsize= 239.2 mm % výška sazby (výška A4 - 2in) +\endtt + +Pokud chceme nastavit vlastní velikosti, doporučujeme nejprve registry +"\hoffset" a "\voffset" nastavit na hodnotu $-1$\,in a pak k~nim přičíst +hodnoty požadovaných okrajů pomocí příkazu "\advance". Dále +doporučujeme výšku sazby přesně rozměřit na počet řádků. K~tomu +potřebujeme vědět, že vzdálenost dvou řádků se určí pomocí registru +"\baselineskip" (pozor: při větším písmu se toto řádkování může +rozhodit). Plain i csplain nastavují "\baselineskip" na 12\,pt. +Kromě toho je účaří prvního řádku od pomyslného horního okraje sazby +vzdáleno o~"\topskip", který má v~plainu i v~csplainu hodnotu 10\,pt. +Protože se výška sazby "\vsize" měří od horního pomyslného okraje po +účaří posledního řádku na stránce, vychází "\vsize" jako +\hbox{$"\topskip" + (n-1)\times "\baselineskip"$}, kde $n$ je počet řádků na +stránce. Nastavení velikosti sazby tedy můžeme udělat například takto: + +\begtt +\voffset=-1in +\advance\voffset by 2cm % velikost horního okraje bude 2cm +\hoffset=-1in +\advance\hoffset by 1.5cm % velikost pravého okraje bude 1.5cm +\hsize=10cm % šířka řádku bude 10cm +\vsize=\topskip +\advance\vsize by 15\baselineskip % sazba bude mít 16 řádků na stránce +\endtt + +V~\LaTeX{}u se při nastavování rozměrů sazby používají registry +speciálně deklarované v~tomto formátu. Jedná se o~"\textheight" (výška +sazby), "\textwidth" (šířka sazby), "\oddsidemargin" (levý okraj na +lichých stránkách), "\evensidemargin" (levý okraj na sudých stránkách) +a "\topmargin" (horní okraj). \LaTeX{} pak sám podle hodnot těchto +registrů nastaví vnitřní registry \TeX{}u "\hoffset", "\voffset", +"\hsize" a "\vsize". Uživatel \LaTeX{}u by k~nim neměl přistupovat +přímo a navíc by měl s~registry zacházet \uv{\LaTeX{}ovsky}, což +prakticky znamená, že místo jednoduchého přiřazení nebo příkazu +"\advance" by měl zapisovat své požadavky zhruba takto: + +\begtt +\setlength\topmargin{-1in} +\addtolength\topmargin{2cm} % velikost horního okraje bude 2cm +\setlength\oddsidemargin{-1in} +\addtolength\oddsidemargin{1.5cm} % velikost pravého okraje bude 1.5cm +\setlength\evensidemargin{\oddsidemargin} +\setlength\textwidth{10cm} % šířka sazby bude 10cm +\setlength\textheight{\topskip} +\addtolength\textheight{15\baselineskip} % 16 řádků +\endtt + +\TeX{}em většinou nenastavujeme parametry pro archovou montáž sazby, +takže nám výše uvedené příklady pro nastavení velikosti sazby bohatě +stačí. Pokud bychom chtěli se sazbou dále manipulovat a umisťovat ji +na jednotlivé archy podle určitých požadavků, použijeme většinou +pomocné programy, které manipulují s~PostScriptovým výstupem. +Představme si, že chceme stránky tohoto manuálu zmenšit tak, aby se +vešly dvě vedle sebe na stranu A4. Dále chceme tyto stránky uspořádat +tak, abychom po oboustranném vytištění manuálu na šest archů A4 +dostali svazeček, který přeložíme v~půli a máme knížečku +s~24 na sebe navazujícími stránkami. Pro takový úkol se asi nejlépe hodí +programy z~volně šířeného balíčku psutils. Na příkazový řádek můžeme +postupně napsat tyto instrukce: + +\begtt +> csplain prvni +> dvips prvni +> psbook prvni.ps p0.ps +> pstops "4:0L@.7(21cm,.5cm)+1L@.7(21cm,14.4cm)" p0.ps p1.ps +> pstops "4:2L@.7(21cm,.5cm)+3L@.7(21cm,14.4cm)" p0.ps p2.ps +> lpr -Ptiskarna p1.ps +> lpr -Ptiskarna p2.ps +> rm prvni.ps p0.ps p1.ps p2.ps +\endtt + +Příkaz {\tt dvips} převede dokument do PostScriptu a {\tt psbook} +uspořádá stránky pro použití do \uv{svazečku}. První volání příkazu +{\tt pstops} vybere vždy dvě ze čtyř stránek, zmenší je na +$0.7$\,násobek původní velikosti ({\tt @.7}) a umístí je do archu +podle uvedených parametrů. Tím vzniká podklad pro tisk lícových stran +archů A4 ({\tt p1.ps}). Podobně druhé volání příkazu {\tt pstops} +vytvoří podklad pro rubovou stranu archů. Vlastní tisk ({\tt lpr}) +pak můžeme provést na tiskárně, která neumí oboustranný tisk, ve dvou +průchodech. Před druhým průchodem obrátíme vytištěné papíry a vložíme +je do zásobníku tiskárny znovu. + + +\sekce Overfull/Underfull box +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Při práci s~\TeX{}em narazíme postupně na celou řadu chybových +hlášení, při kterých se program většinou zastaví a vyzve nás k~nějaké +akci. Ačkoli třeba jen stiskneme klávesu Enter, uvědomíme si, že je +něco špatně a pokusíme se chybu řešit. + +Kromě toho \TeX{} vypisuje varování o~přetečených (overfull) a +nedoplněných (underfull) boxech. Protože se při těchto výpisech +nezastavuje, považují to mnozí začátečníci za menší zlo, kterého si +není nutné všímat. Není to tak docela pravda. + +Přetečené boxy (overfull) bychom měli rovněž zařadit do kategorie +chyb. \TeX{}u se totiž nepodařilo vměstnat sazbu do předepsané šířky +"\hsize". Prakticky to znamená, že sazba v~daném místě \uv{vyčnívá} +na pravé straně ven směrem do okraje. Hlášení obsahuje údaj, o~kolik +bodů sazba vyčnívá, číslo řádku ve zdrojovém kódu a kus textu, který určuje +problémové místo. Plain a csplain dále nastavuje registr +"\overfullrule" na 5\,pt, takže se v~sazbě na problémovém místě objeví +těžko přehlédnutelný černý obdélník. \LaTeX{} tento registr nuluje, +takže černé obdélníky nejsou vidět, což dává uživateli pocit, že je +všechno v~pořádku. + +Objeví-li se přetečený box v~odstavci, většinou stačí \uv{rozvolnit} +mezery. Mezery mezi slovy mají totiž pružnost (mohou se smršťovat nebo +natahovat). Tato pružnost není neomezená, ale je daná jistými +parametry podle použitého fontu. Chceme-li dát mezerám větší volnost +v~roztahování, než si přál autor fontu, pišme například +"\emergencystretch=2cm". \TeX{} má plno dalších vnitřních registrů, +jejichž nastavením ovlivníme algoritmy na sestavování +odstavce. Jejich popis ovšem překračuje rámec tohoto úvodního textu. + +Nedoplněné boxy (underfull) můžeme na rozdíl od přetečených boxů +považovat pouze za varování. \TeX{} nás informuje, že byl nucen +v~některém místě natáhnout mezery víc, než je esteticky zdrávo. Hodnota +{\tt badness}, která hlášení doprovází, udává zhruba stupeň estetické +vady v~takovém místě (nebo také velikost násilí provedené na +mezerách). Čím vyšší badness, tím horší výsledek. Maximální hodnota +badness je 1000, což značí, že některý řádek je úplně špatně. Stojí +zato se podívat do sazby na takto označená místa a zamyslet se, co by +se dalo změnit, aby se zlepšila estetická úroveň výsledku. + +\LaTeX{}oví uživatelé dosti často neopatrně pracují s~příkazem "\\", +který se v~různých \LaTeX{}ových prostředích chová jako ukončení +řádku. Někdy se dostane takový příkaz i na konec odstavce, což samo +o~sobě nemá logiku, protože na konci odstavce se samo sebou ukončí +řádek. Pokud se tak stane, \TeX{} na konci odstavce vytvoří ještě další +prázdný řádek, ve kterém nemá žádnou mezeru k~natažení na šířku +"\hsize" a oprávněně se rozčílí: {\tt Underfull hbox badness 1000}. +V~tomto případě vlastně \TeX{} křičí na uživatele, který nebyl schopen +opustit principy starodávného psacího stroje a potřebuje mít k~ruce tu +velikou páku, do které je občas potřeba praštit, aby se přešlo na nový +řádek. + + + +\end + + + + diff --git a/Master/texmf-dist/doc/cstex/test8z.pdf b/Master/texmf-dist/doc/cstex/test8z.pdf Binary files differnew file mode 100644 index 00000000000..3ab0b71a127 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/test8z.pdf diff --git a/Master/texmf-dist/doc/cstex/test8z.tex b/Master/texmf-dist/doc/cstex/test8z.tex new file mode 100644 index 00000000000..61b47898c9e --- /dev/null +++ b/Master/texmf-dist/doc/cstex/test8z.tex @@ -0,0 +1,81 @@ + +% test.tex -- plainTeX file for test of standard PostScript fonts +% in Czech and Slovak, font metric names: p*8z and p*8u. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Juni 1995 Petr Olšák +% March 1999: pcr*8t was renamed to pcr*8u +% October 2012: the text-sample was corrected + +% Encoding: UTF-8 +% Needs Format: csplain + +\chyph % czech hyphenation used + +\advance\vsize by2\baselineskip + +\def\allowhyphens{\nobreak\hskip0pt\relax} +\def \uv#1{\char254 \allowhyphens#1\allowhyphens\char255 } + +\def\text#1{Tento text je napsán Post\-Scrip\-to\-vým fontem #1 za použití +\TeX{}ov\-ské metriky {\tt \fontname\testfont}. Metrika fontu +v~české/slovenské variantě byla vygenerována z AFM souborů URW fontů +pomocí programu {\tt afm2tfm}. Je potřeba si všímat méně +obvyklých slov, jako je slovo šťastný (písmeno ť uprostřed slova), nebo +třeba slovenské koľko. Věřme, že výsledný text půjde nejen přečíst, ale +bude i typograficky pokud možno v~pořádku. Také je třeba \uv{sledovat +chování} našich \uv{uvozovek}. +\medskip +Á á Ä ä Č č Ď ď É é Ě ě Í í Ĺ ĺ Ľ ľ Ň ň Ó ó Ô ô Ö ö Ř ř Ŕ ŕ Š š Ť ť Ú ú Ů ů +Ü ü Ý ý Ž ž \char134.} + +\def\test#1 #2 {\font\testfont=#1\extension\space{\testfont\text{#2}\bigskip}} +\emergencystretch=1em + +\def\extension{8z} + +\test ptmr Times-Roman +\test ptmb Times-Bold +\test ptmbi Times-BoldItalic +\test ptmri Times-Italic +\test ptmrc Times-Roman-SmallCaps + +\test pagk AvantGarde-Book +\test pagko AvantGarde-BookOblique +\test pagd AvantGarde-Demi +\test pagdo AvantGarde-DemiOblique + +\test pbkd Bookman-Demi +\test pbkdi Bookman-DemiItalic +\test pbkl Bookman-Light +\test pbkli Bookman-LightItalic + +{\rightskip=0pt plus4em \def\extension{8u} +\test pcrr Courier +\test pcrb Courier-Bold +\test pcrro Courier-Oblique +\test pcrbo Courier-BoldOblique +} + +\test pncr NewCenturySchlbk-Roman +\test pncb NewCenturySchlbk-Bold +\test pncri NewCenturySchlbk-Italic +\test pncbi NewCenturySchlbk-BoldItalic + +\test phvr Helvetica +\test phvb Helvetica-Bold +\test phvro Helvetica-Oblique +\test phvbo Helvetica-BoldOblique + +\test phvrn Helvetica-Narrow +\test phvbn Helvetica-Narrow-Bold +\test phvron Helvetica-Narrow-Oblique +\test phvbon Helvetica-Narrow-BoldOblique + +\test pplr Palatino-Roman +\test pplb Palatino-Bold +\test pplri Palatino-Italic +\test pplbi Palatino-BoldItalic + +\test pzcmi ZapfChancery-MediumItalic + +\end diff --git a/Master/texmf-dist/doc/cstex/testgyre8z.pdf b/Master/texmf-dist/doc/cstex/testgyre8z.pdf Binary files differnew file mode 100644 index 00000000000..f0ecdb237ab --- /dev/null +++ b/Master/texmf-dist/doc/cstex/testgyre8z.pdf diff --git a/Master/texmf-dist/doc/cstex/testgyre8z.tex b/Master/texmf-dist/doc/cstex/testgyre8z.tex new file mode 100644 index 00000000000..8eaefcf90d0 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/testgyre8z.tex @@ -0,0 +1,81 @@ + +% test.tex -- plainTeX file for test of standard PostScript fonts +% in Czech and Slovak, font metric names: p*8z and p*8u. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Juni 1995 Petr Olšák +% March 1999: pcr*8t was renamed to pcr*8u +% October 2012: the text-sample was corrected + +% Encoding: UTF-8 +% Needs Format: csplain + +\chyph % czech hyphenation used + +\advance\vsize by2\baselineskip + +\def\allowhyphens{\nobreak\hskip0pt\relax} +\def \uv#1{\char254 \allowhyphens#1\allowhyphens\char255 } + +\def\text#1{Tento text je napsán Post\-Scrip\-to\-vým fontem #1 za použití +\TeX{}ov\-ské metriky {\tt \fontname\testfont}. Metriku fontu +v~české/slovenské variantě připravili naši polští kolegové. +Je potřeba si všímat méně +obvyklých slov, jako je slovo šťastný (písmeno ť uprostřed slova), nebo +třeba slovenské koľko. Věřme, že výsledný text půjde nejen přečíst, ale +bude i typograficky pokud možno v~pořádku. Také je třeba \uv{sledovat +chování} našich \uv{uvozovek}. +\medskip +Á á Ä ä Č č Ď ď É é Ě ě Í í Ĺ ĺ Ľ ľ Ň ň Ó ó Ô ô Ö ö Ř ř Ŕ ŕ Š š Ť ť Ú ú Ů ů +Ü ü Ý ý Ž ž \char134.} + +\def\test#1 #2 {\font\testfont=cs-#1 {\testfont\text{#2}\bigskip}} +\emergencystretch=1em + +\def\extension{8z} + +\test qtmr Termes-Regular +\test qtmri Termes-Italic +\test qtmb Termes-Bold +\test qtmbi Termes-BoldItalic +\test qtmr-sc Termes-Roman-SmallCaps + +\test qagr Adventor-Regular +\test qagri Adventor-Italic +\test qagb Adventor-Bold +\test qagbi Adventor-BoldItalic + +\test qbkr Bonum-Regular +\test qbkri Bonum-Italic +\test qbkb Bonum-Bold +\test qbkbi Bonum-BoldItalic + +{\rightskip=0pt plus4em \def\extension{8u} +\test qcrr Cursor +\test qcrri Cursor-Italic +\test qcrb Cursor-Bold +\test qcrbi Cursor-BoldItalic +} + +\test qcsr Schola-Regular +\test qcsri Schola-Italic +\test qcsb Schola-Bold +\test qcsbi Schola-BoldItalic + +\test qhvr Heros-Regular +\test qhvri Heros-Italic +\test qhvb Heros-Bold +\test qhvbi Heros-BoldItalic + +\test qhvcr HerosCondensed-Regular +\test qhvcri HerosCondensed-Italic +\test qhvcb HerosCondensed-Bold +\test qhvcbi HerosCondensed-BoldItalic + +\test qplr Pagella-Regular +\test qplri Pagella-Italic +\test qplb Pagella-Bold +\test qplbi Pagella-BoldItalic + +\test qzcmi Chorus-MediumItalic + +\end diff --git a/Master/texmf-dist/doc/cstex/testlat.tex b/Master/texmf-dist/doc/cstex/testlat.tex new file mode 100644 index 00000000000..a6a5f861c22 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/testlat.tex @@ -0,0 +1,30 @@ +\documentclass[12pt]{article} +\usepackage[czech]{babel} % Zapne deleni slov. +\usepackage{times} % Misto CS-fontu budou pouzity PostScriptove fonty +\usepackage[utf8]{inputenc} % nastavení kódování +\usepackage[IL2]{fontenc} +\parskip=\baselineskip % Mezi odstavci bude prázdný řádek +\emergencystretch=4em % abych dovolil vetsi mezery a nebyly Overfull + +\begin{document} +Tady je text napsaný PostScriptovým fontem včetně zpracování akcentů v~českém +jazyce a správného dělení slov. + +Matematika i při sazbě PostScriptovým fontem zůstává ve fontu CM. +Proto je rozdíl mezi číslovkou \uv{2} napsanou přímo v textu a číslovkou +\uv{$2$} napsanou na vstupu mezi dolary. + +Kromě stylu {\tt times.sty} je možno použít styly pro přepínání do dalších +PostScriptových fontů: {\tt avant.sty}, {\tt bookman.sty}, +{\tt helvet.sty}, {\tt newcent.sty}, {\tt palatino.sty} +(vyzkoušejte si). + +V plainu lze též použít stejným způsobem PostScriptové fonty, ovšem +místo volání výše uvedených stylů je nutno volat soubory +{\tt ctimes.tex}, {\tt cavantga.tex}, {\tt cbookman.tex}, +{\tt chelvet.tex}, {\tt cncent.tex}, {\tt cpalatin.tex}. Například kdekoli +v textu píšeme \verb|\input ctimes| a od této chvíle máme text sázený +fontem Times-Roman. + +\end{document} + diff --git a/Master/texmf-dist/doc/cstex/zmeny.txt b/Master/texmf-dist/doc/cstex/zmeny.txt new file mode 100644 index 00000000000..6fe1b6924a2 --- /dev/null +++ b/Master/texmf-dist/doc/cstex/zmeny.txt @@ -0,0 +1,184 @@ +Zmeny v nabizenych souborech CSTeXu v dobe verejneho provozu + +Datum Soubor Poznamka +-------------------------------------------------- +18.1.96 i-all.ba Opraven preklep dvipsesxe na dvipsexe + i1.ba Opraven odkaz na soubor @ctimne (misto !ctimne) +22.1.96 mnu.zip Pridana aktualnejsi dokumentace, soubor codelat.txt, + user.doc a cfg.doc. Mirna zmena v texset.bat. + Uprava napovedy pri initex.bat (dotaz huge/big/std) + Zarazena opravena verze kalk.exe (viz chyba 10^10). + cstugdoc.zip zrusen soubor cstex.doc, nebod jeho novejsi + verze je nyni v mnu.zip + Pridan odkaz na diskusi o csTeXu a na soubor zmen. +25.1.96 listzip.html Opraven preklep wagner@ipf -> wagner@icpf + 5.2.96 parpozn.tex Do CSTeXu zarazen clanek o CSTeXu + 8.2.96 mnu.zip Opravena chyba v texbat.bat TEXDIR->EMTEXDIR + pro texspell a upravena dokumentace. + 8.2.96 @ctimne.txt Upravena dokumentace. + 8.3.96 cslatex.zip Opravena struktura ZIPu, uz je v souladu s MNU. + 8.3.96 mnu.zip Opraveny preklepy v dokumentaci. +14.3.96 cspsfont.zip *.vf premisteny do fonts\vf\a2ac, oprava dokumenmtace. +15.3.96 csplain.zip,tar Oprava v souboru csfonts.tex, nyni lze pouzit + i mimo iniTeX. Format csplain zcela beze zmeny. + newcs5.bat Nyni generuje spell.zip, puvodne chybne texspell.zip. + pk Obsah diskety pk2 se vejde na disketu pk1, snizen + pocet disket. Opraveno: makeinst.bat, make-d.bat + i-all.bat, i-big.bat, listzip.html,txt, @ctimne.txt +19.3.96 minitex Zavedeny dalsi tri diskety s tzv. miniTeXem + Upraveny soubory @ctimne.txt, *.ba, install.bat, + make-d.bat, makeinst.bat, listzip.html,txt. + pk3 a pk4 Zahrnuty rastry zakladnich PostScriptovych fontu. + mnu.zip Opraveno volani VF v em ovladacich; moznost + generovani formatu za behu. Upraveno: prints.bat, + scr???.cnf, cs.cnf, inibat.bat,mnu, metafont.bat, + texbat.bat, texrun.bat. + cspsfont.zip Oprava p*c8?.vf, tj. Small Caps varianty PS fontu. +21.3.96 cspsfont.tar Zaneseny opravy z cspsfont.zip. + cslatex.tar Vlozen soubor latex209.cfg. +26.3.96 @ctimne.txt makeinst.bat i-big.ba i-all.ba Opravy v nesrovnalostech + poctu disket v dokumentaci a i-davkach. +17.4.96 mnu.zip Oprava programu pickfile (chybne chovani po End) + listzip.html Odkazy "/ftp/cstex" nahrazeny "ftp://math...". +30.4.96 cl2*.zip Zaneseny ZIPy obsahujici balicky graph, tools + a psnfs pro LaTeX v podobe uz pripravene programem + docstrip. Zarazeno na disketu: cs3. Zmeny: + i-all,i-big.ba, makeinst.bat, listzip.html,txt. +17.5.96 minitex Soubory pro minitex maji samostatny adresar. +23.5.96 dvid16f Zarazena nova verze ovladacu. Odstranena chyba + v nespravne interpretaci virtualnich fontu. +23.5.96 mnu.zip Odstraneny preklepy a vymenen program fix.exe + (autor: Pavel Lisy). +23.5.96 qedit.zip Makro pro editor pri chybe umisteno do /bin. +23.5.96 minitex2,3 Viz zmeny v mnu.zip a qedit.zip. +18.6.96 mfjob12b->c + em1--em8 Rozhozeni ZIPu podle noveho doporuceni E. Mattesse. + Vznika jedna disketa navic. Zmeny se tykaji souboru: + @ctimne.txt, makeinst.bat, emtexdoc.zip, + i-small,i-all,i-big.ba, listzip.html,txt. +25.9.96 fontcs.zip,tar Oprava metrik CS-fontu + nova dokumentace cs-font.doc +25.9.96 csplain.zip,tar Drobna uprava csplain.ini a il2code.tex. +26.9.96 minitex1,3.zip Zaneseny zmeny z 25.9.96. +27.9.96 cspsfont.zip,tar Opravy podle Z. Wagnera (Caps and small caps). +8.11.96 texwin.zip Aktualizovana verze podpory pro MS Win (J. Krob). +19.11.96 csplain.zip,tar Oprava chybneho \csprimeson v czech.sty a slovak.sty +25.11.96 zmeny.txt Soubor zarazen do adresare msdos, aby byl automaticky + pritomen v instalaci (uprava install.bat, make-d.bat). +25.11.96 i-add.bat, i-remove.bat -- pridany davky podle J. Demela. +25.11.96 mnu.zip Nova koncepce nabidek podle J. Demela. Mazani + vsech PK v rolete METAFONT. +25.11.96 texwin.zip, bibtex.zip upravy ZIPu: vyhozeni inibat.mnu, bibtex.exe +27.11.96 minitex2,minitex3.zip Zaneseny zmeny v mnu.zip z 25.11.96. +13.12.96 cs-*pk.tar.gz Vychozi knihovny pk CS-fontu balene pro UNIX +13.12.96 unix/tetex README.tetex a *-tt.tar.gz. Navod na pocesteni teTeXu. +13.1.97 minitex3.zip Prebalen dosud chybny soubor csacutl.mf +21.1.97 tetex/cspsfont-tt.tar Odstranena stara verze psnfss. +21.1.97 tetex/RPMS/i386 Pridano pocesteni tetexu ve formatu rpm +19.2.97 os2/os2.zip Pridan "modul" pro EPM editor OS/2 pana Mikulika +3.3.97 tetex/cslatex-12-96.tar Pridano nove pocesteni noveho LaTeXu. +3.3.97 mnu.zip, minitex3.zip Soubor tiskarny.bat opraveno set DOT=fx100, + cs.cnf pridano +height a +width podle A4. +13.3.97 /unix Zmena koncepce adresare unix/, pridano README.web2c + a web2c verze 7. Zruseno web2c verze 6.1. Tary + spolecne pro web2c i teTeX (spolecna struktura TDS). +13.3.97 /unix/RPMS Nove baliky rpm pro tetex-0.4. +18.3.97 texwin.zip Nova verze s odkazem na (txw)dll.zip (knihovny). +20.3.97 cslatex-12-96.tar Oprava souboru il2enc.def a lslovak.sty. +20.3.97 cslatex-1.1-2.*.rpm Zaneseni zmen z cslatex-12-96 do RPM. +24.3.97 msdos,os2 Nove ZIPy emTeXu a novy cslatex 2e od p. Snajdra. +25.3.97 minitex*.zip Prebaleno podle novych ZIPu. +25.3.97 mnu.zip program fix.exe podle pana Ginzela. +26.3.97 cslatex.tar/zip Pridany styly a4.sty, a4wide.sty a fancyhdr.sty +3.4.97 cslatex.tar/rpm/zip Akualizovana verze cslatexu z 1.4.97 +4.4.97 mnu.zip texset.bat: set PRNFILE az po volani fix.exe. +4.4.97 minitex1,3.zip Aktualizace. +4.4.97 makeinst.bat, i-disk.ba, install.bat Drobne upravy. +25.4.97 cslatex,csplain.zip,tar Nove styly czech,slovak.sty, ver.2.0. +28.4.97 minitex1.zip, csplain,cslatex*.rpm Nove styly czech,slovak, ver.2.0 +23.5.97 csfonts.tar,csplain.rpm,fontcs.zip Pridany VF cs2cm a cm2cs +23.5.97 dvipsexe.zip Uprava config.ps, aby cetl cm2cs automaticky +23.5.97 install.bat,i3.ba Novy zaver instalacni davky +23.5.97 mnu.zip Nova koncepce tiskarny.bat (lze editovat VCOM, PCOM), + vyhozeno dvi-out, nahrazeno dvicopy s vf-cnv/cs2cm. +23.5.97 minitex*.zip Zaneseny upravy uvedene vyse. +1.7.97 csfonts.tar,fontcs.zip,minitex3.zip,*cbas.zip,CS-*pk.tar.gz + Uprava CS-fontu (carka nad o, kerning \uv{nebud} \uv{labut}. +24.9.97 lamstex.zip Pribalena zaplata pro lams*.mf. +6.10.97 cstocs2.zip Prevzata verze cstocs od pana Tkadlece +6.10.97 mnu.zip czech.dsi od pana Ginzela, prekompilovan rempks.exe +6.10.97 minitex2.zip, minitex3.zip Zaneseny zmeny z 6.10.97. +19.11.97 txwdll.zip Nove zabalene knihovny pro MS Win. +20.10.97 @ctimne.txt Pridana informace o nedestruktivnosti install.bat. +22.1.98 cstocs2.zip Opravena chyba r' R' u' U'. +22.1.98 mnu.zip inibat.mnu Uprava textu 1250_il2 -> 1250 +22.1.98 minitex2,3.zip Zaneseny vyse uvedene opravy. +27.1.98 texwin.zip, txwdll.zip Aktualizace podle pana Kroba. +13.2.98 cslatex-12-97.tar Aktualni verze LaTeXu 97/12 a aktualni pocesteni +13.2.98 cslatex.zip Aktualni pocesteni LaTeXu od pana Snajdra +13.2.98 csplain.tar,zip Aktualni czech.sty, slovak.sty od p. Snajdra +13.2.98 l2base.zip l2input.zip l2tools.zip Aktualni LaTeX 97/12 z emTeXu +13.2.98 emxrsx.zip first.zip german.zip emtexdoc.zip Aktualni emTeX +13.2.98 makeinst.bat i-all.ba i-big.ba i-small.ba Podle aktualniho emtexu +16.2.98 cslatex-12-97.tar Pridan chybejici soubor texsys.cfg (chyba z 13.2.) +17.2.98 csfonts.tar Opraven puvodne vadny cmr17.vf +17.2.98 README.web2c, README Aktualizovana dokumentace +17.2.98 enctex.tar Zarazen do distribuce CSTeXu +24.2.98 enctex.tar il2-t1, 1250-t1, opraven chybny kod pismene \'s +9.3.98 cstetex-bin-1.3.tar.gz Binarky pro tetex s ceskym I/O a glibc. +16.3.98 csplain.tar csplain.ini -- pridana detekce encTeXu +19.3.98 csplain.tar,zip czech/slovak.sty -- pridana navaznost na Babel. +26.3.98 cspsfont(s).tar,zip IL2*.fd -> il2*fd + oprava podle p. Wagnera +26.3.98 csplain.tar,zip czech/slovak.sty -- ProvidesPackage bez pripony +27.3.98 enctex.tar pridan soubor enctex.patch-to-7.2 +1.4.98 README.web2c-7.2 novy popis instalace z web2c 7.2 +1.4.98 texk-7.2,texmflib-7.3,etexlib-2.0,omegalib-1.5, + pdftexlib-0.12f,cspdftexlib.tar.gz Nove balicky pro web2c 7.2 +3.4.98 bin-web2c7.2-linuxi-libc5.tar.gz, README.bin-web2c7.2 pridano +7.5.98 README.web2c-7.2 , pridana sekce o omlazeni pdftexu +7.5.98 cspdftexlib.tar.gz aktualizovany soubory pdftex.cnf a rawfnts.map +7.5.98 bin-web2c7.2-linuxi-libc5.tar.gz pridan novy pdftex 0.12l +25.6.98 cspdftexlib.tar vyhodil jsem DC fonty a pridal jsem type1 CS fonty +10.8.98 RPMS/i386/*.rpm zamena RPM baliku *-2 za *-4. +10.8.98 README.web2c-7.2 drobna (nepodstatna) uprava textu +11.8.98 enctex.tar soubor encmacro.tex: oprava makra \redefaccent +9.11.98 README.web2c-7.2 aktualizace kapitoly "Omlazeni pdftexu" +10.11.98 README.web2c-7.2 oprava textu kapitoly "Omlazeni pdftexu" +19.11.98 enctex.tar pridani tabulky 1250-latex +26.11.98 csfonts.tar.gz, fontcs.zip oprava vf/cm2cs/cm*17.vf +27.11.98 RPMS/i386/*.rmp zamena RPM baliku *-5 za *-7. +2.12.98 csplain.tar,zip pridani moznosti vyuzit enctex +4.12.98 cslatex-06-98.tar, cslatex,l2base,l2input.zip Aktualizace csLaTeXu +22.12.98 nova www stranka CSTeXu a licencni soubor license.eng/cz +22.12.98 nova adresarova struktura FTP CSTeXu (web2c, emtex, tetex-rpm) +22.12.98 csfonts.tar/fontcs.zip, csplain.tar/zip, cspsfonts.tar/zip + enctex.tar, csindex-*.tar.gz dokumentace v souladu s licenci. +5.1.99 license.eng/cz oprava adresy na horakk@math.cas.cz +10.2.99 csfonts.tar vymazan zavleceny cscspu.mf z Computer Modern +19.3.99 cspsfonts.tar, cspsfont.zip do cavatga.tex a dalsich pridano + makro \setsimplemath +24.3.99 cspsfonts.tar, cspsfont.zip zmena nazvu fontu *8t -> *8u +15.4.99 cslatex.tar premisteni adresare cslatex z tex/latex/ do tex/ +15.4.99 cslatex.tar,zip csplain.tar,zip opraveni chyby v czech/slovak.sty +15.4.99 aktualizace README.web2c-7.2 +19.5.99 minitex3.zip oprava volani dviscrs v tiskarny.bat +24.5.99 cstrip.tar.gz zverejnen test csplainu +28.5.99 cspsfonts.tar,zip logo \TeX pro ruzne rodiny podle I. Jancika +14.6.99 cslatex.tar zmena defaultniho hyphen.cfg, nyni i T1 kodovani +14.6.99 README.tetex-1.0 novy popis pocesteni teTeXu 1.0 +14.6.99 csfonts-t1.tar novy archiv obsahujici pouze Type1 CSfonty +14.6.99 enctex, cspdftexlib, *lib, texk-7.? presunuto do adresare old/ +25.2.00 csplain.tar: pridana podpora kodovani podle Corku +19.7.02 opravy v czech/slovak.sty (ver. 2.4) podle pripominek pana Kubena +28.8.02 cslatex.tar: opravena nekonzistence mezi docstipovymi vzory a obrazy +25.9.02 zalozen adresar base/ (podle pripravovane dokumentace cstexman) +30.10.02 zverejnen Manual k CSTeXu: doc/cstexman.tex,ps,pdf +30.10.02 parpozn.tex,ps,pdf presunut z korene do adreare doc/ +30.10.02 vytvoren link cstexman.pdf v koreni ftp adresare CSTeXu +1.9.03 pridana podpora pro Macioindni kodovani macce.tar.gz +3.9.03 oprava v macce.def (@tabbacklude, ensuremath) +10.9.05 csplain.tar.gz, cslatex.tex.gz: pridana podpora UTF8 pomoci encTeXu +*.10.12 csplain.tar: rozsahle zmeny, viz http://petr.olsak.net/cstex.html +*.10.12 cslatex.tar: CSLaTeX prohlasen za zastaraly a nepodporovany +*.10.12 cspsfonts.tar: pregenerovany metriky, pridan Charter +*.11.12 csplain.tar: podpora 16bit, UTF-8, multi-patterns +*.11.12 beta testing OPmac diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 6bb057e1121..9603bd7312a 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -123,8 +123,8 @@ my @TLP_working = qw( countriesofeurope counttexruns courier-scaled courseoutline coursepaper coverpage covington cprotect - crbox crop crossreference crossword crosswrd cryst csbulletin - csquotes csquotes-de csvsimple csvtools + crbox crop crossreference crossword crosswrd cryst + cs csbulletin cslatex csquotes csquotes-de csvsimple csvtools csplain cstex ctanify ctanupload ctable ctex ctex-faq cursolatex cuisine currfile currvita curve curve2e curves diff --git a/Master/tlpkg/tlpsrc/collection-langczechslovak.tlpsrc b/Master/tlpkg/tlpsrc/collection-langczechslovak.tlpsrc index 249208c3bff..d5f37937246 100644 --- a/Master/tlpkg/tlpsrc/collection-langczechslovak.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-langczechslovak.tlpsrc @@ -5,6 +5,7 @@ depend cs depend csbulletin depend cslatex depend csplain +depend cstex depend vlna depend hyphen-czech depend hyphen-slovak diff --git a/Master/tlpkg/tlpsrc/cslatex.tlpsrc b/Master/tlpkg/tlpsrc/cslatex.tlpsrc index 5fe879b8eb5..1630221b21d 100644 --- a/Master/tlpkg/tlpsrc/cslatex.tlpsrc +++ b/Master/tlpkg/tlpsrc/cslatex.tlpsrc @@ -1,9 +1,9 @@ depend latex # execute AddFormat name=cslatex engine=pdftex \ - options="-etex -translate-file=cp227.tcx cslatex.ini" + options="-etex cslatex.ini" execute AddFormat name=pdfcslatex engine=pdftex \ - options="-etex -translate-file=cp227.tcx cslatex.ini" + options="-etex cslatex.ini" # binpattern f bin/${ARCH}/cslatex binpattern f bin/${ARCH}/pdfcslatex diff --git a/Master/tlpkg/tlpsrc/csplain.tlpsrc b/Master/tlpkg/tlpsrc/csplain.tlpsrc index 1e5720ea546..43e11b65815 100644 --- a/Master/tlpkg/tlpsrc/csplain.tlpsrc +++ b/Master/tlpkg/tlpsrc/csplain.tlpsrc @@ -1,8 +1,17 @@ depend tex +# +# these invocations from Petr Olsak. execute AddFormat name=csplain engine=pdftex \ - options="-etex -translate-file=cp227.tcx csplain.ini" + options="-etex -enc csplain-utf8.ini" execute AddFormat name=pdfcsplain engine=pdftex \ - options="-etex -translate-file=cp227.tcx csplain.ini" + options="-etex -enc csplain-utf8.ini" +# +# intentionally no user-level executables for these formats, also named +# pdfcsplain (a la ConTeXt). +execute AddFormat name=pdfcsplain engine=xetex \ + options="-etex csplain.ini" +execute AddFormat name=pdfcsplain engine=luatex \ + options="-etex csplain.ini" # binpattern f bin/${ARCH}/csplain binpattern f bin/${ARCH}/pdfcsplain diff --git a/Master/tlpkg/tlpsrc/cstex.tlpsrc b/Master/tlpkg/tlpsrc/cstex.tlpsrc new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/Master/tlpkg/tlpsrc/cstex.tlpsrc |