<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\chyph % pouľijte csplain

% Přimlovám se k tomu nepřeznačkovávat článek do LaTeXu
% Na článku totiľ demonstruji vlastnosti OFS a opírám se
% o OFS z plainu. Přechod na LaTeX se zachováním těchto vlastností
% by nebyl jednoduchý. Můľete rozbalit metriky
% a virtuální fonty k Charteru (přiloľený charter8z.zip) do 
% pracovního adresáře a zpracovat csplainem na instalaci TeXu, 
% která obsahuje OFS. Před spuątěním dvips je pak potřeba doplnit 
% do psfonts.map čtyři řádky uvedené v souboru mapfile. Můľete mě také
% informovat o tom, na kterých stránkách se dokument bude ve sborníku
% nacházet, já opravím údaj \firstpage, zplainuji to, zdvipsuji a
% poąlu obratem zpátky.

\newcount\firstpage   \firstpage=79
\newcount\numpages    \numpages=14

\def\addcmd #1#2{\expandafter\def\expandafter\tmpa\expandafter{#1}%
   \def\tmpb{#1}%
   \ifx\tmpa\tmpb % the #1 is not a macro
      \expandafter\let\csname \string#1-original\endcsname =#1%
      \expandafter\def\expandafter #1\expandafter{%
           \csname\string#1-original\endcsname #2}%
   \else          % the #1 is a macro
      \expandafter\def\expandafter #1\expandafter{#1#2}%
   \fi}

\input ofs [ffonts]                  % Charter je ve skupině free fonts
\setfonts [Charter/10pt]             % výchozí rodina
\setmath[//]                         % inicializace matematiky
\fontdef\tt [CMTypewriter/mag1.1]    % strojopis, korekce střední výąky
\fontdef\verbtt [CMTypewriter-rm/8]  % strojopis pro display ukázky
\fontdef\small [!/9]                 % zmenąení pro abstrakt a záhlaví
\addcmd \small {\baselineskip11pt \rm \def\mathversion{normal}\setmath[//]}
\fontdef\fontsekce [!/12]            % pro nadpisy sekcí
\addcmd \fontsekce {\bf \let\it=\bi \def\mathversion{bold}\setmath[//]} 
\fontdef\fonttitul [!-bf/14.4]       % titul

\hsize=12,2cm
\vsize=19,3cm
\hoffset=63pt
\voffset=43pt
\parindent=14pt

\lineskiplimit=-10pt
\raggedbottom

\exhyphenpenalty=10000
\widowpenalty=10000
\clubpenalty=10000

\showboxdepth=10 \showboxbreadth=50

\def\starthead{\global\headline=
     {\small \ifodd\pageno \hfil \thetitul \headspace \the\pageno 
     \else \the\pageno \headspace \theauthor \hfil \fi}}
\headline={\hfil\starthead}
\def\headspace{\hskip2.5em\relax}
\def\makeheadline{\vbox to0pt{\vskip-25pt
  \line{\vbox to8.5pt{}\the\headline}\vss}\nointerlineskip}
\footline={\setfonts[/7]\setmath[//]\baselineskip=9pt
     \vbox{\hbox{\copytext}\hbox{\copykonvoj}}\hfil
     \global\footline={}}
\def\lastpage{\advance\firstpage by\numpages \advance\firstpage by-1
     \the\firstpage}

\def\copytext{Jan Kasprzak, Petr Sojka (editoři): \SLT~2002 -- sborník
       semináře o~Linuxu a \TeX{}u, str. \the\firstpage--\lastpage, 2002.}
\def\copykonvoj{\copyright~Konvoj, CSTUG, CZLUG 2002}

\newcount\subnum

\def\kap #1\par{\advance\subnum by1
   \removelastskip %\goodbreak
   \vskip17pt plus2pt minus1pt\noindent{\fontsekce
   \ifnum\subnum&gt;1 \the\subnum\enspace\enspace\fi #1}%
   \par\nobreak\vskip11pt plus2pt minus1pt 
   \everypar{\setbox0=\lastbox \everypar={}}}
\def\reference {\subnum=-1 \kap Reference\par \small}
\def\bib{\par\advance\subnum by1 \leftskip=\parindent 
   \noindent\llap{\the\subnum.\enspace}\ignorespaces}

\let\orifootnote=\footnote
\newcount\footnotenum
\def\footnote#1{\global\advance\footnotenum by1
   \orifootnote{$\setmath[//]^\the\footnotenum$}{\small 
        \hangindent=\parindent #1\par}}
\def\footnoterule{\kern-3pt \hrule width 2cm \kern2.6pt }

\def\titul #1 \par{\def\thetitul{#1}\pageno=\firstpage
   \centerline{\fonttitul #1}\vskip20pt\relax}
\def\autor #1 \par{\def\theauthor{#1}
   \centerline{#1}\vskip10pt\relax}
\def\institut #1 \par{\centerline{\small #1}}
\def\email #1 \par{\centerline{\small Email: \tt #1}\vskip20pt\relax}
\def\abstrakt #1\par{\bgroup \small
   \leftskip=3em \rightskip=3em
   \noindent{\bf Abstrakt:}\enspace #1\par \egroup\bigskip}
\def\url#1{{\tt#1}}

\font\mflogo=logo10                       % METAFONT logo
\font\boldsy=cmbsy10 at12pt               % Tučné \CS, \AMS.
\font\bboldsy=cmbsy10 scaled\magstep2     % Tučné \CS v titulu

\def\CS{$\cal C\kern-.1667em\lower.5ex\hbox{$\cal S$}\kern-.075em $}
\def\bCS{{\boldsy C\kern-.1667em\lower.5ex\hbox{S}\kern-.04em}}
\def\CSTeX{\CS\TeX}
\def\CSTUG{\CS TUG}
\def\CSfont{\CS\kern.1em font}
\def\csplain{\CS\kern.1em plain} \let\CSplain=\csplain
\def\mf{{\mflogo META}\-{\mflogo FONT}}
\def\mp{{\mflogo META}\-{\mflogo POST}}
\def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
\def\twoe{$2_{\textstyle\varepsilon}$}
\def\LaTeXe{\LaTeX\thinspace\twoe}
\def\cslatex{\CS\kern.05em\LaTeX} \let\CSLaTeX=\cslatex
\def\twoe{$2_{\textstyle\varepsilon}$}
\def\LaTeXe{\LaTeX\thinspace\twoe}
\def\AMS{$\cal A\kern-.166em\lower.5ex\hbox{$\cal M$}\kern-.075em S$}
\def\bAMS{{\boldsy A\kern-.166em\lower.5ex\hbox{M}\kern-.075em S}}
\def\ps{Post\-Script}
\def\SLT{S\kern-0.025em\lower.5ex\hbox{L}\kern-.2emT}
\def\DOS{\hbox{DOS}}

%% Definice verbatim prostředí %%          !verb.
\catcode`\"=13
\def"{\hbox\bgroup\let"=\egroup\setverb\tt}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials\obeyspaces}
\def\begtt{\medskip\bgroup
   \nobreak\setverb \parskip=0pt %\parindent=0pt
   \catcode`\"=12\catcode`\~=13 \obeylines
   \baselineskip=10pt
   \let\tt=\verbtt \startverb}
{\catcode`\|=0 \catcode`\\=12
  |gdef|startverb#1\endtt{%
        |tt#1|nobreak|egroup|penalty0|medskip|scannexttoken}}
{\obeyspaces\gdef {\ }}
\long\def\scannexttoken#1{\ifx#1\par\else\noindent#1\fi}

\def\citeref #1 #2 {\expandafter\def\csname cit:#1\endcsname{#2}}
\citeref pismolijna  1
\citeref ofsftp      2
\citeref ofsdoc      3
\citeref stormcl     4
\def\cite#1{\expandafter\ifx \csname cit:#1\endcsname\relax
   \message{Warning: cite{#1} is not defined}[??]%
   \else [\csname cit:#1\endcsname]\fi}

%-------------------------------------------------------------------------

\titul  Makro OFS
        %%%%%%%%%

\autor Petr Oląák

\institut Elektrotechnická fakulta ČVUT, Praha

\email olsak@math.feld.cvut.cz

\abstrakt 
   OFS (Oląákův fontový systém) je balíček TeXových maker, který
   umoľní získat větąí přehled nad rozsáhlými kolekcemi fontů a umoľní
   s~nimi poměrně snadnou manipulaci. Balík byl vyvinut pro získání
   přehledu nad fonty z~Typokatalogu Střeąovické písmolijny~\cite{pismolijna}.
   Na základě poptávky \LaTeX{}ových uľivatelů byl balík
   napsán jeątě jednou pro \LaTeX, kde vyuľívá NFSS a pokouąí se je
   troąičku vylepąit. Základní uľivatelské příkazy OFS jsou pak v~obou
   prostředích (plain i \LaTeX) stejné. Na přednáące předvedu pouľití
   OFS na uľivatelské i konfigurační úrovni.

\kap Úvodem
%----------

Makro OFS jsem si napsal hlavně proto, abych se vyznal ve stovkách
fontů, které pocházely ze Střeąovické písmolijny a pro které jsem
před rokem udělal \TeX{}ovou podporu. Protoľe jsem plainista, ąlo mi
hlavně o~to udělat makro co nejvíce srozumitelné uľivateli plainu,
který potřebuje přesně vědět, co to makro dělá. Tento poľadavek
například \LaTeX{}ové NFSS nesplňuje.

Později se začali o~OFS zajímat téľ někteří uľivatelé \LaTeX{}u. Toľ
jsem se přemohl a pokusil OFS napsat jeątě jednou, tentokrát pod
\LaTeX{}em s~vyuľitím~NFSS. Cílem tohoto přepsání bylo hlavně to, aby
se uľivatelské příkazy pro vyhledávání a přepínání rodin fontů
zcela shodovaly v~\LaTeX{}ové verzi s~verzí plainovou. \LaTeX{}ová
verze přesto umí podstatně méně věcí, neľ plainová, protoľe pokud by
měla umět vąe, musel bych NFSS zcela odmítnout a fontový modul
\LaTeX{}u si napsat po svém. Tím bych ale popřel \LaTeX{} jako
takový, takľe jsem zůstal u~respektování principů NFSS. Věci, které
se v~NFSS dají dělat velmi těľko, jsem raději nedělal. 

Z~těchto důvodů jsem se v~\LaTeX{}u nepouątěl ani do podpory
matematických fontů. Koncepce matematiky v~NFSS mi připadá jako
plainistovi poněkud nesrozumitelná. Navíc velké kolekce fontů, které byly
hlavní motivací OFS, jsou větąinou textové. Pokud chce někdo
pouľít matematickou sadu fontů v~\LaTeX{}u, pouľije
"\usepackage{styl}" a ten styl je k~té matematické sadě větąinou
dodáván. Nepovaľoval jsem tedy řeąení matematiky 
v~\LaTeX{}u za prioritní. Na druhou stranu matematické rodiny v~plainu
se pomocí OFS doplňují a zavádějí ve vąech velikostech velmi
elegantně. Věřím, ľe alespoň nějakému plainistovi (kromě mě) se toto
řeąení bude hodit.

Makro OFS jsem zveřejnil na \cite{ofsftp} pod \TeX-like licencí, 
tj. je volně k~mání, ale změny pod stejným názvem nesmí dále ąířit nikdo
jiný, neľ autor. Do \TeX{}ových distribucí jsem makro zatím 
neprosadil, protoľe bohuľel chybí anglická dokumentace. Domnívám se,
ľe kdyby anglická dokumentace byla, nebyl by se zařazením do \TeX{}ových
distribucí problém a makro by mohlo vyuľít daleko více lidí. Bohuľel,
nejsem v~angličtině natolik zdatný, abych tento problém rychle překonal.
Pro letoąní letní prázdniny jsem sice plánoval, ľe se pokusím anglickou
dokumentaci napsat, jenľe přiąla voda\dots

K~OFS existuje samozřejmě česká dokumentace~\cite{ofsdoc} podrobě
popisující chování makra. Navíc jsem se o~OFS zmínil uľ v~článku 
o~\TeX{}ové podpoře ©tormových fontů~\cite{stormcl}. Dovolil jsem si
zde přesto znovu k~tomuto tématu vrátit. Nechci  být nyní
tak technicky exaktní, jako v~manuálu~\cite{ofsdoc}, ale zase mám zde
více místa k~rozepsání moľností makra, neľ jsem měl ve
článku~\cite{stormcl}, který byl předevąím o~©tormových fontech.


\kap Základy uľivatelského rozhraní
%----------------------------------

Uľivatelské rozhraní je shodné v~\LaTeX{}ové verzi OFS i 
v~plainové s~výjimkou snad zavedení makra OFS, které v~plainu
provedeme jednoduąe pomocí "\input ofs [kolekce, fontů]", zatímco 
v~záhlaví \LaTeX{}ového dokumentu píąeme
"\usepackage [kolekce, fontů] {ofs}".

Abych v~tomto textu nemusel kaľdou chvíli větvit svůj výklad na situaci
vhodnou pro plain a pro \LaTeX{}, rozhodl jsem se zde předpokládat, ľe
pracujeme pouze s~plainem (například s~\csplain{}em).
\LaTeX{}ový uľivatel si bude muset dohledat specifika verze OFS pro
svůj formát v~dokumentaci~\cite{ofsdoc}. 

\bigskip

Příkazem "\fontusage" dostaneme na terminál a do logu základní
informace o~uľivatelských příkazech:

\begtt
$ tex ofs \\fontusage
This is TeX, Version 3.14159 (Web2C 7.3beta5)
(/usr/local/share/texmf/tex/csplain/ofs.tex
OFS (Olsak's Font System) based on plain initialized. &lt;Oct. 2002&gt;
(/usr/local/share/texmf/tex/csplain/ofsdef.tex))
\fontusage: ============== Olsak's Font System, usage: =================
\input ofs [sjannon, sdynamo, a35] ... for example
\showfonts  ... shows all loaded font families (by previous \input)
\setfonts [Family/] ... local switch to the new family, after this, the
  \rm, \bf, \it, bi will switch to the variants. The current size is used.
\setfonts [/size] ... local switch to the new size of fonts, the family is
  not changed. The "size" has the following possible formats:
    at&lt;dimen&gt;       ... the same as \font\something=file at&lt;dimen&gt;
    &lt;dimen&gt;         ... the same as at&lt;dimen&gt;
    &lt;number&gt;        ... the same as at&lt;number&gt;pt
    scaled&lt;number&gt;  ... the same as \font\something=file scaled&lt;number&gt;
    mag&lt;decimal-number&gt; fonts will be magnified by given coefficient
                        depend on current size of the fonts.
\setfonts [Family/size] ... switch to the new family at given size
\setfonts [Family-vr/]  ... switch to the specified font, the current size
  is used. The "vr" is acronym for variant (bf for example).
\setfonts [Family-vr/size] ... switch to the specified font.
\fontdef\name [Family/size] ... same as \gdef\name{\setfonts[Family/size]}
  The "Family" or "size" parameter may be empty.
\fontdef\name [Family-vr/size] ... \name is fixed-font switch iff:
  "size" is no empty and no mag&lt;dec-number&gt;.
  Fixed-font switch "\name" is implemented as \global\font\name=file.
\setmath [size/size/size] ... set math it/rm as current it/rm + use PS Symbol
\nofontmessages, \logfontmessages, \displayfontmessages, \detailfontmessages
  ... the levels of log.
*
\endtt

Vidíme, ľe příkaz "\showfonts" nám ukáľe kolekce fontů. Pokud jsme
nepouľili \uv{previous "\input"}, dopadne základní kolekce
(implementovaná přímo uvnitř OFS) takto:

\begtt
*\showfonts
OFS (l.0): 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
\endtt

Názvy fontových rodin jsou zde uvedeny v~hranatých závorkách a vedle jsou
uvedeny přepínače variant, které pro danou rodinu je moľné pouľít.

Vidíme, ľe nejběľnějąí textové fonty Computer Modern jsou zaneseny 
v~OFS do tří rodin "CMRoman", "CMSans" a "CMTypewriter". Myslím, ľe
netřeba dodávat, co to znamená. V~rodinách "CMSans" a "CMTypewriter"
není k~dispozici jinak obvyklá varianta "BoldItalic", pro kterou je
vyhrazen přepínač "\bi". V~rodině "CMTypewriter" nenajdeme ani
přepínač "\bf" pro tučnou variantu, ale zato můľeme pouľít
\uv{nadstandardní} variantu "\sl" (slanted), která je k~dispozici i
v~rodině "CMRoman".

%OFS také přímo pracuje s~rodinami "Times", "Helvetica" a
%"Courier". 
%Rodina "Helvetica" má kromě běľných variant jeątě varianty
%zúľené, například "\nbf" znamená "NarrowBold". Pokud písmová rodina
%nemá skutečnou kurzívu, ale jen skloněnou variantu, je přesto tato
%varianta vymezena přepínačem "\it". 
%Větąina písmových rodin totiľ
%dodrľuje \uv{logiku čtyř variant}, pro které jsou v~OFS vyhrazeny
%právě přepínače "\rm", "\bf", "\it", "\bi".

Deklarace daląích písmových rodin jsou zanáąeny do deklaračních 
souborů s~příponou "tex"%
\footnote{V \LaTeX{}ovém OFS se jedná o~příponu {\tt sty}.}.
V~kaľdém distribuci \TeX{}u 
doporučuji udrľovat soubor volající vąechny deklarační soubory 
"allfonts.tex". Například na mém počítači vypadá tento soubor takto:

\begtt
$ cat `kpsewhich allfonts.tex`
%%% All OFS families declared on this TeX
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%                            Petr Olsak
\input a35       % PostScript 35
\input ffonts    % Another free fonts
\input btfonts   % Bitstream fonts
\input skatalog  % Stromtype foundry, 89 families
\endtt
%
Kdyľ tedy napíąu "$ tex allfonts \\showfonts \\end | less"~, dostanu
na svém počítači výpis zhruba tří set písmových rodin, kaľdá obvykle
ve čtyřech variantách. Důleľité je, ľe se v tom vyznám a nemusím
vzpomínat, jak se která metrika jmenuje.  Následuje jen část výpisu.

\begtt
OFS (l.0): 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
a35.tex:
   [AvantGarde/]         \rm, \bf, \it, \bi
   [Bookman/]            \rm, \bf, \it, \bi
   [NewCentury/]         \rm, \bf, \it, \bi
   [Palatino/]           \rm, \bf, \it, \bi
   [ZapfChancery/]       \rm,  - , \it,  - 
   [ZapfDingbats/]       \rm,  - ,  - ,  - 
   [Symbol/]             \rm,  - , \it,  - 
ffonts.tex:
   [Charter/]            \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:
...
   [DynaGroteskLE/]      \rm, \bf, \it, \bi
   [DynaGroteskD/]       \rm, \bf, \it, \bi
   [DynaGroteskR/]       \rm, \bf, \it, \bi
...
stitul.tex:
   [Alcoholica/]         \rm, \bf, \it,  - 
   [Monarchia/]          \rm, \bf,  - ,  - 
   [MonarchiaText/]      \rm, \bf,  - ,  - 
   [Clichee/]            \rm, \bf, \it, \bi
   [Regula/]             \rm,  - , \it,  - 
   [Splendid/]           \rm, \bf, \it,  - , \script, \sans
   [Cobra/]              \rm, \bf,  - ,  - 
   [ExcelScript/]        \rm,  - ,  - ,  - , \ext
   [ExcelScriptText/]    \rm,  - ,  - ,  - , \ext
   [Zeppelin/]           \rm, \bf,  - ,  - , \lr, \coll
   [Negro/]              \rm,  - ,  - ,  - 
   [Farao/]              \rm, \bf,  - ,  - , \kr, \coll
...
slido.tex:
   [Lido/]               \rm, \bf, \it, \bi, \crm, \cbf
\endtt

Ve výpisu je uveden i \TeX{}ový soubor, kde se deklarace odpovídajících
rodin skutečně nachází. Vidíme tedy, ľe "a35.tex" uľ obsahuje
deklarace rodin, ale například soubor "skatalog.tex" zřejmě obsahuje jen daląí
"\input sjannon", "\input sdynamo", "\input stitul" atd.
Kdyľ si pro svůj dokument vyberu třeba rodiny "JannonText", 
"DynaGroteskR" a "Farao", pak místo toho, abych psal

\begtt
\input ofs [allfonts]
\endtt
%
si vystačím~s
\begtt
\input ofs [sjannon, sdynamo, stitul]
\endtt
%
coľ způsobí načítání podstatně méně souborů s~deklaracemi fontových rodin.

Pokud potřebuji vědět, jak ty fonty vypadají, napíąu například:

\begtt
$ pdfcsplain ofscatal [sjannon, sdynamo, stitul] ; acroread ofscatal.pdf
\endtt
%
Soubor "ofscatal.tex", který vytvoří katalog, byl zařazen do balíku 
OFS od verze~"Oct 2002".

\kap Přepínač rodin a velikostí

Hlavním příkazem OFS na uľivatelské úrovni je "\setfonts". Jedná se
předevąím o~přepínač rodin, viz výpis "\fontusage" v~předchozí sekci.
Přepínač má dva parametry v~hranaté závorce oddělené lomítkem. Prvním
parametrem je název rodiny a druhým poľadovaná velikost fontů. Pokud
některý parametr chybí, přepínač nebude jeho nastavení měnit. Přepínač
samozřejmě funguje lokálně ve skupinách, jako bývá u~fontových
přepínačů obvyklé. Po přepnutí rodiny pracují přepínače variant
(obvykle "\rm", "\bf", "\it", "\bi") pro novou rodinu. Varianta se po
přepnutí rodiny inicializuje stejná, jako byla před přepnutím,
tj. jsme-li zrovna v~kurzívě rodiny Times a přepneme do Helveticy,
zůstáváme ve variantě "\it" rodiny Helvetica, tj. skloněné
písmo. Pokud ale při přepnutí rodiny aktuální varianta v~nové rodině
neexistuje, inicializuje se varianta "\rm", kterou musí obsahovat
kaľdá rodina.

Příklady

\begtt
\setfonts [JannonText/10.5]  % nastavím na začátku dokumentu
\setfonts [/14]\bf           % například pro nadpisy
\setfonts [/8]\rm            % pro poznámky pod čarou
\setfonts [DynagroteskR/]\it % třeba pro citáty
\setfonts [CMTypewriter/]    %  pro strojopis.
       % tento přepínač např. v kurzívě nastaví automaticky
       % variantu kurzíva-strojopis.
\endtt

Výhodou tedy je, ľe si nemusím pamatovat názvy matrik (v~\LaTeX{}u pak
nesrozumitelné zkratky rodin pouľívané v~NFSS), ale píąu název rodiny
do dokumentu stejným způsobem, jak jej vidím v~písmovém katalogu.
Pokud udělám v~názvu rodiny překlep (třeba nedodrľím velká a malá
písmena), příkaz "\setfonts" spustí "\showfonts", tj. na obrazovce 
a v~logu vidím seznam vąech rodin, které mohu pouľít.

Velikost fontů mohu nastavit přímo udáním v~jednotce "pt", nebo
připsáním jiné jednotky (např. "mm"), nebo jako u~primitivu "\font"
pomocí slova "scaled" (koeficient zvětąení se váľe k~základní
velikosti fontu) a konečně i pomocí zcela nového prefixu "mag", který
udává zvětąení vzhledem ke zrovna pouľité velikosti fontů, například:

\begtt
\def\maly{\setfonts [/mag0.8]}
stanu se {\maly menąím a {\maly menąím a {\maly jeątě menąím}}} 
a uľ jsem se z toho dostal.
\endtt
% 
dopadne takto:

\medskip
\def\maly{\setfonts[/mag0.8]}
stanu se {\maly menąím a {\maly menąím a {\maly jeątě menąím}}} a
uľ jsem se z~toho dostal.
\medskip

Prefix "mag" pro velikost vyuľijeme například v~logu \LaTeX{}, které
jsem si v~plainu definoval jako

\begtt
\def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
\endtt
%
a funguje to v~nadpisech (je tam tučné vyvýąené A~odpovídající
velikosti) i v~poznámkách pod čarou. V~\LaTeX{}u samotném mají toto
logo definováno tak, ľe se pro vyvýąené A~pouľije font v~indexové
velikosti. No jo, zde jim to náhodou prochází, ale co kdyby se
(například v~jiném v~logu) hodilo pro některé písmeno pouľít 
velikost "mag.8", která není jako indexová velikost pouľita?
Bez OFS bychom to pak dělali dost obtíľně, protoľe NFSS nám řeąení
nenabízí. 

Daląím vyuľitím prefixu "mag" je moľnost korigovat nestejné střední
výąky písma. Například v~tomto sborníku je pro strojopis pouľit
"CMTypewriter". Pokud si vąimnete v~jiných příspěvcích, neľ tento,
vidíte, ľe uvnitř odstavců ten strojopis s~fontem Charter moc nesedí, protoľe
strojopis má menąí střední výąku písma. Stačí ale pro přepínač "\tt"
pouľít "\setfonts [CMTypewriter/mag1.1]", a střední výąka je 
v~lati. To vidíme například v~tomto příspěvku.
A~funguje to včetně zmenąených variant, které jsou 
v~příspěvcích pro \SLT{} pouľity v~abstaktu, poznámce pod čarou, 
nebo třeba v~údaji \uv{Email}, uvedeném v~záhlaví příspěvku.

Příkaz "\setfonts" můľe obsahovat i specifikaci varianty (viz výpis
příkazu "\fontusage"). Pak se uľ nejedná o~přepínač rodiny, ale fontu
samotného. V~takovém případě přepínač "\setfonts" neovlivní přepínače
variant "\rm", "\bf" a daląích, ale nastaví jen poľadovaný jediný
font. Například pro nadpisy by ąlo psát "\setfonts[-bf/14]" místo
"\setfonts[/14]\bf", ale museli bychom mít jistotu, ľe v~nadpisu
nepouľijeme přepínač varianty, protoľe ten by vrátil font do velikosti
aktuální rodiny. Tou velikostí je třeba 10pt.

Abychom v~nadpisu mohli pouľít přepínač "\it", a přitom se dostali do
varianty "\bi" (coľ je ľádoucí), je potřeba přepínač fontu v~makru
pro nadpis naprogramovat zhruba takto:

\begtt
\def\nadpis #1{{\setfonts[/14]\bf \let\it=\bi #1}}
\endtt
%
Kvůli tomuto jednoduchému obratu, který zvládne snad kaľdý plainista,
jsem se rozhodl nekomplikovat jádro OFS podobným způsobem jako NFSS a
nezavádět tedy daląí \uv{nezávislou souřadnici} popisující duktus fontu.
Pro speciální rodiny fontů (jako je třeba rodina
"DynaGrotesk") jsem ale snadno pomocí doplňujících maker vytvořil
přepínač, který respektuje jeątě o~jednu \uv{nezávislou souřadnici}
více, neľ zvládá NFSS. V~tomto případě to nebyl jen duktus, ale 
i stupeň zúľení písma. Navíc tento přepínač dokáľe \uv{poskakovat} po
jednotkách vpřed a vzad podél zvolené souřadnice. To také NFSS
nezvládá.

Často se hodí vytvářet zkratky pro přepínače rodin. K~tomu slouľí
makro "\fontdef\přepínač[Rodina/velikost]", které funguje podobně,
jako pouľití konstrukce "\gdef\přepínač{\setfonts[Rodina/velikost]}".
V~záhlaví tohoto dokumentu mám například uvedeno:

\begtt
\input ofs [ffonts]                 % Charter je ve skupině free fonts
\setfonts [Charter/10pt]            % výchozí rodina
\fontdef\tt [CMTypewriter/mag1.1]   % strojopis, korekce střední výąky
\fontdef\verbtt [CMTypewriter/8]    % strojopis pro display ukázky
\fontdef\small [Charter/9]          % zmenąení pro abstrakt a záhlaví
\endtt

Moľná čtenáře napadne, ľe jsem nemusel psát podruhé slovo "Charter" 
v~deklaraci přepínače "\small". Při kompletní změně základní rodiny
dokumentu na jinou bych pak mohl změnit slovo "Charter" jen na 
jediném místě  (u~příkazu "\setfonts") a byl bych hotov. 
Bohuľel, vynechání rodiny v~příkazu "\small" vede 
k~problémům, protoľe tento příkaz je pouľit v~záhlaví dokumentu, 
tj. ~v~"\output" rutině. Pokud zde neuvedeme explicitně rodinu, dědí se
rodina aktuálně pouľitá, která ovąem můľe být jakákoli, protoľe
"\output" rutina je vyvolávaná z~různých míst při zpracování
dokumentu. Mít záhlaví jednou strojopisem a podruhé Charterem podle
toho, odkud byla "\output" rutina zavolána, je samozřejmě neľádoucí.

Tento problém se dá řeąit \uv{vykřičníkovou} konvencí, kterou umí
zpracovat příkaz "\fontdef":

\begtt
\fontdef\small [!/9] \addcmd\small {\rm} % pro abstrakt a záhlaví
\endtt
%
Vykřičník je nahrazen aktuální rodinou uľ v~době činnosti příkazu
"\fontdef", nikoli tedy aľ v~době provádění přepínače.  V~"\output"
rutině se musíme jeątě postarat o~potlačení dědičnosti aktuální
varianty. Proto jsem pouľil jeątě příkaz "\addcmd" (zaveden nově od
verze OFS "Oct 2002"), který k~existujícímu makru přidá daląí příkazy
na jeho konec. Celá deklarace fontů v~tomto dokumentu tedy vypadá
zhruba takto:

\begtt
\input ofs [ffonts]                   % Charter je ve skupině free fonts
\setfonts [Charter/10pt]              % výchozí rodina
\fontdef\tt [CMTypewriter/mag1.1]     % strojopis, korekce střední výąky
\fontdef\verbtt [CMTypewriter-rm/8]   % strojopis pro display ukázky
\fontdef\small [!/9] 
\addcmd \small {\baselineskip11pt\rm} % zmenąení pro abstrakt a záhlaví
\fontdef\fontsekce [!/12]            
\addcmd \fontsekce {\bf \let\it=\bi}  % pro nadpisy sekcí
\fontdef\fonttitul [!-bf/14.4]        % v titulu nebudeme přepínat varianty
\endtt

Povedlo se tedy veąkeré aktivity související s~výběrem fontů
soustředit na jedno místo dokumentu bez nutnosti pouľívat názvy
metrik. 


\kap Kódování fontů
%------------------

OFS pro plain implicitně pracuje v~kódování \CSfont{}ů, ale můľete
jej přepnout do jiného kódování. 
\footnote{OFS pro \LaTeX{} přenechává starost o~kódování zcela na~NFSS.}

Základem informace o~kódování v~OFS pro plain je makro "\fotenc",
které má implicitně hodnotu "8z". To znamená, ľe rodiny "CMRoman",
"CMTypewriter" a "CMSans" budou pracovat s~\CSfont{}y.
Kdyby uľivatel nastavil "\def\fotenc{8t}", začalo by OFS pracovat 
v~případě těchto rodin s~DC nebo EC fonty. Jaké je technické pozadí
vysvětlíme v~následující sekci.

Větąina metrik \ps{}ových fontů má varianty "*8t" (pro
kódování podle Corku) a "*8z" (pro kódování podle \CSfont{}ů).
Makro "\fotenc" tedy musí obsahovat koncovku metrik, které chceme
pouľít. Tím volíme kódování. Příklad:

\begtt
\input ofs
\setfonts [Times/]  text 1 % metrika: ptmr8z, tj. kódování CSfontů
\def\fotenc{8t}
\setfonts [/]       text 2 % metrika: ptmr8t  tj. kódování podle Corku
\endtt
%
Máte-li své fonty v~nějakém daląím kódování a koncovky metrik máte
s~názvy třeba "*8x", pak není problém napsat "\def\fotenc{8x}"
a můľete začít pouľívat své vlastní metriky.

Pokud pouľíváte kódování podle Corku, doporučuji definovat makro
"\fotenc" jako "8t" před zavedením makra OFS. Při pouľití sloľitěji
deklarovaných rodin se to hodí.

V~balíku OFS jsou soubory "ofs-8z.tex" a "ofs-8t.tex", ve kterých je
deklarace akcentů a některých na kódování závislých maker, jako
například "\promile". Implicitně není načten ani jeden z~těchto
souborů, tj.~jsou respektována makra pro akcenty z~originálního 
plainu, která expandují na "\accent" podle kódování CMfontů.

Pokud je toto chování nevyhovující, můľete načíst pomocí "\input"
jeden nebo oba dva výąe zmíněné soubory (v~libovolném pořadí -- jejich
definice se nehádají). Pokud načtete oba soubory, pak makra pro
akcenty expandují na znaky podle kódování, které je aktuálně nastaveno
v~makru "\fotenc" ("8z" nebo "8t").

Podívejme se do souborů "ofs-8z.tex" a "ofs-8t.tex" (výrazně kráceno):

\begtt
%%% Default accents in CM
\accentdef  \` *    8z  {\accent 18 }                   % grave
\accentdef  \' *    8z  {\accent 19 }                   % acute
\accentdef  \v *    8z  {\accent 20 }                   % caron
\accentdef  \u *    8z  {\accent 21 }                   % breve
...
%%% Standard characters in plain (redefined here)
\def\aa{\r a} 
\def\AA{\r A}
\characterdef \i    8z  16 
\characterdef \j    8z  17
\characterdef \SS   8z  {SS}
\characterdef \AE   8z  29
...
%%% Extra characters from CS-fonts
\characterdef \promile      8z  141
\characterdef \varhyphen    8z  156
\characterdef \flqq         8z  158
\characterdef \frqq         8z  159
\characterdef \clqq         8z  254
\characterdef \crqq         8z  255
...
%%% Accented letters from CS fonts
\accentdef  \` A      8z  152
\accentdef  \' A      8z  193
\accentdef  \" A      8z  196
\accentdef  \` a      8z  184
\accentdef  \' a      8z  225
...
%%% Default accents in Cork
\accentdef  \` *    8t  {\accent 0 }               
\accentdef  \' *    8t  {\accent 1 }
\accentdef  \^ *    8t  {\accent 2 }
\accentdef  \~ *    8t  {\accent 3 }
\accentdef  \" *    8t  {\accent 4 }
...
%%% Standard characters in plain (redefined here)
\def\aa{\r a} 
\def\AA{\r A}
\characterdef \i    8t  25
\characterdef \j    8t  26
\characterdef \SS   8t  223
\characterdef \AE   8t  198
...
\characterdef \promile              8t {\%\char 24 }        
\characterdef \textpertenthousand   8t {\%\char 24\char 24 } 
...
%%% Accented letters from Cork encoding
\accentdef  \. i    8t `\i
\accentdef  \u A    8t 128
\accentdef  \k A    8t 129
\accentdef  \' C    8t 130
\accentdef  \v C    8t 131
...
\endtt

Myslím, ľe syntaxe a význam příkazů "\characterdef" a "\accentdef" je
v~této ukázce samovysvětlující. Pokud ne, odkazuji čtenáře do
dokumentace~\cite{ofsdoc}, která do posledního detailu (včetně popisu 
jednotlivých fází expanze) vysvětluje činnost těchto příkazů.

\LaTeX{}ovému uľivateli to můľe připomínat příkazy
"\DeclareTextSymbol" a "\DeclareTextComposite" a jim podobné, které
dělají zhruba totéľ (jen poněkud komplikovaněji, nepřehledněji a
těľkopádněji).

OFS také počítá s~moľností, ľe některé znaky jsou přidány do extra
fontu, který s~původním fontem vytváří uspořádanou dvojici. Takové
dvojice metrik jsou pouľity například pro fonty ©tormovy písmolijny,
protoľe obsahují více neľ 256 znaků. Přitom by bylo ąkoda některé
znaky nevyuľít. Ke kaľdé metrice těchto fontů ("*8z" i "*8t") je
přiřazena extra metrika "*6s", obsahující zbylé znaky.
Pomocí "\characterdef" a "\accentdef" můľeme deklarovat přítomnost
těchto znaků v~kódování "6s" (viz soubor "stormenc.tex"). Pokud 
aktuální metrika má k~sobě extra font v~kódování "6s" a je poľadován 
znak z~tohoto fontu, OFS jej automaticky \uv{vyloví} pomocí 
přechodného přepnutí na extra metriku.


\kap Deklarace rodin
%-------------------

Podívejme se nyní do souboru "a35.tex", který deklaruje rodiny pro
základních 35 \ps{}ových fontů (kráceno):

\begtt
%%% Times, Helvetica, Courier is in OFS defaults

\ofsdeclarefamily [AvantGarde] {% -------------------- AvantGarde
   \loadtextfam (Book)         pagk\fotenc;%
                (Demi)         pagd\fotenc;%
                (BookOblique)  pagko\fotenc;%
                (DemiOblique)  pagdo\fotenc;;%
   \def\TeX{T\kern-.08em\lower.3333ex\hbox{E}\kern-0.09emX}%
}
\ofsdeclarefamily [NewCentury] {% -------------------- NewCenturySchlbk
   \loadtextfam (Roman)        pncr\fotenc;%
                               pncb\fotenc;%
                               pncri\fotenc;%
                               pncbi\fotenc;;%
   \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}%
}
...
\endtt

Zde je tedy deklarováno zobrazení mezi názvy rodin a metrikami.%
\footnote{
   V~OFS pro \LaTeX{} takové soubory neexistují; tam se pouze
   deklaruje zobrazení mezi (dlouhými) názvy rodin v~OFS a zkratkami
   rodin v~NFSS.  
} 
Kaľdá rodina má čtyři povinné metriky (pro běľné čtyři
varianty). Metriky jsou zapsány pomocí "\fotenc", aby fungovalo
přepínání kódování. Mezi předposledním a posledním středníkem můľe být
uvedeno extra kódování, pokud je font rozloľen do dvou metrik (v~tomto
příkladě není). Příkazy uvedené v~parametru "\ofsdeclarefamily" se
provedou při kaľdém přepnutí rodiny příkazem "\setfonts".
V~ukázce tam máme alternativní definice loga "\TeX", aby toto logo pěkně
vypadalo v~kaľdém fontu.

Od verze OFS "Oct 2002" je přidána moľnost pouľít nepovinné parametry
v~argumentech příkazu "\loadtextfam". Tyto parametry píąeme do kulaté
závorky a značí název varianty, pokud je odliąný od běľného názvu.
Tato informace se pouľije v logu a při tisku katalogu.

Podívejme se jeątě do souboru "sjannon.tex" z~podpory ©tormových fontů
(výpis je zde neúplný):

\begtt
\ofsdeclarefamily [JannonAntikva] {% -------- Jannon Antikva
   \loadtextfam sjnr\fotenc;%
                sjnb\fotenc;%
                sjnri\fotenc;%
                sjnbi\fotenc;6s;%
   \newvariant2 \mr (Medium)        sjnm\fotenc;6s;%
   \newvariant3 \mi (MediumItalic)  sjnmi\fotenc;6s;%
}
\ofsdeclarefamily [JannonText] {% ------------ Jannon Text
   \loadtextfam sjnrg\fotenc;%
                sjnbg\fotenc;%
                sjnrig\fotenc;%
                sjnbig\fotenc;6s;%
   \newvariant2 \mr (Medium)        sjnmg\fotenc;6s;%
   \newvariant3 \mi (MediumItalic)  sjnmig\fotenc;6s;%
}
...
\endtt
%
Vidíme, ľe navíc je zde deklarována extra metrika v~kódování~"6s" a ľe
se zde deklarují doplňující přepínače variant "\mr" a "\mi" mimo
základní čtyři varianty. Podrobnějąí vysvětlení pouľitých příkazů
čtenář opět najde v~dokumentaci~\cite{ofsdoc}.

Jak jsou pomocí expanze "\fotenc" mapovány metriky \CSfont{}ů
resp. DC~fontů, které v~názvech koncovku "8z" ani "8t" nemají?
To souvisí rovněľ s~tím, ľe tyto fonty mají pro různé velikosti různé
metriky. V~deklaračních souborech je pak tento problém vyřeąen
způsobem \uv{dvě mouchy jednou ranou} (viz soubor "ofsdef.tex"):

\begtt
\registertfm cmr8z     -      csr10  % metrika pro vąechny velikosti
\registertfm cmr8z  0pt-6pt   csr5
\registertfm cmr8z  6pt-7pt   csr6
\registertfm cmr8z  7pt-8pt   csr7
\registertfm cmr8z  8pt-9pt   csr8
\registertfm cmr8z  9pt-10pt  csr9
\registertfm cmr8z  10pt-12pt csr10
\registertfm cmr8z  12pt-17pt csr12
\registertfm cmr8z  17pt-*    csr17
...
\registertfm cmr8t     -   dcr10     % metrika pro vąechny velikosti
...
\ofsdeclarefamily [CMRoman] {% ------------ Computer Modern Roman
   \loadtextfam cmr\fotenc;%
                cmbx\fotenc;%
                cmti\fotenc;%
                cmbxti\fotenc;;%
   \newvariant8 \sl (Slanted) cmsl\fotenc;;%
}
\endtt
%
Centrálním příkazem je zde makro "\registertfm", které mapuje
neexistující metriky formálně vytvořené pomocí expanze "\fotenc" do
skutečných metrik. Toto makro také umí registrovat různé metriky
pro různé velikosti. Pokud tedy budeme chtít font daný pomocí
"\setfonts[CMRoman-rm/12.5]", vyvolá se při "\fotenc"
s~hodnotou "8z" metrika "csr12 at12.5pt". \uv{Metrika pro vąechny
velikosti} se pouľije v~případě, ľe je velikost fontu deklarovaná
s~\hbox{prefixem} "scaled", takľe "\setfonts[CMRoman-rm/scaled1250]" vyvolá
metriku "csr10 scaled1250". Ztrácíte-li přehled o~tom, jaká metrika se
ve skutečnosti pouľila, můľete zapnout logovací přepínač
"\detailfontmessages". 

Podíváte-li se do souboru "ofsdef.tex" podrobněji, můľete si vąimnout, ľe
jsem metriky rodiny "CMRoman" a daląích "CM"~rodin pro kódování~"8t" poněkud
odbyl. Registroval jsem je jako metriky DC fontů bez střídání metrik pro
různé velikosti. Nechtělo se mi to totiľ vypisovat a nevěděl jsem, zda
uľivatel tohoto kódování raději nepouľije EC fonty místo DC fontů.
Ve zmíněném souboru jsou příklady, jak by se ta deklarace měla
provést. Pokud ji někdo dopíąe (například pro DC i EC fonty do zvláątních
souborů), rád ji do balíku OFS zařadím. Osobně ale fonty kódované 
v~"8t" nepouľívám, takľe mě zatím nic nemotivuje to udělat.


\kap Matematické fonty
%---------------------

Kaľdý plainista ví, ľe fonty pro matematiku se sdruľují do matematických
rodin obsahující font pro základní, indexovou a index-indexovou
velikost. Rovněľ ví, ľe první čtyři matematické rodiny (s~číslem 0 aľ~3)
jsou s~\TeX{}em jistým způsobem pevně významově svázány a daląí rodiny
se dají deklarovat.

Aby plainista při deklarování matematických rodin nemusel psát třikrát
za sebou "\font" a potom jeątě 
"\textfont\rodina=...", "\scriptfont...", atd, je v~OFS k~tomu
vytvořena zkratka "\loadmathfam", jak ukáľu za chvíli.

Inicializaci matematických fontů v~OFS pro plain provedeme pomocí
příkazu "\setmath". Dokud tento příkaz nepouľijeme, jsou matematické
fonty ve stavu, jak je inicializoval plain. Ve třech parametrech
příkazu "\setmath" (oddělených lomítky) dáváme najevo, jakou chceme
základní velikost, jakou pro indexy a jakou pro indexy
indexů. Jsou-li tyto parametry prázdné, je pouľito relativní zmenąení
podle aktuální velikosti textového fontu pomocí prefixu "mag" takto:

\begtt
\setmath [//] je totéľ jako \setmath [mag1.0/mag.7/mag.5]
\endtt

Příkaz "\setmath" vypočítá poľadované velikosti a startuje makro pro
zavedení fontů "\mathfonts". Dále tento příkaz startuje makro pro
inicializaci matematického kódování "\mathchars". Tato makra si můľe
plainista definovat jak chce, nicméně větąinou vyuľije jiľ
připravených maker "\defaultmathfonts" a "\defaultmathchars", která
jsou udělána tak, ľe spouątějí různé varianty kódu podle hodnoty maker
"\fomenc" a "\mathversion".

Při "\def\fomenc{PS}" (imlicitní hodnota: PostScriptové fonty) se zavedou
fonty tak, ľe matematická kurzíva se ztotoľní s~aktuální textovou
kurzívou a podobně rodina~0 pro číslice a textové symboly zůstává
nastavena podle aktuální textové rodiny varianty "\rm". 
Matematické symboly se berou
(pokud to je moľné) z~běľně dostupného \ps{}ového fontu
"Symbol". Zbytek (např. natahovací závorky) pak zůstává v~Computer
Modern. Matematické kódování je pro tuto situaci výrazně
pozměněno obvyklými primitivy "\mathchardef" a podobnými, aby byly
dosaľitelné vąechny znaky plainu. Například pro řecká písmena musela být
zavedena nová rodina se skloněným fontem "Symbol" a příkazy typu "\alpha" jsou
překódovány z~původní matematické rodiny~1 na tuto novou rodinu.

Nastavíte-li "\def\fomenc{CM}", pak příkaz "\setmath" zavede
stejné matematické fonty z~rodiny Computer Modern, jako 
v~plainu. Příkaz "\setmath[//]" pak pouze aktualizuje velikosti těchto fontů
podle velikosti aktuálního textového fontu.

Nakoupíte-li fonty MathTimes, dále načtete soubor "ofsmtdef.tex" (součástí
OFS od verze "Jun. 2002") a definujete "\def\fomenc{MT}", pak příkaz
"\setmath" zavede kurzívu a rodinu~0 stejně jako při
"\def\fomenc{PS}", ale navíc pouľije pro {\it vąechny\/} symboly včetně
natahovacích závorek fonty MathTimes.

Kromě hodnoty "\fomenc" se příkaz "\setmath" větví i vzhledem 
k~hodnotě makra "\mathversion". Implicitně OFS počítá se dvěma
hodnotami tohoto mak\-ra: "\def\mathversion{normal}" nebo "bold".
Při verzi "bold" jsou načteny do matematických rodin tučné alternativy
fontů, pokud to jde. Vąe názorně vysvětlí pohled do souboru
"ofsdef.tex":

\begtt
\def\defaultmathfonts{\csname load\fomenc\mathversion math\endcsname}
\def\defaultmathchars{\csname set\fomenc mathchars\endcsname}
\def\mathfonts{\defaultmathfonts}
\def\mathchars{\defaultmathchars 
   \let\mathchars=\relax % to protect the twice math-setting
}
\def\loadPSnormalmath{%
  \loadmathfam 0[tenrm/]%              Actual Roman font
  \loadmathfam 1[tenit/]%              Actual Italic font
  \loadmathfam 2[/cmsy]%               Standard symbols from CM
  \noindexsize\loadmathfam 3[tenex/]%  Standard extra symbols from CM
  \chardef\itfam=1 \chardef\bifam=5 
  \loadmathfam \bffam [tenbf/]%        Actual Bold font
  \loadmathfam \bifam [tenbi/]%        Actual Bold Italic  
  \newmathfam\symbfam
  \loadmathfam \symbfam [/psyr]%       PostScript Symbol
  \newmathfam\symbofam
  \loadmathfam \symbofam [/psyro]%     PostScript Symbol Oblique
}
\def\loadPSboldmath{%
  \loadmathfam 0[tenbf/]%              Actual Bold font
  \loadmathfam 1[tenbi/]%              Actual Bold-Italic font
...
}
\def\loadCMnormalmath{%
  \loadmathfam 0[/cmr8z]%                    Roman font
  \loadmathfam 1[/cmmi]%                     Math Italic font
  \loadmathfam 2[/cmsy]%                     Standard symbols from CM
  \noindexsize\loadmathfam 3[/cmex10]%       Standard extra symbols from CM
...
}
\def\loadCMboldmath{%
  \loadmathfam 0[/cmbx8z]%                     Roman font
  \loadmathfam 1[/cmmib10]%                    Math Italic font
...
}
\def\setPSmathchars{%
  \fontmessage{\ofsmessageheader Math codes are set for PS encoding}%
  \mathcode`\,="602C
  \mathcode`\.="002E
  \delcode`\&lt;="\hex\symbfam E130A
  \delcode`\&gt;="\hex\symbfam F130B
  \delcode`\|="\hex\symbfam 7C30C
  \edef\langle{\delimiter"4\hex\symbfam E130A }%
  \edef\rangle{\delimiter"5\hex\symbfam F130B }%
  \mathchardef\alpha    "0\hex\symbofam 61
  \mathchardef\beta     "0\hex\symbofam 62
  \mathchardef\gamma    "0\hex\symbofam 67
...
}
\endtt

Chceme-li přidat nějaké daląí matematické rodiny (v~terminologii NFSS
matematické abecedy), pak můľeme postupovat třeba takto:

\begtt
\def\mathfonts{\defaultmathfonts
  \newmathfam\bbfam 
  \loadmathfam \bbfam [/bbold12]%  Dvojitá vertikální kresba
  \def\bb{\fam\bbfam}%
}
\def\mathchars{\defaultmathchars 
  \mathchardef\balpha    "0\hex\bbfam 0B
  \mathchardef\bbeta     "0\hex\bbfam 0C
  ...
} 
\endtt

Příklad z~konce sekce~3 nyní obohatíme o~moľnost práce 
s~matematikou v~libovolných velikostech:

\begtt
\input ofs [ffonts]                  % Charter je ve skupině free fonts
\setfonts [Charter/10pt]             % výchozí rodina
\setmath[//]                         % inicializace matematiky
\fontdef\tt [CMTypewriter/mag1.1]    % strojopis, korekce střední výąky
\fontdef\verbtt [CMTypewriter-rm/8]  % strojopis pro display ukázky
\fontdef\small [!/9]                 % zmenąení pro abstrakt a záhlaví
\addcmd \small {\baselineskip11pt \rm \def\mathversion{normal}\setmath[//]}
\fontdef\fontsekce [!/12]            % pro nadpisy sekcí
\addcmd \fontsekce {\bf \let\it=\bi \def\mathversion{bold}\setmath[//]} 
\fontdef\fonttitul [!-bf/14.4]       % titul
\endtt

Nyní i v~abstraktech, poznámkách pod čarou a záhlavích je matematika
ve vąech velikostech vąech moľných indexů zmenąená odpovídajícím
způsobem. Pokud by se matematika měla pouľít v~názvu sekce, pak bude
také tučná a správně veliká.


\reference

\bib \url{www.pismolijna.cz}, \url{www.cstug.cz/stormtype}.

\bib \url{ftp://math.feld.cvut.cz/pub/olsak/ofs}.

\bib Petr Oląák. {\it OFS: Oląákův fontový systém}. 2001.
     Dokumentace k~balíku je v~souborech "ofsdoc.tex", "ofsdoc.pdf".

\bib Petr Oląák. {\it Jak \TeX{} k~fontům ze Střeąovic přiąel}. Zpravodaj
     Československého sdruľení uľivatelů \TeX{}u, 4/2001, pp~153--180.

\bye 

</pre></body></html>