<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>