summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/enctex/encdoc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/generic/enctex/encdoc.tex')
-rw-r--r--Master/texmf-dist/doc/generic/enctex/encdoc.tex1168
1 files changed, 1168 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/enctex/encdoc.tex b/Master/texmf-dist/doc/generic/enctex/encdoc.tex
new file mode 100644
index 00000000000..f9007af6efa
--- /dev/null
+++ b/Master/texmf-dist/doc/generic/enctex/encdoc.tex
@@ -0,0 +1,1168 @@
+% EncTeX documentation
+%%%%%%%%%%%%%%%%%%%%%%
+% Petr Olsak
+
+% see encdoce-e.tex for English version of this documentation
+
+\chyph % zpracujte formatem csplain
+
+\def\Red{}
+\def\Black{}
+\def\Blue{}
+\def\Green{}
+\def\beglink#1{}
+\def\endlink{}
+\def\aimlink#1{}
+\def\urllink#1{{\tt#1}}
+\def\urllinkk#1#2{{\tt#1}}
+
+\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%%
+\ifnum\pdfoutput>0
+
+\ifx\pdfannotlink\undefined % Verze pdfTeXu >= 14
+ \let\pdfannotlink=\pdfstartlink
+\fi
+
+
+\def\beglink#1{% % Začátek textu odkazu, #1 je klíč odkazu
+ \Green \pdfstartlink 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\urllinkk#1#2{\pdfannotlink height 10pt depth 3pt
+ user{/Border[0 0 0]/Subtype/Link/A << /Type/Action/S/URI/URI(#2)>>}\relax
+ \Green{\tt #1}\Black\pdfendlink}
+\def\urllink#1{\urllinkk{#1}{#1}}
+
+
+\def\pdfsetcmykcolor#1{\special{PDF:#1 k}}
+\def\Red{\leavevmode\pdfsetcmykcolor{0.1 0.9 0.9 0}}
+\def\Black{\leavevmode\pdfsetcmykcolor{0 0 0 1}}
+\def\Green{\leavevmode\pdfsetcmykcolor{0.9 0.1 0.9 .3}}
+\def\Blue{\leavevmode\pdfsetcmykcolor{0.9 0.9 0.1 0}}
+
+\pdfcompresslevel=9
+\pdfinfo{/Author (Petr Olsak)
+ /CreationDate (Feb. 2003)
+ /ModDate (Jun. 2004)
+ /Creator (TeX)
+ /Producer (pdfTeX)
+ /Title (encTeX)
+ /Subject (Documentation)
+ /Keywords (TeX, fonts)
+}
+
+\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%%
+
+
+\font\titulfont=\fontname\tenbf\space scaled\magstep4
+\font\bigbf=\fontname\tenbf\space scaled\magstep1
+
+\parindent=12pt
+
+\newcount\secnum \newcount\subsecnum
+
+\def\kap #1\par{\ifnum\secnum>0 \goodbreak\fi\removelastskip
+ \vskip2\baselineskip
+ \subsecnum=0 \advance\secnum by1
+ \noindent{\bigbf\llap{\the\secnum.\quad}#1}\par\nobreak\medskip}
+\def\sec #1\par{\removelastskip\bigskip
+ \advance\subsecnum by1
+ \noindent{\bf \llap{\aimlink{\the\secnum.\the\subsecnum}%
+ \the\secnum.\the\subsecnum.\quad}#1}\par\nobreak\medskip}
+\def\title #1\par{\vglue2\baselineskip
+ \centerline{\titulfont #1}\vskip2\baselineskip}
+\def\date #1\par{\bigskip#1\par}
+\def\author #1\par{\bigskip#1\par}
+
+\catcode`<=13
+\def<{\hbox\bgroup\catcode`_=\active\relax\skoba}
+\def\skoba #1>{$\langle$\it#1\/$\rangle$\egroup}
+\def\,{\thinspace}
+{\catcode`_=\active \gdef_{\_}}
+
+{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
+\def\begtt{\medskip\bgroup \setverb \activespace
+ \catcode`\"=12 \catcode`_=13
+ \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1}
+ \obeylines \startverb}
+{\catcode`\|=0 \catcode`\\=12
+|gdef|startverb#1\endtt{|tt#1|egroup|medskip|testpar}}
+\long\def\testpar#1{\ifx\par#1\else\noindent\fi#1}
+
+\catcode`"=13
+\def"{\leavevmode\hbox\bgroup\setverb\activespace\tt\readverb}
+\def\readverb #1"{#1\egroup}
+
+\def\begitems{\medskip\bgroup \catcode`*=13 }
+{\catcode`*=13 \gdef*{\item{$\bullet$}}}
+\def\enditems{\medskip\egroup}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+{\nopagenumbers
+
+\vglue 4cm
+
+\centerline {\titulfont Enc\TeX}
+\vskip2cm
+\centerline {\titulfont možnost překódování vstupu v~\TeX{}u}
+
+\vskip3cm
+
+\centerline {\bigbf Petr Olšák}
+
+\vskip2cm
+
+\centerline{\urllinkk{www.olsak.net/enctex.html}{http://www.olsak.net/enctex.html}}
+
+\vfil
+
+\centerline {\bigbf Toto je dokumentace k~verzi Feb. 2003 a Jun. 2004}
+
+\vskip 4cm
+\break
+
+\null \vfil
+
+Enc\TeX{} je volné programové vybavení; můžete jej dále šířit
+a modifikovat podle podmínek \uv{GNU General Public License}, kterou
+publikovala "Free Software Foundation"; použijte verzi 2 této licence
+nebo (podle Vaší volby) libovolnou pozdější verzi.
+
+Balíček najdete na Internetu na
+\urllink{ftp://math.feld.cvut.cz/pub/olsak/enctex/}.
+
+
+Tento balíček je rozšiřován v~naději, že bude užitečný, avšak BEZJAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo
+VHODNOSTI PRO URČITÝ ÚČEL. Další podrobnosti hledejte v~Obecné veřejné
+licenci GNU.
+
+Kopii \uv{GNU General Public License} jste měl obdržet spolu s~tímto
+programem; pokud se tak nestalo, napište o~ni Free Software Foundation,
+Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Český překlad této
+licence najdete na "http://www.gnu.cz/gplcz.html".
+
+\bigskip
+\copyright\quad 1997, 2002, 2003, 2004\enspace RNDr. Petr Olšák
+
+\bigskip
+
+\TeX{} je ochranná známka American Mathematical Society.
+
+\bigskip
+Autor \TeX{}u je profesor Donald Knuth. \TeX{} je volné programové
+vybavení se specifickou licencí, viz dokumentaci k~tomuto programu.
+
+\break
+}
+
+\kap Základní informace
+ %%%%%%%%%%%%%%%%%%
+
+Balík enc\TeX{} je jednoduché rozšíření \TeX{}u pro takové implementace, ve
+kterých se \TeX{} instaluje ze zdrojového kódu "tex.web". Tuto
+podmínku například splňuje implementace web2c, určená pro UNIXy
+a jiné operační systémy s~kvalitním překladačem jazyka C.
+
+Rozšíření enc\TeX{} je zpětně kompatibilní s~originálním
+\TeX{}em. Přidává deset nových primitivů, kterými lze číst nebo
+naplňovat vnitřní kódovací tabulky, podle nichž je znak transformován
+na úrovni vstupního procesoru \TeX{}u nebo při výstupu na terminál, do
+"log" souboru a "\write" souborů. Tyto tabulky se ukládají do
+formátových souborů, takže po načtení formátu se inicializují ve
+stejném stavu, v~jakém byly v~okamžiku příkazu "\dump".
+
+Změna \TeX{}u je důkladně testovaná a prošla též testem TRIP
+s~těmito dvěma odlišnostmi:
+
+\begitems
+* Odlišný banner
+* Počet \uv{multiletter control sequences} je o~deset větší.
+\enditems
+
+\sec Instalace
+% ---------
+
+Viz soubor "INSTALL".
+
+\sec Verze
+% -----
+
+V~roce 1997 byla zveřejněna první verze enc\TeX{}u, která umožňovala
+konverze pouze v~režimu \uv{byte na byte} a nastavovala tisknutelnost
+znaků (primitivy "\xordcode", "\xchrcode", "\xprncode").
+
+V~roce 1998 obnovil někdo z~Polska používání TCX tabulek ve web2c
+\TeX{}u. Protože enc\TeX{} z~roku 1997 dělal víceméně totéž a
+používání obou nadstaveb současně by mohlo být pro mnoho uživatelů
+matoucí, přestal jsem enc\TeX{} prosazovat. Ovšem v~roce 2002
+jsem se rozhodl přidat do enc\TeX{}u podporu UTF-8 kódování, protože
+tato podpora není a asi nebude v~TCX tabulkách implementována.
+V~prosinci 2002 jsem se tedy rozhodl znovu začít propagovat enc\TeX{},
+který navíc zvládne UTF-8 kódování.
+
+Verze enc\TeX{}u "Feb.2003" přidává dalších
+7~primitivů "\mubyte", "\endmubyte", "\mubytein", "\mubyteout",
+"\mubytelog", "\specialout" a "\noconvert". To umožní definovat vstup
+pro UTF-8 kódované soubory. Tato verze je samozřejmě zpětně
+kompatibilní s~původní verzí enc\TeX{}u z~roku 1997. Neplánuji do
+budoucna žádné rozsáhlejší změny. Pokud přeci jenom k~nějakým změnám
+dojde, pak vždy budou zpětně kompatibilní se stávajícím řešením
+
+Verze "Jun.2004" opravuje jen některé drobné chyby a nepřídává žádné
+nové funkce (podrobněji viz soubor "enctex.patch-jun2004").
+
+
+\sec Enc\TeX{} ve web2c distribuci
+% -----------------------------
+
+Enc\TeX{} se v~\TeX{}u, pdf\TeX{}u, e-\TeX{}u a pdfe\TeX{}u
+v~distribuci web2c inicializuje pomocí přepínače "-enc" na příkazové
+řádce. Tento přepínač je nutno použít při inicializaci formátu.
+V~takovém případě enc\TeX{} uloží své primitivy a svá data do formátu. Při
+použití formátu už není nutné přepínač "-enc" psát znova. Enc\TeX{} se
+v~tomto případě inicializuje z~formátu a napíše o~tom zprávu na terminál
+a do log souboru. Pokud nepoužijete přepínač "-enc" v~době generování
+formátu, ale použijete jej až při použití formátu, pak
+\TeX{} vypíše varování o~neexistenci enc\TeX{}u ve formátu a přepínač
+"-enc" je ignorován.
+
+Ve web2c distribuci pracují se stejnými kódovacími vektory xord a xchr
+(pro překódování byte na byte) jednak enc\TeX{} a jednak tzv. TCX tabulky
+(při použití přepínače "-translate-file"). Určitému konfliktu se tedy při
+současném používání obou rozšíření nevyhneme.
+Je-li v~enc\TeX{}u použita TCX tabulka, pak při startu \TeX{}u
+přepíše hodnoty "\xordcode", "\xchrcode" a "\xprncode" podle sebe.
+Znamená to, že při použití ini\TeX{}u pak nemusejí platit implicitní
+hodnoty těchto kódů dokumentované v~sekci 2.2 a při použití formátu
+s~enc\TeX{}em jsou hodnoty těchto kódů, které si do formátu uložil
+enc\TeX{}, přepsány podle TCX tabulky. O~této skutečnosti enc\TeX{}
+náležitě informuje na terminálu a v~logu. Při běhu programu pak můžete
+enc\TeX{}ovými primitivy tyto kódy dále číst a měnit. Použití TCX
+tabulky tedy nevylučuje možnosti enc\TeX{}u.
+
+\sec Problém s~licencí \TeX{}u
+% -------------------------
+
+Enc\TeX{} rozšiřuje \TeX{} o~nové primitivy, takže bychom neměli tomuto
+programu říkat \TeX{}. Na druhé straně ale Knuth samotný předpokládá,
+že vnitřnosti \TeX{}u budou odstíněny od prostředí operačního
+systému. Proto implementoval xord a xchr vektory. V~enc\TeX{}u můžeme
+nastavit podle zvyklostí operačního systému vstupní a výstupní
+překódovací tabulky a pak nastavit všem novým primitivům význam
+"\undefined". Dále se bude \TeX{} modifikovaný enc\TeX{}em chovat stejně,
+jako originální \TeX{}. Navíc můžeme překódovací tabulky nastavit při
+generování formátu a v~produkční verzi \TeX{}u zakázat přístup
+k~primitivům. Produkční verze \TeX{}u se pak chová zcela stejně jako
+originální \TeX{}. Knuth předpokládá, že odstínění od prostředí
+operačního systému se provede vždy při kompilaci zdrojového kódu
+\TeX{}u, zatímco enc\TeX{} umožňuje tuto otázku řešit později,
+například v~době generování formátu. Umožnění úpravy některých
+(například paměťových) parametrů až za běhu \TeX{}u také není nic
+nového a známe to skoro u~všech distribucí \TeX{}u.
+
+Domnívám se, že druhý řádek na terminálu a v~logu dostatečně informuje
+o~tom, že se jedná o~modifikovanou verzi \TeX{}u. Také se domnívám, že
+pokud se velmi rozšíří kódování UTF-8, pak není zbytí a takové
+konverze jsou v~8 bitové verzi \TeX{}u nezbytné.
+
+Je důležité rovněž připomenout, že implicitní chování enc\TeX{}u je
+takové, že pokud se nepoužijí rozšířené primitivy enc\TeX{}u, pak se
+chová naprosto stejně jako originální \TeX{}.
+
+Podle mého názoru novější implementace web2c \TeX{}u taky není v~přísném
+slova smyslu \TeX{}. Umožňuje totiž změnu chování programu, pokud na
+prvním řádku dokumentu za znaky "%&" je cosi specifického napsáno. To
+je podle mého názoru větší přestupek oproti licenci \TeX{}u, než
+enc\TeX{}ovými primitivy nastavit ve formátu prostředí systému a pak tyto
+primitivy v~produkční verzi \TeX{}u zakázat.
+
+
+\kap Překódování byte na byte pomocí vektorů xord, xchr
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\sec Vektory xord a xchr
+% -------------------
+
+Vektory xord a xchr mají velikost 255 bytů a obsahují informaci
+o~překódování znaku vstupujícího do \TeX{}u nebo vystupujícího na
+terminál a do textových souborů. Jedná se o~pole vestavěná do
+programu, přes která jsou filtrovány veškeré textové vstupní a
+výstupní informace. Má-li znak na vstupu kód $x$ a chceme, aby měl
+uvnitř \TeX{}u kód $y$, pak musí být nastaven vektor xord tak, aby
+xord[$x$]=$y$. Při zpětném výstupu znaku na terminál, do logu a do
+souborů zpracovávaných pomocí "\write" platí tato pravidla: Není-li znak
+s~kódem $y$ označen jako \uv{tisknutelný}, pak vystupuje pomocí přepisu
+"^^"kód~$y$. Je-li tisknutelný, pak vystupuje s~kódem $z$=xchr[$y$].
+
+Standardně bývají v~systémech s~kódem ASCII nastaveny hodnoty těchto
+vektorů tak, že
+\medskip
+xord[$i$]=xchr[$i$]=$i$ pro všechna $i$ v~rozsahu 0~až~255.
+\medskip
+Na systémech, které nepoužívají ASCII, se může mapovat 94
+tisknutelných ASCII znaků jinam. Mimoto je deklarovaná vlastnost
+\uv{tisknutelnosti} znaku v~ASCII takto: Znak je tisknutelný, pokud má
+kód~$y$ v~rozsahu 32 až 126. Ostatní znaky se považují za netisknutelné a
+\TeX{} je standardně přepisuje pomocí dvojité stříšky.
+
+Po instalaci balíčku enc\TeX{} je možno přímo nastavovat a číst obsahy
+vektorů xord a xchr prostřednictvím primitivů "\xordcode"
+a "\xchrcode" a dále nastavovat vlastnost \uv{tisknutelnosti} znaku
+pomocí primitivu "\xprncode". Syntaxe všech tří nových primitivů
+je naprosto stejná, jakou známe například u~primitivů "\lccode" a
+"\uccode". Například:
+
+\begtt
+\xordcode"AB="CD \xchrcode\xordcode"AB="AB \the\xchrcode200
+\endtt
+%
+nastavuje xord[0xAB]=0xCD; xchr[xord[0xAB]]=0xAB a dále vytiskne
+hodnotu xchr[200].
+
+Na rozdíl od podobných primitivů "\catcode", "\lccode", "\sfcode" a
+dalších však nově zavedené primitivy mají jednu podstatnou výjimku.
+Reprezentují interní registry \TeX{}u, které vždy mají globální
+platnost. Proto je nastavení "\xordcode" a "\xchrcode" uvnitř
+skupiny za všech okolností globální, ačkoli to explicitně nepíšeme.
+Ústupem z~požadavku na možnost lokálního deklarování
+hodnot jsem dosáhl podstatně větší efektivity výsledného kódu programu.
+
+
+\sec Tisknutelnost znaků nastavená pomocí {\tt\char`\\xprncode}
+% ----------------------------------------------------------
+
+Primitiv "\xprncode" umožňuje nastavovat vlastnost \uv{tisknutelnosti}
+znaku takto: Znak s~kódem $y$ je tisknutelný právě tehdy, když je
+$y$ v~rozsahu 32 až 126 nebo je "\xprncode" $y > 0$. Napíšeme-li například
+"\xprncode255=1", bude tisknutelný znak s~kódem 255. Na druhé straně,
+nastavení "\xprncode`a" třeba na nulu nemá na chování programu žádný
+vliv, protože kód znaku "a" je v~rozsahu 32 až 126. Tímto
+opatřením program vykazuje určitý pud sebezáchovy, protože zlý uživatel
+by mu mohl nastavit všechny znaky jako netisknutelné a program by ztratil
+schopnost se vyjadřovat. Hodnoty "\xprncode" lze nastavit jako u~ostatních
+nových primitivů v~rozsahu nula až 255, ovšem otázka tisknutelnosti je
+totožná s~otázkou na kladnou hodnotu bez ohledu na to, jak velká tato
+hodnota je.
+
+Výchozí hodnoty pro kódování v~době ini\TeX{}u jsou následující:
+
+\vbox{
+\begitems
+* "\xordcode" $i$ = $i$ pro všechna $i$ v~rozsahu 0...255,
+* "\xchrcode" $i$ = $i$ pro všechna $i$ v~rozsahu 0...255,
+* "\xprncode" $i$ = 0 pro $i$ v~rozsahu 0...31, 127...255,
+* "\xprncode" $i$ = 1 pro $i$ v~rozsahu 32...126.
+\enditems
+}
+
+První dva řádky jsou pravdivé jen na operačních systémech, které přijaly
+kódování anglické abecedy podle ASCII. Pokud tomu tak není, pak jsou
+výchozí hodnoty vektorů xord a xchr pozměněny tak, aby mapovaly tisknutelné
+znaky podle systému do ASCII uvnitř \TeX{}u. Taková změna se týká jen 95
+základních tisknutelných znaků, které jsou v~ASCII na pozicích
+32~až~126.
+
+
+\kap Konverze více bytů na jeden byte nebo kontrolní sekvenci
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Od verze Dec 2002 enc\TeX{} umí také konvertovat na úrovni vstupního
+procesoru více bytů na jeden byte nebo kontrolní sekvenci.
+Při výstupu do logu a "\write" souborů je pak tento objekt
+zpětně převeden na původních více bytů. Tato vlastnost nechce nahradit
+chybějící interpret regulárních výrazů ve vstupním procesoru \TeX{}u.
+Byla implementována pouze z~důvodu umožnit pracovat s~UTF-8 kódovanými
+soubory v~běžném 8 bitovém \TeX{}u tak, že znaky z~UTF-8
+z~nejčastěji používané abecedy mohou být mapovány na jeden znak,
+který může mít svůj "\catcode", "\uccode" atd. Jiné znaky
+z~UTF-8 mohou být mapovány na libovolné kontrolní sekvence.
+
+Pro nastavení takové konverze jsou do \TeX{}u přidáno nový pět
+primitivů: "\mubytein", "\mubyteout", "\mubytelog", "\mubyte" a "\endmubyte".
+Primitivy "\mubytein", "\mubyteout" a "\mubytelog" jsou celočíselné
+registry implicitně s~nulovou hodnotou, tj. konverze vstupu a výstupu
+podle konverzní tabulky se neprovádějí. Je-li "\mubytein" nastaveno na
+kladnou hodnotu, \TeX{} okamžitě zahájí konverze vstupního řádku podle
+konverzní tabulky. Je-li "\mubyteout" nastaveno na kladnou hodnotu,
+\TeX{} začne konvertovat do výstupních "\write" souborů podle
+stejné konverzní tabulky. Při kladném "\mubytelog" bude \TeX{} zpětně
+konvertovat také výstup do logu a na terminál.
+Implicitně je konverzní tabulka prázdná a
+jednotlivé řádky se do ní přidávají pomocí dvojice primitivů
+"\mubyte", "\endmubyte" s~touto syntaxí:
+
+\begtt
+\mubyte <first_token><one_optional_space><optional_prefix><byte_sequence>\endmubyte
+\endtt
+
+Každá <byte_sequence> bude převedena ve vstupním procesoru na
+<first_token>. Je-li <first_token> znakem (tj. není to kontrolní
+sekvence), pak se ignoruje jeho kategorie, protože konverze je
+prováděna v~input procesoru podle schématu: <byte_sequence> na jeden
+<byte>. Při výstupu do logu a "\write" souborů se pak každý takový
+<byte> znovu převede na <byte_sequence>.
+
+Pokud je <first_token>
+kontrolní sekvence, pak se na úrovni vstupního procesoru promění
+každá <byte_sequence> na tuto kontrolní sekvenci implementovanou ve formě
+neměnitelného tokenu. Token procesor tuto sekvenci tedy znovu
+neinterpretuje a zůstává za ní ve stavu neignorování mezer. Při
+{\catcode`\<=12 "\mubyteout<2"} není při výstupu do "\write"
+souborů tato kontrolní sekvence zpětně převáděna na původní <byte_sequenci>,
+ale podléhá jen běžné expanzi, jako ostatní kontrolní sekvence.
+Při "\mubyteout>=2" se i tyto kontrolní sekvence převádějí do
+"\write" souborů na původní <byte_sequence>. Aby se ale mohly převést,
+nesmějí před tím expandovat, tj.~musejí
+mít v~době expanze význam neexpandovatelné kontrolní sekvence
+nebo musejí být označeny pomocí "\noexpand".
+Při "\mubyteout>=3" enc\TeX{} potlačí expanzi kontrolních sekvencí
+deklarovaných v~"\mubyte" automaticky (podrobněji viz sekci~3.8).
+Výstup do logu a na terminál, který není produktem příkazu "\write",
+ponechává i při kladném "\mubytelog" kontrolní sekvence nezměněny.
+
+Význam <optional_prefix> je vysvětlen v~sekci~3.5.
+
+\sec Zanášení údajů do konverzní tabulky
+% -----------------------------------
+
+Záznamy do konverzní tabulky jsou pomocí primitivů "\mubyte", "\endmubyte"
+zanášeny globálně, zatímco hodnoty v~registerch "\mubytein",
+"\mubyteout" a "\mubytelog" mají obvykou lokální platnost.
+
+Dvojice primitivů "\mubyte", "\endmubyte" pracuje analogicky, jako
+dvojice "\csname", "\endcsname". Rozdíl je pouze v~tom, že první token
+<first_byte> se neexpanduje a že za ním může (po expanzi) následovat
+<one_optional_space>. Při skenování <optional_prefix> a
+<byte_sequence> již probíhá úplná expanze a při ní se nesmí objevit na
+vstupu do hlavního procesoru token typu kontrolní sekvence, jinak
+nastane chyba, kterou už známe z~používání "\csname", "\endcsname":
+
+\begtt
+! Missing \endmubyte inserted.
+\endtt
+
+Primitiv "\mubyte" na rozdíl od "\csname" neprovádí činnost na úrovni
+expand procesoru, ale jedná se o~přiřazovací primitiv zpracovaný na
+úrovni hlavního procesoru. Takže po
+
+\begtt
+\edef\a{\mubyte X ABC\endmubyte}
+\endtt
+%
+bude makro "\a" obsahovat tokeny: "\mubyte X ABC\endmubyte".
+
+Příklady:
+
+\begtt
+\mubyte ^^c1 ^^c3^^81\endmubyte % Á
+\mubyte ^^e1 ^^c3^^a1\endmubyte % á
+% atd. -- implementace UTF8
+
+\mubyte \endash ^^c4^^f6\endmubyte % příklad na kontrolní sekvenci
+\mubyte \integral INT\endmubyte % příklad pro ilustraci, viz dále.
+
+\mubytein=1 \mubyteout=1 \mubytelog=1 % od této chvíle je překódování aktivní
+
+\def\endash {--}
+\def\integral {\ifmmode \int\else $\int$\fi}
+\endtt
+
+V~tomto příkladě je v~místě <one optional space> více mezer a
+tabulátorů. Protože tabulátory mají kategorii mezery, jsou všechny
+tyto znaky přeměněny token procesorem na jedinou mezeru požadovanou
+v~syntaktickém pravidle pro "\mubyte", "\endmubyte".
+
+Po použití definic z~příkladu se například slovo INTEGRAL promění v~token
+"\integral" okamžitě následovaný písmeny \uv{EGRAL}. V~textu INT EGRAL
+bude za tokenem "\integral" mezera a teprve pak písmena
+\uv{EGRAL}. Také jsou možné konstrukce typu "\defINT{něco}" apod.
+Když napíšeme "\show INT", dostaneme odpověď:
+
+\begtt
+> \integral=macro:
+->\ifmmode \int \else $\int $\fi .
+l.18 \show INT
+\endtt
+%
+a "\string INT" se expanduje na text: "\integral".
+
+Po deklaraci INT podle předchozího příkladu se může
+stát, že někdo napíše: "\INT". Správně by to mělo vést na prázdnou
+kontrolní sekvenci ("\csname\endcsname") následovanou kontrolní
+sekvencí "\integral". Protože se ale s~prázdnými kontrolními
+sekvencemi v~\TeX{}u moc často nepracuje a pro uživatele by to mohlo
+být matoucí, rozhodl jsem se tuto situaci ošetřit tak, že "\INT" je
+převedeno pouze na token "\integral". Pozor na skutečnost,
+že za sekvencí "\INT" není \TeX{} ve stavu ignorování mezer
+a navíc může za ní okamžitě následovat písmeno.
+
+\sec Vlastnosti konverze
+% -------------------
+
+Multibytové sekvence jsou převedeny ze vstupu pouze tehdy, pokud jsou
+celé obsaženy v~jediném řádku. Přesah do dalšího řádku není
+možný. Připojený "\endlinechar" na konci řádku se může stát předmětem
+konverze podle konverzní tabulky.
+
+Sekvence "^^c3^^81" se nepromění ani po použití definic z~příkladu na
+byte \uv{Á}, protože převod dvojitých zobáků na jednotlivé byty
+probíhá v~token procesoru, tj. později, než převody více bytů na
+jeden podle "\mubyte".
+
+Převod více bytů na jeden byte nebo kontrolní sekvenci
+probíhá později než konverze podle "\xordcode" a při výstupu do "\write" a
+log souborů pak převod podle "\mubyte" probíhá dříve než konverze podle
+"\xchrcode". <byte_sequence> tedy musí obsahovat sekvenci bytů tak, jak
+jsou tyto byty konvertovány ze vstupního souboru pomocí "\xordcode".
+
+Postupné procesy na vstupu a výstupu si můžeme naznačit takto:
+
+\begtt
+vstupní text -> \xordcode -> připojení \endlinechar ->
+ \mubyte -> token procesor -> expanze ...
+argument \write -> expanze -> \mubyte -> \xchrcode -> výstup
+\endtt
+
+Při výstupu do "\write" souborů a logů zpětně konvertované
+<byte_sequence> už nepodléhají další konverzi na formát typu
+"^^c3^^81" ani opakované konverzi podle "\mubyte". Tyto
+<byte_sequence> se pouze převedou podle hodnot "\xchrcode".
+
+Pokud se v~konverzní tabulce vyskytují <byte_sequence> se společným
+začátkem, ale různě dlouhé, pak input procesor enc\TeX{}u (od verze
+Feb.~2003) převádí vždy podle nejdelší možné <byte_sequence>, která se
+na vstupu objeví. Příklad:
+
+\begtt
+\mubyte X A\endmubyte
+\mubyte Y ABC\endmubyte
+\mubyte \foo ABCD\endmubyte
+\endtt
+
+V~tomto příkladě se každé A~konvertuje na X, ale pokud následuje BC,
+pak se skupina ABC konvertuje na Y ovšem s~tou výjimkou, že se skupina
+ABCD konvertuje na "\foo". Na pořadí vkládání údajů do konverzní tabulky
+primitivem "\mubyte" v~tomto případě nezáleží.
+
+Pokud se v~konverzní tabulce objeví dvě stejné <byte_sequence>, pak má
+přednost ta, která byla zanesena do tabulky později.
+
+
+\sec Konverze výstupu do logu a na terminál
+% --------------------------------------
+
+Výstup do logu a na terminál je při nulovém "\mubytelog" ponechán bez
+konverze. Pokud je v~takovém případě "\xprncode" znaku nulový, pak se
+znak vytiskne ve formě "^^A" nebo "^^bc". Při kladném "\mubytelog" se
+znaky zanesené do konverzní tabulky konvertují zpět na
+<byte_sequence>. Do logu a na terminál se ale na <byte_sequence>
+nikdy nekonvertují kontrolní sekvence.
+
+Zpětná konverze do logu a na terminál je nastavována společně
+primitivem "\mubytelog" a nelze ji oddělit tak, že by například pro
+terminál byla zpětná konverze potlačena a pro log soubory nikoli.
+
+Výpisy do logu a na terminál občas obsahují kompletní přepis právě
+čteného řádku, který je například při hlášení chyby rozrtžen na dva
+řádky, aby \TeX{} naznačil místo, kde došlo k~problému. Pro další
+výklad budeme těmto částem logu říkad \uv{přepisy řádků}.
+
+Je-li registr "\mubytein" nulový, pak přepisy řádků
+fungují jako ve standardním \TeX{}u. Je-li "\mubytein" kladný a
+"\mubytelog" nulový, pak je v~přepisech řádků zobrazen obsah řádku až
+po konverzi input procesorem enc\TeX{}u, tj. v~těchto přepisech se
+mohou například vyskytovat kontrolní sekvence, které tam uživatel
+vůbec nenapsal. Jsou-li "\mubytein" i "\mubytelog"
+kladné, pak jsou přepisy řádků realizovány bez multibytové konverze
+tam ani zpět. Probíhá jen konverze podle xchr a xord vektorů.
+Je třeba si uvědomit, že v~tomto případě mohou být chybové výpisy
+poněkud matoucí. Například po
+
+\begtt
+\mubyte \sekvence ABC\endmubyte \let\sekvence=\undefined
+\mubytein=1 \mubytelog=1
+Tady je test ABC a řádek pokačuje.
+\endtt
+%
+dostáváme na výstupu:
+
+\begtt
+! Undefined control sequence.
+l.3 Tady je test ABC
+ a řádek pokačuje.
+?
+\endtt
+%
+Teprve "\show ABC" odhalí:
+
+\begtt
+> \sekvence=undefined.
+l.3 \show ABC
+\endtt
+
+
+\sec Mazání údajů v~konverzí tabulce
+% -------------------------------
+
+Údaje v~konverzní tabulce lze mazat jen hromadně: příkaz vymaže
+všechny údaje začínající na společný první znak v~<byte_sequenci>.
+Provede se to pomocí příkazu "\mubyte <znak> <znak>\endmubyte".
+Například:
+
+\begtt
+\mubyte A A\endmubyte
+\endtt
+%
+odstraní z~konverzní tabulky všechny <byte_sequence> začínající
+písmenem A.
+
+Následující kód promaže celou tabulku:
+
+\catcode`<=12
+\begtt
+{\catcode`\^^@=12
+\gdef\clearmubytes{\bgroup \count255=1
+ \loop \uccode`X=\count255
+ \uppercase{\mubyte XX\endmubyte}%
+ \advance\count255 by1
+ \ifnum\count255<256 \repeat
+ \mubyte ^^@^^@\endmubyte
+ \egroup}
+}
+\clearmubytes
+\endtt
+\catcode`<=13
+
+
+\sec Vstupní a výstupní část konverzní tabulky
+% -----------------------------------------
+
+Konverzní tabulka konstruovaná pomocí "\mubyte", "\endmubyte" má dvě
+nezávislé části: vstupní, se kterou pracuje input procesor a výstupní,
+která se používá při zpětných konverzích. Údaje je možné zanést
+nezávisle do každé části při použití neprázdného <optional_prefix>
+(viz syntaktické pravidlo "\mubyte" na začátku této kapitoly).
+Je-li <optional_prefix>
+prázdný, pak se požadavek na konverzi zanese dvojmo do vstupní i
+výstupní části. Je-li ale <optional_prefix> znak kategorie~8 (obvykle
+znak "_"), pak se údaj zanese jen do vstupní části tabulky. Obsahuje-li
+<optional_prefix> dvojici znaků kategorie~8 (obvykle tedy "__"), pak
+se údaj zanese jen do výstupní části tabulky.
+
+Při <optional_prefix> "__" (výstupní část tabulky) je dovoleno mít
+prázdnou <byte_sequenci>. V~takovém případě se původní
+údaje z~výstupní části tabulky, které odpovídají <first_token>,
+vymažou. Pokud tam žádné takové údaje nebyly, nestane se nic.
+
+Vraťme se ke kódu na vymazání tabulky z~předchozí sekce. Tento kód
+vymaže vše ze vstupní části tabulky a z~výstupní jen ty údaje, které
+jsou vázány na <first_token> ve tvaru <byte>. Údaje z~výstupní části
+vázané na kontrolní sekvence nejsou tímto způsobem promazány.
+Promazání jednoho údaje uděláme pomocí:
+"\mubyte \foo __\endmubyte".
+
+
+\sec Vkládání dalších kontrolních sekvencí
+% -------------------------------------
+
+Je-li <first_token> ve tvaru kontrolní sekvence a navíc
+<optional_prefix> je token kategorie~6
+(obvykle znak "#") následovaný <číslem>,
+pak input procesor ponechá beze změny <číslo> znaků,
+ale vloží před ně deklarovanou kontrolní sekvenci.
+Údaj se zanese jen do vstupní části konverzní tabulky.
+Příklad:
+
+\begtt
+\def\abc{ABC}
+\mubyte X BC\endmubyte \mubytein=1
+\mubyte \foo #3 \abc\endmubyte Nyní ABC přechází na \foo ABC
+\mubyte \foo #1 \abc\endmubyte Nyní ABC přechází na \foo AX
+\endtt
+
+Parametr <číslo> má stejnou syntaxi, jako gramatická kategorie <number>
+z~\TeX{}booku. Například při přímém zápisu dekadických číslic
+může následovat jedna nepovinná mezera, jako v~předchozí ukázce.
+
+Je-li <číslo> rovno nule, pak bude
+ponechána beze změny celá <byte_sequence>, která následuje.
+Výsledek je tedy stejný, jako kdyby <číslo> mělo hodnotu délky
+<byte_sequence>.
+
+Hodnota <čísla> je akceptována jen v~rozsahu 0 až 50. Záporná čísla
+jsou interpretována stejně jako nula a čísla větší než 50 způsobí, že
+input procesor vypne po vložení kontrolní sekvence další konverzi až
+do konce řádku.
+
+Praktický příklad použití:
+
+\begtt
+\mubyte \warntwobytes #2^^c3\endmubyte
+\mubyte \warntwobytes #2^^c4\endmubyte
+\mubyte \warntwobytes #2^^c5\endmubyte
+% atd...
+\def\warntwobytes #1#2{\message{WARNING: the UTF8 code:
+ \noconvert#1\noconvert#2 is not defined i my macros.}}
+\endtt
+
+V~tomto příkladě byl použit nový primitiv enc\TeX{}u "\noconvert",
+jehož vlastnosti jsou uvedeny později v~kapitole~5. Připomínám také,
+že od verze Feb.~2003 nezpůsobují jednoznakové <byte_sequence> kolizi
+s~víceznakovými <byte_sequencemi> se stejným začátkem, takže tento
+příklad neruší konverzi \uv{známých} UTF-8 kódů.
+
+
+
+\sec Rozpoznání začátku řádku
+% ------------------------
+
+Existují-li v~konverzní tabulce <byte_sequence>
+s~prvním znakem shodným s~aktuálním "\endlinechar",
+tj.~<byte_sequence> jsou ve tvaru <endlinechar><zbytek>,
+pak input procesor navíc ověřuje, zda je <zbytek> shodný se
+začátkem každého řádku. Pokud ano, provede požadovanou konverzi.
+Příklad použití:
+
+\begtt
+\bgroup \uccode`X=\endlinechar \uppercase{\gdef\echar{X}}\egroup
+\mubyte \fooB \echar ABC\endmubyte % vyhovuje ABC na začátku řádku
+\mubyte \fooE ABC\echar \endmubyte % vyhovuje ABC na konci řádku
+\mubyte \fooW \spce\space ABC\space \endmubyte
+ % vyhovuje ABC jako slovo s mezerami vpředu i vzadu
+\mubyte \foo #\echar ABC\endmubyte %
+ % je-li ABC na začátku řádku, vloží před něj \foo
+\endtt
+
+
+\sec Potlačení expanze v~parametrech write
+% -------------------------------------
+
+Chceme-li převádět kontrolní sekvence zpětně na <byte_sequence> při
+zápisu do "\write" souborů, musíme potlačit případnou expanzi těchto
+kontrolních sekvencí například pomocí "\let\macro=\relax". Protože ale
+"\write" často pracuje asynchronně a kontrolních sekvencí mapujících
+UTF-8 můžeme mít stovky nebo tisíce, umožňuje enc\TeX{} nastavit
+v~době expanze parametrů "\write" příslušným kontrolním sekvencím
+význam "\relax" automaticky. Dělá to při "\mubyteout>=3" a význam
+"\relax" přiřadí právě těm kontrolním sekvencím, které mají
+ve výstupní části konverzní tabulky neprázdnou <byte_sequenci>.
+Jakékoli jiné expanze mimo parametr "\write" probíhají
+normálním způsobem. Příklad:
+
+\begtt
+\mubyte \foo ABC\endmubyte \def\foo{macro body}
+\mubyteout=2
+\immediate\write16{testwrite: \foo} % zapíše "testwrite: macro body"
+\immediate\write16{testwrite: \noexpand\foo} % zapíše "testwrite: ABC"
+\mubyteout=3
+\immediate\write16{testwrite: \foo} % zapíše "testwrite: ABC"
+\message{testmessage: \foo} % zapíše "testmessage: macro body"
+\message{testmessage: \noexpand\foo} % zapíše "testmessage: \foo"
+\edef\a{testedef: \foo} % expanduje na macro body
+\foo % expanduje na macro body
+\immediate\write16{\meaning\foo} % zapíše "\relax"
+\message{\meaning\foo} % zapíše "macro:->macro body"
+\endtt
+
+Pomocí zápisu "\mubyte <control_sequence> \relax \endmubyte" je možno
+přidělit kontrolní sekvenci příznak, aby se neexpandovala
+v~parametrech "\write" při "\mubyteout>=3", ale na druhé straně nebude
+konvertována do žádné <byte_sequence>, ale vypíše se jako obvykle.
+Uvedený zápis má tedy stejný význam jako
+"\mubyte" <control_sequence>" __\string" <control_sequence>"\space\endmubyte",
+ale navíc šetří pamětí \TeX{}u, neboť \TeX{} není nucen ukládat
+string <byte_sequence> do poolu.
+
+Popsanou vlastnost enc\TeX{}u můžete využít k~vytváření vlastních
+maker, která jinak expandují v~parametrech "\write" a jinak
+\uv{normálně}. Příklad:
+
+\begtt
+\mubyte \writeparameter \relax \endmubyte \def\writeparameter{}
+\def\mymacro{\ifx\writeparameter\relax Tady expanduji ve write.
+ \else Tady expanduji normálně.\fi}
+\endtt
+
+
+\sec Asynchronní zpracování příkazu write
+% ------------------------------------
+
+Je známo, že pokud nepoužijeme "\immediate", pak se argument příkazu
+"\write" expanduje až později: ne v~okamžiku výskytu příkazu.
+Příkaz "\write" si proto uloží do své paměti aktuální
+hodnotu registru "\mubyteout" v~době prvního zpracování a pak
+při expanzi a zápisu do souboru tuto hodnotu použije.
+
+Díky této vlastnosti můžeme třeba pro soubor s~obsahem zapisovat
+s~hodnotou "\mubyteout=3" a současně při zápisu do jiného souboru
+ponecháme hodnotu "\mubyteout=0". To může být žádoucí
+například proto, že soubor je určen ke zpracování programem, který
+nemá implementovánu schopnost práce s~UTF-8 kódováním. Vyzkoušejte:
+
+\begtt
+\newwrite\tocfile \newwrite\indexfile
+\immediate\openout\tocfile=\jobname.toc
+\immediate\openout\indexfile=\jobname.idx
+\mubyteout=3
+\write\tocfile{parametr se bude později konvertovat do UTF-8}
+{\mubyteout=0 \write\indexfile{parametr zůstane nezměněný bez konverze}}
+\write\tocfile{zde se znovu provede konverze}
+\end % a teprve v tento okamžik se všechny tři zápisy provedou
+\endtt
+
+
+\sec Hodnoty registru mubyteout
+% --------------------------
+
+Kromě již zmíněných hodnot 0, 1, 2 a 3 registru "\mubyteout" může být
+někdy užitečné nastavit tento registr na hodnoty $-1$, $-2$ a $-3$.
+Význam těchto hodnot je vysvětlen v~následující tabulce:
+
+\vbox{
+\begtt
+\mubyteout <byte>-><byte_sequence> <cs_name>-><byte_sequence> potlačení expanze
+----------------------------------------------------------------------------
+ 0 ne ne ne
+ 1 ano ne ne
+ 2 ano ano ne
+ 3 ano ano ano
+ -1 ano ne ano
+ -2 ne ne ano
+\endtt
+\relax}
+
+Je-li zapnutá konverze <byte>"->"<byte_sequence>, pak se tato konverze
+provádí i do logu a na terminál, zatímco konverze
+<cs_name>"->"<byte_sequence> a potlačení
+expanze se týkají jen argumentů "\write" a "\special".
+
+
+\kap Argumenty primitivu special
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+V~argumentech "\special" se často objevují texty
+v~přirozeném jazyce (například texty pro záložky do PDF dokumentu).
+Při stále častějším používání UTF-8 je žádoucí, aby tyto texty byly
+kódovány v~tomto kódování. Enc\TeX{} tuto možnost nabízí.
+
+Argument primitivu "\special" je zpracován podle hodnoty celočíselného
+registru "\specialout", který má implicitní hodnotu~0.
+
+\begitems
+* "\speialout=0" -- žádná konverze argumentu se neprovede.
+* "\speialout=1" -- provede se konverze jen podle vektoru xchr.
+* "\speialout=2" -- provede se konverze jen podle hodnoty "\mubyteout".
+* "\speialout=3" -- provede se konverze podle hodnoty "\mubyteout"
+ následovaná konverzí podle xchr.
+\enditems
+
+Primitiv "\special" expanduje svůj argument okamžitě. Při
+"\specialout" 2 nebo 3 se expanze provede podle hodnoty "\mubyteout"
+stejně jako u~primitivu "\write". Pak si příkaz "\special" uloží do
+paměti aktuální hodnoty "\specialout" a "\mubyteout" a tyto hodnoty
+použije ještě jednou při skutečném výstupu argumentu do "dvi" souboru.
+
+
+\kap Primitiv noconvert
+ %%%%%%%%%%%%%%%%%%
+
+Enc\TeX{} zavádí primitiv "\noconvert", který
+potlačí případnou konverzi následujícího znaku nebo kontrolní sekvence.
+Přesněji: primitiv "\noconvert" je neexpandující a v~sazbě neudělá nic
+(podobně jako "\relax"). Pokud se ale
+tento primitiv vyskytne v~argumentu "\message" nebo "\errmessage",
+pak jeho kontrolní sekvence není vůbec vytištěna. Navíc pak následující
+znak není konvertován na <byte_sequenci>, ačkoli třeba je "\mubytelog"
+kladný a znak je uveden ve výstupní části konverzní tabulky.
+
+Primitiv "\noconvert" se chová stejně i v~parametrech "\write" a
+"\special". V~tomto případě navíc může primitiv "\noconvert" potlačit
+konverzi následující kontrolní sekvence, ačkoli je třeba "\mubyteout"
+věší než~2.
+
+Konstrukce "\noconvert\noconvert" vytiskne jedno "\noconvert".
+
+Pokud se má primitiv "\noconvert" vypsat v~jiných situacích (například
+při výpisu kontextu při hlášení o~chybě nebo při různých
+"\tracing..."), pak jeho kontrolní sekvence nemizí a navíc
+neovlivní tisk následujícího znaku.
+
+
+\kap Seznam primitivů enc\TeX{}u
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pro lepší orientaci uvádím přehled nových primitivů enc\TeX{}u:
+
+\begitems
+* "\mubyte" --- zanáší údaje do konverzní tabulky, viz~kap.~3.
+* "\endmubyte" --- separátor pro "\mubyte".
+* "\mubytein" --- registr integer. 0: vícebytová vstupní konverze
+ potlačena, 1 a více: vícebytová vstupní konverze je
+ aktivována.
+* "\mubyteout" --- registr integer, ovlivní konverzi do výstupních
+ souborů "\write" a parametrů "\special", viz~3.10.
+* "\mubytelog" --- registr integer, 0: vícebytová výstupní konverze do
+ logu a na terminál potlačena, 1 a více: vícebytová
+ výstupní konverze je aktivována.
+* "\specialout" --- registr integer, ovlivní zpracování parametrů
+ "\special", viz~kap.~4.
+* "\noconvert" --- podobně jako "\noexpand", ale pro konverze. Viz~kap.~5.
+* "\xordcode" --- přístup k~vektoru xord, viz 2.1.
+* "\xchrcode" --- přístup k~vektoru xchr, viz 2.1.
+* "\xprncode" --- přístup k~vektoru pro tisknutelnost znaků, viz 2.2.
+\enditems
+
+Přehled prefixů při použití
+"\mubyte"<first_token><optional_space><prefix><byte_sequence>"\endmubyte".
+Znak~"#" zde označuje libovolný token kategorie~6 a znak~"_" označuje
+libovolný token kategorie~7.
+
+\begitems
+* žádný prefix --- záznam do vstupní i výstupní tabulky.
+* "_" --- záznam jen do vstupní části tabulky
+* "__" --- záznam jen do výstupní části tabulky
+* "#<číslo>" --- vložení kontrolní sekvence, následujících <číslo> znaků
+ ponechá input procesor beze změny.
+* "\relax" --- kontrolní sekvence nebude expandovat v~parametrech "\write"
+\enditems
+
+Další prefixy se mohou objevit v~budoucích verzích enc\TeX{}u. Vždy
+budou mít kategorie odlišné od 11 a 12, takže pro začátek
+<byte_sequence> je vhodné v~makrech použít token kategorie 11 nebo 12,
+aby se předešlo případnému konfliktu s~budoucí vezí enc\TeX{}u.
+
+
+\kap Dokumentace k~přiloženým souborům maker
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Tato část dokumentace nebyla ve verzi Dec. 2002 revidovaná a je
+ponechána ve stavu z~roku 1997 s~výjimkou následujícího odstavce.
+
+\sec Kódování UTF-8
+% --------------
+
+Pro vstupní kódování UTF-8 jsou připraveny soubory "utf8-csf.tex" a
+"utf8-t1.tex". V~tomto případě je překódování implementováno pomocí
+"\mubyte" a vektory xord, xchr jsou nastaveny tak, že na jejich úrovni
+je zachováno identické zobrazení.
+
+\sec Formáty typu {\tt plain-x-y}
+% ----------------------------
+
+V~balíčku jsou připraveny inicializační soubory pro vygenerování formátu
+podobnému standardnímu formátu plain. Například příkazem
+
+\begtt
+$ tex -ini -enc plain-1250-cs
+\endtt
+
+vygenerujeme formát analogický plainu, který čte vstupní soubory
+v~kódování CP1250 a pracuje s~CS-fonty.
+
+V~balíku jsou k~dispozici tyto inicializační soubory pro plain:
+
+\begtt
+plain-il2-cs ... vstup podle ISO8859-2, textové fonty v TeXu: CS-font
+plain-kam-cs ... vstup podle Kamenických, textové fonty v TeXu: CS-font
+plain-1250-cs ... vstup podle CP1250, textové fonty v TeXu: CS-font
+plain-852-cs ... vstup podle CP852, textové fonty v TeXu: CS-font
+plain-il2-dc ... vstup podle ISO8859-2, textové fonty v TeXu: DC
+plain-kam-dc ... vstup podle Kamenických, textové fonty v TeXu: DC
+plain-1250-dc ... vstup podle CP1250, textové fonty v TeXu: DC
+plain-852-dc ... vstup podle CP852, textové fonty v TeXu: DC
+\endtt
+
+\sec Poznámka k~dlouhým názvům souborů
+% ---------------------------------
+
+Všechny soubory "*.tex" v~balíčku splňují DOSové omezení na délku názvu
+8+3. Výjimkou z~tohoto pravidla jsou pouze soubory plain-x-y popsané
+výše a analogické inicializační soubory pro La\TeX{}. Pokud používáte
+systém, který je omezen na 8+3, doporučuji pro každé kódování zvolit
+jedno písmeno (například c=cs, d=dc, i=il2, w=1250, p=852, k=kam,
+o=koi8, m=mac) a nahradit názvy souborů v~distribuci těmito názvy:
+
+\begtt
+plain-il2-cs.tex plain-ic.tex
+plain-kam-cs.tex plain-kc.tex
+plain-1250-cs.tex plain-wc.tex
+plain-852-cs.tex plain-pc.tex
+plain-il2-dc.tex plain-id.tex
+plain-kam-dc.tex plain-kd.tex
+plain-1250-dc.tex plain-wd.tex
+plain-852-dc.tex plain-pd.tex
+kam-latex.tex latex-ki.tex
+852-latex.tex latex-pi.tex
+\endtt
+
+Obsah "\message" v~souborech {\tt plain-x-y} neměňte. Například formát
+"plain-wc" se po spuštění představí svým plným jménem
+
+\catcode`\<=12
+\begtt
+The format: plain-1250-cs <Sep. 1997>.
+\endtt
+\catcode`\<=13
+
+\sec Kódovací tabulky
+% ----------------
+
+Protože změna vektorů xord a xchr může totálně rozhodit chování
+\TeX{}u zcela k~nepoznání, doporučuji používat určité soubory, které
+nastaví požadované kódování, a dále s~primitivy "\xordcode",
+"\xchrcode" a "\xprncode" za běhu \TeX{}u moc nelaškovat. V~balíčku
+enc\TeX{} jsou k~dispozici soubory, které změnu vektorů pro běžná
+kódování definují. Tyto soubory mají obvyklou příponu tex. Říkáme jim
+kódovací tabulky. Rozlišujeme dva typy kódovacích tabulek.
+
+
+\sec První typ kódovacích tabulek
+% ----------------------------
+
+První typ tabulek deklaruje vnitřní kódování \TeX{}u ve vztahu ke kódování,
+které je běžně používané v~hostitelském operačním systému. Máme-li
+například v~systému kódování ISO-8859-2 a vnitřní kódování \TeX{}u volíme
+podle Corku (kódování je označováno jako T1), pak tabulka musí předefinovat
+xord vektor tak, aby mapoval znaky z~ISO-8859-2 do T1 a vektor xchr musí
+převádět zpátky z~T1 do kódování systému.
+
+Tento typ tabulek je použit v~inicializačních souborech "plain-*.tex" a
+obsahuje v~názvu souboru vstupní i cílové vnitřní kódování \TeX{}u. Podívejte
+se, jak vypadá například tabulka "il2-t1.tex", která definuje vnitřní
+kódování \TeX{}u podle Corku a vstupní kódování ISO8859-2.
+
+Každá tabulka prvního typu čte soubor "encmacro.tex" s~definicemi maker
+"\setcharcode", "\expandto", "\texaccent", "\texmacro" a "\redefaccent".
+
+\begitems
+* "\setcharcode #1 #2 #3 #4 #5 #6 #7" deklaruje \TeX{}ové kódy pro jeden znak.
+ Nastaví xord["#1"]="#2", xchr["#2"]="#1", "\xprncode#2"="#7" a
+ postupně nastaví "\lccode", "\uccode", "\sfcode" a "\catcode" znaku
+ s~kódem "#2" na hodnoty "#3", "#4", "#5" a "#6".
+ Je-li "#1" otazník, pak se xord a xchr nenastaví.
+
+* "\expandto {<definice>}" definuje aktivní podobu znaku "#2" z~posledního
+ "\setcharcode" tak, že tento token expanduje na <definici>. Podrobněji:
+ je-li v~"\setcharcode" uvedeno "#6=13", pak bude každý výskyt znaku "#2"
+ expandovat na <definici>. Není-li v~"\setcharcode" řečeno "#6=13", pak
+ k~expanzi znaku "#2" na <definici> dojde teprve tehdy, když bude
+ (třeba později) nastaveno "\catcode" znaku "#2" na "13".
+
+* "\texaccent" uv{zápis akcentu} připravuje expanzi \uv{zápisu akcentu}
+ na znak s~kódem "#2" z~naposledy použitého "\setcharcode". Například
+ zápis "\v C" bude po načtení souboru il2-t1.tex expandovat na znak
+ s~kódem {\tt\char`\"83}. Pokud zápis pro akcent není v~tabulce uveden,
+ zůstává v~původním významu, tj. třeba "\v g" expanduje na primitiv
+ "\accent", který usadí háček nad písmeno g.
+ K~aktivaci všech \uv{zápisů akcentu} dojde až po použití makra
+ "\redefaccent" (viz níže).
+
+* "\texmacro #1" deklaruje makro "#1" tak, že bude expandovat na znak s~kódem
+ "#2" z~naposledy použitého "\setcharcode". K~předefinování makra "#1"
+ dojde (na rozdíl od "\texaccent") okamžitě. Například makro "\S" bude
+ po načtení souboru "il2-t1.tex" expandovat na znak s~kódem "9F", protože
+ na této pozici je podle Corku znak paragraf.
+
+* "\redefaccent #1" aktivuje expanzi zápisů podle "\texaccent" pro jeden
+ konkrétní akcent "#1".
+\enditems
+
+Kromě toho je na začátku tabulky čten soubor definic závislých na kódování
+textového fontu \TeX{}u. V~naší ukázce jde například o~soubor "t1macro.tex".
+Definují se tam sekvence "\promile", "\clqq" a další.
+
+Může se stát, že nechceme uvedená makra použít, ale hodnoty z~tabulky
+načíst chceme. Pak můžeme přistoupit k~následujícímu triku: Definujeme si
+makra "\setcharcode" až "\redefaccent" sami a dále provedeme načtení tabulky
+takto:
+
+\begtt
+\let\originput=\input \def\input #1 \originput il2-t1
+\let\input=\originput
+\endtt
+
+V~balíčku jsou připraveny tyto tabulky prvního druhu:
+
+\begtt
+Název souboru vstupní kódování vnitřní kódování TeXu
+-------------------------------------------------------------
+il2-csf.tex ISO8859-2 CS-font
+kam-csf.tex Kamenických CS-font
+1250-csf.tex CP1250, MS-Windows CS-font
+852-csf.tex CP852, PC Latin2 CS-font
+il2-t1.tex ISO8859-2 T1 alias Cork
+kam-t1.tex Kamenických T1 alias Cork
+1250-t1.tex CP1250, MS-Windows T1 alias Cork
+852-t1.tex CP852, PC Latin2 T1 alias Cork
+\endtt
+
+Za zmínku stojí první uvedená tabulka "il2-csf.tex", protože ta
+jediná ponechává vektory xord a xchr beze změny. Tuto tabulku
+je tedy možné použít i v~\TeX{}u, který neobsahuje rozšíření
+enc\TeX{}. Všechny ostatní tabulky enc\TeX{} explicitně vyžadují.
+
+
+\sec Druhý typ kódovacích tabulek
+% ----------------------------
+
+Druhý typ tabulek provádí překódování pouze na vstupní straně \TeX{}u. Poznáme
+je podle toho, že nemají na konci názvu značku pro vnitřní kódování \TeX{}u
+(tj. "t1" nebo "csf"), ale značku používanou pro kódování operačního systému
+(např. "il2", "kam"). Třeba tabulka "kam-il2.tex" provádí na vstupní straně
+konverzi z~kódování kamenických do kódování ISO8859-2. Tento typ tabulek
+pozměňuje pouze vektor xchr, ale výstupní vektor xord ponechává beze změny.
+Takovou tabulku použijeme, pokud \TeX{}em načítáme soubor, který je v~jiném
+kódování, než běžně používáme na našem operačním systému. Přitom výstup do
+log, aux apod. ponecháme v~kódování podle našeho systému. Tyto změny
+kódování je možné provádět i v~průběhu zpracování jediného dokumentu.
+
+Druhý typ tabulek navazuje na vstupní kódování deklarované dříve
+tabulkou prvního typu. Nastavení vnitřního kódování \TeX{}u není vůbec
+druhým typem tabulek měněno. Uvedeme příklad. Při generování formátu
+jsme použili tabulku prvního typu "il2-t1.tex", takže vnitřní
+kódování máme podle Corku. Nyní můžeme při zpracování dokumentu na
+přechodnou dobu vybrat některou z~tabulek "*-il2.tex", třeba:
+
+\begtt
+\input kam-il2
+\input dokument
+\restoreinputencoding
+nyní mohu pracovat v původním kódování...
+\end
+\endtt
+
+V~době, kdy probíhá načítání souboru dokument.tex se provádí
+překódování z~Kamenických do T1, uvnitř \TeX{}u se vše zpracovává
+v~T1 a výstup na terminál a do logu máme v~ISO8859-2. V~tomto
+kódování je také zapsán další text pod "\restoreinputencoding".
+Tabulka totiž deklaruje toto makro, aby byl možný návrat k~původnímu
+nastavení vektoru xord.
+
+Při použití tabulek druhého typu musíme dát velký pozor, abychom něco
+neudělali špatně. V~našem příkladě jsou všechny výstupy do souborů
+typu aux v~ISO-8859-2, takže je při opakovaném spuštění \TeX{}u nesmíme
+načítat v~okamžiku, kdy máme nastaven vstupní kód podle Kamenických. To je
+také důvod, proč nedoporučuji generovat formát příkazem "\dump" v~situaci,
+kdy máme načtenou tabulku druhého typu.
+
+\end
+
+
+
+
+
+
+
+
+