Professional Documents
Culture Documents
Ofsdoc
Ofsdoc
May 2004
Vhody OFS:
Sjednocuje rozhran pro uivatele LaTEXu i plainu.
Pomoc pkazu \fontusage dostaneme na terminl a do logu strunou informaci
o pouit maker z OFS.
Umouje pracovat se skutenmi nzvy psmovch rodin tak, jak jsou uvedeny
v psmovm katalogu a tm nenut uivatele si krom tchto nzv pamatovat jet
intern zkratky pouit v NFSS nebo v nzvech metrik font.
Umon pracovat s fontem rozloenm do dvou metrik (zkladn a roziujc) jakoby
se jednalo o jedin font.
Umon na zatku dokumentu vybrat oblben kdovn zkladn metriky, jsou-li
metriky pipraveny v rznch kdovnch (typicky kdovn IL2 a T1).
Definuje rozhran pro vytven pomocnch soubor, kter obsahuj konverzn informace mezi dlouhmi nzvy font z katalogu a PLAIN: nzvy metrik nebo LATEX:
zkratkami pouvanmi v NFSS.
PLAIN: Umouje podobnou nezvislost vbru jednotlivch paramet font, jako
NFSS v LaTEXu.
PLAIN: Definuje deklaran pkazy pro podchycen kdovn font.
PLAIN: Je mon pro rzn velikosti registrovat rzn metriky, co vyuijeme zejmna
u rodiny Computer Modern.
PLAIN: Obsahuje nstroje na pouit PostScriptovch font i v matematick sazb.
Interaktivn makro ofstest.tex umon tisknout vzorky odstavc ve zvolench
psmovch rodinch, tisknout tabulky font, katalogy font, vzorky matematick
sazby a seznamy znak ve fontech vetn jejich TEXovch sekvenc. Sta napsat na
pkazov dek tex ofstest [allfonts] nebo csplain ofstest [allfonts] a
dit se pokyny na terminlu.
1.
\rm \bf \it \bi
sjannon.tex,
a35.tex,
LATEX:
sjannon.sty
a35.sty
2.
2.1.
Uivatelsk pkazy
Zaveden OFS
Pro pklad pedpokldejme, e budeme chtt pracovat s fonty ze souhrnn rodiny
Jannon a DynaGrotesk. Protoe se jedn o rodiny ze Steovick psmolijny od pana
torma, najdeme odpovdajc deklaran soubory v adresi storm. Na Internetu je
zskme spolen s makrem OFS napklad na www.cstug.cz/stormtype. Souhrnn rodiny Jannon a DynaGrotesk jsou deklarovny v tchto souborech: PLAIN: sjannon.tex,
sdynamo.tex; LATEX: sjannon.sty, sdynamo.sty. Psmeno s na zatku nzv znamen, e fonty pochzej ze Steovick psmolijny. Jmna tchto soubor bez ppony
je nutn uvst v hranat zvorce pi zaveden makra OFS takto:
PLAIN:
LATEX:
\showfonts
\fontusage
\sl
\sl
\nrm, \nbf, \nit, \nbi
\mr, \mi
\mr, \mi
Prvnch 6 rodin (oznaen jako defaults) je definovno v OFS. Teprve dal rodiny
jsou deklarovny v pouitch souborech.
Vedle nzv rodin jsou uvedeny pepnae variant, kter pro danou rodinu meme
pout. Prvn tyi pepnae jsou pro standardn varianty a pokud v nkter rodin
takov varianta nen pstupn, je zde na mst odpovdajcho pepnae pomlka. Pt
a ppadn dal pepnae se vztahuj k ppadnm nadstandardnm variantm. Zde
napklad rodina Helvetica m navc pepnae pro varianty Narrow a rodiny Jannon
maj pepnae pro varianty Medium.
Napeme-li do dokumentu pkaz \fontusage, zobraz se na terminl a do logu
strun informace o pouit pkaz z balku OFS.
Krom ve uvedenho zpsobu zaveden:
\input ofs [hsoubor i, hsoubor i, ...]
LATEX: \usepackage [hsoubor i, hsoubor i, ...] {ofs}
PLAIN:
existuje jet monost pmo zavst poadovan soubory. Pak nen nutn v dokumentu
explicitn zavdt soubor ofs.tex resp. ofs.sty:
PLAIN:
LATEX:
Pklad:
PLAIN:
LATEX:
Nedoporuuje se (zvlt v LaTEXu) oba tyto zpsoby zaveden makra OFS mchat.
3
2.2.
\setfonts
Pkaz \setfonts
V dalch pkladech pedpokldme, e jsme zavedli pouze potebn rodiny, napklad ze soubor sjannon a sdynamo. Nyn teba po pouit pkazu
\setfonts [JannonText/12pt]
lze pepnat do jednotlivch variant tto rodiny JannonText ve velikosti 12pt. Je mon
pout pepnae \rm, \bf, \it, a \bi a speciln pro tuto rodinu jet \mr a \mi.
Pkaz \setfonts [hJmnoRodinyi/hvelikosti] pepn do nov rodiny a ct naposledy zapnutou variantu. Pokud ped tmto pkazem byla zapnut teba varianta
BoldItalic, pak po tomto pkazu zstv zapnut tato varianta i v nov rodin. Pokud
v nov rodin naposledy zapnut varianta neexistuje, pepn se do \rm. Tato varianta
mus bt deklarovna v kad rodin.
Pkaz \setfonts vymezuje vechny zmny pouze lokln. Po ukonen skupiny se
sazba vrac k rodin a variant, kter byla aktuln pi zahjen skupiny.
Parametry pkazu \setfonts mohou bt przdn: \setfonts [hJmnoRodinyi/]
pepne do nov rodiny a ct naposledy nastavenou velikost a \setfonts [/hvelikosti]
nastav novou velikost a ponech aktuln vybranou rodinu. Po inicializaci OFS je (pro
ppad pouit przdnho parametru) defaultn nastavena rodina CMRoman a velikost
10 pt. Pkaz \setfonts [/] je syntakticky korektn, ale neudl krom zpisu do logu
vbec nic.
Parametr hJmnoRodinyi, je-li uveden, mus pesn odpovdat jmnu rodiny podle
seznamu znmch rodin (viz nahoe pkaz \showfonts). Je teba dodrovat mal a
velk psmena a cel jmno pst bez mezer. Pokud se tento parametr neshoduje s dnou
znmou rodinou, vype TEX varovn a pipoj seznam vech znmch rodin. Take
napklad \setfonts [?/] lze pout se stejnm efektem, jako pkaz \showfonts.
LATEX: hJmnoRodinyi me bt nejen jmno podle seznamu znmch rodin (dlouh
nzev), ale je dovoleno pout i zkratku z NFSS. Take napklad \setfonts [Times/]
a \setfonts [ptm/] je v LaTEXu tot.
PLAIN+LATEX: Parametr hvelikosti m tyto monosti:
2.3.
\fontdef
\setfonts [JannonAntikva/]
\fontdef \small [/7]
\fontdef \sffam [DynaGroteskR/]
\fontdef \velky [Times/17]
\fontdef \ttfam [Courier/]
\fontdef \mylogo [Times-rm/mag.8]
\fontdef \timbf
[Times-bf/12]
\addcmd
%
%
%
%
%
%
%
%
%
%
%
%
%
%
2.4.
\ifknownfam
2.5.
\OFSfamily
\OFSfamilydefault
2.6.
Kdovn font
LATEX:
Pepnn mezi kdovnm font probh zcela v reii NFSS. OFS v tto vci
nepidv nic novho.
\fotenc
PLAIN (a do konce sekce): Implicitn se pedpokld kdovn CSfont. Pokud ale potebujeme pout fonty napklad v kdovn T1, pak pouijeme \def\fotenc{8t} a OFS
bude pracovat s fonty v tomto kdovn.
Meme dokonce uvnit dokumentu pepnat:
\loadingenc
Krom toho OFS obsahuje nstroje, aby makra zvisl na kdovn font (napklad \v, \, \ae) expandovala sprvn na znak ve zvolenm kdovn. Implicitn je
v OFS nastaveno \loadingenc=0, co znamen, e zmnou kdovn font ani pkazem \setfonts se nemn makra typu \v, \ae. Tato makra si ponechaj svj originln
vznam z plainu. To uvtaj ortodoxn plainist, kte nemaj rdi, kdy m pouit
balek zbyten velkou inteligenci.
Je-li ale na zatku dokumentu uvedeno \loadingenc=1, napklad:
\input ofs [a35,sjannon]
\loadingenc=1
pak pi kadm pkazu \setfonts si TEX zkontroluje, zda m nateny vechny potebn
soubory se jmnem ofs-hkdovni.tex. Tyto soubory obsahuj pedefinovn maker
zvislch na nastavenm kdovn font. Pokud tyto soubory nateny nejsou, TEX je
bhem \setfonts nate. Podrobnji viz sekce 3.3 a 3.5.
Balek OFS obsahuje ti soubory s deklaracemi maker zvislmi na kdovn:
ofs-8z.tex, ofs-8t.tex a ofs-8c.tex. Pi pouit jinho kdovn font si mete
vytvoit dal soubor analogickho nzvu. Pkazy \accentdef a \characterdef
pouvan v tchto souborech jsou podrobn vysvtleny v sekci 3.4.
2.7.
\setmath
Fonty v matematice
LATEX: OFS pro LaTEX vbec nee otzku font pro matematiku. Je poteba vyut
nabdku monost NFSS.
PLAIN (a do konce sekce): Pkaz \setfonts a pepnae deklarovan pomoc \fontdef
pepnaj jen psmo v textovm reimu. Pokud nepouijeme pkaz \setmath, zstv
ve, co je ve vstupnm souboru mezi dolary, vytitno v Computer Modern ve velikostech 10 pt/7 pt/5 pt (velikost: zkladn/indexov/indexindexov). To nemus bt vdy
douc.
Pkaz \setmath m tento tvar:
Take \setmath [//] udl tot jako \setmath [mag1./mag.7/mag.5]. OFS definuje makro \setsimplemath jako \setmath [//].
Pkaz \setmath nastav matematick fonty podle aktuln situace. Jeho innost
zvis na obsahu maker \fomenc a \mathversion.
8
\fomenc
\mathversion
Podobn jako v NFSS jsou podporovny dv verze vzorek: normal a bold. Poadovan verze se nastavuje v makru \mathversion pomoc \def\mathversion{normal}
nebo \def\mathversion{bold}. Makro \setmath pak pizpsob zaveden matematickch font poadovan verzi. Implicitn je nastaveno \def\mathversion{normal}.
Nastaven \mathversion je poteba provst ped vyvolnm pkazu \setmath. Pklady:
\setmath [//] $vzoreek$
% vzoreek je ve verzi "normal"
$\def\mathversion{bold}\setmath[//] vzoreek$ % vzoreek ve verzi "bold"
3.
3.1.
Vpisy do logu
LATEX:
\nofontmessages
\displayfontmessages
\logfontmessages
\detailfontmessages
\displaymessage
3.2.
\else
\csname fragilecommand!\endcsname
hvlastn kd makrai
\fi
}
\expandaction
\fragilecommand!
\fragilecommand
3.3.
\OFSprocessoptions
\OFSextraencoding
\OFSputfamlist
\OFSdeclarefamily
11
\OFSnormalvariants
\protectreading
\ofsputfamlist
\ofsdeclarefamily
\loadtextfam
\newvariant
\modifyenc
\fosize
\fotenc
\extraenc
\defaultextraenc
\setfontshook
\registertfm
\registerenc
\setfonts
take pi pechodu na takovou variantu se objev na terminlu a v logu hlen o neexistujc variant a font se nezmn.
Pkaz \setfonts nemn vznam maker \rm, \bf, \it a \bi, ale mn vznam
pepna font \tenrm, \tenbf, \tenit a \tenbi. Dl to navc zprostedkovan tm,
e spust hpkazyi deklarovan pro poadovanou rodinu v \ofsdeclarefamily a mezi
tmito hpkazyi se vyskytuje pkaz \loadtextfam.
Makra \rm, \bf, \it, resp. \bi pouvaj fontov pepnae \tenrm, \tenbf, \tenit,
resp. \tenbi. Prvn ti jsou znmy z plainu a tvrt je zaveden nov. Navc makra \rm,
\bf, \it a \bi ukldaj do kontroln sekvence \currentvariant informaci o naposledy
aktivovan variant. Tato informace m podobu psmene (M, F, T, resp. I), protoe
jedin konstrukce \let\currentvariant=hpsmenoi je odoln vi expanzi. lo o to,
aby makra pepna variant byla robustn i bez pedefinovn \shipout.
Vimneme si, e \loadtextfam nastavuje pepnae \tenrm, \tenbf, \tenit a
\tenbi na fonty v libovoln velikosti. in tak podle aktuln hodnoty makra \fosize,
kter mn makro \setfonts podle toho, jak je zadn parametr hvelikosti. Slovo ten
v nzvech fontovch pepna tedy nemus znamenat, e se jedn o font ve velikosti
13
\loadingenc
\newvariant
10 pt. Povaujme tyto nzvy za historick a z hlediska OFS mon trochu kurizn.
Nen pitom nutn pro pepnae textovch font vymlet nzvy nov.
Nkdo me namtnout, e opakovan pouvn makra \setfonts vdy znovu a
znovu spout tveici pkaz \font, co me zpsobit vt nroky na pam a as.
Nen to pravda, protoe TEX si eviduje intern tabulku u zavedench metrik a pi
opakovanm pouit primitivu \font na stejnou metriku se u neobtuje metriku vbec
otevrat. Jen inicializuje pslun fontov pepna asi stejn rychle, jako by se to
provedlo pomoc \let.
Pkaz \loadtextfam jet ped zavedenm font nate pi \loadingenc>0 soubor ofs-\fotenc.tex. Pi neprzdnm parametru hextra-enci navc nate soubor
ofs-hextra-enci.tex. Tyto soubory jsou teny jen jednou a v dob ten jsou ignorovny przdn dky, konce dk. ten probh uvnit skupiny, kde jsou pro jistotu
lokln nastaveny kategorie znak podle plainTEXu (a \catcode@=11) a je nastaveno
\globaldefs=1, tj. vechna pedefinovn ze souboru ofs-hkdovni.tex se provedou
globln. To nm nevad, protoe nov naten kdovac soubory nejsou v konfliktu
s pedchozmi (viz vlastnosti pkaz \characterdef a \accentdef v sekci 3.4).
Naten vtho mnostv tchto soubor ne je v dan chvli poteba, rovn neohroz
funkcionalitu maker zvislch na kdovn. Dvod globln definice je v tom, e nen
vhodn, aby pi opakovanm {...\setfonts...} musel bt kdovac soubor natn
neustle znovu a znovu.
Pokud uivateli vad, e je pedefinovn maker globln (chce napklad svj lnek
zaadit do sbornku, kde by pedefinovn mohlo vadit jinm lnkm), pak ponech
\loadingenc=0 a mus nast soubory s deklaracemi maker manuln pomoc \input
na zatku lnku. V takovm ppad se provede deklarace jen lokln.
V parametru hpkazyi makra \ofsdeclarefamily se me deklarovat nadstandardn varianta rodiny pomoc pkazu \newvariant. Tento pkaz provede:
\font\tenhpepna i=hmetrikai \fosize
\def \hpepna i {\let\currentvariant=hslicei \tenhpepna i}
\setfonts
14
\currentfamily
\runmodifylist
3.4.
\setextrafont
\extrafont
pi neprzdnm pamaretru hJmnoRodinyi a pi neuveden varianty tento pkaz provede \def\currentfamily{hJmnoRodinyi}, zatmco pi przdnm parametru hodnotu z \currentfamily pouze pouije. Je-li v parametrech uvedena varianta rodiny,
pozmn \setfonts na pechodnou dobu makra \loadtextfam a \newvariant tak,
aby msto cel rodiny font byl zaveden jen jeden font. Dle spust \setfontshook
a pak hpkazyi z odpovdajcho \ofsdeclarefamily. Potom vrt hodnoty maker
\loadtextfam a \newvariant do pvodnho stavu, pokud byly tyto hodnoty mnny.
Nakonec spust makro \runmodifylist, kter nastav za jistch okolnost vjimky
ze zvolenho kdovn (podrobnji viz sekci 3.5). Konen pkaz \setfonts spust
\ignorespaces, aby ppadn zapomenut mezera za zvorkou ]nebyla v horizonlnm mdu vytitna.
Kdovn font a deklarace znak
PLAIN:
\fontencoding{hroziujc kdovni}\selectfont
\extchar
\characterdef
PLAIN+LATEX: Chceme-li vytisknout z roziujc metriky (roziujcho kdovn) njak znak s kdem hsloi, je mon pout makro \extchar hsloi.
PLAIN (a do konce sekce): Pro definice maker zvislch na aktulnm kdovn je mon
v OFS pout dva deklaran pkazy: \characterdef a \accentdef. Prvn z nich m
tyto parametry:
\characterdef
% pklad:
\characterdef
% nebo
\characterdef
% pklad:
\characterdef
\characterdef
\hsekvencei
\promile
\hsekvencei
\promile
\promile
141
{\%\char24 }
{\vrule height1ex width1ex\relax}
% in another encodings
\characterdef \euro
\characterdef \euro
8z
6s
134
37
\printcharacter
V tomto pklad se pi \def\fotenc{8t} me stt, e aktuln font nem poznmku o roziujc metrice, nebo m poznmku o roziujc metrice jin ne 6s. Pak
\euro vype varovn na terminl o nedostupnosti znaku \euro.
Vysvtlme nyn podrobnji, jak makra deklarovan pomoc \characterdef funguj. Pkaz \characterdef definuje \hsekvenci i jako \printcharacter{hsekvencei},
take napklad \promile expanduje nejprve na \printcharacter{promile}. a \euro
na \printcharacter{euro}. Pokud se \characterdef pouije opakovan na stejnou
\hsekvenci i, pak se vdy znovu definuje stejn, take nedochz ke ztrt pedchoz informace. Krom toho ale \characterdef definuje dal makro \hsekvencei:-hkdovni
tak, e toto makro expanduje na znak se specifikovanm kdem nebo na hpkazyi.
Dal inteligence je schovna v pkazu \printcharacter. Ten ov, zda je definovno
makro \hsekvencei:-\fotenc. Pokud ano, expanduje na obsah tohoto makra. Jinak
ov, zda existuje poznmka o roziujc metrice vztaen k aktulnmu fontu. Pokud
ano, zjist kdovn tto roziujc metriky hextra-enci a podv se, zda je definovno
makro \hsekvencei:-hextra-enci. Pokud ano, expanduje na
{\setextrafont \hsekvencei:-hextra-enci}
\printcharacterwarn
\safelet
\safeletwarn
\accentdef
Od verze OFS Mar. 2004 \characterdef odmt pedefinovat u definovan kontroln sekvence. Definuje pouze sekvence, kter maj zatm vznam \undefined nebo
\relax. V jinm ppad (a pokud nen sekvence u pomoc \characterdef definovna) vype varovn o ignorovan definici do log souboru. Dvod tohoto opaten je
ten, e kdovac soubory deklaruj obrovsk mnostv novch kontrolnch sekvenc pomoc \characterdef, a pitom programtor maker nemus vechny znt. Me se tedy
stt, e pouije pro sv vlastn makro stejn jmno. V takovm ppad \characterdef
respektuje makro definovan programtorem a pslun znak ponech nepstupn. Pokud potebujeme pomoc \characterdef skuten nkter kontroln sekvence pedefinovat (u maker zvislch na kdovn z plainu to je nutn), pak musme ped pouitm
\characterdef napsat \let\hsekvencei=\relax.
Ze stejnch dvod bylo do OFS pidno makro \safelet, kter se chov jako
\let, ale odmt pedefinovat u definovan kontroln sekvence. Msto toho pouze vype
varovn, definovan v makru \safeletwarn.
Krom deklarace znak pomoc \characterdef je k dispozici monost deklarace
akcentovch pkaz prostednictvm \accentdef, kter m tyto parametry:
\accentdef \hsekvencei hznak i hnepovinn mezerai hkdovni hmezerai hsloi
% Pklad:
16
\accentdef
% nebo
\accentdef
% Pklad:
\accentdef
\accentdef
\printaccent
\v E
8z
204
% Ecaron
8z
*
{\accent20 }
{\blackbox }
% default caron in 8z
% default caron
Pokud je aktuln kdovn font toton s hkdovnmi, pak \hsekvencei nsledovan znakem hznak i expanduje na token kategorie 12 s kdem hsloi, respektive expanduje na hpkazyi. To ve se dje jen na rovni expand procesoru. Pokud je pi deklaraci
pomoc \accentdef jako hznak i uvedena hvzdika, pak se deklarovan hpkazyi nebo
kd hsloi pouije vdy, kdy znak nsledujc \hsekvenci i nen nikde prostednictvm
\accentdef deklarovn. Jedn se tedy o defaultn realizaci akcentu, pokud ve fontu
neexistuje pmo akcentovan znak.
Krom toho maj akcenty deklarovan pomoc \accentdef stejnou inteligenci tkajc se monosti vyuit roziujc metriky, jako znaky deklarovan v \characterdef.
Vysvtlme si nyn podrobnji, jak akcenty deklarovan pomoc \accentdef funguj. Pkaz \accentdef definuje \hsekvenci i jako makro s jednm neseparovanm
parametrem #1, kter v prvn ad expanduje na \printaccent{hsekvencei}{#1},
take napklad \v E expanduje na \printaccent{v}{E}. Dle \accentdef definuje
makro \hsekvencei:hznak i:-hkdovni jako znak s danm kdem hsloi nebo jako
hpkazyi. Dal prci udl pkaz \printaccent. Tento pkaz zjist, zda je definovno
makro \hsekvencei:hznak i:-\fotenc. Pokud ano, expanduje na toto makro. Pokud
ne, tak si ov, zda je k aktulnmu fontu poznamenna roziujc metrika a zjist jej
kdovn hextra-enci. Jestlie je definovno makro \hsekvencei:hznak i:-hextra-enci,
pak se expanduje na {\setextrafont \hsekvencei:hznak i:-hextra-enci}. Pokud zatm ve selhalo, zkus \printaccent postupn zjistit, zda jsou definovna makra
\hsekvencei:*:-\fotenc a \hsekvencei:*:-hextra-enci. Pokud je definovno prvn
z nich, expanduje a pipoj na konec expanze hznak i. Pokud je definovno jen druh
z nich, expanduje na
{\setextrafont \hsekvencei:*:-hextra-enci hnormalfonti hznak i}
\printaccentwarn
\characterdel
\accentdel
17
3.5.
\loadingenc
\modifydef
PLAIN:
\modifyenc
\newmodifylist
\runmodifylist
\modifylist
Takovch pkaz me bt pro kadou rodinu font uvedeno vce (a samozejm tyto
pkazy mohou obsahovat rzn hkdovni). Odkazuje-li tento pkaz na hvjimkyi,
kter jet nebyly deklarovny, neprovede se nic.
Pklad deklarace vjimek kdovn 8z:csfonts najdete v souboru ofs-8z.tex a
odkazy na n pak najdete u rodin CM* v souboru ofsdef.tex.
Pkazy \modifyenc jsou sputny pi kadm \setfonts. Ve skutenosti tyto pkazy pouze ukdaj do tzv. seznamu odkaz (do makra \newmodifylist) sv parametry.
Pi startu \setfonts se zakld przdn seznam odkaz. \modifyenc ukld do tohoto
seznamu svj parametr jen tehdy, pokud hkdovni je rovno \fotenc nebo \extraenc.
Vlastn prci (nastaven vjimek) provede a pkaz \runmodifylist, kter je sputn
na konci \setfonts a jeho innost si nyn podrobn popeme.
Makro \runmodifylist porovn seznam odkaz na vjimky pedchoz rodiny
(\modifylist) se seznamem odkaz nov nastaven rodiny (\newmodifylist). Pokud
jsou oba seznamy stejn nebo \modifylist m vznam \relax, pak \runmodifylist
ukon innost. Jinak se pust do nastaven vjimek. Nejprve prohod vznamy
\characterdef\characterdel a \accentdef\accentdel a spust \modifylist
Jinmi slovy vrt stav maker vzanch na kdovn do vchozho stavu. Pi tto
innosti je ignorovno mazn znaku, pokud tsn ped tm byl znak deklarovn (viz
pravidlo o pedefinovn znaku na zatku tto sekce). Pak pkaz \runmodifylist
vrt \characterdef a \accentdef do pvodnho stavu a spust \newmodifylist.
Veker pedefinovn, kter se pi tto innosti provdj, jsou jen lokln. Mechanismus
dvou seznam odkaz zaruuje, e napklad pi
\setfonts [Rodina1/] ... \setfonts [Rodina2/] ...
18
\skipfirststep
\lccodes
\lccodesloop
\modifyread
budou sprvn nastaveny vjimky aktulnho kdovn i pro Rodinu2, akoli Rodina1
m jinou mnoinu vjimek ne Rodina2.
Kontroln sekvence \modifylist m po inicializaci OFS vznam przdnho makra.
Programtor maker me pout \let\modifylist=\relax a tm potla veker nastavovn vjimek.
Poznamenejme jet, e deklaran pkazy \modifydef nejene ukldaj hvjimkyi
do pamti, ale projdou tak jejich obsah a definuj vechny zde deklarovan sekvence
jako odpovdajc \printcharacter resp. \printaccent. Tm mme zarueno, e kad
kontroln sekvence ze vech vjimek je definovna (nedojde ke zprv undefined control sequence) a navc OFS m dokonal pehled o tom, zda je v aktuln rodin tato
kontroln sekvence pouiteln nebo nikoli. Tvrce maker si pak me podle poteby
pedefinovat makra \print*warn.
Pkaz \modifydef prochz hvjimkyi tak, e na pechodnou dobu pozmn pkazy
\accentdef, \accentdel, atd. a hvjimkyi spust. Pokud nechceme, aby se makra ve
hvjimkchi spoutla u v dob innosti \modifydef, uvedeme ped tato makra sekvenci \skipfirststep. Ta se chov jako \relax, ale pi spoutn hvjimek i pkazem
\modifydef zpsob, e ve za touto sekvenc a do konce hvjimek i bude peskoeno.
Identifiktory hkdovni:lccodes a hkdovni:ienc jsou rezervovny pro pouit
mimo OFS v dalch makrech. OFS napklad vbec nee nastaven \lccode, \uccode
znak podle pouitho kdovn. Makro, kter se o toto star, me vhodn definovat
pkazy \lccodes a \lccodesloop a spust \csname hkdovni:lccodes\endcsname.
OFS uveden pkazy vbec nedefinuje. Deklarace hkdovni:lccodes jsou uvedeny
v souborech ofs-8t.tex a ofs-8z.tex akoli nejsou v OFS vyuity, protoe to souvis
s kdovnm textovch font. Pklad pouit hkdovni:lccodes je v makru lang.tex
a makro inec.tex pouv hkdovni:ienc. V dokumentaci k tmto makrm je eeno
vce.
Deklarace nejastji pouvanch vjimek se zapisuj pmo do kdovacch soubor.
Deklarace mn obvyklch vjimek (vztahujcch se jen na urit rodiny font) meme
pst za \endinput deklaranch soubor. Mezi hpkazyi makra \ofsdeclarefamily
pak pouijeme pkaz
\modifyread hjmno souborui;%
\modifytext
\knownchar
19
3.6.
\accentabove
\accentbelow
\ofshexbox
\ofshexboxdef
PLAIN:
Nastal as podrobnji vysvtlit innost pkazu \setmath. Ten pevezme parametry a vypot z nich zkladn, indexovou a index-indexovou velikost font. Vsledky
ulo do maker \textfosize, \scriptfosize a \scriptscriptfosize. V nich jsou
20
\scriptscriptfosize
\mathfonts
\mathchars
\loadmathfam
daje o velikosti uloeny ve tvaru athdimeni nebo scaledhsloi podobn jako v makru
\fosize. Pak pkaz \setmath spust makro \mathfonts. V nm se pedpokld zaveden a nastaven matematickch font. Pokud je \setmath sputno poprv nebo pokud
dolo ke zmn hodnoty \fomenc, tak \setmath jet spust makro \mathchars. Tam
se obvykle nastavuj kdy matematickch znak pomoc \mathcode, \mathchardef a
pbuznch primitiv. Makra \mathfonts a \mathchars maj sice v OFS svou implicitn
hodnotu, ale zkuen uivatel je me podle sv poteby mnit.
Pro pohodln zavdn a nastavovn matematickch font je pipraveno makro
\loadmathfam, kter se pouv v definici makra \mathfonts. Makro \loadmathfam
m tyto monosti parametr:
%%
\loadmathfam
\loadmathfam
\loadmathfam
\loadmathfam
hrodinai[/hmetrikai]
hrodinai[-hvariantai/]
hrodinai[hpepna i/]
hrodinai[Xhpepna i/]
% font je deklarovn:
% metrikou
% variantou aktuln rodiny
% pepnaem textovho fontu
% roziujc metrikou pepnae
Pklady:
\loadmathfam 0[tenrm/]% metrika podle pepnae \tenrm
\loadmathfam 5[-bi/]%
metrika z akuln textov rodiny, varianta bi
\newmathfam \symbfam
\loadmathfam \symbfam [/psyr]%
metrika psyr
\newmathfam \extitfam
\loadmathfam \extitfam [Xtenit/]% roziujc metrika k pepnai tenit
\newmathfam
\lastfam
V pklad jsou do rodiny 0 zavedeny fonty stejn, jako v aktulnm textovm fontu
\tenrm. V rodin 5 jsou zavedeny fonty jako pi \setfonts [-bi/]. Dle je deklarovna
nov rodina \symbfam, do kter jsou zavedeny fonty z metriky psyr.
Existuje nepatrn rozdl nap. mezi pouitm pkazu \loadmathfam 5[tenbi/] a
\loadmathfam 5[-bi/]. V prvnm ppad OFS zjist metriku k pepnai \tenbi a
tuto metriku pouije ve vech velikostech stejnou pouze modifikovanou klovm slovem
athdimeni. Ve druhm ppad se me pro rzn velikosti pout rzn metrika, pokud
je tato vlastnost pro danou variantu fontu deklarovna (viz sekce 3.8).
Pro deklaraci nov rodiny se v pkladu pouila alternativa k \newfam s nzvem
\newmathfam, protoe makro \newfam z plainu je definovno jako \outer a nelze je
tedy pout uvnit definice. Navc makro \newmathfam pracuje lokln a tud et
vce msta pro uivatelsk rodiny ne plainovsk \newfam. V deklaracch zkladnch
matematickch kdovn se nov matematick rodiny definuj pmo pomoc \chardef
a je tam pomoc pkazu \lastfam=hsloi nastavena maximln pouit hodonta. To
zaru, e uivatel me pozdji pout \newmathfam a zane alokovat dal rodiny s sly
tsn vtmi ne \lastfam.
Popeme nyn princip innosti makra \loadmathfam. Toto makro zjist metriku,
kter odpovd zadanmu parametru. Pak provede tikrt primitiv \font zhruba takto:
\font \hnzev i-Mt = hmetrikai \textfosize
\font \hnzev i-Ms = hmetrikai \scriptfosize
\font \hnzev i-Mss = hmetrikai \scriptscriptfosize
\textfont hrodinai = \hnzev i-Mt
\scriptfont hrodinai = \hnzev i-Ms
\scriptscriptfont hrodinai = \hnzev i-Mss
21
\noindexsize
\loadCMnormalmath
\loadCMboldmath
\loadPSnormalmath
\loadPSboldmath
\setCMmathchars
\setPSmathchars
\defaultmathfonts
\defaultmathchars
22
\def\setPSmathchars{\mathencread ofs-ps;}
\mathencread
\mathencdef
\mathcharsback
\hex
\safemathchardef
\safemathaccentdef
\mathaccentdef
Od tto chvle \hsekvencei pracuje v textovm i matematickm mdu. Pro ppad opakovanho pouit \safemathchardef na stejnou \hsekvenci i makro kontroluje, zda u
nen definovna \Mhsekvencei. Pokud ano, pak \safemathchardef neprovede nic.
Je poteba, aby byly soubory s pkazy \characterdef nateny ped prvnm pouitm \setmath. Pak lze v rmci \setmath (pesnji v makru \mathchars) pout
\safemathchardef na pedefinovn nkterch sekvenc, kter byly dve deklarovny
pomoc \characterdef. Tyto sekvence pak budou pracovat v textovm i matematickm
mdu.
Naprosto stejn, jako \safemathchardef pracuje pkaz \safemathaccentdef.
Pouze msto primitivu \mathchardef pouije makro \mathaccentdef, kter pete za
\hsekvenci hsloi separovan mezerou a provede:
\def \hsekvencei {\mathaccenthsloi }
\pickmathfont
Pokud nechceme deklarovat novou matematickou rodinu pro nkolik mlo znak
(poet matematickch rodin je toti v TEXu omezen na 16), meme pout makro
\pickmathfont, kter m tyto parametry:
\pickmathfont {hmetrikai}{htexti}
% pklad pouit:
\mathbin {\pickmathfont {psybo}{\char"C4}}
Makro \pickmathfont pouije primitiv \font na specifikovanou hmetrikui a v tomto
fontu zape htexti, kter v matematickm seznamu tvo atom typu Ord. Dleit je,
e je pouit font v odpovdajc velikosti (zkladn, indexov, indexindexov), take to
vypad, jako by byl pouita nov matematick rodina font. Pitom to nen pravda, protoe \pickmathfont je implementovn pomoc primitivu \mathchoice. Pouit pkazu
\pickmathfont najdeme v souboru ofsdef.tex v definici makra \setPSmathchars.
3.8.
\registertfm
\registerECfont
\registerECTTfont
3.9.
\registerenc
kdy hdimeni nele v dnm specifikovanm intervalu. Hvzdika msto parametru hdoi
zna nekonenou velikost.
Pkaz \registertfm hjmnoi hmezerai - hmezerai - hmezerai vymae z pamti
pedchoz registrace pro dan hjmnoi a navc vyzna hjmnoi jako nepstupn font.
OFS se pak chov stejn, jakoby odpovdajc varianta nebyla vbec deklarovna. Dv
nm to monost vyznait neexistujc varianty deklarovan rodiny jen pro nkter kdovn (viz napklad cmssbxti v souboru ofsdef.tex).
Parametry hjmnoi a hskuten metrikai se expanduj v okamiku innosti pkazu
\registertfm. Nen proto obvykl v nich pouvat makro \fotenc. Nicmn toto makro
meme v uvedench parametrech pout, pokud zahrneme potebnou skupinu pkaz
\registertfm do vlastnho makra a toto makro spustme opakovan pro rzn hodnoty
\fotenc.
Makro \registerECfont je zkratkou za opakovan pouit pkazu \registertfm
na vechny velikosti EC font od 0500 a po 3583. Stejn makro \registerECTTfont
je zkratkou pro velikosti EC font od 0800 do 3583 pouvan pro strojopis. Definice a
pouit tchto maker najdeme v souboru ofsdef.tex. Makra meme pout i na jin
fonty, kter maj stejn odstupovan velikosti jako EC fonty (nap. LH fonty s azbukou
nebo fonty odvozen z CM-super).
Omezen pouit rodiny font pro urit kdovn
LATEX: Pouit rodiny v danm kdovn je zvisl na existenci fd souboru, tj. ve je
v reii NFSS.
PLAIN (a do konce sekce): OFS od verze Feb. 2004 zavd pkaz \registerenc, kterm
meme omezit pouit deklarovan rodiny font jen pro vymezen kdovn. Pokud
pak uivatel nape \setfonts a vyaduje rodinu v neregistrovanm kdovn, OFS
vype varovn na obrazovku a vbec do poadovan rodiny nepepne. Tm se vyhne
pokusu zavst pravdpodobn neexistujc metriky font. Pkaz \registerenc m dva
parametry:
\registeredfam
Pokud nem rodina registrovno dn kdovn, pak OFS pedpokld, e je pouiteln v jakmkoli kdovn (napklad fonty znaek).
V deklaranch souborech tedy meme pomoc \registerenc omezit pouit rodiny
jen na vymezen kdovn. Uivatel ale me pkazem \registerenc pidat k rodin
dal povolen kdovn. Nebo tak me naznait, e rodina m povoleno libovoln
kdovn pkazem \registerenc hJmnoRodinyi: * .
Abychom v deklaranch souborech nemuseli opisovat hJmnoRodinyi, me bt
tento parametr przdn. V takovm ppad \registerenc pouije rodinu z poslednho
pkazu \ofsdeclarefamily.
Ve svch makrech se mete zeptat, zda je rodina pro aktuln hodnotu \fotenc
registrovan:
\registeredfam hJmnoRodinyi? \iftrue
Rodina m \fotenc registrovno nebo m povoleno jakkoli kdovn
nebo vbec nen deklarovna.
\else Rodina m registovna kdovn, ale \fotenc mezi nimi nen.
\fi
25
\setfontsOK
4.
Licence
Balek OFS me pouvat kdokoli bez licennch poplatk. Kdokoli jej rovn
me distribuovat, pokud nezmn 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 vechny tyto soubory budou v distribuci ptomny. Prvo na zmnu
tchto soubor a tm zmnu verz zstv vhradn autorovi. Pokud potebujete zmnit
obsah nkterho z uvedench soubor, nazvte jej jinak. Balek je poskytovn s pnm,
aby byl uiten, ale BEZ JAKKOLI ZRUKY.
V Praze dne 16. 8. 2001
5.
Historie
16. 8. 2001 uvedena prvn verze
24. 10. 2002 provedeny drobn pravy respekutjc zmny ve verzi OFS Oct. 2002.
V tto verzi byl pidn pkaz \addcmd a byly umonny nepovinn parametry
(hVariantai) v pkazu \loadtextfam.
10. 2. 2004 Vechny pravy se tkaj jen OFS pro plain:
+ Vylepena manipulace s deklaracemi maker zvislch na kdovn, deklarace vjimek
a registrovn kdovn pro zvolenou rodinu. Viz sekce 3.5 a sekce 3.9.
+ Pidna monost pedefinovn rodiny (nap. dodatenm natenm souboru deklaranho souboru, kter modifikuje vlastnosti implicitnch rodin).
+ Deklarace CMRoman, CMSans a CMTypewriter pro kdovn 8t pouitm EC font.
+ Pidna podpora roziujcho kdovn 8c.
+ Upravena deklarace matematickho kdovn PS, aby \int, \sum a \prod pracovaly
v display mdu s vtmi znaky.
+ Definovno makro \ofshexbox a \ofshexboxdef.
+ Nov zveejnno interaktivn makro ofstest.tex.
+ Zaveden adres examples/, kde prbn budu dvat pklady pouit OFS.
12. 3. 2004 OFS pro plain:
+ Kdovac soubory jsou teny pmo z \loadtextfam. Tm je umonno dvat do
kdovacch soubor mapovn metrik pkazem \registerenc (vyuiju pro LANG).
+ \characterdef respektuje definovan makro a nepedefinuje jej.
+ Reimplementovno \showfonts. Nyn et vrazn pam i as na rozshlch seznamech font. Pozor: pokud jste mli makra vyuvajc intern makro \listfamilies,
pak toto pestane fungovat. Nap. nefunguje od tto verze zastaral ofscatal.tex.
Msto nj je mono pout ofstest.tex
+ Modifikovno ofstest.tex, aby pracovalo s novou implementac seznamu rodin
\ofslistfamilies.
2. 4. 2004 pidno \plaincatcodes ped tenm soubor ofs-hkdovni.tex.
+ Zavedeno \safelet a \protectreading.
+ Mezera za hznakemi v \accentdef je nepovinn.
26
6.
27
28
29
7.
Reference
[TBN] Petr Olk TEXbook 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 http://math.feld.cvut.cz/olsak/tbn.html.
30