summaryrefslogtreecommitdiff
path: root/macros/generic/ofs/doc/ofsdoc.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/ofs/doc/ofsdoc.tex')
-rw-r--r--macros/generic/ofs/doc/ofsdoc.tex2402
1 files changed, 2402 insertions, 0 deletions
diff --git a/macros/generic/ofs/doc/ofsdoc.tex b/macros/generic/ofs/doc/ofsdoc.tex
new file mode 100644
index 0000000000..6d6fe9e42b
--- /dev/null
+++ b/macros/generic/ofs/doc/ofsdoc.tex
@@ -0,0 +1,2402 @@
+% A documentation for OFS package
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% July 2001 Petr Olsak
+% February 2004
+
+% See the ofsdoce.tex for English version of this documentation
+
+\chyph % použijte csplain
+
+\headline={\llap{\tt May 2004}\hfil See the ofsdoc-e.tex for English version
+ of this documentation.\global\headline={\hfil}}
+
+\magnification\magstephalf
+
+\hoffset=4pc
+\voffset=1pc
+\hsize=31.6pc
+\vsize=49pc
+\raggedbottom
+\parindent=15pt
+\emergencystretch=2em
+
+\font\smallbf=csb10 at7pt
+\font\smalltt=cstt8
+\font\smallit=csti8
+\font\smallrm=csr8
+\font\titulfont=\fontname\tenbf\space scaled\magstep4
+\font\bigbf=\fontname\tenbf\space scaled\magstep1
+
+\def\Red{}
+\def\Black{}
+\def\Blue{}
+\def\Green{}
+\def\beglink#1{}
+\def\endlink{}
+\def\aimlink#1{}
+
+\ifx\pdfoutput\undefined\else %%%% pdfTeX is used %%%%%%%%%%
+\ifnum\pdfoutput>0
+
+\ifx \pdfstartlink\undefined %%% PDFTeX version <= 13
+ \let\pdfstartlink=\pdfannotlink
+\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\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 (July 2001)
+ /ModDate (March 2004)
+ /Creator (TeX)
+ /Producer (pdfTeX)
+ /Title (OFS: Olsak's Font System)
+ /Subject (Documentation)
+ /Keywords (TeX, fonts)
+}
+
+\fi\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%% End of pdfTeX macros %%%%%
+
+
+\def\PLAIN #1:{{\smallbf \Red PLAIN\Black\if|#1|\else\space#1\fi}:}
+\def\LATEX #1:{{\smallbf \Red LATEX\Black \if|#1|\else\space#1\fi}:}
+\def\OBA #1:{{\smallbf \Red PLAIN+LATEX\Black \if|#1|\else\space#1\fi}:}
+
+\newcount\secnum \newcount\subsecnum
+
+\def\sec #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\subsec #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\LaTeX{La\TeX}
+
+\catcode`<=13
+\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}}
+\def\,{\thinspace}
+
+{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
+\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
+\def\begtt{\medskip\bgroup \setverb \catcode`@=0 \activespace
+ \parindent=0pt \catcode`\"=12
+ \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"{\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}
+
+\newwrite\indout
+\immediate\openout\indout=\jobname.ind
+\def\inl[#1]{\strut
+ \write\indout{\noexpand\indexentry{#1}{\the\pageno}}%
+ \vadjust{\vbox to0pt{\vss
+ \hbox to\hsize{\llap{{\aimlink{#1}\smalltt\Blue\char`\\ #1%
+ \ifx\extratext\empty\else\space\extratext\fi\Black}%
+ \kern2pt\quad}\strut\hfil}%
+ \hrule height0pt}}\def\extratext{}}
+\def\inll[#1 #2]{\def\extratext{#2}\inl[#1]}
+\def\indexentry #1#2{\expandafter \ifx \csname ind:#1\endcsname \relax
+ \expandafter \def \csname ind:#1\endcsname {#2}%
+ \else
+ \expandafter \edef \csname ind:#1\endcsname {%
+ \csname ind:#1\endcsname, #2}%
+ \fi
+}
+\def\pg[#1]{\csname ind:#1\endcsname}
+
+\chardef\back=`\\
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title OFS: Olšákův fontový systém
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+OFS je makro, které umožní přehledně
+v~\TeX{}u vybírat rodiny fontů, jejichž názvy jsou v~souladu s~názvy
+z~písmového katalogu. Toto makro je z~uživatelského
+pohledu stejné v~plainu i \LaTeX{}u. Výklad použití OFS bude tedy
+společný pro obě skupiny uživatelů. Pokud některý text platí jen
+pro csplain (a podobné formáty), bude uveden slovem \PLAIN: a pokud
+je text určen pro uživatele \LaTeX{}u2e, je uveden slovem \LATEX:.
+
+Pod skupinu \PLAIN: patří nejen csplain, plain a odvozené formáty, ale
+též dnes už nepoužívaný \LaTeX2.09 bez NFSS. Pod skupinu \LATEX: bychom
+mohli zařadit všechny formáty, které pracují s~NFSS~2, především tedy
+\LaTeX 2e.
+
+Po zavedení příslušných maker v~záhlaví dokumentu (viz níže) se na
+terminálu mimo jiné objeví:
+
+\begtt
+@PLAIN: OFS (Olsak's Font System) based on plain initialized. @char`<verze>
+@LATEX: OFS (Olsak's Font System) based on NFSS initialized. @char`<verze>
+\endtt
+Výhody OFS:
+
+\begitems
+* Sjednocuje rozhraní pro uživatele \LaTeX{}u i plainu.
+* Pomocí příkazu "\fontusage" dostaneme na terminál a do logu stručnou
+ informaci o~použití maker z~OFS.
+* Umožňuje pracovat se skutečnými názvy písmových rodin tak,
+ jak jsou uvedeny v~písmovém katalogu a tím
+ nenutí uživatele si kromě těchto názvů pamatovat ještě
+ interní zkratky použité v~NFSS nebo v~názvech metrik fontů.
+* Umožní pracovat s~fontem rozloženým do dvou metrik
+ (základní a rozšiřující) jakoby se jednalo o~jediný font.
+* Umožní na začátku dokumentu vybrat oblíbené kódování základní
+ metriky, jsou-li metriky připraveny v~různých kódováních
+ (typicky kódování IL2 a T1).
+* Definuje rozhraní pro vytváření pomocných souborů, které
+ obsahují konverzní informace mezi \uv{dlouhými názvy} fontů
+ z~katalogu a \PLAIN: názvy metrik
+ nebo \LATEX: zkratkami používanými v~NFSS.
+* \PLAIN: Umožňuje podobnou nezávislost výběru jednotlivých
+ parametů fontů, jako NFSS v~\LaTeX{}u.
+* \PLAIN: Definuje deklarační příkazy pro podchycení kódování fontů.
+* \PLAIN: Je možné pro různé velikosti registrovat různé metriky, což
+ využijeme zejména u~rodiny Computer Modern.
+* \PLAIN: Obsahuje nástroje na použití PostScriptových fontů
+ i v~matematické sazbě.
+* Interaktivní makro "ofstest.tex" umožní tisknout vzorky odstavců ve
+ zvolených písmových rodinách, tisknout tabulky fontů, katalogy fontů,
+ vzorky matematické sazby a seznamy znaků ve fontech včetně jejich
+ \TeX{}ových sekvencí. Stačí napsat na příkazový řádek
+ "tex ofstest [allfonts]" nebo "csplain ofstest [allfonts]"
+ a řídit se pokyny na terminálu.
+\enditems
+
+
+\sec Členění písmových rodin
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Makro OFS vychází z~toho, že většina dnes dodávaných písmových rodin
+obsahuje čtyři řezy: základní ("\rm"), tučný ("\bf"), kurzívu ("\it"),
+a tučnou kurzívu ("\bi")\inll[rm \back bf \back it \back bi].
+Těmto řezům budeme říkat \uv{standardní varianty}.
+Po zavedení rodiny příkazem "\setfonts" (viz níže) lze pak
+přepínat pomocí "\rm", "\bf", "\it" a "\bi" mezi variantami v~dané
+rodině. První tři uvedené přepínače jsou známé z~plainu
+(v~\LaTeX{}u přetrvávají z~dob zašlé slávy LaTeXu2.09)
+a čtvrtý přepíná do varianty BoldItalic.
+
+Některé rodiny mohou deklarovat přepínače dalších
+\uv{nadstandardních variant} a u~některých rodin naopak
+může chybět i některá ze standardních variant.
+
+Varianty v~některých rodinách se mírně liší od zde uvedených
+názvů pro standardní varianty. Místo tučného písma může být
+třeba přítomno jen polotučné a místo kurzívy třeba skloněné písmo.
+Přepínače "\rm", "\bf", "\it" a "\bi" zůstávají pokud možno
+zachovány, takže by nás nemělo vyvést z~rovnováhy, že v~některé rodině
+třeba "\it" přepíná do skloněného písma a ne do kurzívy.
+
+Pokud chceme současně pracovat s~dalšími přepínači fontů jiné rodiny
+(například "\tt" pro strojopis), je možné takové přepínače deklarovat pomocí
+příkazu "\fontdef".
+
+Členění fontů do rodin je deklarováno v~souborech, které
+mají v~plainu podobný význam, jako {\tt fd} (Font Definition) soubory
+z~\LaTeX{}u. Doporučená přípona souboru je pro plain {\tt tex} a
+pro \LaTeX{} {\tt sty}. Těmto souborům budeme říkat \uv{deklarační soubory}.
+Podle názvu deklaračních souborů by mělo být uživateli zřejmé, které rodiny
+jsou v~něm deklarovány. Příklady:
+
+\begtt
+@PLAIN: @LATEX:
+sjannon.tex, sjannon.sty ... souhrnná rodina Jannon ze Střešovic
+a35.tex, a35.sty ... základní skupina 35 fontů od Adobe
+\endtt
+
+Vidíme, že deklarační soubory (na rozdíl od {\tt fd} souborů z~\LaTeX{}u)
+obsahují obvykle definice více souvisejících rodin. Mezi těmito
+soubory uživatel vybírá ty, které bude potřebovat a uvede jejich jména
+při zavedení makra OFS v~záhlaví svého dokumentu.
+Aby měl uživatel zjednodušenou práci, zakládáme obvykle též souhrné
+soubory, které obsahují "\input" nebo "\RequirePackage" na jednotlivé
+deklarační soubory:
+
+\begtt
+skatalog.tex, skatalog.sty ... všechny fonty ze Střešovic
+allfonts.tex, allfonts.sty ... všechny fonty na TeXové instalaci
+\endtt
+
+
+\sec Uživatelské příkazy
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+\subsec Zavedení OFS
+%%%%%%%%%%%%%%%%%%%%
+
+Pro příklad předpokládejme, že budeme chtít pracovat
+s~fonty ze souhrnné rodiny Jannon a
+DynaGrotesk. Protože se jedná o~rodiny ze Střešovické písmolijny od pana
+Štorma, najdeme odpovídající deklarační soubory v~adresáři
+"storm". Na Internetu je získáme společně s~makrem OFS
+například na "www.cstug.cz/stormtype".
+Souhrnné rodiny Jannon a Dyna\-Grotesk jsou deklarovány v~těchto souborech:
+\PLAIN: "sjannon.tex", "sdynamo.tex";
+\LATEX: "sjannon.sty", "sdynamo.sty".
+Písmeno "s" na začátku názvů znamená,
+že fonty pocházejí ze Střešovické písmolijny. Jména těchto souborů bez
+přípony je nutné uvést v~hranaté závorce při zavedení makra OFS takto:
+
+\begtt
+@PLAIN: \input ofs [sjannon, sdynamo] % mezera před "[" je nutná!
+@LATEX: \usepackage [sjannon, sdynamo] {ofs}
+\endtt
+
+Dále můžeme pracovat s~rodinami, které jsou obsaženy v~souhrnných
+rodinách Jannon a DynaGrotesk.
+Napíšeme-li do dokumentu příkaz "\showfonts"\inl[showfonts],
+zobrazí se na \hbox{terminál} (a~zapíše do logu) seznam názvů jednotlivých
+rodin, které dále můžeme používat. Po zavedení "sjannon" a
+"sdynamo", jak bylo uvedeno výše, zobrazí příkaz "\showfonts" tento seznam:
+
+\begtt
+OFS (l.1): The list of known font families:
+defaults:
+ [CMRoman/] \rm, \bf, \it, \bi, \sl
+ [CMSans/] \rm, \bf, \it, -
+ [CMTypewriter/] \rm, - , \it, - , \sl
+ [Times/] \rm, \bf, \it, \bi
+ [Helvetica/] \rm, \bf, \it, \bi, \nrm, \nbf, \nit, \nbi
+ [Courier/] \rm, \bf, \it, \bi
+sjannon.tex:
+ [JannonAntikva/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonText/] \rm, \bf, \it, \bi, \mr, \mi
+ [JannonCaps/] \rm, \bf, \it, \bi
+sdynamo.tex:
+ [DynaGroteskDXE/] \rm, \bf, \it, \bi
+ [DynaGroteskRXE/] \rm, \bf, \it, \bi
+ [DynaGroteskLXE/] \rm, \bf, \it, \bi
+ ... <a dalších 15 rodin DynaGrotesk> ...
+\endtt
+
+Prvních 6 rodin (označené jako defaults) je definováno v~OFS.
+Teprve další rodiny jsou deklarovány v~použitých souborech.
+
+Vedle názvů rodin jsou uvedeny přepínače variant, které pro danou
+rodinu můžeme použít. První čtyři přepínače jsou pro standardní
+varianty a pokud v~některé rodině taková varianta není přístupná,
+je zde na místě odpovídajícího přepínače pomlčka.
+Pátý a případně další přepínače se vztahují k~případným nadstandardním
+variantám. Zde například rodina Helvetica má navíc přepínače
+pro varianty \uv{Narrow} a rodiny Jannon mají přepínače pro
+varianty \uv{Medium}.
+
+Napíšeme-li do dokumentu příkaz "\fontusage"\inl[fontusage],
+zobrazí se na terminál a
+do logu stručná informace o~použití příkazů z~balíku OFS.
+
+Kromě výše uvedeného způsobu zavedení:
+
+\begtt
+@PLAIN: \input ofs [<soubor>, <soubor>, ...]
+@LATEX: \usepackage [<soubor>, <soubor>, ...] {ofs}
+\endtt
+%
+existuje ještě možnost přímo zavést požadované soubory. Pak není nutné
+v~dokumentu explicitně zavádět soubor "ofs.tex" resp. "ofs.sty":
+
+\begtt
+@PLAIN: \input <soubor> \input <soubor> ...
+@LATEX: \usepackage {<soubor>} \usepackage {<soubor>} ...
+\endtt
+%
+Příklad:
+
+\begtt
+@PLAIN: \input sjannon \input sdynamo
+@LATEX: \usepackage {sjannon} \usepackage {sdynamo}
+\endtt
+%
+Nedoporučuje se (zvláště v~\LaTeX{}u) oba tyto způsoby zavedení
+makra OFS míchat.
+
+
+\subsec Příkaz {\tt\back setfonts}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+V~dalších příkladech předpokládáme,\inl[setfonts]
+že jsme zavedli pouze potřebné
+rodiny, například ze souborů {\tt sjannon} a {\tt sdynamo}.
+Nyní třeba po použití příkazu
+
+\begtt
+\setfonts [JannonText/12pt]
+\endtt
+%
+lze přepínat do jednotlivých variant této rodiny JannonText ve
+velikosti 12pt. Je možné použít přepínače
+"\rm", "\bf", "\it", a "\bi" a speciálně pro tuto
+rodinu ještě "\mr" a "\mi".
+
+Příkaz "\setfonts [<JménoRodiny>/<velikost>]"
+přepíná do nové rodiny a ctí
+naposledy zapnutou variantu.
+Pokud před tímto příkazem
+byla zapnutá třeba varianta BoldItalic, pak po tomto příkazu zůstává
+zapnutá tato varianta i v~nové rodině.
+Pokud v nové rodině naposledy zapnutá
+varianta neexistuje, přepíná se do "\rm". Tato varianta musí být
+deklarována v~každé rodině.
+
+Příkaz "\setfonts" vymezuje všechny změny pouze
+lokálně. Po ukončení skupiny se sazba vrací k~rodině a variantě, která
+byla aktuální při zahájení skupiny.
+
+Parametry příkazu "\setfonts" mohou být prázdné:
+"\setfonts [<JménoRodiny>/]" přepne do nové
+rodiny a ctí naposledy nastavenou velikost a
+"\setfonts [/<velikost>]" nastaví novou velikost
+a ponechá aktuálně vybranou rodinu. Po inicializaci OFS je (pro
+případ použití prázdného parametru) defaultně nastavena rodina
+"CMRoman" a velikost 10\,pt. Příkaz "\setfonts [/]"
+je syntakticky korektní, ale neudělá kromě zápisu
+do logu vůbec nic.
+
+Parametr <JménoRodiny>, je-li uveden, musí přesně odpovídat jménu
+rodiny podle seznamu známých rodin (viz nahoře příkaz "\showfonts").
+Je třeba dodržovat malá a velká písmena a celé jméno psát bez mezer.
+Pokud se tento parametr neshoduje s~žádnou známou rodinou, vypíše \TeX{}
+varování a připojí seznam všech známých rodin. Takže například
+"\setfonts [?/]" lze použít se stejným efektem,
+jako příkaz "\showfonts".
+
+\LATEX: <JménoRodiny> může být nejen jméno podle seznamu známých rodin
+(dlouhý název), ale je dovoleno použít i zkratku z~NFSS. Takže
+například "\setfonts [Times/]" a "\setfonts [ptm/]" je v~\LaTeX{}u totéž.
+
+\OBA:
+Parametr <velikost> má tyto možnosti:
+
+\begitems
+* <číslo> .... např. "12", "17.4",
+* <číslo><jednotka> .... např. "12pt", "17.4pt", "10dd",
+* "at"<číslo><jednotka> .... např. "at12pt", "at17.4pt", "at10dd",
+* "scaled"<celé číslo> .... např. "scaled1200", "scaled\magstep3",
+* "mag"<desetinné číslo> .... např. "mag1.2", "mag.7", "mag2.0".
+\enditems
+
+První tři možnosti se významově shodují. Klíčové slovo "at" je
+nepovinné a není-li uvedeno ani "at" ani jednotka, doplní se
+automaticky "at<číslo>pt". Font se zavede přesně v~požadované
+velikosti. Samozřejmě při globálním "\magnification" celého dokumentu
+se jedná o~relativní a nikoli absolutní rozměry, pokud nepoužijeme
+jednotku uvozenou slovem "true" (např. "17truept").
+Jestliže píšeme klíčové slovo "at", nesmíme vynechat jednotku.
+Nesprávně: "at12", správně: "at12pt" nebo jenom "12".
+
+Čtvrtá možnost ("scaled") je shodná s~použitím slova "scaled" při zavádění
+fontu pomocí primitivu "\font". Např. "scaled1200" je font, jehož základní
+velikost je pronásobena koeficientem 1,2. Je-li základní velikost
+fontu 10\,pt (což je obvyklé), pak je "scaled1200" shodné s~"at12pt".
+
+Poslední možnost ("mag") pronásobí aktuální velikost fontů daným
+koeficientem. Na rozdíl od "scaled" se tedy vztahuje k~aktuální
+velikosti a nikoli k~základní velikosti fontu. Je-li nejprve použito
+třeba "\setfonts[/12]" a v~zápětí "\setfonts[/mag2.]", rodina fontů
+bude nyní sázena ve velikosti 24\,pt. Příklad:
+
+\begtt
+\def\small{\setfonts[/mag.7]}
+Text {\small je menší \small a menší \small a ještě menší} a tady je
+zase v normální velikosti.
+\endtt
+
+Upozornění: Změna velikosti fontů pomocí "\setfonts" nijak nemění
+vzdálenost účaří ("\baselineskip"). To si musí uživatel nastavit sám.
+
+Pomocí "\setfonts" můžeme nastavit nejen celou rodinu (to ovlivní
+přepínače variant "\rm", "\bf", "\it", "\bi" a případně další), ale také
+jen zvolenou variantu v~dané rodině. V~takovém případě
+"\setfonts" nemění význam přepínačů variant ani aktuální
+velikost ostatních fontů. Při specifikaci varianty je nutno
+v~parametru "\setfonts" za název rodiny napsat znak mínus následovaný
+zkratkou pro variantu. Příklady:
+
+\begtt
+\setfonts [JannonText-it/12] ..... nastaví kurzívu dané rodiny ve
+ velikosti 12pt
+\setfonts [JannonText-rm/] ....... nastaví základní řez dané rodiny
+ v aktuální velikosti.
+\setfonts [CMTypeWriter-sl/] ..... nastaví základní variantu \sl
+ v aktuální velikosti.
+\endtt
+
+I~při specifikaci varianty je možné v~parametru vynechat název rodiny,
+pak se použije aktuální rodina. Například
+
+\begtt
+\setfonts [JannonText/12]
+\setfonts [-bf/17] ... varinata Bold JannonText, velikost 17pt.
+ Přepínače \rm, \bf, \it a \bi zůstanou
+ nezměněny, v tomto příkladě přepínají
+ JannonText ve velikosti 12pt.
+ Následné použití třeba \setfonts [Times/]
+ nastaví rodinu Times ve velikosti 12pt.
+ALE:
+\setfonts [/17]\bf ... Varinata Bold aktuální rodiny, velikost 17pt.
+ Přepínače \rm, \bf, \it a \bi nyní
+ přepínají ve velikosti 17pt. Aktuální
+ velikost fontů je nyní 17pt.
+\endtt
+
+\LATEX: Co zde bylo řečeno o~ponechání významu přepínačů variant
+při specifikování varianty v~\LaTeX{}u není pravda,
+protože by to narušilo logiku NFSS.
+V~\LaTeX{}u tedy je "\setfonts [-bf/17]" zcela shodné
+s~příkazy "\setfonts [/17]\bf".
+
+
+\subsec Příkazy {\tt\back fontdef} a {\tt\back addcmd}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Příkaz "\fontdef"\inl[fontdef] umožňuje deklarovat nové fontové přepínače.
+
+\begtt
+\fontdef \<přepínač> [<JménoRodiny>/<velikost>]
+\endtt
+%
+Tato deklarace se zhruba shoduje s{}
+
+\begtt
+\gdef \<přepínač> {\setfonts [<JménoRodiny>/<velikost>]}
+\endtt
+
+\PLAIN: Pokud je specifikována rodina včetně varianty a
+parametr <velikost> není prázdný ani není zadán pomocí klíčového slova
+"mag", pak "\<přepínač>" není implementován jako makro obsahující
+"\setfonts", ale jedná se o nativní přepínač fontu implementovaný
+pomocí "\global\font\<přepínač>" (tzv.~fixed font).
+Tak může uživatel deklarovat vlastní nativní přepínač
+fontu bez znalosti názvu metriky.
+
+\LATEX: Deklarovaný přepínač je ve všech případech implementován jako
+makro obsahující "\setfonts". Přístup k~nativním přepínačům je před
+uživatelem v~NFSS skryt.
+
+\OBA:
+Místo jména rodiny může být uveden vykřičník.
+Pak se doplní jméno rodiny aktuální v~místě příkazu
+"\fontdef". Na druhé straně, pokud je jméno rodiny prázdné,
+pak se jméno rodiny doplní podle aktuální rodiny
+v~místě použití deklarovaného přepínače. Analogická vlastnost platí
+pro parametr <velikost>. Příklady:
+
+\begtt
+\setfonts [JannonAntikva/]
+\fontdef \small [/7] % \small = \setfonts [/7pt]
+\fontdef \sffam [DynaGroteskR/] % \sffam = \setfonts [DynagroteskR/]
+\fontdef \velky [Times/17] % \velky = \setfonts [Times/17pt]
+\fontdef \ttfam [Courier/] % \ttfam = \setfonts [Courier/]
+\fontdef \mylogo [Times-rm/mag.8] % \mylogo = \setfonts [Times-rm/mag.8]
+ % velikost fontu bude vždy rovna
+ % 0.8 násobku aktuální velikosti.
+\fontdef \timbf [Times-bf/12] % \timbf = fixed-font přepínač, jako:
+ % \global\font\timbf=ptmb8z at12pt
+\fontdef \jansmall [!/7] % \jansmall=\setfonts[JannonAntikva/7]
+\fontdef \janbi [!-bi/17] % \janbi = fixed-font přepínač, jako:
+ % \global\font\janbi=sjnbi8z at17pt
+\fontdef \tt [Courier-rm/!] % \tt = fixed-font přepínač, jako
+ % \global\font\tt=pcrr8u at10pt
+\endtt
+
+Příkaz "\fontdef" deklaruje přepínač globálně, ovšem tento přepínač je
+sám o~sobě lokální. Jinými slovy "\global\fontdef\jmeno" je totéž jako
+"\fontdef\jmeno", ale přepínač "\jmeno" nastaví font (nebo celou
+rodinu) jen lokálně.
+
+Od verze OFS Oct.~2002 je podporován příkaz
+"\addcmd"\inl[addcmd], který umožní společně s~příkazem "\fontdef"
+soustředit problematiku fontů do jediného místa v souboru maker.
+Příkaz má formát:
+
+\begtt
+\addcmd \<přepínač> {<příkazy>}
+\endtt
+%
+a chová se, jako "\def\<přepínač> {<původní význam přepínače> <příkazy>}".
+Pomocí "\addcmd" tedy můžeme \uv{rozšířit} obsah makra "\<přepínač>"
+o~další příkazy. Sekvence "\<přepínač>" musí být (před použitím
+"\addcmd") definována jako makro bez parametrů nebo musí být
+ve významu neexpandované kontrolní sekvence deklarované například
+pomocí "\font", "\chardef" apod. Po použití "\addcmd" je sekvence
+"\<přepínač>" definována vždy jako makro bez parametru. Opakované
+použití "\addcmd" na stejný "\<přepínač>" je možné.
+
+Příklad použití:
+
+\begtt
+\setfonts [JannonText/]
+\fontdef \footnotefont [!/7]
+\addcmd \footnotefont {\rm \baselineskip=9pt \relax}
+\fontdef \sectionfont [!/12]
+\addcmd \sectionfont {\bf \let\it=\bi}
+\endtt
+
+
+\subsec Test přítomnosti rodiny
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\PLAIN: Ve svých makrech můžeme testovat, zda je rodina fontů deklarovaná,
+tj.~zda je načtena její deklarace z~deklaračního souboru. Použijeme
+k~tomu konstrukci "\knownfam <JménoRodiny>? \iftrue", která expanduje
+na "\iftrue", pokud je rodina deklarovaná a na "\iffalse", pokud
+deklarovaná není. Parametr <JménoRodiny> musíme uvést bez specifikace varianty.
+
+\OBA: Z důvodů zpětné kompatibility se starší verzí OFS~dělá stejnou práci jako
+"\knownchar" makro "\ifknownfam [<JménoRodiny>]"\inl[ifknownfam].
+V~OFS pro plain se ale
+od verze Feb.~2004 doporučuje používat "\knownfam", protože to udržuje
+správně spárované primitivy "\if*", "\else", "\fi". La\TeX{}ový uživatel
+si může "\knownfam" snadno definovat.
+
+\subsec \LATEX: Propojení OSF s~NFSS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Tato sekce je určena pouze pro \LaTeX{}isty. Příkaz\inl[OFSfamily]
+
+\begtt
+\OFSfamily [<JménoRodiny>]
+\endtt
+%
+konvertuje dlouhý název rodiny podle katalogu na interní název rodiny
+zanesený do NFSS. Například
+
+\begtt
+\OFSfamily [JannonText]
+\endtt
+%
+expanduje na "sjng". Makro pracuje jen na úrovni expandprocesoru,
+proto nedostaneme při překlepu v~názvu rodiny chybové hlášení.
+Při neexistující rodině makro expanduje na text "unknown".
+Použijeme-li například "\OFSfamily" ve svých stylových souborech
+a zpozorujeme, že se NFSS snaží substituovat rodinu "unknown",
+můžeme si být jisti, že máme překlep v~názvu rodiny nebo nemáme
+správně použité "\usepackage".
+
+Příklad použití:
+
+\begtt
+\usepackage [sjannon, sdynamo] {ofs}
+\edef\rmdefault {\OFSfamily [JannonAntikva]}
+\edef\sfdefault {\OFSfamily [DynaGroteskR]}
+\edef\ttdefault {\OFSfamily [Courirer]}
+\endtt
+
+Význam maker "\rmdefault", "\sfdefault", "\ttdefault" je popsán
+v~dokumentaci NFSS.
+
+Dále OFS definuje příkaz\inl[OFSfamilydefault]
+
+\begtt
+\OFSfamilydefault [<JménoRodiny>]
+\endtt
+%
+který nastaví základní rodinu celého dokumentu. Tato rodina se v~příslušných
+velikostech a variantách objeví nejen v~textu, ale i v~záhlaví
+kapitol, sekcí a podobně (jsou-li makra v~použitém class souboru udělána
+rozumně). Příkaz interně provede
+
+\begtt
+\edef\familydefault {\OFSfamily [<JménoRodiny>]}
+\endtt
+%
+s~tím, že navíc ošetří případ neexistující rodiny chybovým hlášením
+s~výpisem všech aktuálně dostupných rodin.
+
+
+\subsec Kódování fontů
+%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Přepínání mezi kódováním fontů probíhá zcela v~režii NFSS. OFS
+v~této věci nepřidává nic nového.
+
+\PLAIN (až do konce sekce):
+Implicitně se předpokládá kódování CSfontů. Pokud ale potřebujeme
+použít fonty například v kódování T1, pak použijeme
+"\def\fotenc{8t}"\inl[fotenc]
+a OFS bude pracovat s~fonty v~tomto kódování.
+
+Můžeme dokonce uvnitř dokumentu přepínat:
+
+\begtt
+\def\fotenc{8z} \setfonts[/] ... fonty v kódování CSfontů
+\def\fotenc{8t} \setfonts[/] ... fonty v kódování podle Corku.
+\endtt
+
+Kromě toho OFS obsahuje nástroje, aby makra závislá na kódování
+fontů (například "\v", "\'", "\ae") expandovala správně
+na znak ve zvoleném kódování.
+Implicitně je v~OFS nastaveno "\loadingenc=0"\inl[loadingenc],
+což znamená, že změnou kódování fontů ani příkazem "\setfonts" se
+nemění makra typu "\v", "\ae". Tato makra si ponechají svůj
+originální význam z~\hbox{plainu}. To uvítají ortodoxní plainisté,
+kteří nemají rádi, když má použitý balíček zbytečně velkou inteligenci.
+
+Je-li ale na začátku dokumentu uvedeno "\loadingenc=1", například:
+
+\begtt
+\input ofs [a35,sjannon] \loadingenc=1
+\endtt
+%
+pak při každém příkazu "\setfonts" si \TeX{} zkontroluje, zda má
+načteny všechny potřebné soubory se jménem "ofs-<kódování>.tex".
+Tyto soubory obsahují předefinování maker závislých na nastaveném kódování fontů.
+Pokud tyto soubory načteny nejsou, \TeX{} je během "\setfonts"
+načte. Podrobněji viz sekce~\beglink{3.3}3.3\endlink{} až
+\beglink{3.5}3.5\endlink.
+
+Balíček OFS obsahuje tři soubory s~deklaracemi maker závislými na
+kódování: "ofs-8z.tex", "ofs-8t.tex" a "ofs-8c.tex". Při použití jiného kódování
+fontů si můžete vytvořit další soubor analogického názvu.
+Příkazy "\accentdef" a "\characterdef" používané v~těchto
+souborech jsou podrobně vysvětleny v~\beglink{3.4}sekci~3.4\endlink.
+
+
+\subsec Fonty v~matematice
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: OFS pro \LaTeX{} vůbec neřeší otázku fontů pro matematiku.
+Je potřeba využít nabídku možností NFSS.
+
+\PLAIN (až do konce sekce):
+Příkaz "\setfonts" a přepínače deklarované pomocí "\fontdef"
+přepínají jen písmo v~textovém režimu.
+Pokud nepoužijeme příkaz "\setmath", zůstává vše,
+co je ve vstupním souboru mezi dolary, vytištěno v~Computer
+Modern ve velikostech 10\,pt/7\,pt/5\,pt (velikost:
+základní/indexová/indexindexová). To nemusí být vždy žádoucí.
+
+Příkaz "\setmath" má tento tvar:\inl[setmath]
+
+\begtt
+\setmath [<základní velikost>/<indexová velikost>/<indexindexová velikost>]
+\endtt
+%
+V~parametrech příkazu dáváme najevo, v~jakých velikostech chceme matematické
+fonty nastavit. Je možné použít libovolný zápis velikosti, jako
+u~příkazu "\setfonts". Je-li použita možnost "mag<číslo>", je
+velikost vypočítána jako <číslo> krát velikost aktuálního
+textového fontu. Je-li parametr prázdný, doplní se takto:
+
+\begitems
+* základní velikost --- "mag1.0"
+* indexová velikost --- "mag0.7"
+* indexindexová velikost --- "mag0.5"
+\enditems
+
+Takže "\setmath [//]" udělá totéž jako
+"\setmath [mag1./mag.7/mag.5]". OFS definuje makro
+"\setsimplemath"\inl[setsimplemath] jako "\setmath [//]".
+
+Příkaz "\setmath" nastaví matematické fonty podle
+aktuální situace. Jeho činnost závisí na obsahu maker
+"\fomenc" a "\mathversion".
+
+Matematické kódování je určeno hodnotou makra
+"\fomenc".\inl[fomenc]
+Existují tyto možnosti:
+
+\begitems
+* Implicitní hodnota je "\def\fomenc{PS}" (PostScript-Symbol).
+ Příkaz "\setmath" pak
+ převezme kurzívu aktuální rodiny a použije ji jako matematickou
+ kurzívu. Dále převezme základní variantu aktuální rodiny a použije ji
+ pro číslice a další symboly, které jsou psány i v~matematice jako
+ "\rm". Standardní přepínače variant "\rm", "\it", "\bf" a "\bi"
+ začnou přepínat do odpovídajících fontů i v~matematické sazbě.
+ %
+ Při "\def\fomenc{PS}" se navíc chybějící matematické znaky,
+ které obvykle nejsou přítomny v~PostScriptových fontech
+ (například písmena řecké abecedy), nahradí z~Post\-Script\-ového fontu
+ Symbol. Tento font se totiž ke většině
+ PostScriptovým písmům hodí daleko lépe než Computer Modern. Ostatní
+ znaky (například zvětšující závorky a velké operátory) zůstávájí
+ v~Computer Modern.
+
+* Je-li "\def\fomenc{CM}" (Computer Modern), pak "\setmath" ponechá
+ matematickým vzorečkům Computer Modern fonty, jen se případně
+ přizpůsobí požadované velikosti.
+
+* Po zavedení souboru "amsfn.tex" je možné použít "\def\fomenc{AMS}".
+ Matematika se pak chová stejně jako při "CM", ale navíc jsou k~dispozici
+ veškeré symboly z~AMS\TeX{}u.
+
+* Po zavedení souboru "txfn.tex" můžeme použít dvě nová kódování:
+ "\def\fomenc{TX}" nebo "\def\fomenc{PX}".
+ V obou případech se pro matematiku použijí
+ volně dostupné TXfonty, které vycházejí z řezů rodin Times a
+ Helvetica. Při hodnotě "TX" se v~matematice použijí výhradně
+ TXfonty, zatímco při hodnotě "PX" budou TXfonty kombinovány
+ s~kurzívou a základním řezem aktuální textové rodiny fontů (podobně
+ jako při kódování "PS"). OFS podporuje všechny kontrolní sekvence na
+ matematické symboly podle manuálu k TXfontům. Jsou zde vešekré
+ symboly z AMS\TeX{}u a mnoho dalších. Symbolů z TXfontů je několik stovek.
+ {\hbadness=1015\par}
+
+* Po zavedení souboru "mtfn.tex" je možné použít
+ "\def\fomenc{MT}". Matematika bude obsahovat kurzívu a základní řez
+ aktuální rodiny fontů kombinovanou se znaky~komerční verze
+ matematických fontů MathTimes.
+\enditems
+
+Podobně jako v~NFSS jsou podporovány dvě verze vzorečků: normal a
+bold. Požadovaná verze se nastavuje v~makru "\mathversion"\inl[mathversion]
+pomocí "\def\mathversion{normal}" nebo "\def\mathversion{bold}".
+Makro "\setmath" pak přizpůsobí zavedení matematických fontů požadované
+verzi. Implicitně je nastaveno "\def\mathversion{normal}".
+Nastavení "\mathversion" je potřeba provést před vyvoláním příkazu
+"\setmath". Příklady:
+
+\begtt
+\setmath [//] $vzoreček$ % vzoreček je ve verzi "normal"
+$\def\mathversion{bold}\setmath[//] vzoreček$ % vzoreček ve verzi "bold"
+\endtt
+
+
+\sec Jak je to uděláno, aneb pohled do hloubky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Všechna makra, která jsou jen pomocná, jsou ve stylu "ofs.sty"
+definována se jménem "\ofs@jménomakra", aby nedošlo ke zmatení s~jinými
+styly. Makra, která se používají v~deklaračních souborech, mají název
+"\OFSjménomakra". Dále styl definuje uživatelské příkazy "\setfonts",
+"\fontdef", "\showfonts", "\fontusage", a předefinovává přepínače
+"\rm", "\bf", "\it", "\bi".
+
+\PLAIN: Všechna makra definovaná v~"ofs.tex" jsou uvedena v~rejstříku na
+konci tohoto dokumentu. Při návrhu názvů maker jsem nevyužil konvenci
+se znakem "@", protože tento znak v~názvech maker osobně nenávidím.
+
+
+\subsec Výpisy do logu
+%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Pro trasování makra NFSS se použije balíček "tracefnt".
+
+\PLAIN: Pokud někoho ruší při častém přepínání rodin fontů příkazem
+"\setfonts" výpisy v~logu, může použít příkaz
+"\nofontmessages"\inl[nofontmessages].
+Pokud naopak chceme tyto výpisy vidět i na terminálu, pišme
+"\displayfontmessages"\inl[displayfontmessages]. Implicitně je zapnut výpis
+pouze do logu příkazem "\logfontmessages"\inl[logfontmessages].
+Pokud chceme přesně vidět, které metriky fontů se zavádějí primitivním
+příkazem "\font", použijeme "\detailfontmessages"\inl[detailfontmessages].
+
+Varování o~nepřístupných znacích nebo kódováních se vždy vypisují na
+terminál i do logu. Chceme-li je mít jen v~logu, můžeme napsat
+"\let\displaymessage=\wlog"\inl[displaymessage], protože tato sekvence
+je v~OFS používána na zobrazení zpráv na terminál.
+
+
+\subsec Robustní a křehké příkazy
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: \LaTeX{}2e má zavedené postupy na definování robustních
+příkazů. Význam těchto pojmů je vysvětlen v~dokumentaci k~\LaTeX{}u.
+Příkaz "\setfonts" a přepínače deklarované pomocí "\fontdef" jsou
+samozřejmě definovány jako robustní, takže se mohou vyskytovat
+v~textech pro obsahy, rejsříky apod. bez toho, aby způsobily obtíže.
+
+\PLAIN (až do konce sekce):
+Makro plainu problematiku křehkých příkazů neřeší
+a uživatelé plainu, pokud narazí na tento problém, používají různá svá
+vlastní řešení, která nejsou standardizována. Jedno takové řešení je i
+v~OFS.
+
+Nejprve stručně naznačíme, v~čem spočívá problém s~křehkými příkazy.
+Občas potřebujeme (pro generování obsahu, rejstříku apod.) poslat
+nějaký text do pomocného souboru (primitivem "\write"), aby byl tento
+soubor v~zápětí (při dalším zpracování \TeX{}em) znovu načten.
+Problém je, že primitiv "\write" zapíše do souboru text po expanzi
+maker, což nemusí vždy vyhovovat. Pokud je například fontový přepínač
+implementován jako složité makro a je použit v~textu zpracovaném
+primitivem "\write", v~souboru se objeví celé makro po expanzi.
+Při opětovném načtení takového souboru dojde většinou k~havárii;
+říkáme, že byl použit křehký (fragile) příkaz v~textu posílaném do
+souboru a v~souboru se nám tento příkaz \uv{rozsypal}.
+
+Pokud se dostane (potenciálně) křehký příkaz z~maker OFS do souboru,
+pak se při novém načtení takového souboru automaticky při havárii
+zobrazí na terminálu a v~logu návod jak postupovat, aby se uživatel
+tohoto problému zbavil. Text návodu po překladu do češtiny vypadá
+takto:
+
+\begtt
+CHYBA !! křehký příkaz v toc/ind/aux nebo podobném souboru.
+Tento problém můžete řešit následujícími kroky:
+1. Vymažte pomocný soubor s tímto křehkým příkazem.
+2. Vložte následující kód do záhlaví svého dokumentu:
+ \let\orishipout=\shipout
+ \def\shipout#1#2{\setbox0=#1{#2}\bgroup
+ \let\expandaction=\noexpand \orishipout\box0 \egroup}
+3. Znovu TeXujte svůj dokument nejméně dvakrát za sebou.
+Další informace najdete v dokumentaci k OFS.
+\endtt
+
+Vysvětlíme si, jak je to uděláno. Makro, které může v~parametru
+primitivu "\write" působit potíže, je v~OFS definováno zhruba takto:
+
+\begtt
+\def\makro {%
+ \ifx\expandaction\noexpand
+ \noexpand\makro
+ \else
+ \csname fragilecommand!\endcsname
+ <vlastní kód makra>
+ \fi
+}
+\endtt
+
+Pokud se nenastaví "\expandaction"\inl[expandaction]
+na hodnotu "\noexpand", pak se
+provede část kódu za "\else". Protože příkaz
+"\csname fragilecommand!\endcsname"\inl[fragilecommand!]
+není definován, realizuje se v~hlavním procesoru jako "\relax"
+[TBN, strana 349]. Při expanzi primitivem "\write" se do souboru
+zapíše "\fragilecommand!". Při dalším čtení soboru se spustí příkaz
+"\fragilecommand"\inl[fragilecommand],
+který vypíše na terminál již zmíněnou nápovědu.
+
+Jestliže uživatel použije kód z~nápovědy v~záhlaví svého dokumentu,
+pak v~době činnosti primitivu "\shipout" (tj.~v~době, kdy expandují
+argumenty primitivů "\write") je nastaveno "\let\expandaction=\noexpand".
+V~makru "\makro" se provede první část před "\else", takže do souboru
+se zapíše jen "\makro". To je přesně to, co potřebujeme.
+
+V~OFS není kód, který předefinovává "\shipout", přímo zahrnut. Místo
+toho pouze doporučíme uživateli, aby to udělal sám. Uživatel plainu totiž
+potřebuje mít věci pod vlastní kontrolou a neměl by asi důvěru k~makru,
+které bez jeho vědomí předefinuje tak zásadní věc, jako je primitiv
+"\shipout". Také je možné, že uživatel plainu použije na různé části
+textu ve svých makrech "\edef" a potřebuje vědět, že je v~takovém
+případě vhodné nejpve nastavit "\let\expandaction=\noexpand".
+
+Podobně jako zde v~ukázce definice příkazu "\makro" jsou
+v~OFS definovány
+příkazy "\setfonts" (\beglink{2.2}sekce~2.2\endlink),
+"\setmath" (\beglink{2.7}sekce~2.7\endlink),
+"\setextrafont", "\printcharacter", "\printaccent"
+(\beglink{3.4}sekce~3.4\endlink),
+"\accentabove", "\accentbelow" a "\ofshexbox" (\beglink{3.6}sekce~3.6\endlink).
+Po použití kódu z~nápovědy se tato makra stávají \uv{robustními}
+v~\LaTeX{}ovém smyslu tohoto slova.
+
+
+\subsec Deklarační soubory
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Deklarační soubory v~\LaTeX{}u jsou běžné stylové soubory,
+které shrnují několik rodin fontů ve smyslu NFSS. Tyto rodiny jsou
+deklarovány běžným způsobem ve~"fd" souborech. V~deklaračních souborech
+je možno použít následující příkazy:
+
+\begitems
+* "\OFSprocessoptions"\inl[OFSprocessoptions]
+ --- má většinou hodnotu "\undefined". Pokud ale
+ je stylový soubor načítán ze souboru "ofs.sty" jako parametr,
+ má "\OFSprocessoptions" hodnotu "\relax". Test na tuto
+ sekvenci používáme v~záhlaví stylového souboru, abychom vynachali
+ \LaTeX{}ovské "\RequirePackage{ofs}", pokud to není potřeba (a
+ pouze by to zlobilo).
+* "\OFSextraencoding {<rozšiřující kódování>}"\inl[OFSextraencoding]
+ --- Toto makro si poznamená do paměti <rozšiřující kódování> a
+ provede "\input {<rozšiřující kódování>ini.def}".
+ Předpokládá se, že tam jsou odpovídající definice pro
+ <rozšiřující kódování>, viz například soubor "se1ini.def", který obsahuje
+ deklarace pro rozšiřující kódování SE1 fontů ze Střešovické písmolijny.
+ Pokud už byl soubor "<rozšiřující kódování>ini.def" načten, makro jej
+ nenačítá znovu. Pozor: <rozšiřující kódování> je nutno psát
+ velkými písmeny, ačkoli v~názvu souboru musí být naopak tato písmena malá.
+* "\OFSputfamlist {<text>}"\inl[OFSputfamlist]
+ --- vloží <text> do seznamu rodin, který
+ se vypisuje při "\showfonts" nebo při neznámé rodině.
+* "\OFSdeclarefamily [<JménoRodiny>] {<NFSS-jméno>}"\inl[OFSdeclarefamily]
+ --- poznamená si
+ do paměti, že <JménoRodiny> je ve skutečnosti <NFSS-jméno>.
+ Tato paměť se využije například v~příkazu "\OFSfamily".
+ Navíc zanese <JménoRodiny> do seznamu rodin vypisovaném při
+ "\showfonts".
+* "\OFSnormalvariants"\inl[OFSnormalvariants]
+ --- do textu, který se vypisuje při "\showfonts"
+ nebo při neznámé rodině vloží, seznam standardních přepínačů,
+ tj.~"\rm,"~"\bf,"~"\it,"~"\bi".
+\enditems
+
+\PLAIN (až do konce sekce):
+Deklarační soubory mají příponu "tex" a předpokládá se o~nich,
+že mají pojistku proti opakovanému načtení. Pokud není ještě načten
+soubor "ofs.tex", je nutno jej před další činností načíst. Rovněž je
+vhodné zde načíst soubor definic znaků podle použitých kódování
+(viz~\beglink{3.4}sekce~3.4\endlink).
+
+V~deklaračním souboru je nutno vytvořit vazbu mezi názvy rodin a použitými
+metrikami. K~tomu se používají následující příkazy:
+
+\begitems
+* "\protectreading <soubor><mezera>"\inl[protectreading] --- poznamená
+ si do paměti, že je přečten <soubor>. Pokud je příkaz se stejným
+ parametrem čten podruhé, provede "\endinput", takže následující deklarace jsou
+ chráněny proti vícenásobnému čtení.
+* "\ofsputfamlist {<text>}"\inl[ofsputfamlist]
+ --- vloží <text> do seznamu rodin, který
+ se vypisuje při "\showfonts" nebo při neznámé rodině.
+* "\ofsdeclarefamily [<JménoRodiny>] {<příkazy>}"\inl[ofsdeclarefamily]
+ --- deklarace nové
+ rodiny se jménem <JménoRodiny>. Toto jméno se zanese do seznamu
+ známých rodin vypisovaných pomocí "\showfonts". Pokud se tato rodina
+ použije při "\setfonts", pak se provedou <příkazy>. Mezi <příkazy> se
+ použije právě jeden příkaz "\loadtextfam", který zavede fonty dané
+ rodiny do paměti \TeX{}u.
+* "\loadtextfam"\inl[loadtextfam]
+ --- Zavede čtyři fonty s~danými metrikami. Tento příkaz vyžaduje
+ podrobnější vysvětlení, které je včetně parametrů příkazu uvedeno níže.
+* "\newvariant<číslice> \<přepínač> (<Varianta>) <mezera> <metrika>;<extra-enc>;"\inl[newvariant]
+ \null\penalty0 --- Dekla\-ruje nový přepínač varianty.
+ Podrobnější vysvětlení je uvedeno níže.
+* "\modifyenc <kódování>:<identifikátor>;"\inl[modifyenc] --- přidání
+ výjimek vzhledem k~základnímu kódování, viz~\beglink{3.5}sekce~3.5\endlink.
+* "\fosize"\inl[fosize]
+ --- makro, které uchovává informaci o~aktuální velikosti
+ fontů v~naposledy vybrané rodině. Obsah "\fosize" může mít dvě
+ podoby: "at<dimen>" nebo "scaled<number>" podle toho, jaký tvar
+ parametru <velikost> byl použit v~příkazu "\setfonts".
+* "\fotenc"\inl[fotenc]
+ --- makro, které uchovává informaci o~aktuálním kódování.
+ Nejčastější možnosti jsou "\def\fotenc{8z}" (kódování podle CS-fontů) nebo
+ "\def\fotenc{8t}" (kódování podle Corku). Je-li při načtení souboru
+ "ofs.tex" makro "\fotenc" už známé, ponechá se beze změny, jinak se
+ definuje jako "8z".
+* "\extranec"\inl[extraenc]
+ --- makro, které uchovává informaci o~rozšiřujícím kódování.
+ Tuto informaci tam kopíruje z~parametru <extra-enc> makro "\laodatextfam".
+* "\defaultextraenc"\inl[defaultextraenc]
+ --- makro, jehož předefinováním můžeme změnit rozšiřující kódování základních
+ rodin a rodin z~"a35.tex". Výchozí hodnota makra~"8c".
+* "\setfontshook"\inl[setfontshook]
+ --- makro, které se spustí vždy při činnosti příkazu "\setfonts"
+ těsně před tím, než jsou vykonány <příkazy> z~"\ofsdeclarefamily".
+* "\registertfm <jméno> <od>-<do> <skutečná metrika>"\inl[registertfm]
+ --- umožňuje pracovat při různých velikostech fontů s~různými
+ metrikami. Podrobnosti viz \beglink{3.8}sekce~3.8\endlink.
+* "\registerenc <JménoRodiny>: <kódování> <mezera>"\inl[registerenc]
+ --- umožňuje omezit použití rodiny fontů jen pro vymezená
+ kódování. Podrobnosti viz \beglink{3.9}sekce~3.9\endlink.
+\enditems
+
+Příkaz "\loadtextfam" používaný v deklaračních
+souborech mezi <příkazy> makra "\ofsdeclarefamily" má parametry:
+
+\begtt
+\loadtextfam (<Varianta-rm>) <mezera> <metrika-rm>;%
+ (<Varianta-bf>) <mezera> <metrika-bf>;%
+ (<Varianta-it>) <mezera> <metrika-it>;%
+ (<Varianta-bi>) <mezera> <metrika-bi>;<extra-enc>;%
+\endtt
+%
+Procenta na koncích řádků v této ukázce označují, že za středníky nemá
+být mezera.
+Údaje "(<Varianta-XX>)" slouží jako komentáře o variantách zapisované do
+logu a je možno je kompletně včetně závorek a <mezery> vynechat (třeba jen
+některé). Ve verzích OFS do Sep~2002 nebyl tento parametr vůbec
+podporován. Při vynechání tohoto parametru se předpokládají
+následující implicitní hodnoty: "rm: ()", "bf: (Bold)",
+"it: (Italic)", "bi: (BoldItalic)".
+
+Údaje <metrika-XX> odpovídají názvům metrik, které se pro uvedené
+varianty fontů makrem "\loadtextfam" zavedou. Makro zhruba provede toto:
+
+\begtt
+\font\tenrm=<metrika-rm> \fosize
+\font\tenbf=<metrika-bf> \fosize
+\font\tenit=<metrika-it> \fosize
+\font\tenbi=<metrika-bi> \fosize
+\endtt
+%
+Předpokládá se, že všechny <metriky-XX> jsou
+v~deklaračním souboru napsány tak, že
+obsahují makro "\fotenc". %\inl[fotenc]
+Tím je zaručena změna názvu metriky při
+přechodu na jiné kódování (tj. při předefinování makra "\fotenc").
+
+Konečně údaj <extra-enc> udává název extra kódování. Pokud je tento parametr
+neprázdný, pak "\loadtextfam" provede na přechodnou dobu
+"\def\fotenc{<extra-enc>}" a znovu expanduje
+parametry <metrika-rm>, <metrika-bf>, <metrika-it> a <metrika-bi>.
+Výsledky těchto expanzí si poznamená do paměti. Jedná se o~rozšiřující
+metriky k~základním metrikám. Je-li parametr <extra-enc> prázdný,
+poznámka o rozšiřujících metrikách se nekoná.
+Když pak nějaké makro pro přístup ke speciálnímu znaku tuto
+metriku potřebuje, objeví se na terminálu varování, že aktuálně
+zvolená metrika nemá rozšiřující variantu.
+
+Některé metriky v~příkazu "\loadtextfam" s výjimkou <metrika-rm>
+mohou být vynechány. Je-li například prázdný parametr
+<metrika-XX>, pak se zhruba provede
+\begtt
+\def\tenXX{\message{varování o neexistující variantě na terminálu}}
+\endtt
+%
+takže při přechodu na takovou variantu se objeví na terminálu
+a v~logu hlášení o~ne\-existující variantě a font se nezmění.
+
+Příkaz "\setfonts"\inl[setfonts]
+nemění význam maker "\rm", "\bf", "\it" a "\bi",
+ale mění význam přepínačů fontů "\tenrm", "\tenbf", "\tenit" a "\tenbi".
+Dělá to navíc zprostředkovaně tím, že spustí <příkazy> deklarované pro
+požadovanou rodinu v~"\ofsdeclarefamily" a mezi těmito <příkazy>
+se vyskytuje příkaz "\loadtextfam".
+
+Makra "\rm", "\bf", "\it", resp. "\bi" používají fontové přepínače
+"\tenrm", "\tenbf", "\tenit",\inll[tenrm \back tenbf \back tenit]
+resp. "\tenbi". První tři jsou známy z~plainu
+a čtvrtý\inl[tenbi] je zaveden nově.
+Navíc makra "\rm", "\bf", "\it" a "\bi" ukládají
+do kontrolní sekvence "\currentvariant"\inl[currentvariant]
+informaci o~naposledy aktivované variantě. Tato informace má podobu
+písmene ("M", "F", "T", resp. "I"), protože jedině konstrukce
+"\let\currentvariant=<písmeno>" je odolná vůči expanzi. Šlo o~to, aby
+makra přepínačů variant byla robustní i bez předefinování "\shipout".
+
+Všimneme si, že "\loadtextfam" nastavuje přepínače
+"\tenrm", "\tenbf", "\tenit" a "\tenbi"
+na fonty v~libovolné velikosti. Činí tak podle aktuální
+hodnoty makra "\fosize", které mění makro "\setfonts" podle toho, jak
+je zadán parametr <velikost>.
+Slovo {\clqq"ten"\crqq} v~názvech fontových přepínačů tedy
+nemusí znamenat, že se jedná o~font ve velikosti 10\,pt. Považujme
+tyto názvy za historické a z~hlediska OFS možná trochu
+kuriózní. Není přitom nutné pro přepínače textových fontů vymýšlet
+názvy nové.
+
+Někdo může namítnout, že opakované používání makra "\setfonts" vždy
+znovu a znovu spouští čtveřici příkazů "\font", což může způsobit
+větší nároky na paměť a čas. Není to pravda, protože \TeX{} si eviduje
+interní tabulku už zavedených metrik a při opakovaném použití
+primitivu "\font" na stejnou metriku se už neobtěžuje metriku vůbec
+otevírat. Jen inicializuje příslušný fontový přepínač asi stejně rychle,
+jako by se to provedlo pomocí "\let".
+
+Příkaz "\loadtextfam" ještě před zavedením fontů načte
+při "\loadingenc>0"\inl[loadingenc]
+soubor "ofs-\fotenc.tex". Při neprázdném parametru <extra-enc>
+navíc načte soubor "ofs-<extra-enc>.tex".
+Tyto soubory jsou čteny jen jednou a v době čtení jsou
+ignorovány prázdné řádky, konce řádků. Čtení probíhá uvnitř
+skupiny, kde jsou pro jistotu lokálně nastaveny
+kategorie znaků podle plain\TeX{}u (a~"\catcode`@=11")
+a je nastaveno "\globaldefs=1", tj.~všechna
+předefinování ze souboru "ofs-<kódování>.tex" se provedou globálně.
+To nám nevadí, protože nově načtené kódovací soubory nejsou v~konfliktu
+s~předchozími (viz vlastnosti příkazů "\characterdef" a "\accentdef"
+v~\beglink{3.4}sekci~3.4\endlink). Načtení většího množství těchto
+souborů než je v~dané chvíli potřeba, rovněž neohrozí funkcionalitu
+maker závislých na kódování. Důvod globální definice je v~tom, že
+není vhodné, aby při opakovaném "{...\setfonts...}" musel být
+kódovací soubor načítán neustále znovu a znovu.
+
+Pokud uživateli vadí, že je předefinování maker globální
+(chce například svůj článek zařadit do sborníku, kde by
+předefinování mohlo vadit jiným článkům), pak ponechá "\loadingenc=0" a
+musí načíst soubory s~deklaracemi maker manuálně pomocí
+"\input" na začátku článku. V~takovém případě se provede
+deklarace jen lokálně.
+
+V~parametru <příkazy> makra "\ofsdeclarefamily" se může deklarovat
+nadstandardní varianta rodiny pomocí příkazu "\newvariant".\inl[newvariant]
+Tento příkaz provede:
+
+\begtt
+\font\ten<přepínač>=<metrika> \fosize
+\def \<přepínač> {\let\currentvariant=<číslice> \ten<přepínač>}
+\endtt
+%
+Dále příkaz "\newvariant" zanese do paměti informaci o~případné
+rozšiřující metrice podle <ext-enc>.
+
+Pokud OFS potřebuje dodržet při přechodu na novou rodinu naposledy
+zvolenou nadstandardní variantu, činí tak podle hodnoty
+"\currentvariant". Pokud tedy nová rodina má deklarovánu
+nadstandardní variantu pod stejnnou <číslicí>, bude použita tato
+varianta a OFS nebude přepínat do defaultní varianty "\rm".
+Je proto vhodné deklarovat varianty různých rodin ale
+\uv{stejného typu} pod stejnou <číslicí>.
+Z principu věci vidíme, že v~OFS existuje omezení v~počtu
+nadstandardních variant jedné rodiny na maximálně 10.
+To by nemělo vadit, protože kdykoli můžeme rozdělit rozsáhlou
+rodinu na více rodin (například Štormovy rodiny DynamoGrotesk).
+
+Makro "\setfonts" může měnit význam maker "\loadtextfam" a
+"\newvariant". Udělá to právě tehdy, když je v parametru <Rodina>
+specifikovaná varianta. V takovém případě stačí zavést jeden font a
+není potřeba zavádět celou rodinu. Při specifikaci standardní varianty
+"\newvariant" nebude dělat nic a "\loadtextfam" zavede jediný font.
+Při specifikaci nadstandardní varianty "\loadtextfam" nebude dělat nic
+a "\newvariant" zavede font jen tehdy, pokud se jedná o font
+specifikované varianty.
+
+Na závěr této sekce si podrobněji vysvětlíme činnost
+příkazu "\setfonts".\inl[setfonts]
+Tento příkaz \uv{vypočítá} a definuje podle parametru <velikost> hodnotu
+makra "\fosize". Dále při neprázdném pamaretru <JménoRodiny> a při
+neuvedení varianty tento příkaz provede
+"\def\currentfamily{<JménoRodiny>}"\inl[currentfamily],
+zatímco při prázdném parametru
+hod\-notu z~"\currentfamily" pouze použije.
+Je-li v~parametrech uvedena varianta
+rodiny, pozmění "\setfonts" na přechodnou dobu makra "\loadtextfam" a
+"\newvariant" tak, aby místo
+celé rodiny fontů byl zaveden jen jeden font. Dále spustí
+"\setfontshook" a pak <příkazy> z~odpovídajícího "\ofsdeclarefamily".
+Potom vrátí hodnoty maker
+"\loadtextfam" a "\newvariant" do původního stavu, pokud byly
+tyto hodnoty měněny. Nakonec spustí makro
+"\runmodifylist"\inl[runmodifylist], které nastaví za jistých okolností
+výjimky ze zvoleného kódování (podrobněji viz~\beglink{3.5}sekci~3.5\endlink).
+Konečně příkaz "\setfonts" spustí "\ignorespaces", aby případná
+zapomenutá mezera za závorkou~\clqq"]"\crqq nebyla v~horizonálním módu
+vytištěna.
+
+
+\subsec Kódování fontů a deklarace znaků
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\PLAIN: Pro přepínání do rozšiřující metriky slouží makro
+"\setextrafont"\inl[setextrafont].
+Toto makro se podívá, zda k~aktuálnímu fontu existuje v~paměti poznámka
+o~rozšiřující metrice (viz příkaz "\loadtextfam" a "\newvariant"
+\beglink{3.3}v~předchozí sekci\endlink).
+Pokud taková poznámka existuje, příkaz "\setextrafont" provede zhruba toto:
+
+\begtt
+\font\extrafont=<rozšiřující metrika ve velikosti základní metriky> \extrafont@inl[extrafont]
+\endtt
+
+\LATEX: Pro přepínání do rozšiřujícího kódování, které je deklarováno
+příkazem "\OFSextraencoding", slouží (stejně jako v plainu)
+makro "\setextrafont". Toto makro se podívá, zda bylo
+rozšiřující kódování deklarováno, a pokud ano, provede zhruba toto:
+
+\begtt
+\fontencoding{<rozšiřující kódování>}\selectfont
+\endtt
+
+\OBA: Chceme-li vytisknout z~rozšiřující metriky (rozšiřujícího
+kódování) nějaký znak s~kódem <číslo>, je možné použít
+makro "\extchar <číslo>"\inl[extchar].
+
+\PLAIN (až do konce sekce):
+Pro definice maker závislých na aktuálním kódování
+je možné v~OFS použít dva deklarační příkazy:
+"\characterdef" a "\accentdef". První z~nich\inl[characterdef]
+má tyto parametry:
+
+\begtt
+\characterdef \<sekvence> <kódování> <mezera> <číslo>
+% příklad:
+\characterdef \promile 8z 141
+% nebo
+\characterdef \<sekvence> <kódování> <mezera> {<příkazy>}
+% příklad:
+\characterdef \promile 8t {\%\char24 }
+\characterdef \promile * {\vrule height1ex width1ex\relax}
+ % in another encodings
+\endtt
+
+V~prvním případě se bude "\<sekvence>" při aktuálním kódování fontů
+shodném s~<kódováním> expandovat na token kategorie 12 s~kódem
+rovným <číslu>. V~druhém případě "\<sekvence>" expanduje při
+shodnosti <kódování> na <příkazy>. Vše proběhne na úrovni
+expand procesoru. Pokud použijeme oba výše zmíněné příklady
+pro definici "\promile", pak platí:
+
+\begtt
+\def\fotenc{8z} \promile % expanduje na znak s kódem 141
+\def\fotenc{8t} \promile % expanduje na příkazy \%\char24
+\endtt
+
+Mimoto je možné deklarovat přístup k~rozšířenému kódování, pokud je
+toto kódování specifikováno jako parametr <extra-enc> v~příkazu
+"\loadtextfam". Příklad:
+
+\begtt
+\characterdef \euro 8z 134
+\characterdef \euro 6s 37
+
+\def\fotenc{8z} \euro % expanduje na znak s kódem 134
+\def\fotenc{8t} \euro % expanduje na: {\setextrafont znak s kódem 37}
+\endtt
+
+V~tomto příkladě se při "\def\fotenc{8t}" může stát, že aktuální font
+nemá poznámku o~rozšiřující metrice, nebo má poznámku o~rozšiřující
+metrice jiné než "6s". Pak "\euro" vypíše varování na terminál
+o~nedostupnosti znaku "\euro".
+
+Vysvětlíme nyní podrobněji, jak makra deklarovaná pomocí
+"\characterdef" fungují. Příkaz "\characterdef"
+definuje "\<sekvenci>"
+jako "\printcharacter{<sekvence>}"\inl[printcharacter],
+takže například "\promile" expanduje nejprve na "\printcharacter{promile}".
+a "\euro" na "\printcharacter{euro}".
+Pokud se "\characterdef" použije opakovaně na stejnou "\<sekvenci>",
+pak se vždy znovu definuje stejně, takže nedochází ke ztrátě předchozí
+informace. Kromě toho ale "\characterdef" definuje další makro
+"\<sekvence>:-<kódování>" tak, že toto makro expanduje na znak se
+specifikovaným kódem nebo na <příkazy>. Další inteligence je schována
+v~příkazu "\printcharacter". Ten ověří, zda je definováno makro
+"\<sekvence>:-\fotenc". Pokud ano, expanduje na obsah tohoto makra.
+Jinak ověří, zda existuje poznámka o~rozšiřující metrice vztažená
+k~aktuálnímu fontu. Pokud ano, zjistí kódování této rozšiřující
+metriky <extra-enc> a podívá se, zda je definováno makro
+"\<sekvence>:-<extra-enc>". Pokud ano, expanduje na
+
+\begtt
+{\setextrafont \<sekvence>:-<extra-enc>}
+\endtt
+%
+Pokud se stále nepodařilo realizovat požadovaný znak,
+pokusí se vytisknout defaultní znak nezávislý na kódování
+"\<sekvence>:-*". Pokud ani to není možné,
+spustí se "\printcharacterwarn{<sekvence>}".\inl[printcharacterwarn]
+Implicitní hodnota tohoto makra vypíše varování
+o~nedostupném znaku <sekvence> na terminál a do logu a do výstupu
+nevytiskne nic.
+
+Chceme-li se vyhnout výpisu varování, můžeme "\printcharacterwarn"
+předefinovat, třeba takto:
+
+\begtt
+\def\printcharacterwarn #1{?(#1)?}
+\endtt
+
+Od verze OFS Mar. 2004 "\characterdef" odmítá předefinovat už
+definované kontrolní sekvence. Definuje pouze sekvence, které mají
+zatím význam "\undefined" nebo "\relax". V jiném případě (a pokud není
+sekvence už pomocí "\characterdef" definována) vypíše
+varování o ignorované definici do log souboru. Důvod tohoto opatření
+je ten, že kódovací soubory deklarují obrovské množství nových
+kontrolních sekvencí pomocí "\characterdef", a přitom programátor
+maker nemusí všechny znát. Může se tedy stát, že použije pro své vlastní makro
+stejné jméno. V takovém případě "\characterdef" respektuje makro
+definované programátorem a příslušný znak ponechá nepřístupný.
+Pokud potřebujeme pomocí "\characterdef" skutečně některé
+kontrolní sekvence předefinovat (u~maker závislých na kódování z~plainu to je
+nutné), pak musíme před použitím "\characterdef" napsat
+"\let\<sekvence>=\relax".
+
+Ze~stejných důvodů bylo do OFS přidáno makro "\safelet"\inl[safelet],
+které se chová jako "\let", ale odmítá předefinovat už definované
+kontrolní sekvence. Místo toho pouze vypíše varování, definované
+v~makru "\safeletwarn"\inl[safeletwarn].
+
+Kromě deklarace znaků pomocí "\characterdef" je k~dispozici možnost
+deklarace akcentových příkazů prostřednictvím
+"\accentdef"\inl[accentdef], který má
+tyto parametry:
+
+\begtt
+\accentdef \<sekvence> <znak> <nepovinná mezera> <kódování> <mezera> <číslo>
+% Příklad:
+\accentdef \v E 8z 204 % Ecaron
+% nebo
+\accentdef \<sekvence> <znak> <nep. mezera> <kódování> <mezera> {<příkazy>}
+% Příklad:
+\accentdef \v * 8z {\accent20 } % default caron in 8z
+\accentdef \v * * {\blackbox } % default caron
+\endtt
+
+Pokud je aktuální kódování fontů totožné s~<kódováním>, pak "\<sekvence>"
+následovaná znakem <znak> expanduje na token kategorie 12 s~kódem
+<číslo>, respektive expanduje na <příkazy>. To vše se děje jen na
+úrovni expand procesoru. Pokud je při deklaraci
+pomocí "\accentdef" jako <znak> uvedena hvězdička, pak se deklarované
+<příkazy> nebo kód <číslo> použije vždy, když znak následující
+"\<sekvenci>" není nikde prostřednictvím "\accentdef"
+deklarován. Jedná se tedy o~defaultní realizaci akcentu, pokud ve
+fontu neexistuje přímo akcentovaný znak.
+
+Kromě toho mají akcenty deklarované pomocí "\accentdef" stejnou
+inteligenci týkající se možnosti využití rozšiřující metriky, jako
+znaky deklarované v~"\characterdef".
+
+Vysvětlíme si nyní podrobněji, jak akcenty deklarované pomocí
+"\accentdef" fungují. Příkaz "\accentdef"
+definuje "\<sekvenci>" jako makro s~jedním neseparovaným parametrem
+"#1", které v~první řadě expanduje
+na "\printaccent{<sekvence>}{#1}"\inl[printaccent],
+takže například "\v E" expanduje na "\printaccent{v}{E}". Dále
+"\accentdef" definuje makro "\<sekvence>:<znak>:-<kódování>" jako znak
+s~daným kódem <číslo> nebo jako <příkazy>. Další práci udělá
+příkaz "\printaccent". Tento příkaz zjistí, zda je definováno makro
+"\<sekvence>:<znak>:-\fotenc". Pokud ano, expanduje na toto makro.
+Pokud ne, tak si ověří, zda je k~aktuálnímu fontu poznamenána
+rozšiřující metrika a zjistí její kódování <extra-enc>. Jestliže je
+definováno makro "\<sekvence>:<znak>:-<extra-enc>", pak se expanduje na
+"{\setextrafont \<sekvence>:<znak>:-<extra-enc>}". Pokud zatím vše
+selhalo, zkusí "\printaccent" postupně zjistit, zda jsou definována
+makra "\<sekvence>:*:-\fotenc" a "\<sekvence>:*:-<extra-enc>". Pokud je
+definováno první z~nich, expanduje a připojí na konec expanze <znak>.
+Pokud je definováno jen druhé z~nich, expanduje na
+
+\begtt
+{\setextrafont \<sekvence>:*:-<extra-enc> <normalfont> <znak>}
+\endtt
+%
+kde <normalfont> označuje přepínač do aktuálního fontu. Jestliže
+dosud vše selhalo, pokusí se ještě o~realizaci akcentu nezávislého na
+kódování, tj.~pokusí se tisknout "\<sekvence>:<znak>:-*" nebo konečně
+"\<sekvence>:*:-* <znak>". Teprve když i toto selhalo,
+spustí se "\printaccentwarn{<sekvence>}{<znak>}".\inl[printaccentwarn]
+Implicitní hodnota tohoto makra vypíše se na terminál a do
+logu varování o~nedostupnosti akcentovaného znaku a do výstupu
+nevytiskne nic.
+
+Je třeba si uvědomit, že přechod ke znaku v~rozšiřující metrice uvnitř
+slova znamená ztrátu vyrovnávacího kernu kolem tohoto znaku a
+nemožnost použít na takové slovo vzory dělení slov. Proto doporučujeme
+použít základní metriku kódovanou tak, aby přechod na rozšiřující
+metriku byl jen výjimečný. Pro český a slovenský jazyk jsou v~tomto smyslu
+vhodná kódování "8z" i "8t", protože obě zahrnují kompletní českou a
+slovenskou abecedu.
+
+Chceme-li odstranit už deklarovaný znak\inl[characterdel]
+(viz též tzv.~<výjimky> v~následující sekci), můžeme použít příkazy
+"\characterdel" a "\accentdel".\inl[accentdel]
+Tyto příkazy mají stejné parametry
+jako "\characterdef" resp. "\accentdef" a odstraní definici příkazu
+"\<sekvence>:-<kódování>" resp. "\<sekvence>:<znak>:-<kódování>".
+
+%Na závěr této sekce uvedeme příklad definice inteligentního
+%"\Uppercase":
+%
+%\begtt
+%\def\Uppercase #1{\bgroup
+% \let\expandaction=\noexpand % \euro zůstane po expanzi bez změny
+% % \u{g} taky zůstane beze změny
+% \def\ss{SS}\def\l{\L}\def\o{\O}\def\ae{\AE}\def\oe{\OE}%
+% \edef\tmp{#1}\expandafter
+% \egroup \expandafter\uppercase\expandafter{\tmp}%
+%} % \uppercase promění \u{g} na \u{G}. O to šlo.
+%\endtt
+
+
+\subsec \PLAIN: Soubory maker závislých na kódování a výjimky z~kódování
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Příkazy "\characterdef" a "\accentdef" popsané v~předchozí sekci
+předefinovávají makra závislá na kódování ("\v", "\ae", atd.). V~této
+sekci popíšeme koncepci, kam tato makra zapisovat, aby OFS při
+"\loadingenc=1" udržovalo konzistentní definice těchto maker
+v~závislosti na zvoleném kódování a na množině výjimek
+použité rodiny fontů.
+
+Deklarace maker pomocí "\characterdef" a "\accentdef"
+se zapisují do souborů s~názvem "ofs-<kódování>.tex" (tzv.~{\it
+kódovacích souborů\/}),
+protože příkaz "\loadtextfam" (volaný z~makra "\setfonts")
+tyto deklarace při nastaveném "\loadingenc=1"\inl[loadingenc] odtud čte.
+
+Každé kódování má svou základní sadu znaků a akcentovaných písmen.
+Tato sada je v~kódovacím souboru zanesena pomocí příkazů
+"\characterdef" a "\accentdef". Vzhledem k této základní sadě mohou
+jednotlivé rodiny fontů obsahovat nějaké znaky navíc nebo naopak nějaké
+znaky mohou chybět. Tyto výjimky se deklarují
+pomocí příkazu "\modifydef"\inl[modifydef] takto:
+
+\begtt
+\modifydef <kódování>:<identifikátor>; {<výjimky>}
+\endtt
+%
+Přitom <výjimky> obsahují příkazy "\characterdef", "\accentdef",
+"\characterdel" a "\accentdel". Příkazy "\*del" musejí obsahovat
+v~argumentu hodnotu znaku podle základní sady daného kódování.
+Pokud má být nějaký znak vzhledem k základní sadě předefinován, musejí
+příkazy "\*del" a "\*def" k tomuto znaku následovat těsně za sebou.
+
+V parametru příkazu "\ofsdeclarefamily" můžeme pomocí \uv{odkazu na
+<výjimky>} příkazem "\modifyenc"\inl[modifyenc]
+vyznačit, že daná rodina obsahuje vzhledem k~základní sadě kódování
+odpovídající <výjimky>. Příkaz má tvar:
+
+\begtt
+\modifyenc <kódování>:<identifikátor>;%
+\endtt
+%
+Takových příkazů může být pro každou rodinu fontů uvedeno více
+(a samozřejmě tyto příkazy mohou obsahovat různá <kódování>).
+Odkazuje-li tento příkaz na <výjimky>, které ještě
+nebyly deklarovány, neprovede se nic.
+
+Příklad deklarace výjimek kódování "8z:csfonts" najdete v~souboru
+"ofs-8z.tex" a odkazy na ně pak najdete u~rodin "CM*"
+v~souboru "ofsdef.tex".
+
+Příkazy "\modifyenc" jsou spuštěny při každém "\setfonts". Ve
+skutečnosti tyto příkazy pouze ukádají do tzv.~{\it seznamu odkazů}
+(do makra "\newmodifylist"\inl[newmodifylist])
+své parametry. Při startu "\setfonts" se zakládá prázdný seznam odkazů.
+"\modifyenc" ukládá do tohoto seznamu svůj parametr jen tehdy, pokud
+<kódování> je rovno "\fotenc" nebo "\extraenc". Vlastní práci
+(nastavení výjimek) provede až příkaz "\runmodifylist", který je spuštěn
+na konci "\setfonts" a jehož činnost si nyní podrobně popíšeme.
+
+Makro "\runmodifylist"\inl[runmodifylist] porovná seznam
+odkazů na výjimky předchozí rodiny ("\modifylist"\inl[modifylist])
+se seznamem odkazů nově nastavené rodiny ("\newmodifylist"). Pokud jsou oba seznamy
+stejné nebo "\modifylist" má význam "\relax", pak "\runmodifylist"
+ukončí činnost. Jinak se pustí do nastavení výjimek. Nejprve prohodí významy
+"\characterdef"$\leftrightarrow$"\characterdel" a
+"\accentdef"$\leftrightarrow$"\accentdel" a spustí "\modifylist"
+Jinými slovy vrátí stav maker vázaných na
+kódování do výchozího stavu. Při této činnosti je ignorováno mazání
+znaku, pokud těsně před tím byl znak deklarován (viz pravidlo
+o~předefinování znaku na začátku této sekce). Pak příkaz "\runmodifylist"
+vrátí "\characterdef" a "\accentdef" do původního stavu a spustí
+"\newmodifylist". Veškerá předefinování, která se při této činnosti provádějí,
+jsou jen lokální. Mechanismus dvou seznamů odkazů zaručuje,
+že například při
+
+\begtt
+\setfonts [Rodina1/] ... \setfonts [Rodina2/] ...
+\endtt
+%
+budou správně nastaveny výjimky aktuálního kódování i pro
+Rodinu2, ačkoli Rodina1 má jinou množinu výjimek než
+Rodina2.
+
+Kontrolní sekvence "\modifylist" má po inicializaci OFS význam
+prázdného makra. Programátor maker může použít
+"\let\modifylist=\relax" a tím potlačí veškeré nastavování výjimek.
+
+Poznamenejme ještě, že deklarační příkazy "\modifydef" nejenže ukládají
+<výjimky> do paměti, ale projdou také
+jejich obsah a definují všechny zde deklarované sekvence jako odpovídající
+"\printcharacter" resp. "\printaccent". Tím máme zaručeno, že každá
+kontrolní sekvence ze všech výjimek je definována (nedojde ke zprávě
+{\tt undefined control sequence}) a navíc OFS má
+dokonalý přehled o tom, zda je v~aktuální rodině tato kontrolní
+sekvence použitelná nebo nikoli. Tvůrce maker si pak může podle
+potřeby předefinovat makra "\print*warn".
+
+Příkaz "\modifydef" prochází <výjimky> tak, že na přechodnou dobu
+pozmění příkazy "\accentdef", "\accentdel", atd. a <výjimky> spustí.
+Pokud nechceme, aby se makra ve <výjimkách> spouštěla už v~době
+činnosti "\modifydef", uvedeme před tato makra sekvenci
+"\skipfirststep".\inl[skipfirststep]
+Ta se chová jako "\relax", ale při spouštění
+<výjimek> příkazem "\modifydef" způsobí, že vše za touto sekvencí až
+do konce <výjimek> bude přeskočeno.
+
+Identifikátory "<kódování>:lccodes" a "<kódování>:ienc" jsou rezervovány
+pro použití mimo OFS v~dalších makrech. OFS například vůbec neřeší nastavení
+"\lccode", "\uccode" znaků podle použitého kódování. Makro, které
+se o toto stará, může vhodně definovat příkazy "\lccodes"\inl[lccodes]
+a "\lccodesloop"
+a spustí "\csname <kódování>:lccodes\endcsname". OFS uvedené příkazy
+vůbec nedefinuje.\inl[lccodesloop]
+Deklarace "<kódování>:lccodes" jsou uvedeny
+v~souborech "ofs-8t.tex" a "ofs-8z.tex" ačkoli nejsou v OFS využity,
+protože to souvisí s~kódováním textových fontů. Příklad použití
+"<kódování>:lccodes" je v makru "lang.tex" a makro "inec.tex"
+používá "<kódování>:ienc". V dokumentaci~k těmto makrům je
+řečeno více.
+
+Deklarace nejčastěji používaných výjimek se zapisují přímo do
+kódovacích souborů. Deklarace méně obvyklých výjimek (vztahujících se
+jen na určité rodiny fontů) můžeme psát za "\endinput" deklaračních
+souborů. Mezi <příkazy> makra "\ofsdeclarefamily" pak
+použijeme příkaz\inl[modifyread]
+
+\begtt
+\modifyread <jméno souboru>;%
+\endtt
+%
+Tento příkaz při kladném "\loadingenc" načte daný soubor
+od výskytu sekvence "\modifytext"\inl[modifytext].
+Tuto sekvenci je vhodné umístit za "\endinput", aby "\modifyread"
+přečetl tu část souboru, která zatím nebyla čtena.
+Přiřazení je v době čtení globální a ignorují se konce
+řádků a prázdné řádky. Opakovaně se soubor nenačítá.
+
+Díky tomuto příkazu můžeme soustředit deklarace rodin fontů a
+deklarace výjimek z~kódování do společného souboru. Výjimky
+\TeX{} přečte až v době, kdy to potřebuje. Šetří se tím paměť \TeX{}u.
+Příklad použití je v~souboru "slido.tex".
+
+OFS nabízí také testovací
+makro, zda kontrolní sekvence odpovídá znaku, který je ve fontu
+přístupný či nikoli:\inl[knownchar]
+
+\begtt
+\knownchar <znak nebo akcent+znak>? \iftrue znak je přístupný
+ \else znak je nepřístupný nebo nedefinovaný \fi
+% příklad:
+\def\tryeuro{\knownchar \euro? \iftrue \euro \else Euro\fi}
+\endtt
+
+
+\subsec Pomocná makra pro akcenty a znaky
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Pro pohodlné deklarování defaultních akcentů jsou v~OFS\inl[accentabove]
+připravena dvě makra: "\accentabove" a "\accentbelow",
+která se používají takto:\inl[accentbelow]
+
+\begtt
+\accentabove {<znak akcentu>}{<vertikální mezera>}{<základní znak>}
+\accentbelow {<znak akcentu>}{<vertikální mezera>}{<základní znak>}
+\endtt
+
+Příkaz "\accentabove" resp. "\accentbelow" přisadí
+<znak akcentu> nad resp. pod <základní znak>, přičemž mezi těmito
+znaky bude <vertikální mezera>. Oba znaky budou na společné vertikální
+ose a při skloněném písmu na společné skloněné ose. Šířka výsledného
+složeného znaku je odvozena od šířky základního znaku. Makra jsou
+implementována jako "\vbox" resp. "\vtop" společně s~"\halign" a
+s~výpočtem usazení na případně skloněné ose.
+
+Znaky pro akcent nahoře jsou ve fontech vesměs kresleny ve výšce
+odpovídající základnímu znaku o~výšce 1\,ex. Proto usazení
+takového akcentu vyžaduje kompenzaci:
+
+\begtt
+\accentabove {<znak akcentu>}{-1ex}{<základní znak>}
+\endtt
+
+V~tomto případě se akcent umístí naprosto stejně, jako při použití
+primitivu "\accent". Na rozdíl od tohoto primitivu ale makra
+"\accentabove" a "\accentbelow" umožnují vzájemné skládání,
+čímž můžeme dosáhnout několikanásobného akcentu. Vyzkoušejte:
+
+\begtt
+\it \accentabove {.}{.1ex}{\accentabove {,}{.1ex}{\v A}}
+\endtt
+
+\PLAIN:
+Bohužel, makra deklarovaná pomocí "\accentdef" nejsou uzpůsobena na
+více než dvojí akcent. Navíc dvojí akcent je možný jen
+v~tom případě, že se vnitřní akcent
+se základním znakem realizuje jako jediný znak. Pokud potřebujeme
+vícenásobný akcent, můžeme vždy použít přímo v~textu makro
+"\accentabove" nebo "\accentbelow".
+
+\PLAIN:
+Od verze OFS Feb. 2004 je k dispozici makro
+"\ofshexbox"\inl[ofshexbox], které pracuje podobně jako
+plainové "\mathhexbox", ale navíc dovede nastavit font podle
+aktuální varianty. Nejprve pomocí příkazu
+"\ofshexboxdef"\inl[ofshexboxdef] nastavíme \uv{rodinu} čtyř metrik:
+
+\begtt
+\ofshexboxdef <rodina>{<metrika-rm>}{<metrika-bf>}{<metrika-it>}{<metrika-bi>}
+\ofshexboxdef 2 {cmsy}{cmbsy10}{cmsy}{cmbsy10} % například takto
+\endtt
+%
+Pak příkaz "\ofshexbox <rodina><hexa-kód>" vytiskne znak s~<hexa-kódem>
+z jednoho ze čtyř deklarovaných fontů a v aktuální velikosti "\fosize"
+Volba fontu závisí na aktuální variantě. Pokud je varianta jiná než
+"\bf", "\it", "\bi", použije se <metrika-rm>. OFS implicitně deklaruje
+jen <rodinu> = 2, protože plain používá jen "\mathhexbox2..".
+Cílem tohoto makra bylo definovat pro CMfonty/CSfonty znaky
+"\S", "\dag", "\ddag", "\P" způsobem, který je nezávislý na aktuálním
+nastavení matematických fontů, ale je závislý na aktuální velikosti a
+variantě. Viz soubor "ofs-8z.tex".
+
+Pomocí "\ofshexbox" můžeme snadno definovat například symbol
+"\euro" pro všechna kódování fontů, ve kterých je tento
+symbol nepřítupný:
+
+\begtt
+\ofshexboxdef {TS1}{tcrm1000}{tcbx1000}{tcti1000}{tcbi1000}
+\characterdef \euro * {\ofshexbox{TS1}BF}
+\endtt
+
+
+\subsec \PLAIN: Fonty v~matematice podruhé
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Nastal čas podrobněji vysvětlit činnost příkazu "\setmath"\inl[setmath].
+Ten převezme parametry a vypočítá z~nich
+základní\inl[textfosize],
+indexovou a index-indexovou velikost fontů. Výsledky uloží do maker
+"\textfosize"\inl[scriptfosize],
+"\scriptfosize" a "\scriptscriptfosize". V~nich jsou
+údaje o~velikosti uloženy ve tvaru
+"at<dimen>" nebo "scaled<číslo>"\inl[scriptscriptfosize]
+podobně jako v~makru "\fosize". Pak příkaz "\setmath" spustí makro
+"\mathfonts"\inl[mathfonts].
+V~něm se předpokládá zavedení a nastavení
+matematických fontů.
+Pokud je "\setmath" spuštěno poprvé nebo pokud došlo ke změně
+hodnoty "\fomenc", tak "\setmath" ještě spustí
+makro "\mathchars"\inl[mathchars].
+Tam se obvykle nastavují kódy matematických znaků pomocí
+"\mathcode", "\mathchardef" a příbuzných primitivů.
+Makra "\mathfonts" a "\mathchars" mají sice v~OFS svou
+implicitní hodnotu, ale zkušený uživatel je může podle své
+potřeby měnit.
+
+Pro pohodlné zavádění a nastavování matematických fontů je připraveno
+makro "\loadmathfam"\inl[loadmathfam],
+které se používá v~definici makra "\mathfonts".
+Makro "\loadmathfam" má tyto možnosti parametrů:
+
+\begtt
+%% % font je deklarován:
+\loadmathfam <rodina>[/<metrika>] % metrikou
+\loadmathfam <rodina>[-<varianta>/] % variantou aktuální rodiny
+\loadmathfam <rodina>[<přepínač>/] % přepínačem textového fontu
+\loadmathfam <rodina>[X<přepínač>/] % rozšiřující metrikou přepínače
+\endtt
+%
+Příklady:
+
+\begtt
+\loadmathfam 0[tenrm/]% metrika podle přepínače \tenrm
+\loadmathfam 5[-bi/]% metrika z akuální textové rodiny, varianta bi
+\newmathfam \symbfam
+\loadmathfam \symbfam [/psyr]% metrika psyr
+\newmathfam \extitfam
+\loadmathfam \extitfam [Xtenit/]% rozšiřující metrika k přepínači tenit
+\endtt
+%
+V~příkladě jsou do rodiny 0 zavedeny fonty stejné, jako v~aktuálním
+textovém fontu "\tenrm". V~rodině 5 jsou zavedeny fonty
+jako při~"\setfonts [-bi/]".
+Dále je deklarována nová rodina "\symbfam",
+do které jsou zavedeny fonty z~metriky "psyr".
+
+Existuje nepatrný rozdíl např.~mezi použitím příkazu "\loadmathfam 5[tenbi/]"
+a "\loadmathfam 5[-bi/]". V~prvním případě OFS zjistí metriku
+k~přepínači "\tenbi" a tuto metriku použije ve všech velikostech
+stejnou pouze modifikovanou klíčovým slovem "at<dimen>".
+Ve druhém případě se může pro různé velikosti použít různá metrika,
+pokud je tato vlastnost pro danou variantu fontu
+deklarována (viz~\beglink{3.8}sekce~3.8\endlink).
+
+Pro deklaraci nové
+rodiny se v příkladu použila alternativa k~"\newfam" s~názvem
+"\newmathfam"\inl[newmathfam],
+protože makro "\newfam" z~plainu je definováno jako "\outer"
+a nelze je tedy použít uvnitř definice. Navíc makro
+"\newmathfam" pracuje lokálně a tudíž šetří více místa pro uživatelské
+rodiny než plainovské "\newfam".
+V~deklaracích základních matematických kódování se nové matematické
+rodiny definují přímo pomocí "\chardef" a je tam pomocí příkazu
+"\lastfam=<číslo>"\inl[lastfam]
+nastavena maximální použitá hodonta. To zaručí, že uživatel může
+později použít "\newmathfam" a začne alokovat další
+rodiny s~čísly těsně většími než "\lastfam".
+
+Popíšeme nyní princip činnosti makra "\loadmathfam". Toto makro
+zjistí metriku, která odpovídá zadanému parametru.
+Pak provede třikrát primitiv "\font" zhruba takto:
+
+\begtt
+\font \<název>-Mt = <metrika> \textfosize
+\font \<název>-Ms = <metrika> \scriptfosize
+\font \<název>-Mss = <metrika> \scriptscriptfosize
+\textfont <rodina> = \<název>-Mt
+\scriptfont <rodina> = \<název>-Ms
+\scriptscriptfont <rodina> = \<název>-Mss
+\endtt
+%
+Přitom <název> je text parametru "\loadmathfam", který deklaruje
+metriku (přepínač, varianta nebo metrika).
+
+Fonty matematické rodiny~3 jsou v~plain\TeX{}u obvykle zavedeny bez
+zmenšování pro indexy a indexy indexů. Pokud požadujeme
+při zavádění matematické rodiny
+nezmenšovat fonty pro indexy, uvedeme těsně před "\loadmathfam"
+prefix "\noindexsize"\inl[noindexsize].
+Makro "\loadmathfam" pak zavede font jen ve velikosti "\textfosize"
+a použije ho i pro indexovou a indexindexovou velikost.
+Příklad:
+
+\begtt
+\noindexsize\loadmathfam 3[tenex/]% Standard extra symbols from CM
+\endtt
+
+OFS definuje v~souboru "ofsdef.tex" pro zavádění matematických fontů
+čtyři různá makra. Ta se použijí podle toho, zda je "\fomenc"
+nastaveno na "CM" nebo "PS" a "\mathversion" na "normal" nebo "bold".
+Dále OFS definuje dvě makra s~deklaracemi matematických kódů,
+která se použijí podle aktuálně nastavené hodnoty "\fomenc".
+
+\begitems
+* "\loadCMnormalmath"\inl[loadCMnormalmath]
+ --- zavede CM fonty ve verzi \uv{normal}.
+* "\loadCMboldmath"\inl[loadCMboldmath]
+ --- zavede CM fonty ve verzi \uv{bold}.
+* "\loadPSnormalmath"\inl[loadPSnormalmath]
+ --- zavede PostScriptové fonty ve verzi \uv{normal}.
+* "\loadPSboldmath"\inl[loadPSboldmath]
+ --- zavede PostScriptové fonty ve verzi \uv{bold}.
+* "\setCMmathchars"\inl[setCMmathchars]
+ --- ponechá matematické kódy z~plainu.
+* "\setPSmathchars"\inl[setPSmathchars]
+ --- nastaví matematické kódy tak, aby se nahradily
+ některé znaky z~fontu Symbol.
+\enditems
+
+Dále je v~OFS implicitně nastaveno:
+
+\begtt
+\ifx \fomenc\undefined \def\fomenc{PS}\fi
+\def\mathversion{normal}
+\def\defaultmathfonts{\csname load\fomenc\mathversion math\endcsname}@inl[defaultmathfonts]
+\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}@inl[defaultmathchars]
+\def\mathfonts{\defaultmathfonts}
+\def\mathchars{\defaultmathchars}
+\endtt
+
+Je možné přidávat k~implicitně nastaveným matematickým fontům
+další matematické rodiny (v~terminologii NFSS matematické abecedy)
+pozměněním maker "\mathfonts" a případně "\mathchars".
+Níže je příklad přidání fraktury z~Eulerových fontů od AMS:
+
+\begtt
+\input amsfn % tam je deklarována metrika eufm a eufb
+\addcmd\mathfonts{\def\tmpa{bold}%
+ \ifx\mathversion\tmpa \def\tmpa{b}\else\def\tmpa{b}\fi
+ \newmathfam\frakfam \loadmathfam\frakfam [/euf\tmpa]}
+\def\frak#1{{\fam\frakfam#1}}
+\endtt
+
+Další příklady deklarací matematických rodin
+jsou uvedeny v~souborech "amsfn.tex",
+"txfn.tex" a "mtfn.tex". Soubory definují výchozí skupiny
+matematických fontů pro kódování "AMS", "TX", "PX", "MT".
+Na konci těchto souborů jsou komentáře včetně ukázek, jaké
+doplňující rodiny fontů je možno pomocí "\addcmd" zavést.
+
+Protože chci umožnit načtení všech fontových deklarací OFS
+v~ini\TeX{}u (viz projekt Ok\TeX{}), ale přitom šetřit pokud
+možno pamětí \TeX{}u, rozhodl jsem se nenačítat rozsáhlé definice
+obsahující deklarace kódování matematických fontů pomocí
+"\mathchardef" atd. okamžitě, ale až v době, kdy to uživatel
+v dokumentu skutečně potřebuje.
+Proto jsem od verze OFS Apr. 2004 předefinoval například makro
+"\setPSmathchars" takto:
+
+\begtt
+\def\setPSmathchars{\mathencread ofs-ps;}
+\endtt
+%
+Příkaz "\mathencread <soubor>;"\inl[mathencread]
+načte kódovací příkazy ze souboru
+<soubor.tex>. Např. v~souboru "ofs-ps.tex" jsou kódovací příkazy pro
+kódování "PS", v~"ofs-ams.tex" jsou kódovací příkazy pro kódování
+"AMS"~atd.
+
+V~souborech "ofs-ps.tex", "ofs-tx.tex" atd.
+jsou kódovací příkazy \uv{baleny} do skupin a
+definovány příkazem "\mathencdef"\inl[mathencdef]. Tento příkaz
+pracuje implicitně jako \uv{definuj, spusť a zapomeň}. Tento model
+šetří paměť, ale při častých změnách matematického kódování budou
+kódovací soubory čteny opakovaně znovu. To většinou nevadí, protože
+většinou bývá pro celý dokument nastaveno jediné matematické kódování.
+Pokud ale tento model někomu nevyhovuje, může si jako cvičení zkusit
+předefinovat "\mathencread" a "\mathencdef" tak, aby se soubory četly
+jen jednou a při opakovaném spuštění "\mathchars" se kódovací příkazy
+četly ze zapamatovaných maker.
+
+Příkaz "\mathencread <soubor>;" založí skupinu, ve které pro jistotu
+nastaví kategorie všech znaků podle plain\TeX{}u
+(s~výjimkou "\catcode`@=11") a přečte "<soubor>.tex".
+Při čtení je "\globaldefs=1" a ignorují se konce řádků a prázdné řádky.
+Rovněž je ignorováno makro "\protectreading", takže soubor může být
+čten opakovaně. Příkazy "\mathencdef" spustí a zapomenou
+nadefinovaná makra až po uzavření skupiny,
+takže tato makra spouští příkazy "\mathchardef" atd. už jen
+s~lokálními přiřazeními.
+
+Vysvětlíme, jak je zajištěno obnovování výchozích hodnot
+při přepínání mezi matematickými kódováními.
+Příkaz "\setmath" spouští těsně před "\mathchars" makro
+"\mathcharsback"\inl[mathcharsback], aby uvedl matematické kódování
+do výchozího stavu podle plain\-\TeX{}u.
+Toto makro má implicitně význam
+"\relax", protože implicitně je matematické kódování
+podle plain\TeX{}u nastaveno.
+Mění-li ale příkaz "\set<fomenc>mathchars" hodnoty nastavené
+v~plain\TeX{}u, měl by také definovat makro
+"\mathcharsback", do kterého uloží postup, jak
+vrátit nastavení do původního stavu.
+V definici makra "\mathcharsback" můžeme mimo jiné použít
+příkaz "\mathencread ofs-cm;", protože v~souboru "ofs-cm.tex"
+jsou uloženy deklarace metamatického kódování podle plain\TeX{}u
+
+Pokud si budeme deklarovat vlastní matematická kódování (různá od
+připravených "PS", "CM", "AMS" atd.), pak je potřeba myslet na
+následující zásadu: ve všech verzích matematických fontů
+(normal/bold/atd.) by měla být čísla matematických rodin alokována
+stejně a ukončena stejným "\lastfam", protože makro "\mathchars" se po
+přepnutí do jiné verze nespouští znovu. Zvláště nesmíme měnit
+čísla těch rodin, na které se odvoláváme v~makru
+"\set<kódování>mathchars".
+
+Nyní popíšeme další makra ulehčující deklaraci matematického kódování.
+Makro "\hex"\inl[hex]
+konvertuje číslo na jednociferné hexadecimální
+číslo. Využití tohoto makra najdeme v~souborech "ofs-ps.tex",
+"ofs-tx.tex" a dalších.
+
+Pro definování sekvencí, které budou pracovat v textovém i
+matematickém módu současně, slouží makro
+"\safemathchardef"\inl[safemathchardef].
+Toto makro má stejný způsob použití, jako primitivní "\mathchardef":
+
+\begtt
+\safemathchardef \<sekvence> <číslo>
+\endtt
+
+Pokud není "\<sekvence>" v~okamžiku použití "\safemathchardef"
+definována, příkaz pracuje zcela stejně jako "\mathchardef".
+Pokud ale je "\<sekvence>" už definována, uloží příkaz
+"\safemathchardef" její význam do "\T<sekvence>", dále provede
+"\mathchardef \M<sekvence> = <číslo>" a konečně "\<sekvenci>"
+předefinuje následujícím způsobem:
+
+\begtt
+\def \<sekvence> {\ifmmode \expandafter \M<sekvence>
+ \else \expandafter \T<sekvence> \fi}
+\endtt
+%
+Od této chvíle "\<sekvence>" pracuje v textovém i matematickém módu.
+Pro případ opakovaného použití "\safemathchardef" na stejnou
+"\<sekvenci>" makro kontroluje, zda už není definována "\M<sekvence>".
+Pokud ano, pak "\safemathchardef" neprovede nic.
+
+Je potřeba, aby byly soubory s~příkazy "\characterdef"
+načteny před prvním použitím "\setmath". Pak lze v~rámci
+"\setmath" (přesněji v~makru "\mathchars") použít
+"\safemathchardef" na předefinování některých sekvencí,
+které byly dříve deklarovány pomocí "\characterdef". Tyto sekvence pak
+budou pracovat v textovém i matematickém módu.
+
+Naprosto stejně, jako "\safemathchardef" pracuje příkaz
+"\safemathaccentdef"\inl[safemathaccentdef].
+Pouze místo primitivu "\mathchardef" použije
+makro "\mathaccentdef"\inl[mathaccentdef],
+které přečte za "\<sekvencí>" "<číslo>" separované mezerou
+a provede:
+
+\begtt
+\def \<sekvence> {\mathaccent<číslo> }
+\endtt
+
+Pokud nechceme deklarovat novou matematickou rodinu pro několik
+málo znaků (počet matematických rodin je totiž v~\TeX{}u
+omezen na 16), můžeme použít makro
+"\pickmathfont"\inl[pickmathfont], které má tyto
+parametry:
+
+\begtt
+\pickmathfont {<metrika>}{<text>}
+% příklad použití:
+\mathbin {\pickmathfont {psybo}{\char"C4}}
+\endtt
+%
+Makro "\pickmathfont" použije primitiv "\font" na specifikovanou
+<metriku> a v~tomto fontu zapíše <text>, který v~matematickém seznamu
+tvoří atom typu Ord. Důležité je, že je použit font v~odpovídající
+velikosti (základní, indexová, indexindexová), takže to vypadá, jako
+by byl použita nová matematická rodina fontů. Přitom to není pravda,
+protože "\pickmathfont" je implementován pomocí primitivu "\mathchoice".
+Použití příkazu "\pickmathfont" najdeme v~souboru "ofsdef.tex"
+v~definici makra "\setPSmathchars".
+
+
+
+\subsec Registrování metrik pro různé velikosti
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Registrování různých metrik pro různé velikosti se dělá
+ve~"fd" souborech a je to dokonale vyřešeno v~NFSS.
+
+\PLAIN (až do konce sekce):
+Existují speciální rodiny fontů (například Computer Modern), kde se
+pro různé velikosti fontů používají různé metriky. I~tato vlastnost je
+implementována v~OFS. Dosud jsme zatajili, že v~parametrech příkazů
+"\loadtextfam", "\loadmathfam" a "\pickmathfont" je možné místo názvů
+metrik uvést smyšlené <jméno>, které je registrováno příkazem
+"\registertfm"\inl[registertfm].
+V~takovém případě se skutečná metrika pro zavedení primitivem "\font"
+vypočítá z~požadované velikosti fontu a z~údajů, které byly zadány
+pomocí skupiny příkazů "\registertfm". Upřesníme nyní parametry
+příkazu "\registertfm":
+
+\begtt
+\registertfm <jméno> <mezera> <od>-<do> <mezera> <skutečná metrika> <mezera>
+\endtt
+
+Parametry <od> a <do> musejí obsahovat jednotku a vymezují uzavřený
+interval, pro který platí: jestliže je požadovaná velikost fontu
+ve tvaru "at"<dimen> a současně <dimen> leží
+v~intervalu "<od>-<do>", pak se místo <jména> použije
+"<skutečná metrika> at<dimen>".
+Příkaz "\registertfm" je potřeba pro vymezení různých
+intervalů použít opakovaně na stejné <jméno>.
+Ačkoli jsou intervaly "<od>-<do>" uzavřené, později
+deklarovaný interval má přednost před dříve deklarovaným, takže nakonec
+je kladná reálná osa rozdělena na polouzavřené intervaly. Příklad
+použití je v~souboru "ofsdef.tex".
+
+Jsou-li oba parametry <od> a <do> prázdné, je příkazem "\registertfm"
+deklarována metrika, která se použije při specifikaci velikosti pomocí
+"scaled<číslo>" nebo v~případě, kdy <dimen> neleží v~žádném
+specifikovaném intervalu. Hvězdička místo parametru <do> značí
+\uv{nekonečnou velikost}.
+
+Příkaz "\registertfm <jméno> <mezera> - <mezera> - <mezera>"
+vymaže z~paměti předchozí registrace pro dané <jméno> a navíc vyznačí
+<jméno> jako nepřístupný font. OFS se pak chová stejně, jakoby odpovídající
+varianta nebyla vůbec deklarována. Dává nám to
+možnost vyznačit neexistující varianty deklarované rodiny
+jen pro některá kódování (viz například "cmssbxti"
+v~souboru "ofsdef.tex").
+
+Parametry <jméno> a <skutečná metrika> se expandují v~okamžiku
+činnosti příkazu "\registertfm". Není proto obvyklé v~nich používat
+makro "\fotenc". Nicméně toto makro můžeme v~uvedených parametrech
+použít, pokud zahrneme potřebnou skupinu příkazů "\registertfm"
+do vlastního makra a toto makro spustíme opakovaně pro různé
+hodnoty "\fotenc".
+
+Makro "\registerECfont"\inl[registerECfont]
+je zkratkou za opakované použití příkazu
+"\registertfm" na všechny velikosti EC fontů od "0500"
+až po "3583". Stejně makro
+"\registerECTTfont"\inl[registerECTTfont]
+je zkratkou pro velikosti EC fontů od "0800" do "3583" používané pro
+strojopis. Definice a použití těchto maker najdeme v souboru
+"ofsdef.tex". Makra můžeme použít i na jiné fonty, které mají stejně
+odstupňované velikosti jako EC fonty (např. LH fonty s~azbukou nebo
+fonty odvozené z~CM-super).
+
+
+\subsec Omezení použití rodiny fontů pro určitá kódování
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\LATEX: Použití rodiny v~daném kódování je závislé na existenci
+"fd" souboru, tj.~vše je v~režii NFSS.
+
+\PLAIN (až do konce sekce):
+OFS od verze Feb.~2004 zavádí příkaz "\registerenc",\inl[registerenc]
+kterým můžeme omezit použití deklarované rodiny fontů
+jen pro vymezená kódování.
+Pokud pak uživatel napíše "\setfonts" a vyžaduje rodinu
+v~neregistrovaném kódování, OFS vypíše varování na obrazovku
+a vůbec do požadované rodiny nepřepne. Tím se vyhne pokusu zavést
+pravděpodobně neexistující metriky fontů. Příkaz "\registerenc"
+má dva parametry:
+
+\begtt
+\registerenc <JménoRodiny>: <kódování><mezera>
+\registerenc Times: 8t % například
+\registerenc Times: 8z % nyní má Times registrována dvě kódování
+\endtt
+
+Pokud nemá rodina registrováno žádné kódování, pak OFS předpokládá, že
+je použitelná v~jakémkoli kódování (například fonty značek).
+
+V~deklaračních souborech tedy můžeme pomocí "\registerenc" omezit
+použití rodiny jen na vymezená kódování. Uživatel ale může
+příkazem "\registerenc" přidat k~rodině další povolené kódování. Nebo
+také může naznačit, že rodina má povoleno libovolné kódování
+příkazem "\registerenc <JménoRodiny>: * ".
+
+Abychom v~deklaračních souborech nemuseli opisovat <JménoRodiny>, může
+být tento parametr prázdný. V~takovém případě "\registerenc" použije
+rodinu z~posledního příkazu "\ofsdeclarefamily".
+
+Ve svých makrech se můžete zeptat, zda je rodina pro aktuální hodnotu
+"\fotenc" registrovaná:\inl[registeredfam]
+
+\vbox \bgroup
+\begtt
+\registeredfam <JménoRodiny>? \iftrue
+ Rodina má \fotenc registrováno nebo má povoleno jakékoli kódování
+ nebo vůbec není deklarována.
+\else Rodina má registována kódování, ale \fotenc mezi nimi není.
+\fi
+\endtt \egroup
+
+Pokud spustíme "\setfonts[<JménoRodiny>/]" pro nedeklarovanou rodinu
+nebo pro rodinu s~nedovoleným kódováním,
+pak OFS napíše varování na terminál a vrátí "\setfontsOK"\inl[setfontsOK]
+jako "\undefined". Po úspěšném nastavení fontu má sekvence
+"\setfontsOK" hodnotu "\relax".
+
+
+\sec Licence
+%%%%%%%%%%%%
+
+Balíček OFS může používat kdokoli bez licenčních poplatků. Kdokoli jej
+rovněž může distribuovat, pokud nezmění obsah souboru "readme.ofs"
+"ofs.tex", "ofsdef.tex", "ofs.sty", "ofs-8z.tex",
+"ofs-8t.tex", "a35.tex", "a35.sty", "ofsdoc.tex", "ofsdoce-e.tex",
+"ofsmtdef.tex" a
+všechny tyto soubory budou v distribuci přítomny.
+Právo na změnu těchto souborů a
+tím změnu verzí zůstává výhradně autorovi. Pokud potřebujete změnit
+obsah některého z~uvedených souborů, nazvěte jej jinak. Balíček je
+poskytován s~přáním, aby byl užitečný, ale BEZ JAKÉKOLI ZÁRUKY.
+
+\bigskip
+V~Praze dne 16. 8. 2001 \hfill autor: Petr Olšák
+
+
+\sec Historie
+%%%%%%%%%%%%%
+
+\noindent
+16. 8. 2001 --- uvedena první verze
+
+\noindent
+24. 10. 2002 --- provedeny drobné úpravy respekutjící změny
+ve verzi OFS Oct.~2002.
+V této verzi byl přidán příkaz "\addcmd" a byly
+umožněny nepovinné parametry
+"(<Varianta>)" v příkazu "\loadtextfam".
+
+\noindent
+10. 2. 2004 --- Všechny úpravy se týkají jen OFS pro plain:
+
+\def\bod{\hangindent=1.2em \hangafter=1 \noindent + }
+
+\bod Vylepšena manipulace s deklaracemi maker
+závislých na kódování, deklarace výjimek a registrování kódování pro
+zvolenou rodinu.
+Viz~\beglink{3.5}sekce~3.5\endlink{} a \beglink{3.9}sekce~3.9\endlink.
+
+\bod Přidána možnost předefinování rodiny (např. dodatečným načtením
+souboru deklaračního souboru, který modifikuje vlastnosti implicitních rodin).
+
+\bod Deklarace CMRoman, CMSans a CMTypewriter pro kódování 8t
+použitím EC fontů.
+
+\bod Přidána podpora rozšiřujícího kódování 8c.
+
+\bod Upravena deklarace matematického kódování PS, aby "\int",
+"\sum" a "\prod" pracovaly v~display módu s~většími znaky.
+
+\bod Definováno makro "\ofshexbox" a "\ofshexboxdef".
+
+\bod Nově zveřejněno interaktivní makro "ofstest.tex".
+
+\bod Zaveden adresář "examples/", kde průběžně budu dávat
+příklady použití OFS.
+
+\noindent
+12. 3. 2004 --- OFS pro plain:
+
+\bod Kódovací soubory jsou čteny přímo z "\loadtextfam".
+Tím je umožněno dávat do kódovacích souborů mapování metrik příkazem
+"\registerenc" (využiju pro LANG).
+
+\bod "\characterdef" respektuje definované makro a nepředefinuje jej.
+
+\bod Reimplementováno "\showfonts". Nyní šetří výrazně paměť i čas na
+rozsáhlých seznamech fontů. Pozor: pokud jste měli makra využívající
+interní makro "\listfamilies", pak toto přestane
+fungovat. Např. nefunguje od této verze zastaralé "ofscatal.tex".
+Místo něj je možno použít "ofstest.tex"
+
+\bod Modifikováno "ofstest.tex", aby pracovalo s novou implementací
+seznamu rodin "\ofslistfamilies".
+
+\noindent
+2. 4. 2004 --- přidáno "\plaincatcodes" před čtením souborů "ofs-<kódování>.tex".
+
+\bod Zavedeno "\safelet" a "\protectreading".
+
+\bod Mezera za <znakem> v "\accentdef" je nepovinná.
+
+\bod Přidána možnost "\loadmathfam <rodina>[-<varianta>/]" a rozšířena
+a přepracována deklarace pro matematická kódování "CM", "PS", "AMS",
+"TX", "PX", "MT".
+
+
+\sec Rejstřík všech maker definovaných v~OFS
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Rejstřík obsahuje odkazy pouze na místa v~textu, kde je k~makru
+vysvětlující komentář. V~tom místě je též uveden pro snadnější orientaci
+název makra v~levém okraji. V~rejstříku nejsou odkazy na
+všechny zmínky o~makru v~textu. Rejstřík je správně vygenerován hned
+po prvním průchodu zpracování tohoto dokumentu příkazem "csplain ofsdoc".
+
+Některá makra definovaná v~"ofs.tex" jsou interní nebo pomocná
+a není o~nich zmínka v~textu. Pak odkaz na stranu záměrně chybí a je
+připojena jen krátká poznámka o~takovém makru. Rovněž jsou připojeny
+poznámky o~tom, zda je makro použito ve verzi pro
+{\smallbf PLAIN} nebo {\smallbf LATEX}.
+
+
+\bigskip
+\immediate\closeout\indout
+\input \jobname.ind
+
+\begingroup
+\let\tt=\smalltt \let\it=\smallit \let\rm=\smallrm \rm
+\baselineskip=10.3pt
+
+\def\inr #1 #2 #3;{\noindent{\tt
+ \expandafter \ifx \csname ind:#2\endcsname \relax
+ \back#1%
+ \else
+ \beglink{#2}\back#1\endlink
+ \fi}\quad
+ #3 \quad\pg[#2]\par}
+\def\\#1 #2;{\inr #1 #1 #2;}
+\def\pl{{\sevenrm (PLAIN)}}
+\def\la{{\sevenrm (LATEX)}}
+\def\oba{{\sevenrm (PLAIN+LATEX)}}
+
+\\accentabove \pl;
+\par\nobreak
+\\accentbelow \pl;
+\\accentdef \pl;
+\\accentdel \pl;
+\\accentdefori \unskip, {\tt\back accentdelori} \pl~interní,
+ udržují původní význam maker;
+\\accentnodef \pl~interní, {\tt\back def\back <makro>\#1%
+ \char`\{\back printaccent\char`\{<makro>\char`\}\char`\{\#1\char`\}\char`\}};
+\\addcmd \oba;
+\inr bf rm \oba;
+\inr bi rm \oba;
+\\bifam \pl~interní, matematická rodina pro BoldItalic;
+\\calculatemetricfile \pl~interní, definuje {\tt\back metricfile}
+ podle velikosti;
+\\catcodesloop \pl~interní, nastaví kategorie znaků v cyklu podle daného čísla;
+\\characterdef \pl;
+\\characterdel \pl;
+\\characterdefori \unskip, {\tt\back characterdelori} \pl~interní,
+ udržují původní význam maker;
+\\characternodef \pl~interní, {\tt\back def\back <makro>%
+ \char`\{\back printcharacter\char`\{<makro>\char`\}\char`\}};
+\\currentfamily \pl;
+\\currentfomenc \pl~interní, jméno naposledy použitého matemat. kódování;
+\\currentvariant \pl;
+\\declaredfamily \pl~interní, obsahuje jméno naposledy deklarované rodiny;
+\\defaultextraenc \pl;
+\\defaultmathchars \pl;
+\\defaultmathfonts \pl;
+\\defpttotmpa \pl~interní, udělá {\tt\back def\back tmpa\char`\{pt\char`\}},
+ pokud chybí jednotka;
+\\detailfontmessages \pl;
+\\displayfontmessages \pl;
+\\displaymessage \pl;
+\\docharacterdef \pl~interní, pro potřeby makra {\tt\back characterdef};
+\\doextchar \pl~interní, pro potřeby makra {\tt\back extchar};
+\\dosafemathdef \pl~interní, pro potřeby maker {\tt\back safemath*def};
+\\donumbercharacterdef \pl~interní, pro potřeby makra {\tt\back characterdef};
+\\endOFSmacro \pl~interní, možnost čtení {\tt[<file>, ...]} za
+ {\tt\back input ofs};
+\\expandaction \pl;
+\\extchar \oba;
+\\extraenc \pl;
+\\extrafont \pl;
+\\fontdef \oba;
+\\fontloadmessage \pl~interní, výpis informace o~provedení {\tt\back font};
+\\fontmessage \pl~interní, střídá hodnoty nic,
+ {\tt\back wlog} a {\tt\back displaymessage};
+\\fontprefix \pl~interní, střídá hodnotu nic a {\tt\back global};
+\\fontusage \oba;
+\\fosize \pl;
+\\fomenc \pl;
+\\fotenc \pl;
+\\fragilecommand \pl;
+\\fragilecommand! \pl;
+\\hex \pl;
+\\ifknownfam \oba;
+\\isunitpresent \pl~interní, řeší případ absence jednotky;
+\inr it rm \oba;
+\\knownchar pl;
+\\knownfam pl;
+\\lastfam pl;
+\\lccodes \unskip, {\tt\back lccodesloop} \pl;
+\\loadCMboldmath \pl;
+\\loadCMnormalmath \pl;
+\\loadingenc \pl;
+\\loadmathfam \pl;
+\\loadPSboldmath \pl;
+\\loadPSnormalmath \pl;
+\\loadtextfam \pl;
+\\logfontmessages \pl;
+\\mathaccentdef \pl;
+\\mathchars \pl;
+\\mathcharsback \pl;
+\\mathencdef \pl;
+\\mathencread \pl;
+\\mathfonts \pl;
+\\mathversion \pl;
+\\metricfile \pl~interní, jméno metriky při použití {\tt\back font};
+\\metrictmpa \pl~interní, expanduje na metriku fontu {\tt\back tmpa};
+\\modifydef \pl;
+\\modifyenc \pl;
+\\modifylist \pl;
+\\modifyread \pl;
+\\newfamily \pl~přechodné, zadané jméno rodiny;
+\\newmathfam \pl;
+\\newmodifylist \pl;
+\\newvariant \pl;
+\\nofontmessages \pl;
+\\noindexsize \pl;
+\\noPT \pl~interní, odstraní {\tt pt} z~{\tt\back the<dimen>} [TBN, str.~80];
+\\ofsaddenctolist \pl~interní, přidá parametr do seznamu {\tt\back newmodifylist};
+\\OFSdeclarefamily \la;
+\\ofsdeclarefamily \pl;
+\\OFSextraencoding \la;
+\\OFSfamily \la;
+\\OFSfamilydefault \la;
+\\ofshexbox \pl;
+\\ofshexboxdef \pl;
+\\ofsinput \pl~interní, čte soubor při {\tt\back globaldefs=1}, ignoruje konce řádků;
+\\ofslistfamilies \pl~interní, seznam rodin pro {\tt\back showfonts};
+\\ofslistfamily \pl~interní, uvozuje rodinu v {\tt\back listfamilies};
+\\ofslistvariants \pl~interní, text pro výpis variant do logu;
+\\ofslisttext \pl~interní, uvozuje text v {\tt\back listfamilies};
+\\ofsloadfont \pl~interní, zavede jeden font;
+\\ofsloadfontori \pl~interní, zavede jeden font;
+\\ofsmeaning \pl~interní, vykostí z~výstupu {\tt \back meaning} slovo
+ {\tt letter}/{\tt character};
+\\ofsmessageheader \pl~interní, hlavička hlášení do logu a na terminál;
+\\OFSnormalvariants \la;
+\\OFSprocessoptions \la;
+\\OFSputfamlist \la;
+\\ofsputfamlist \pl;
+\\ofsremovefromlist \pl~interní, odstraní rodinu ze seznamu;
+\\OFSversion \oba~interní, datum verze makra;
+\\orifosize \pl~přechodné, podrží hodnotu {\tt\back fosize};
+\\origTeX \pl~interní, originální definice loga \TeX;
+\\oriloadfam \pl~přechodné, podrží hodnotu {\tt loadtextfam};
+\\pickmathfont \pl;
+\\plaincatcodes \pl~interní, nastaví kategorie znaků podle plain\TeX{}u;
+\\printaccent \pl;
+\\printaccentwarn \pl;
+\\printcharacter \pl;
+\\printcharacterwarn \pl;
+\\processOFSoption \pl~interní, pro potřeby makra {\back endOFSmacro};
+\\protectreading \pl;
+\\readfamvariant \pl~interní, testuje, zda je zadána varianta rodiny;
+\\readfirsttoken \pl~interní, vrátí první token textu ukončeného {\tt:\back end};
+\\readfosize \pl~interní, vloží hodnotu {\tt\back fosize}
+ do {\tt\back dimen0};
+\\readmag \pl~interní, počítá {\tt\back fosize}, je-li dáno
+ {\tt mag}<desetinné číslo>;
+\\readOFSoptions \pl~interní, pro potřeby makra {\tt\back endOFSmacro};
+\\readothertokens \pl~interní, vrátí druhý a další tokeny až po {\tt:\back end};
+\\readsixdigits \pl~interní, využito pro zaokrouhlování;
+\\registeredfam \pl;
+\\registerECfont \pl;
+\\registerECTTfont \pl;
+\\registerenc \pl;
+\\registertfm \pl;
+\\restorefontid \pl~interní, obnovení jména fontu, viz {\tt\back savefontid};
+\\rm \oba;
+\\runmodifylist \pl;
+\\safelet \pl;
+\\safeletwarn \pl;
+\\safemathaccentdef \pl;
+\\safemathchardef \pl;
+\\savefontid \pl~interní, pro udržení jména fontu ve výpisech Overfull;
+\\savetokenname \pl~interní, něco jako {\tt\back string} bez backslashe;
+\\scriptfosize \pl;
+\\scriptscriptfosize \pl;
+\\separeofsvariant \pl~interní, separace nepovinného parametru
+ {\tt\back loadtextfam};
+\\setextrafont \oba;
+\\setCMmathchars \pl;
+\\setfonts \oba;
+\\setfontshook \pl;
+\\setfontsOK \pl;
+\\setfontfamily \pl~interní, {\tt\back setfonts},
+ pokud není dána varianta;
+\\setfosize \pl~interní, vypočítá hodnotu {\tt\back fosize};
+\\setmath \pl;
+\\setPSmathchars \pl;
+\\setsimplemath \pl;
+\\setsinglefont \pl~interní, {\tt\back setfonts},
+ pokud je dána varianta;
+\\setsinglefontname \pl~interní, vykostí z názvu metriky případné "at<dimen>";
+\\sgfamily \pl~interní, pro uložení informace o~rodině;
+\\sgvariant \pl~interní, pro uložení informace o~variantě;
+\\showfonts \oba;
+\\singlefont \pl;
+\\singlefontname \pl~interní, odstraní {\tt at<dimen>} z~názvu metriky;
+\\skipfirststep \pl;
+\\slantcorrection \pl~interní, pro potřeby
+ {\tt\back accentabove} a {\tt\back accentbelow};
+\\storeofsvariant \pl~interní, separace nepovinného parametru
+ u~{\tt\back loadtextfam};
+\\switchdeftodel \pl~interní, prohodí {\tt\back accent/characterdef}
+ s~{\tt\back *del};
+\\tenbi \pl;
+\inr tenbf tenrm \pl;
+\inr tenit tenrm \pl;
+\\tenrm \pl;
+\\testOFSoptions \pl~interní, pro potřeby makra {\tt\back endOFSmacro};
+\\testtfmsize \pl~interní, pro potřeby {\tt\back registertfm};
+\\testtfmsizeat \pl~interní, přechodná hodnota {\tt\back testtfmsize};
+\\testtfmsizescaled \pl~interní, přechodná hodnota {\tt\back testtfmsize};
+\\textfosize \pl;
+\\tryloadenc \pl~interní, načte kódovací soubory;
+\\tmpa \oba~přechodné;
+\\tmpb \oba~přechodné;
+\\tmpc \pl~přechodné;
+\\warnmissingfont \pl~interní, výpis o~chybějící variantě;
+\\warnM \unskip, {\tt\back warnF}, {\tt\back warnT}, {\tt\back warnI}
+\pl~interní, výpis o~chybějící standardní variantě;
+\\warnunregistered \pl~interní, výpis o~nedovoleném kódování zvolené rodiny;
+
+\endgroup
+
+\sec Reference
+
+\noindent \hangindent=2\parindent
+[TBN] Petr Olšák {\it \TeX{}book naruby}, Konvoj
+1.~vyd. 1997 (ISBN 80-7302-007-6),
+2.~vyd. 2001 (ISBN 80-85615-64-9), Brno, 466 stran.
+PDF verze knihy je volně k~dispozici na
+{\tt http://math.feld.cvut.cz/olsak/tbn.html}.
+
+
+
+\end
+
+
+