Makro OFS Petr Olsˇa ´k ˇVUT, Praha Elektrotechnicka ´ fakulta C Email:
[email protected] Abstrakt: OFS (Olsˇa ´ku ˚ v fontovy´ syste´m) je balı´cˇek TeXovy´ch maker, ktery´ umozˇnı´ zı´skat veˇtsˇ´ı prˇehled nad rozsa ´hly´mi kolekcemi fontu ˚ a umozˇnı´ s nimi pomeˇrneˇ snadnou manipulaci. Balı´k byl vyvinut pro zı´ska ´nı´ prˇehledu nad fonty z Typokatalogu Strˇesˇovicke´ pı´smolijny [1]. Na za ´kladeˇ popta ´vky LATEXovy´ch uzˇivatelu ˚ byl balı´k napsa ´n jesˇteˇ jednou pro LATEX, kde vyuzˇ´va ı ´ NFSS a pokousˇ´ı se je trosˇicˇku vylepsˇit. Za ´kladnı´ uzˇivatelske´ prˇ´kazy ı OFS jsou pak v obou prostrˇedı´ch (plain i LATEX) stejne´. Na prˇedna ´ˇsce prˇedvedu pouzˇitı´ OFS na uzˇivatelske´ i konfiguracˇnı´ u ´ rovni.
´ vodem U Makro OFS jsem si napsal hlavneˇ proto, abych se vyznal ve stovka ´ch fontu ˚ , ktere´ pocha ´zely ze Strˇesˇovicke´ pı´smolijny a pro ktere´ jsem prˇed rokem udeˇlal TEXovou podporu. Protozˇe jsem plainista, ˇslo mi hlavneˇ o to udeˇlat makro co nejvı´ce srozumitelne´ uzˇivateli plainu, ktery´ potrˇebuje prˇesneˇ veˇdeˇt, co to makro deˇla ´. Tento pozˇadavek naprˇ´klad ı LATEXove´ NFSS nespln ˇ uje. Pozdeˇji se zacˇali o OFS zajı´mat te´ˇz neˇkterˇ´ı uzˇivatele´ LATEXu. Tozˇ jsem se prˇemohl a pokusil OFS napsat jesˇteˇ jednou, tentokra ´t pod LATEXem s vyuzˇitı´m NFSS. Cı´lem tohoto prˇepsa ´nı´ bylo hlavneˇ to, aby se uzˇivatelske´ prˇ´kazy ı pro vyhleda ´va ´nı´ a prˇepı´na ´nı´ rodin fontu ˚ zcela shodovaly v LATEXove´ verzi s verzı´ plainovou. LATEXova ´ verze prˇesto umı´ podstatneˇ me´neˇ veˇcı´, nezˇ plainova ´, protozˇe pokud by meˇla umeˇt vsˇe, musel bych NFSS zcela odmı´tnout a fontovy´ modul LATEXu si napsat po sve´m. Tı´m bych ale poprˇel LATEX jako takovy´, takzˇe jsem zu ˚ stal u respektova ´nı´ principu ˚ NFSS. Veˇci, ktere´ se v NFSS dajı´ deˇlat velmi teˇˇzko, jsem radeˇji nedeˇlal. Z teˇchto du ˚ vodu ˚ jsem se v LATEXu nepousˇteˇl ani do podpory matematicky´ch fontu ˚ . Koncepce matematiky v NFSS mi prˇipada ´ jako plainistovi poneˇkud nesrozumitelna ´. Navı´c velke´ kolekce fontu ˚ , ktere´ byly hlavnı´ motivacı´ OFS, jsou veˇtsˇinou textove´. Pokud chce neˇkdo pouzˇ´t ı matematickou sadu fontu ˚ v LATEXu, pouzˇije \usepackage{styl} a ten styl je k te´ matematicke´ sadeˇ veˇtsˇinou doda ´va ´n. Nepovazˇoval jsem tedy ˇresˇenı´ matematiky v LATEXu za prioritnı´. Na druhou stranu matematicke´ rodiny v plainu se pomocı´ OFS dopln ˇ ujı´ a zava ´deˇjı´ ve vsˇech velikostech velmi elegantneˇ. Veˇˇr´m, ı ˇze alespon ˇ neˇjake´mu plainistovi (kromeˇ meˇ) se toto ˇresˇenı´ bude hodit. Makro OFS jsem zverˇejnil na [2] pod TEX-like licencı´, tj. je volneˇ k ma ´nı´, ale zmeˇny pod stejny´m na ´zvem nesmı´ da ´le ˇs´r ıˇit nikdo jiny´, nezˇ autor. Do TEXovy´ch
Jan Kasprzak, Petr Sojka (editorˇi): SLT 2002 – sbornı´k semina ´ˇre o Linuxu a TEXu, str. 79–92, 2002. c Konvoj, CSTUG, CZLUG 2002
80
Petr Olsˇa ´k
distribucı´ jsem makro zatı´m neprosadil, protozˇe bohuzˇel chybı´ anglicka ´ dokumentace. Domnı´va ´m se, ˇze kdyby anglicka ´ dokumentace byla, nebyl by se zaˇrazenı´m do TEXovy´ch distribucı´ proble´m a makro by mohlo vyuzˇ´t ı daleko vı´ce lidı´. Bohuzˇel, nejsem v anglicˇtineˇ natolik zdatny´, abych tento proble´m rychle prˇekonal. Pro letosˇnı´ letnı´ pra ´zdniny jsem sice pla ´noval, ˇze se pokusı´m anglickou dokumentaci napsat, jenzˇe prˇisˇla voda. . . K OFS existuje samozrˇejmeˇ ˇceska ´ dokumentace [3] podrobeˇ popisujı´cı´ choˇtormovy´ch va ´nı´makra. Navı´c jsem se o OFS zmı´nil uzˇ v ˇcla ´nku o TEXove´ podporˇe S fontu ˚ [4]. Dovolil jsem si zde prˇesto znovu k tomuto te´matu vra ´tit. Nechci by´t nynı´ tak technicky exaktnı´, jako v manua ´lu [3], ale zase ma ´m zde vı´ce mı´sta k rozepsa ´nı´ mozˇnostı´ makra, nezˇ jsem meˇl ve ˇcla ´nku [4], ktery´ byl prˇedevsˇ´m ı ˇtormovy´ch fontech. oS
2
Za ´klady uzˇivatelske ´ho rozhranı´
Uzˇivatelske´ rozhranı´ je shodne´ v LATEXove´ verzi OFS i v plainove´ s vy´jimkou snad zavedenı´ makra OFS, ktere´ v plainu provedeme jednodusˇe pomocı´ \input ofs [kolekce, fontů], zatı´mco v za´hlavı´ LATEXove´ho dokumentu pı´sˇeme \usepackage [kolekce, fontů] {ofs}. Abych v tomto textu nemusel kazˇdou chvı´li veˇtvit svu ˚ j vy´klad na situaci vhodnou pro plain a pro LATEX, rozhodl jsem se zde prˇedpokla ´dat, ˇze pracujeme pouze s plainem (naprˇ´klad ı s CS plainem). LATEXovy´ uzˇivatel si bude muset dohledat specifika verze OFS pro svu ˚ j forma ´t v dokumentaci [3]. Prˇ´kazem ı \fontusage dostaneme na termina´l a do logu za´kladnı´ informace o uzˇivatelsky´ch prˇ´kazech: ı $ 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.
(/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 ... the same as \font\something=file at ... the same as at ... the same as atpt scaled ... the same as \font\something=file scaled mag<decimal-number> 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]}
Makro OFS
81
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<dec-number>. 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. *
Vidı´me, ˇze prˇ´kaz ı \showfonts na´m uka´ˇze kolekce fontu˚. Pokud jsme nepouzˇili „previous \input“, dopadne za ´kladnı´ kolekce (implementovana ´ prˇ´mo ı uvnitrˇ OFS) takto: *\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
Na ´zvy fontovy´ch rodin jsou zde uvedeny v hranaty´ch za ´vorka ´ch a vedle jsou uvedeny prˇepı´nacˇe variant, ktere´ pro danou rodinu je mozˇne´ pouzˇ´t. ı Vidı´me, ˇze nejbeˇˇzneˇjsˇ´ı textove´ fonty Computer Modern jsou zaneseny v OFS do trˇ´ı rodin CMRoman, CMSans a CMTypewriter. Myslı´m, ˇze netrˇeba doda ´vat, co to znamena ´. V rodina ´ch CMSans a CMTypewriter nenı´ k dispozici jinak obvykla ´ varianta BoldItalic, pro kterou je vyhrazen prˇepı´nacˇ \bi. V rodineˇ CMTypewriter nenajdeme ani prˇepı´nacˇ \bf pro tucˇnou variantu, ale zato mu˚ˇzeme pouzˇ´t ı „nadstandardnı´“ variantu \sl (slanted), ktera ´ je k dispozici i v rodineˇ CMRoman. Deklarace dalsˇ´ch ı pı´smovy´ch rodin jsou zana ´ˇseny do deklaracˇnı´ch souboru ˚ s prˇ´ponou ı tex1 . V kazˇde´m distribuci TEXu doporucˇuji udrzˇovat soubor volajı´cı´ vsˇechny deklaracˇnı´ soubory allfonts.tex. Naprˇ´klad ı na me´m pocˇ´tac ı ˇi vypada ´ tento soubor takto: $ 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
Kdyzˇ tedy napı´sˇu $ tex allfonts \\showfonts \\end | less , dostanu na sve´m pocˇ´tac ı ˇi vy´pis zhruba trˇ´ı set pı´smovy´ch rodin, kazˇda ´ obvykle ve ˇctyrˇech 1
V LATEXove´m OFS se jedna ´ o prˇ´ponu ı sty.
82
Petr Olsˇa ´k
varianta ´ch. Du ˚ lezˇite´ je, ˇze se v tom vyzna ´m a nemusı´m vzpomı´nat, jak se ktera ´ metrika jmenuje. Na ´sleduje jen ˇca ´st vy´pisu. OFS (l.0): The list of known font families: defaults: [CMRoman/] \rm, \bf, \it, \bi, [CMSans/] \rm, \bf, \it, [CMTypewriter/] \rm, - , \it, - , [Times/] \rm, \bf, \it, \bi [Helvetica/] \rm, \bf, \it, \bi, [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, [JannonText/] \rm, \bf, \it, \bi, [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, - , [Cobra/] \rm, \bf, - , [ExcelScript/] \rm, - , - , - , [ExcelScriptText/] \rm, - , - , - , [Zeppelin/] \rm, \bf, - , - , [Negro/] \rm, - , - , [Farao/] \rm, \bf, - , - , ... slido.tex: [Lido/] \rm, \bf, \it, \bi,
\sl \sl \nrm, \nbf, \nit, \nbi
\mr, \mi \mr, \mi
\script, \sans \ext \ext \lr, \coll \kr, \coll
\crm, \cbf
Ve vy´pisu je uveden i TEXovy´ soubor, kde se deklarace odpovı´dajı´cı´ch rodin skutecˇneˇ nacha ´zı´. Vidı´me tedy, ˇze a35.tex uzˇ obsahuje deklarace rodin, ale naprˇ´klad ı soubor skatalog.tex zrˇejmeˇ obsahuje jen dalsˇ´ı \input sjannon,
Makro OFS
83
\input sdynamo, \input stitul atd. Kdyzˇ si pro svu˚j dokument vyberu trˇeba rodiny JannonText, DynaGroteskR a Farao, pak mı´sto toho, abych psal \input ofs [allfonts]
si vystacˇ´m ı s \input ofs [sjannon, sdynamo, stitul]
cozˇ zpu ˚ sobı´ nacˇ´ta ı ´nı´ podstatneˇ me´neˇ souboru ˚ s deklaracemi fontovy´ch rodin. Pokud potrˇebuji veˇdeˇt, jak ty fonty vypadajı´, napı´sˇu naprˇ´klad: ı $ pdfcsplain ofscatal [sjannon, sdynamo, stitul] ; acroread ofscatal.pdf
Soubor ofscatal.tex, ktery´ vytvorˇ´ı katalog, byl zarˇazen do balı´ku OFS od verze Oct 2002.
3
Prˇepı´nacˇ rodin a velikostı´
Hlavnı´m prˇ´kazem ı OFS na uzˇivatelske´ u ´ rovni je \setfonts. Jedna ´ se prˇedevsˇ´m ı o prˇepı´nacˇ rodin, viz vy´pis \fontusage v prˇedchozı´ sekci. Prˇepı´nacˇ ma ´ dva parametry v hranate´ za ´vorce oddeˇlene´ lomı´tkem. Prvnı´m parametrem je na ´zev rodiny a druhy´m pozˇadovana ´ velikost fontu ˚ . Pokud neˇktery´ parametr chybı´, prˇepı´nacˇ nebude jeho nastavenı´ meˇnit. Prˇepı´nacˇ samozrˇejmeˇ funguje loka ´lneˇ ve skupina ´ch, jako by´va ´ u fontovy´ch prˇepı´nacˇu ˚ obvykle´. Po prˇepnutı´ rodiny pracujı´ prˇepı´nacˇe variant (obvykle \rm, \bf, \it, \bi) pro novou rodinu. Varianta se po prˇepnutı´ rodiny inicializuje stejna ´, jako byla prˇed prˇepnutı´m, tj. jsme-li zrovna v kurzı´veˇ rodiny Times a prˇepneme do Helveticy, zu ˚ sta ´va ´me ve varianteˇ \it rodiny Helvetica, tj. skloneˇne´ pı´smo. Pokud ale prˇi prˇepnutı´ rodiny aktua ´lnı´ varianta v nove´ rodineˇ neexistuje, inicializuje se varianta \rm, kterou musı´ obsahovat kazˇda ´ rodina. Prˇ´klady ı \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.
Vy´hodou tedy je, ˇze si nemusı´m pamatovat na ´zvy matrik (v LATEXu pak nesrozumitelne´ zkratky rodin pouzˇ´vane ı ´ v NFSS), ale pı´sˇu na ´zev rodiny do dokumentu stejny´m zpu ˚ sobem, jak jej vidı´m v pı´smove´m katalogu. Pokud udeˇla ´m v na ´zvu rodiny prˇeklep (trˇeba nedodrzˇ´m ı velka ´ a mala ´ pı´smena), prˇ´kaz ı \setfonts spustı´ \showfonts, tj. na obrazovce a v logu vidı´m seznam vsˇech rodin, ktere´ mohu pouzˇ´t. ı Velikost fontu ˚ mohu nastavit prˇ´mo ı uda ´nı´m v jednotce pt, nebo prˇipsa ´nı´m jine´ jednotky (naprˇ. mm), nebo jako u primitivu \font pomocı´ slova scaled (koeficient zveˇtsˇenı´ se va ´ˇze k za ´kladnı´ velikosti fontu) a konecˇneˇ i pomocı´ zcela
84
Petr Olsˇa ´k
nove´ho prefixu mag, ktery´ uda ´va ´ zveˇtsˇenı´ vzhledem ke zrovna pouzˇite´ velikosti fontu ˚ , naprˇ´klad: ı \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.
dopadne takto: stanu se mensˇ´m ı a mensˇ´m ı a jesˇteˇ mensˇ´m ı a uz ˇ jsem se z toho dostal. Prefix mag pro velikost vyuzˇijeme naprˇ´klad ı v logu LATEX, ktere´ jsem si v plainu definoval jako \def\LaTeX{L\kern-.2em\raise.45ex\hbox{\setfonts[/mag.7] A}\kern-.05em\TeX}
a funguje to v nadpisech (je tam tucˇne´ vyvy´ˇsene´ A odpovı´dajı´cı´ velikosti) i v pozna ´mka ´ch pod ˇcarou. V LATEXu samotne´m majı´toto logo definova ´no tak, ˇze se pro vyvy´ˇsene´ A pouzˇije font v indexove´ velikosti. No jo, zde jim to na ´hodou procha ´zı´, ale co kdyby se (naprˇ´klad ı v jine´m v logu) hodilo pro neˇktere´ pı´smeno pouzˇ´t ı velikost mag.8, ktera ´ nenı´ jako indexova ´ velikost pouzˇita? Bez OFS bychom to pak deˇlali dost obtı´zˇneˇ, protozˇe NFSS na ´m ˇresˇenı´ nenabı´zı´. Dalsˇ´m ı vyuzˇitı´m prefixu mag je mozˇnost korigovat nestejne´ strˇednı´ vy´ˇsky pı´sma. Naprˇ´klad ı v tomto sbornı´ku je pro strojopis pouzˇit CMTypewriter. Pokud si vsˇimnete v jiny´ch prˇ´spe ı ˇvcı´ch, nezˇ tento, vidı´te, ˇze uvnitrˇ odstavcu ˚ ten strojopis s fontem Charter moc nesedı´, protozˇe strojopis ma ´ mensˇ´ı strˇednı´ vy´ˇsku pı´sma. Stacˇ´ı ale pro prˇepı´nacˇ \tt pouzˇ´t ı \setfonts [CMTypewriter/mag1.1], a strˇednı´ vy´ˇska je v lati. To vidı´me naprˇ´klad ı v tomto prˇ´spe ı ˇvku. A funguje to vcˇetneˇ zmensˇeny´ch variant, ktere´ jsou v prˇ´spe ı ˇvcı´ch pro SLT pouzˇity v abstaktu, pozna ´mce pod ˇcarou, nebo trˇeba v u ´ daji „Email“, uvedene´m v za ´hlavı´ prˇ´spe ı ˇvku. Prˇ´kaz ı \setfonts mu˚ˇze obsahovat i specifikaci varianty (viz vy´pis prˇ´kazu ı \fontusage). Pak se uzˇ nejedna´ o prˇepı´nacˇ rodiny, ale fontu samotne´ho. V takove´m prˇ´pade ı ˇ prˇepı´nacˇ \setfonts neovlivnı´ prˇepı´nacˇe variant \rm, \bf a dalsˇ´ch, ı ale nastavı´ jen pozˇadovany´ jediny´ font. Naprˇ´klad ı pro nadpisy by ˇslo psa ´t \setfonts[-bf/14] mı´sto \setfonts[/14]\bf, ale museli bychom mı´t jistotu, ˇze v nadpisu nepouzˇijeme prˇepı´nacˇ varianty, protozˇe ten by vra ´til font do velikosti aktua ´lnı´ rodiny. Tou velikostı´ je trˇeba 10pt. Abychom v nadpisu mohli pouzˇ´t ı prˇepı´nacˇ \it, a prˇitom se dostali do varianty \bi (cozˇ je ˇza´doucı´), je potrˇeba prˇepı´nacˇ fontu v makru pro nadpis naprogramovat zhruba takto: \def\nadpis #1{{\setfonts[/14]\bf \let\it=\bi #1}}
Kvu ˚ li tomuto jednoduche´mu obratu, ktery´ zvla ´dne snad kazˇdy´ plainista, jsem se rozhodl nekomplikovat ja ´dro OFS podobny´m zpu ˚ sobem jako NFSS a nezava ´deˇt tedy dalsˇ´ı „neza ´vislou sourˇadnici“ popisujı´cı´ duktus fontu. Pro specia ´lnı´ rodiny fontu ˚ (jako je trˇeba rodina DynaGrotesk) jsem ale snadno pomocı´ dopln ˇ ujı´cı´ch maker vytvorˇil prˇepı´nacˇ, ktery´ respektuje jesˇteˇ o jednu „neza ´vislou sourˇadnici“ vı´ce, nezˇ zvla ´da ´ NFSS. V tomto prˇ´pade ı ˇ to nebyl jen duktus, ale i stupen ˇ zu ´ˇzenı´ pı´sma. Navı´c tento prˇepı´nacˇ doka ´ˇze „poskakovat“ po jednotka ´ch vprˇed a vzad pode´l zvolene´ sourˇadnice. To take´ NFSS nezvla ´da ´.
Makro OFS
85
ˇasto se hodı´ vytva C ´ˇret zkratky pro prˇepı´nacˇe rodin. K tomu slouzˇ´ı makro \fontdef\přepínač[Rodina/velikost], ktere´ funguje podobneˇ, jako pouzˇitı´ konstrukce \gdef\přepínač{\setfonts[Rodina/velikost]}. V za ´hlavı´ tohoto dokumentu ma ´m naprˇ´klad ı uvedeno: \input ofs [ffonts] \setfonts [Charter/10pt] \fontdef\tt [CMTypewriter/mag1.1] \fontdef\verbtt [CMTypewriter/8] \fontdef\small [Charter/9]
% % % % %
Charter je ve skupině free fonts výchozí rodina strojopis, korekce střední výšky strojopis pro display ukázky zmenšení pro abstrakt a záhlaví
Mozˇna ´ ˇctena ´ˇre napadne, ˇze jsem nemusel psa ´t podruhe´ slovo Charter v deklaraci prˇepı´nacˇe \small. Prˇi kompletnı´ zmeˇneˇ za ´kladnı´ rodiny dokumentu na jinou bych pak mohl zmeˇnit slovo Charter jen na jedine´m mı´steˇ (u prˇ´kazu ı \setfonts) a byl bych hotov. Bohuzˇel, vynecha´nı´rodiny v prˇ´kazu ı \small vede k proble´mu ˚ m, protozˇe tento prˇ´kaz ı je pouzˇit v za ´hlavı´ dokumentu, tj. v \output rutineˇ. Pokud zde neuvedeme explicitneˇ rodinu, deˇdı´ se rodina aktua ´lneˇ pouzˇita ´, ktera ´ ovsˇem mu ˚ˇze by´t jaka ´koli, protozˇe \output rutina je vyvola ´vana ´ z ru ˚ zny´ch mı´st prˇi zpracova ´nı´ dokumentu. Mı´t za ´hlavı´ jednou strojopisem a podruhe´ Charterem podle toho, odkud byla \output rutina zavola ´na, je samozrˇejmeˇ nezˇa ´doucı´. Tento proble´m se da ´ ˇresˇit „vykrˇicˇnı´kovou“ konvencı´, kterou umı´ zpracovat prˇ´kaz ı \fontdef: \fontdef\small [!/9] \addcmd\small {\rm} % pro abstrakt a záhlaví
Vykrˇicˇnı´k je nahrazen aktua ´lnı´ rodinou uzˇ v dobeˇ ˇcinnosti prˇ´kazu ı \fontdef, nikoli tedy azˇ v dobeˇ prova ´deˇnı´ prˇepı´nacˇe. V \output rutineˇ se musı´me jesˇteˇ postarat o potlacˇenı´ deˇdicˇnosti aktua ´lnı´ varianty. Proto jsem pouzˇil jesˇteˇ prˇ´kaz ı \addcmd (zaveden noveˇ od verze OFS Oct 2002), ktery´ k existujı´cı´mu makru prˇida ´ dalsˇ´ı prˇ´kazy ı na jeho konec. Cela ´ deklarace fontu ˚ v tomto dokumentu tedy vypada ´ zhruba takto: \input ofs [ffonts] \setfonts [Charter/10pt] \fontdef\tt [CMTypewriter/mag1.1] \fontdef\verbtt [CMTypewriter-rm/8] \fontdef\small [!/9] \addcmd \small {\baselineskip11pt\rm} \fontdef\fontsekce [!/12] \addcmd \fontsekce {\bf \let\it=\bi} \fontdef\fonttitul [!-bf/14.4]
% % % %
Charter je ve skupině free fonts výchozí rodina strojopis, korekce střední výšky strojopis pro display ukázky
% zmenšení pro abstrakt a záhlaví % pro nadpisy sekcí % v titulu nebudeme přepínat varianty
Povedlo se tedy vesˇkere´ aktivity souvisejı´cı´ s vy´beˇrem fontu ˚ soustrˇedit na jedno mı´sto dokumentu bez nutnosti pouzˇ´vat ı na ´zvy metrik.
4
Ko ´ dova ´nı´ fontu ˚
OFS pro plain implicitneˇ pracuje v ko ´dova ´nı´ CS fontu ˚ , ale mu ˚ˇzete jej prˇepnout do jine´ho ko ´dova ´nı´. 2 2
OFS pro LATEX prˇenecha ´va ´ starost o ko ´dova ´nı´ zcela na NFSS.
86
Petr Olsˇa ´k
Za ´kladem informace o ko ´dova ´nı´ v OFS pro plain je makro \fotenc, ktere´ ma ´ implicitneˇ hodnotu 8z. To znamena ´, ˇze rodiny CMRoman, CMTypewriter a CMSans budou pracovat s CS fonty. Kdyby uzˇivatel nastavil \def\fotenc{8t}, zacˇalo by OFS pracovat v prˇ´pade ı ˇ teˇchto rodin s DC nebo EC fonty. Jake´ je technicke´ pozadı´ vysveˇtlı´me v na ´sledujı´cı´ sekci. Veˇtsˇina metrik PostScriptovy´ch fontu ˚ ma ´ varianty *8t (pro ko ´dova ´nı´ podle Corku) a *8z (pro ko ´dova ´nı´ podle CS fontu ˚ ). Makro \fotenc tedy musı´ obsahovat koncovku metrik, ktere´ chceme pouzˇ´t. ı Tı´m volı´me ko ´dova ´nı´. Prˇ´klad: ı \input ofs \setfonts [Times/] \def\fotenc{8t} \setfonts [/]
text 1 % metrika: ptmr8z, tj. kódování CSfontů text 2 % metrika: ptmr8t
tj. kódování podle Corku
Ma ´te-li sve´ fonty v neˇjake´m dalsˇ´m ı ko ´dova ´nı´ a koncovky metrik ma ´te s na ´zvy trˇeba *8x, pak nenı´ proble´m napsat \def\fotenc{8x} a mu ˚ˇzete zacˇ´t ı pouzˇ´vat ı sve´ vlastnı´ metriky. Pokud pouzˇ´va ı ´te ko ´dova ´nı´podle Corku, doporucˇuji definovat makro \fotenc jako 8t prˇed zavedenı´m makra OFS. Prˇi pouzˇitı´ slozˇiteˇji deklarovany´ch rodin se to hodı´. V balı´ku OFS jsou soubory ofs-8z.tex a ofs-8t.tex, ve ktery´ch je deklarace akcentu ˚ a neˇktery´ch na ko ´dova ´nı´za ´visly´ch maker, jako naprˇ´klad ı \promile. Implicitneˇ nenı´ nacˇten ani jeden z teˇchto souboru ˚ , tj. jsou respektova ´na makra pro akcenty z origina ´lnı´ho plainu, ktera ´ expandujı´ na \accent podle ko ´dova ´nı´ CMfontu ˚. Pokud je toto chova ´nı´nevyhovujı´cı´, mu ˚ˇzete nacˇ´st ı pomocı´ \input jeden nebo oba dva vy´ˇse zmı´neˇne´ soubory (v libovolne´m porˇadı´– jejich definice se neha ´dajı´). Pokud nacˇtete oba soubory, pak makra pro akcenty expandujı´ na znaky podle ko ´dova ´nı´, ktere´ je aktua ´lneˇ nastaveno v makru \fotenc (8z nebo 8t). Podı´vejme se do souboru ˚ ofs-8z.tex a ofs-8t.tex (vy´razneˇ kra ´ceno): %%% Default accents in CM \accentdef \‘ * 8z {\accent 18 } \accentdef \’ * 8z {\accent 19 } \accentdef \v * 8z {\accent 20 } \accentdef \u * 8z {\accent 21 } ... %%% 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
% % % %
grave acute caron breve
Makro OFS
87
\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 ...
Myslı´m, ˇze syntaxe a vy´znam prˇ´kazu ı ˚ \characterdef a \accentdef je v te´to uka ´zce samovysveˇtlujı´cı´. Pokud ne, odkazuji ˇctena ´ˇre do dokumentace [3], ktera ´ do poslednı´ho detailu (vcˇetneˇ popisu jednotlivy´ch fa ´zı´ expanze) vysveˇtluje ˇcinnost teˇchto prˇ´kazu ı ˚. LATEXove´mu uzˇivateli to mu ˚ˇze prˇipomı´nat prˇ´kazy ı \DeclareTextSymbol a \DeclareTextComposite a jim podobne´, ktere´ deˇlajı´ zhruba tote´ˇz (jen poneˇkud komplikovaneˇji, neprˇehledneˇji a teˇˇzkopa ´dneˇji). OFS take´ pocˇ´ta ı ´ s mozˇnostı´, ˇze neˇktere´ znaky jsou prˇida ´ny do extra fontu, ktery´ s pu ˚ vodnı´m fontem vytva ´ˇr´uspor ı ˇa ´danou dvojici. Takove´ dvojice metrik jsou ˇtormovy pı´smolijny, protozˇe obsahujı´ vı´ce nezˇ 256 pouzˇity naprˇ´klad ı pro fonty S znaku ˚ . Prˇitom by bylo ˇskoda neˇktere´ znaky nevyuzˇ´t. ı Ke kazˇde´ metrice teˇchto fontu ˚ (*8z i *8t) je prˇirˇazena extra metrika *6s, obsahujı´cı´ zbyle´ znaky. Pomocı´ \characterdef a \accentdef mu˚ˇzeme deklarovat prˇ´tomnost ı teˇchto znaku ˚ v ko ´dova ´nı´ 6s (viz soubor stormenc.tex). Pokud aktua ´lnı´ metrika ma ´ k sobeˇ
88
Petr Olsˇa ´k
extra font v ko ´dova ´nı´ 6s a je pozˇadova ´n znak z tohoto fontu, OFS jej automaticky „vylovı´“ pomocı´ prˇechodne´ho prˇepnutı´ na extra metriku.
5 Deklarace rodin Podı´vejme se nynı´ do souboru a35.tex, ktery´ deklaruje rodiny pro za ´kladnı´ch 35 PostScriptovy´ch fontu ˚ (kra ´ceno): %%% 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}% } ...
Zde je tedy deklarova ´no zobrazenı´ mezi na ´zvy rodin a metrikami.3 Kazˇda ´ rodina ma ´ ˇctyrˇi povinne´ metriky (pro beˇˇzne´ ˇctyrˇi varianty). Metriky jsou zapsa ´ny pomocı´ \fotenc, aby fungovalo prˇepı´na ´nı´ ko ´dova ´nı´. Mezi prˇedposlednı´m a poslednı´m strˇednı´kem mu ˚ˇze by´t uvedeno extra ko ´dova ´nı´, pokud je font rozlozˇen do dvou metrik (v tomto prˇ´klade ı ˇ nenı´). Prˇ´kazy ı uvedene´ v parametru \ofsdeclarefamily se provedou prˇi kazˇde´m prˇepnutı´ rodiny prˇ´kazem ı \setfonts. V uka´zce tam ma´me alternativnı´ definice loga \TeX, aby toto logo peˇkneˇ vypadalo v kazˇde´m fontu. Od verze OFS Oct 2002 je prˇida ´na mozˇnost pouzˇ´t ı nepovinne´ parametry v argumentech prˇ´kazu ı \loadtextfam. Tyto parametry pı´sˇeme do kulate´ za´vorky a znacˇ´ı na ´zev varianty, pokud je odlisˇny´ od beˇˇzne´ho na ´zvu. Tato informace se pouzˇije v logu a prˇi tisku katalogu. ˇtormovy´ch fontu Podı´vejme se jesˇteˇ do souboru sjannon.tex z podpory S ˚ (vy´pis je zde neu ´ plny´): \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;% 3
V OFS pro LATEX takove´ soubory neexistujı´; tam se pouze deklaruje zobrazenı´ mezi (dlouhy´mi) na ´zvy rodin v OFS a zkratkami rodin v NFSS.
Makro OFS
89
} \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;% } ...
Vidı´me, ˇze navı´c je zde deklarova ´na extra metrika v ko ´dova ´nı´ 6s a ˇze se zde deklarujı´ dopln ˇ ujı´cı´ prˇepı´nacˇe variant \mr a \mi mimo za ´kladnı´ ˇctyrˇi varianty. Podrobneˇjsˇ´ı vysveˇtlenı´ pouzˇity´ch prˇ´kazu ı ˚ ˇctena ´ˇr opeˇt najde v dokumentaci [3]. Jak jsou pomocı´expanze \fotenc mapova ´ny metriky CS fontu ˚ resp. DC fontu ˚, ktere´ v na ´zvech koncovku 8z ani 8t nemajı´? To souvisı´ rovneˇˇz s tı´m, ˇze tyto fonty majı´pro ru ˚ zne´ velikosti ru ˚ zne´ metriky. V deklaracˇnı´ch souborech je pak tento proble´m vyrˇesˇen zpu ˚ sobem „dveˇ mouchy jednou ranou“ (viz soubor ofsdef.tex): \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;;% }
Centra ´lnı´m prˇ´kazem ı je zde makro \registertfm, ktere´ mapuje neexistujı´cı´ metriky forma ´lneˇ vytvorˇene´ pomocı´ expanze \fotenc do skutecˇny´ch metrik. Toto makro take´ umı´ registrovat ru ˚ zne´ metriky pro ru ˚ zne´ velikosti. Pokud tedy budeme chtı´t font dany´ pomocı´ \setfonts[CMRoman-rm/12.5], vyvola ´ se prˇi \fotenc s hodnotou 8z metrika csr12 at12.5pt. „Metrika pro vsˇechny velikosti“ se pouzˇije v prˇ´pade ı ˇ, ˇze je velikost fontu deklarovana ´ s prefixem scaled, takzˇe \setfonts[CMRoman-rm/scaled1250] vyvola ´ metriku csr10 scaled1250. Ztra ´cı´te-li prˇehled o tom, jaka ´ metrika se ve skutecˇnosti pouzˇila, mu ˚ˇzete zapnout logovacı´ prˇepı´nacˇ \detailfontmessages. Podı´va ´te-li se do souboru ofsdef.tex podrobneˇji, mu ˚ˇzete si vsˇimnout, ˇze jsem metriky rodiny CMRoman a dalsˇ´ch ı CM rodin pro ko ´dova ´nı´ 8t poneˇkud odbyl. Registroval jsem je jako metriky DC fontu ˚ bez strˇ´da ı ´nı´ metrik pro ru ˚ zne´ velikosti. Nechteˇlo se mi to totizˇ vypisovat a neveˇdeˇl jsem, zda uzˇivatel tohoto ko ´dova ´nı´
90
Petr Olsˇa ´k
radeˇji nepouzˇije EC fonty mı´sto DC fontu ˚ . Ve zmı´neˇne´m souboru jsou prˇ´klady, ı jak by se ta deklarace meˇla prove´st. Pokud ji neˇkdo dopı´sˇe (naprˇ´klad ı pro DC i EC fonty do zvla ´ˇstnı´ch souboru ˚ ), ra ´d ji do balı´ku OFS zarˇadı´m. Osobneˇ ale fonty ko ´dovane´ v 8t nepouzˇ´va ı ´m, takzˇe meˇ zatı´m nic nemotivuje to udeˇlat.
6
Matematicke ´ fonty
Kazˇdy´ plainista vı´, ˇze fonty pro matematiku se sdruzˇujı´ do matematicky´ch rodin obsahujı´cı´ font pro za ´kladnı´, indexovou a index-indexovou velikost. Rovneˇˇz vı´, ˇze prvnı´cˇtyrˇi matematicke´ rodiny (s ˇc´slem ı 0 azˇ 3) jsou s TEXem jisty´m zpu ˚ sobem pevneˇ vy´znamoveˇ sva ´za ´ny a dalsˇ´ı rodiny se dajı´ deklarovat. Aby plainista prˇi deklarova ´nı´ matematicky´ch rodin nemusel psa ´t trˇikra ´t za sebou \font a potom jesˇteˇ \textfont\rodina=..., \scriptfont..., atd, je v OFS k tomu vytvorˇena zkratka \loadmathfam, jak uka ´ˇzu za chvı´li. Inicializaci matematicky´ch fontu ˚ v OFS pro plain provedeme pomocı´ prˇ´kazu ı \setmath. Dokud tento prˇ´kaz ı nepouzˇijeme, jsou matematicke´ fonty ve stavu, jak je inicializoval plain. Ve trˇech parametrech prˇ´kazu ı \setmath (oddeˇleny´ch lomı´tky) da ´va ´me najevo, jakou chceme za ´kladnı´ velikost, jakou pro indexy a jakou pro indexy indexu ˚ . Jsou-li tyto parametry pra ´zdne´, je pouzˇito relativnı´ zmensˇenı´ podle aktua ´lnı´ velikosti textove´ho fontu pomocı´ prefixu mag takto: \setmath [//] je totéž jako \setmath [mag1.0/mag.7/mag.5]
Prˇ´kaz ı \setmath vypocˇ´ta ı ´ pozˇadovane´ velikosti a startuje makro pro zavedenı´ fontu ˚ \mathfonts. Da ´le tento prˇ´kaz ı startuje makro pro inicializaci matematicke´ho ko ´dova ´nı´ \mathchars. Tato makra si mu ˚ˇze plainista definovat jak chce, nicme´neˇ veˇtsˇinou vyuzˇije jizˇ prˇipraveny´ch maker \defaultmathfonts a \defaultmathchars, ktera´ jsou udeˇla´na tak, ˇze spousˇteˇjı´ ru˚zne´ varianty ko´du podle hodnoty maker \fomenc a \mathversion. Prˇi \def\fomenc{PS} (imlicitnı´ hodnota: PostScriptove´ fonty) se zavedou fonty tak, ˇze matematicka ´ kurzı´va se ztotozˇnı´ s aktua ´lnı´ textovou kurzı´vou a podobneˇ rodina 0 pro ˇc´slice ı a textove´ symboly zu ˚ sta ´va ´ nastavena podle aktua ´lnı´ textove´ rodiny varianty \rm. Matematicke´ symboly se berou (pokud to je mozˇne´) z beˇˇzneˇ dostupne´ho PostScriptove´ho fontu Symbol. Zbytek (naprˇ. natahovacı´ za ´vorky) pak zu ˚ sta ´va ´ v Computer Modern. Matematicke´ ko ´dova ´nı´ je pro tuto situaci vy´razneˇ pozmeˇneˇno obvykly´mi primitivy \mathchardef a podobny´mi, aby byly dosazˇitelne´ vsˇechny znaky plainu. Naprˇ´klad ı pro ˇrecka ´ pı´smena musela by´t zavedena nova ´ rodina se skloneˇny´m fontem Symbol a prˇ´kazy ı typu \alpha jsou prˇeko ´dova ´ny z pu ˚ vodnı´ matematicke´ rodiny 1 na tuto novou rodinu. Nastavı´te-li \def\fomenc{CM}, pak prˇ´kaz ı \setmath zavede stejne´ matematicke´ fonty z rodiny Computer Modern, jako v plainu. Prˇ´kaz ı \setmath[//] pak pouze aktualizuje velikosti teˇchto fontu ˚ podle velikosti aktua ´lnı´ho textove´ho fontu. Nakoupı´te-li fonty MathTimes, da ´le nacˇtete soubor ofsmtdef.tex (souˇca ´stı´ OFS od verze Jun. 2002) a definujete \def\fomenc{MT}, pak prˇ´kaz ı
Makro OFS
91
\setmath zavede kurzı´vu a rodinu 0 stejneˇ jako prˇi \def\fomenc{PS}, ale navı´c pouzˇije pro vsˇechny symboly vcˇetneˇ natahovacı´ch za ´vorek fonty MathTimes. Kromeˇ hodnoty \fomenc se prˇ´kaz ı \setmath veˇtvı´ i vzhledem k hodnoteˇ makra \mathversion. Implicitneˇ OFS pocˇ´ta ı ´ se dveˇma hodnotami tohoto makra: \def\mathversion{normal} nebo bold. Prˇi verzi bold jsou nacˇteny do matematicky´ch rodin tucˇne´ alternativy fontu ˚ , pokud to jde. Vsˇe na ´zorneˇ vysveˇtlı´ pohled do souboru ofsdef.tex: \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‘\<="\hex\symbfam E130A \delcode‘\>="\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
92
Petr Olsˇa ´k \mathchardef\beta \mathchardef\gamma ... }
"0\hex\symbofam 62 "0\hex\symbofam 67
Chceme-li prˇidat neˇjake´ dalsˇ´ı matematicke´ rodiny (v terminologii NFSS matematicke´ abecedy), pak mu ˚ˇzeme postupovat trˇeba takto: \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 ... }
Prˇ´klad ı z konce sekce 3 nynı´ obohatı´me o mozˇnost pra ´ce s matematikou v libovolny´ch velikostech: \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
Nynı´ i v abstraktech, pozna ´mka ´ch pod ˇcarou a za ´hlavı´ch je matematika ve vsˇech velikostech vsˇech mozˇny´ch indexu ˚ zmensˇena ´ odpovı´dajı´cı´m zpu ˚ sobem. Pokud by se matematika meˇla pouzˇ´t ı v na ´zvu sekce, pak bude take´ tucˇna ´ a spra ´vneˇ velika ´.
Reference 1. www.pismolijna.cz, www.cstug.cz/stormtype. 2. ftp://math.feld.cvut.cz/pub/olsak/ofs. 3. Petr Olsˇa ´k. OFS: Olsˇa ´ku ˚v fontovy´ syste´m. 2001. Dokumentace k balı´ku je v souborech ofsdoc.tex, ofsdoc.pdf. ˇeskoslovenske´ho sdruzˇenı´ 4. Petr Olsˇa ´k. Jak TEX k fontu ˚m ze Strˇesˇovic prˇisˇel. Zpravodaj C uzˇivatelu ˚ TEXu, 4/2001, pp 153–180.