% 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



