
\hsize=30pc \vsize=45pc \emergencystretch=2em \hbadness=2000
\chyph

\hyphenation{ASCII}
\exhyphenpenalty=10000

\font\mflogo=logo10
\def\mf{{\mflogo META}\-{\mflogo FONT}}
\def\CS{CS}
\def\uv#1{\clqq#1\crqq}
\def\LaTeX{L\kern-.36em\raise.5ex\hbox{\sevenrm A}\kern-.12em\TeX}

\def\titul#1\par{{\bf#1}\medskip}
\def\autor#1\par{{\it#1}\medskip}
\def\sub#1.{\par\bigskip\noindent{\bf#1}\par\nobreak\medskip}

\def\ps-{Post\-Script}
\def\To{~$\longrightarrow$~}
\chardef\\=`\\

{\obeyspaces \gdef\activespace{\obeyspaces\let =\ }}
\def\setverb{\def\do##1{\catcode`##1=12}\dospecials}
\def\begtt{\medskip\bgroup \parindent=0pt \setverb \activespace
  \def\par##1{\endgraf\ifx##1\par\leavevmode\fi ##1} 
  \obeylines \startverb} 
{\catcode`\|=0 \catcode`\\=12
  |gdef|startverb#1\endtt{|tt#1|egroup|medskip}}



\titul PutovßnÝ pÝsmene ° z~klßvesy na papÝr

\autor Petr Ol╣ßk

V~tomto Ŕlßnku podrobný rozeberu, co se odehraje v~poŔÝtaŔi mezi zmßŔknutÝm
pÝsmene ° na klßvesnici a vyti╣týnÝm pÝsmene ° na papÝ°e. Ono pÝsmeno je
v~jednotlivřch fßzÝch zpracovßnÝ interpretovßno jako ŔÝselnř kˇd. 
Ukßżeme, że se zdaleka nemusÝ jednat o~kˇd jedinř. V~pr¨býhu zpracovßnÝ
m¨że pÝsmeno ° (a~ostatnÝ pÝsmena a znaky, kterÚ poużÝvßme) absolvovat aż
sedm r¨znřch kˇdovßnÝ, p°iŔemż v~każdÚm z~nich m¨że (ale nemusÝ) břt na╣e
pÝsmeno reprezentovßno jinřm kˇdem.

╚lßnek by mýl dokumentovat
velkou flexibilitu p°Ýstupu k~r¨znřm kˇdovßnÝm p°i zpracovßnÝ dokumentu
\TeX{}em. UvidÝme, że możnostÝ je mnoho a týżko bychom hledali u~jinÚho
softwaru obdobu.

PutovßnÝ pÝsmene ° rozdýlÝme do nýkolika fßzÝ. V~każdÚ fßzi m¨że břt tento
znak reprezentovßn jinřm kˇdem.
JednotlivÚ fßze m¨żeme zhruba naŔrtnout do nßsledujÝcÝho schÚmatu:

$$\vbox{
\def\ram#1{\vbox{\hrule\hbox{\vrule\strut\ #1 \vrule}\hrule}}
\def\h#1{{\tt#1}}
\let\par=\cr \obeylines \halign{\hfil#\hfil&\quad#\hfil
  \ram{klßvesa °}  &
\h K-kˇdovßnÝ  & ... hardwarovÚ kˇdovßnÝ klßvesnice
  $\downarrow$ & ... ovladaŔ klßvesnice
\h A-kˇdovßnÝ  & ... kˇdovßnÝ aplikace textovÚho editoru
  $\downarrow$ & ... ulożenÝ dokumentu na disk
\h D-kˇdovßnÝ  & ... kˇdovßnÝ dokumentu na disku
  $\downarrow$ & ... input preprocesor \TeX{}u
\h I-kˇdovßnÝ  & ... kˇdovßnÝ dokumentu na vstupnÝ straný maker
  $\downarrow$ & ... expanze maker
\h T-kˇdovßnÝ  & ... kˇdovßnÝ na ˙rovni hlavnÝho procesoru a v~dvi
  $\downarrow$ & ... expanze dvi podle virtußlnÝch font¨
\h F-kˇdovßnÝ  & ... kˇdovßnÝ fontu, nebo jeho Encoding vektoru
  $\downarrow$ & ... Encoding vektor
\h P-kˇdovßnÝ  & ... vnit°nÝ kˇdovßnÝ PostScriptovÚho fontu
 \ram{ti╣týnÚ °}  &
}}
$$

Uvedeme seznam nejbýżnýj╣Ých kˇdovßnÝ, kterß se na ˙rovni
jednotlivřch fßzÝ zpracovßnÝ obvykle v~ŔeskÚm a slovenskÚm jazyce
poużÝvajÝ:

$$\vbox{
\let\par=\cr \obeylines \halign{#\hfil&\quad#\hfil
K-kˇdovßnÝ     &... scan kˇdy klßvesnic
A,D,I-kˇdovßnÝ &... ISO-8859-2, Kamenickřch, PC-Latin2=CP852, CP1250, \dots
I,T,F-kˇdovßnÝ &... kˇdovßnÝ \CS-font¨, T1=Cork, \dots
F,P-kˇdovßnÝ   &... Adobe StandardEncoding, \dots
}}$$

V~dal╣Ým textu se jednotlivřmi fßzemi zpracovßnÝ dokumentu budeme výnovat
podrobnýji.

\sub K-kˇdovßnÝ\To A-kˇdovßnÝ.
StisknutÝ klßvesy se reprezentuje ŔÝselnřm kˇdem, kterř je
odeslßn do poŔÝtaŔe. Nap°Ýklad na klßvesnicÝch PC se jednß
o~tzv.~\uv{scan kˇdy}, kde klßvesy majÝ vesmýs ŔÝsla podle svÚho
rozmÝstýnÝ. Klßvesa Esc mß ŔÝslo jedna, klßvesa A~ŔÝslo~30, S~31, D~32 atd.
V~poŔÝtaŔi pracuje ovladaŔ klßvesnice, kterř jednotlivou posloupnost
stisk¨ klßves interpretuje a býżÝcÝ aplikaci jiż vracÝ aplikaŔnÝ kˇd. Je-li
onou aplikacÝ textovř editor (coż je p°i p°Ýpravý dokumentu pro \TeX{}
obvyklÚ), pak aplikace zobrazÝ znak na obrazovce a ulożÝ si jej do pamýti.
K~tomu zobrazenÝ na monitoru pot°ebuje poużÝt font, kterř musÝ mÝt rovnýż
A-kˇdovßnÝ, jinak bychom byli zmateni.

P°ehled o~tom, co kdy bylo zmßŔknuto a uvolnýno a co to v~danÚ situaci
znamenß, musÝ udrżovat ovladaŔ klßvesnice. Nap°Ýklad stisk levÚ klßvesy
Shift vyvolß scan kˇd 42. Pokud użivatel klßvesu drżÝ, pak ovladaŔ
musÝ nßsledujÝcÝ klßvesy interpretovat odli╣nřm zp¨sobem. O~pu╣týnÝ
klßvesy Shift se ovladaŔ dozvÝ podle scan kˇdu 42+128.
OvladaŔ klßvesnice obvykle pracuje v~nýkolika reżimech (Ŕeskř/standardnÝ).
Na╣e klßvesa ° samostatný neexistuje. PÝsmeno ° m¨że břt v~ŔeskÚm reżimu
vyvolßno bu´ poużitÝm smluvenÚ klßvesy (obvykle klßvesa~5/\%) nebo stiskem a
uvolnýnÝm smluvenÚ \uv{mrtvÚ klßvesy} (obvykle klßvesa~+/=) a nßslednřm
stiskem klßvesy r. V╣e m¨że vypadat i jinak. ZßleżÝ na tom, jak je ovladaŔ
klßvesnice naprogramovßn.

V~UNIXu je scan kˇd z~klßvesnice zpracovßn rovnýż ovladaŔem klßvesnice
(v~jßdru operaŔnÝho systÚmu) na tzv. key kˇd. Pokud býżÝ X~Window
System, pak je key kˇd obvykle zpracovßn X~aplikacÝ podle
globßlnÝ mapovacÝ tabulky, spoleŔnÚ v╣em aplikacÝm. Tuto tabulku je
możnÚ mýnit programem {\tt xmodmap}. Aplikace m¨że takÚ
p°evzÝt inteligenci ovladaŔe klßvesnice do svřch rukou 
a starat se o~p°epÝnßnÝ reżim¨
klßvesnice a transformaci znak¨. Mßm na mysli t°eba Emacs p°i poużitÝ
maker z~balÝku {\tt emacs-czech}~[EC]. 
Kˇd znaku se tedy m¨że mýnit na t°ech mÝstech: v~jßdru systÚmu,
na ˙rovni globßlnÝ mapovacÝ tabulky a uvnit° konkrÚtnÝ aplikace. 
Ve v╣ech p°Ýpadech existujÝ konfiguraŔnÝ
możnosti, jak do konverznÝho algoritmu zasßhnout. 

Font, kterř poużÝvß aplikace k~zobrazenÝ prßvý stisknutÚho znaku, je
obvykle fontem, kterř je nýjakřm zp¨sobem instalovßn v~operaŔnÝm systÚmu.
A-kˇdovßnÝ tedy volÝme shodný s~kˇdovßnÝm fontu v~operaŔnÝm
systÚmu. U~jinÚho druhu textovÚho zpracovßnÝ tÝm ve╣kerß starost o~kˇdovßnÝ
konŔÝ (nap°. MS Word a jinÚ), protoże pro tisk dokumentu poużÝvß aplikace
rovnýż fonty, kterÚ nabÝzÝ operaŔnÝ systÚm.

My użivatelÚ \TeX{}u vÝme, że mezi fontem poużitřm v~operaŔnÝm systÚmu
a fontem urŔenřm pro kvalitnÝ typografickÚ zpracovßnÝ sazby m¨że břt
propastnř rozdÝl. Font operaŔnÝho systÚmu volÝme takovř, aby hezky vypadal
a byl dob°e Ŕitelnř na obrazovce, zatÝmco pro tisk volÝme font, kterř
nejlÚpe odpovÝdß typografickÚmu zßmýru, kvalitý papÝru, tiskovÚ technologii
apod. Proto se pus╗me do dal╣Ých fßzÝ zpracovßnÝ dokumentu.

\sub A-kˇdovßnÝ\To D-kˇdovßnÝ.
Jakmile pożßdßme aplikaci (textovř editor), aby ulożila dokument na disk,
m¨że aplikace p°i tÚto Ŕinnosti spustit nýjakř filtr, kterř
m¨że zmýnit kˇdovßnÝ dokumentu. Nap°Ýklad pro MS~Windows existujÝ (prř)
editory, kterÚ vytvß°ejÝ a zobrazujÝ dokument v~CP1250, ale po ulożenÝ jej
mßme t°eba v~PC-Latin2. VstupnÝ brßnu \TeX{}u pak musÝme p°ipravit na to,
że bude ŔÝst kˇdovßnÝ v~PC-Latin2, aŔkoliv pracujeme s~operaŔnÝm systÚmem,
kterř poużÝvß CP1250.

Obvykle p°i uklßdßnÝ dokumentu kˇdovßnÝ nemýnÝme. V~tÚto fßzi
zpracovßnÝ budeme mýnit kˇdovßnÝ asi jen ve zcela ojedinýlřch a
opodstatnýnřch p°Ýpadech.

Na druhÚ straný je býżnou praxÝ p°evßdýt dokumenty p°ed zpracovßnÝm
\TeX{}em z~jednoho kˇdovßnÝ do druhÚho. OznaŔme to jako
D$_1$-kˇdovßnÝ\To D$_2$-kˇdovßnÝ. Ve výt╣iný \TeX{}ovskřch instalacÝ
jsou konverznÝ utilitky k~dispozici. Konverzi provßdÝme nap°Ýklad tehdy,
kdyż obdrżÝme dokument v~jinÚm kˇdovßnÝ, neż poużÝvßme v~na╣em systÚmu.

\sub D-kˇdovßnÝ\To I-kˇdovßnÝ.
Tato konverze jiż probÝhß uvnit° \TeX{}u na ˙rovni jeho input procesoru.
Ve zdrojovÚm kˇdu \TeX{}u jsou implementovßny
vektory {\tt xord} a {\tt xchr}, kterÚ se starajÝ o~odstÝnýnÝ
kˇdovßnÝ poużitÚho v~hostitelskÚm operaŔnÝm systÚmu od vnit°nÝho kˇdovßnÝ
\TeX{}u. Toto vnit°nÝ kˇdovßnÝ se p°edpoklßdß jednotnÚ a nezßvislÚ na
kˇdovßnÝ, kterÚ je podporovßno hostitelskřm operaŔnÝm systÚmem. To byl p¨vodnÝ
zßmýr autora \TeX{}u. Knuth v~sedmibitovřch dobßch uvażoval existenci
systÚm¨ s~kˇdovßnÝm EBDIC, zatÝmco on volÝ v~\TeX{}u kˇdovßnÝ ASCII. Na
systÚmy s~ASCII jsou tedy vektory {\tt xord} a {\tt xchr} nastaveny tak, że
se chovajÝ jako identickÚ zobrazenÝ, zatÝmco na tých druhřch systÚmech dnes
uż vym°elřch dinosaur¨ byly uvedenÚ vektory p°Ýslu╣nřm zp¨sobem pozmýnýny.

Je t°eba poznamenat, że vektory {\tt xord} a {\tt xchr} se starajÝ
o~oboustrannÚ konverze, tj. nejen \uv{dovnit°} \TeX{}u, ale tÚż p°i vřstupu na
terminßl a do logu (nikoli do dvi). Proto \TeX{} nabÝzÝ v╣echny svÚ
textovÚ vřstupy v~kˇdovßnÝ podle hostitelskÚho operaŔnÝho systÚmu, aŔkoli
si sßm interný m¨że pracovat v~jinÚm kˇdovßnÝ.

Bohużel, nastavenÝ p°ekˇdovacÝch vektor¨ {\tt xord} a {\tt xchr} je możnÚ
jen p°ed kompilacÝ \TeX{}u ze zdrojovÚho souboru {\tt web}. Za provozu
\TeX{}u lze mýnit tyto vektory jen na nýkterřch implementacÝch.
Tam, kde zmýna kˇdovßnÝ za provozu nenÝ możnß, je obvykle pevný nastaveno
identickÚ zobrazenÝ.

Implementace \TeX{}u zvanß em\TeX{} (DOS, OS/2) je vybavena możnostÝ
uvedenÚ vektory mýnit velmi volný prost°ednictvÝm tzv. {\tt tcp} tabulek.
Tyto tabulky lze nejprve editovat, pak p°evÚst do binßrnÝ podoby a p°edlożit
je \TeX{}u v~dobý inicializace formßtu. Výt╣inou se poużÝvajÝ tabulky,
kterÚ majÝ na vstupnÝ straný kˇdovßnÝ podle Kamenickřch, PC-Latin2 nebo
CP1250 a na vřstupnÝ straný kˇdovßnÝ \CS-font¨ nebo T1 nebo expanze na
\TeX{}ovskÚ sekvence. PoslednÝ możnost zp¨sobÝ, że na╣e {\tt °} vstupuje do
\TeX{}u nakonec jako {\tt \\v r}.  Tuto t°etÝ możnost nedoporuŔuji,
protoże znemoż˛uje vřskyt pÝsmene~° ve verbatim prost°edÝ.

UNIXovÚ instalace \TeX{}u, kterÚ vychßzejÝ z~implementace {\tt web2c} a
jsou ozßplatovßny kˇdem podle
{\tt ftp://ftp.muni.cz/pub/tex/local/cstug/skarvada}
majÝ rovnýż możnost mýnit uvedenÚ vektory {\tt xord} a {\tt xchr} za
provozu \TeX{}u, ov╣em kˇdovacÝ tabulku nem¨żeme editovat, pouze si m¨żeme
vybrat jednu z~nýkolika mßlo możnostÝ. Mezi zajÝmavou możnost pat°Ý z°ejmý
konverze ISO-8859-2\To T1.

Existuje i jinß ˙prava \TeX{}u, kterou jsem si udýlal sßm, a kterß
umoż˛uje p°Ýmř p°Ýstup k~vektor¨m {\tt xord} a {\tt xchr} za býhu
\TeX{}u~[ENCTEX]. 

\sub I-kˇdovßnÝ\To T-kˇdovßnÝ.
Neż se na╣e pÝsmeno {\tt °} propracuje z~input procesoru do hlavnÝho
procesoru \TeX{}u, m¨że s~nÝm expand procesor po°ßdný zatoŔit. TÚto
problematice se budeme nynÝ výnovat podrobnýji.

V~nejbýżnýj╣Ým p°Ýpadý, tj. kdyż nenÝ vstupnÝ pÝsmeno {\tt °} aktivnÝ, se
nestane nic. Także I-kˇdovßnÝ je rovno T-kˇdovßnÝ. Tak tomu je nap°Ýklad
v~csplainu.

V~\LaTeX{}u tÚż implicitný nedochßzÝ ke konverzi týchto dvou kˇdovßnÝ.
Pokud se ale poużije balÝk {\tt inputenc.sty}, nap°Ýklad:

\begtt
\usepackage[cp852]{inputenc}
\endtt
\noindent
pak se v╣echny znaky s~kˇdy nad 128 stßvajÝ aktivnÝmi a jejich vřznam je
definovßn v~souboru {\tt *.def} (v~na╣em p°Ýkladý {\tt cp852.def})
prost°ednictvÝm sekvence {\tt \\DeclareInputText}. Nap°Ýklad pro
pÝsmeno {\tt °}, kterÚ je v~CP852 kˇdovßno jako
{\tt \char`\"FD} (hexadecimßlný), najdeme v~definiŔnÝm souboru:

\begtt
\DeclareInputText{"0FD}{\v r}
\endtt

Znamenß to, że nß╣ znak {\tt °} se bude expandovat na {\tt \\v r}.
Co se dßle stane s~touto sekvencÝ, zßleżÝ na volbý T-kˇdovßnÝ, a tÝm se
budu zabřvat za chvÝli.

Ve stylu {\tt inputenc.sty} je zajÝmavřm zp¨sobem °e╣eno definovßnÝ znaku,
kterř je aktivnÝ, a jehoż kˇd makro {\tt \\DeclareInputText} p°eŔte ze
svÚho parametru. Je k~tomu poużit primitiv {\tt \\uppercase} zhruba takto:

\begtt
\def\DeclareInputText #1{\bgroup \uccode`~=#1 
   \uppercase{\egroup \def~}}
\endtt

\noindent Zßpis

\begtt
\DeclareInputText{"0FD}{\v r}
\endtt
\noindent
tedy expanduje na

\begtt
\def °{\v r}
\endtt
\noindent
p°iŔemż ono {\tt °} je aktivnÝ token kategorie 13 s~kˇdem
{\tt \char`\"0FD}. Jak je to udýlßno? Znaku {\tt \char`\~} je p°echodný
(mezi {\tt \\bgroup} a {\tt \\egroup} p°idýleno {\tt \\uccode} odpovÝdajÝcÝ
naŔtenÚmu parametru, także primitiv {\tt \\uppercase} zmýnÝ v~prvnÝm
svÚm pr¨chodu znak {\tt \char`\~} na aktivnÝ {\tt °}. V~druhÚm pr¨chodu se
uzavÝrß skupina ({\tt \\egroup}) a otevÝrß definice {\tt \\def °}.

V~p°Ýpadý \LaTeX{}u existuje jeden drobnř zßdrhel se zßpisem {\tt
\\'a} nap°Ýklad pro pÝsmeno {\tt ß}. Makro {\tt \\'} mß totiż
v~\LaTeX{}ovÚm prost°edÝ tabbing pozmýnýnř vřznam. Kdyby użivatel
v~tomto prost°edÝ poużil pÝsmeno {\tt ß} a ono by se expandovalo na
{\tt \\'a}, pak by se użivatel asi nestaŔil divit.  BalÝk {\tt
inputenc.sty} proto poużÝvß pro {\tt ß} expanzi na
{\tt\\@tabacckludge'a} a \LaTeX{}ovÚ jßdro expanduje
{\tt\\@tabacckludge'} na {\tt \\'} jen v~p°Ýpadý, że zrovna nejsme
v~prost°edÝ tabbing. Pokud v~ným jsme, °e╣Ý \LaTeX{} problÚm dlouhÚho
ß jinak.

V~\LaTeX{}u a jmenovitý v~NFSS je velmi d¨kladný o╣et°eno dal╣Ý chovßnÝ
sekvencÝ typu {\tt \\v r}, resp. {\tt \\'a}. To zßleżÝ na volbý T-kˇdovßnÝ,
kterÚmu \LaTeX{} °Ýkß {\tt \\fontencoding}. Je-li zvoleno kˇdovßnÝ CM
font¨, kterÚ se v~\LaTeX{}u jmenuje OT1, pak zmÝnýnÚ sekvence expandujÝ na
{\tt\\accent20r}, resp. {\tt \\accent19a}. To je °eŔeno v~souboru {\tt
ot1enc.def} na nßsledujÝcÝch °ßdcÝch:

\begtt
\DeclareTextAccent{\'}{OT1}{19}
\DeclareTextAccent{\v}{OT1}{20}
\endtt

T-kˇdovßnÝ je vnit°nÝ \TeX{}ovskÚ kˇdovßnÝ, ve kterÚm jsou naŔteny vzory
dýlenÝ slov a ve kterÚm \TeX{} vystupuje do {\tt dvi}. Aby bylo możno
poużÝt ŔeskÚ dýlenÝ slov, musÝ břt T-kˇdovßnÝ bezpodmÝneŔný osmibitovÚ.
P°edchozÝ p°Ýklad s~kˇdovßnÝm OT1 je tedy pro Ŕe╣tinu nepoużitelnř.
Uvażujme proto nap°Ýklad kˇdovßnÝ \CS-font¨, kterÚmu \LaTeX{} °Ýkß IL2.
V~souboru {\tt il2enc.def} je °eŔeno k~na╣emu pÝsmenu {\tt °} toto:

\begtt
\DeclareTextComposite{\v}{IL2}{r}{248}
\endtt
\noindent
Pokud se poużije font s~kˇdovßnÝm IL2, pak bude sekvence {\tt \\v r}
expandovat na znak s~kˇdem 248. Podobnřch °ßdk¨, jako je tento, najdeme
v~souboru {\tt il2enc.def} vÝce. \LaTeX{} se do tohoto souboru podÝvß,
pokud je nastaveno {\tt \\fontencoding} na IL2. Użivatel m¨że toto kˇdovßnÝ
nastavit takto:

\begtt
\usepackage[IL2]{fontenc}
\endtt

Jak je makro {\tt \\DeclareTextComposite} definovßno, nebudu pro nedostatek
mÝsta rozvßdýt. Zkuste si nastavit {\tt \\tracingmacros=2} a nechte
zpracovat \LaTeX{}em sekvenci {\tt \\v r} jednou v~reżimu OT1 a jednou
t°eba p°i IL2. V~obou p°Ýpadech se po pohledu do {\tt log} souboru
zhrozÝte, jak intenzivný a komplikovaný je tÝmto problÚmem zatÝżen expand
procesor. NicmÚný vÝme, że expanze nakonec p°i OT1 vede na {\tt \\accent20r}
zatÝmco p°i IL2 se výc expanduje na samotnř znak s~kˇdem~248.

Aktivovat akcentovanÚ znaky poużitÝm balÝku {\tt inputenc.sty} m¨że mÝt
smysl t°eba tehdy, pokud chceme v~pr¨býhu jednoho dokumentu mýnit
I-kˇdovßnÝ nebo T-kˇdovßnÝ. Na oba p°Ýpady jsou uvedenß makra p°ipravena.
P°i zmýný I-kˇdovßnÝ (pro p°epÝnßnÝ pÝ╣eme {\tt\\inputenc\char`\{KËD\char`}})
makro jednodu╣e p°edefinuje v╣echny aktivnÝ znaky podle novÚho kˇdu. P°i
zmýný T-kˇdovßnÝ (pro p°epÝnßnÝ pÝ╣eme {\tt\\fontencoding\char`{jinykod\char`}})
se zase zmýnÝ zp¨sob expanze sekvencÝ {\tt \\v}, {\tt \\'} a podobnřch.

Chceme-li zmýnit T-kˇdovßnÝ v~rßmci zpracovßnÝ jedinÚho dokumentu, 
nesmÝme zapomenout
souŔasný p°ehodit vzory dýlenÝ slov, kterÚ jsou zßvislÚ na poużitÚm
T-kˇdovßnÝ. Je tedy pot°eba naŔÝst p°ed zpracovßnÝm dokumentu tolik
variant vzor¨ dýlenÝ, kolik budeme poużÝvat r¨znřch T-kˇdovßnÝ.
Zmýna  tohoto kˇdovßnÝ
uvnit° odstavce je ov╣em velice problematickß. Je sice możno uvnit°
odstavce zmýnit vzory dýlenÝ, ale uż nenÝ możno zmýnit tabulku
{\tt \\lccode} jednotlivřch znak¨, kterß je interpretovßna globßlný pro
celř odstavec. Bohużel tato tabulka takÚ ovliv˛uje dýlenÝ slov. Je proto
lep╣Ý T-kˇdovßnÝ v~pr¨býhu sazby nest°Ýdat a radýji na r¨zný kˇdovanÚ
fonty navßzat prost°ednictvÝm virtußlnÝch skript¨.

Je-li I-kˇdovßnÝ${}\not={}$T-kˇdovßnÝ, pak je pot°eba upravit konverzi
znak¨ z~malřch na velkÚ a naopak, na kterou d°Ýve staŔily primitivy
{\tt\\uppercase} a {\tt\\lowercase}. Tyto primitivy totiż pracujÝ
podle {\tt\\lccode} a {\tt\\uccode} znak¨ {\it p°ed\/} p°Ýpadnou expanzÝ
posloupnosti token¨. P°itom {\tt\\lccode} musÝ břt nastaveno podle
T-kˇdovßnÝ, protoże tyto kˇdy majÝ p°Ýmou souvislost s~dýlenÝm
slov. Hodnoty {\tt\\uccode} se z~d¨vodu symetrie takÚ nastavujÝ podle
T-kˇdovßnÝ. Mßme-li tedy I-kˇdovßnÝ rozdÝlnÚ, musÝme nejprve provÚst
expanzi a pak teprve poużÝt primitiv {\tt\\uppercase} nebo
{\tt\\lowercase}. ProblÚm m¨że °e╣it makro {\tt\\Uppercase}, kterÚ
definujeme t°eba takto:

\begtt
\def\Uppercase #1{\edef\act{\uppercase{#1}}\act}
\endtt

Udýlßme si nynÝ malÚ shrnutÝ konverze I-kˇdovßnÝ\To T-kˇdovßnÝ
v~\LaTeX{}u.

{\medskip\def\p#1. {\noindent\hbox to2em{#1.\hss}}
\p 1a. Znak ° nenÝ aktivnÝ: I-kˇdovßnÝ = T-kˇdovßnÝ.\par
\p 1b. Znak ° je uż v~I-kˇdovßnÝ rozlożen na {\tt \\v r}: jdi na 2.\par
\p 1c. Znak ° je aktivnÝ (poużitÝm {\tt inputenc.sty}): jdi na 3.\par
\p 2a. Jsme ve verbatim prost°edÝ: vytiskne se {\tt \\v r}.\par
\p 2b. Nejsme ve verbatim prost°edÝ: {\tt \\v r}\To T-kˇdovßnÝ.\par
\p 3.  I-kˇdovßnÝ\To {\tt \\v r}\To T-kˇdovßnÝ (bez zßvislosti na
       verbatim prost°edÝ).\par
\medskip}

CÝlem tv¨rc¨ maker na konverzi I-kˇdovßnÝ\To T-kˇdovßnÝ v~\LaTeX{}u je snaha
po użivatelsky p°Ýjemnýj╣Ý p°enositelnosti dokument¨ na ˙rovni {\tt *.tex}
a oddýlenÝ problematiky vstupnÝho kˇdovßnÝ dokumentu od kˇdovßnÝ font¨.
Pokud każdř \uv{standardnÝ} \LaTeX{}ovř dokument bude obsahovat
volßnÝ stylu {\tt inputenc.sty}, pak je vlastný v~hlaviŔce °eŔeno, jakÚ
vstupnÝ kˇdovßnÝ poużil autor dokumentu. Dokument pak nenÝ zßvislř na
kˇdovßnÝ, kterÚ poużÝvß p°Ýjemce dokumentu. P°Ýjemce se totiż nemusÝ starat
o~konverzi dokumentu do svÚho kˇdovßnÝ, ale rovnou dokument \LaTeX{}uje.

Tento zßmýr mß ale k~ideßlu hodný daleko. P°Ýjemce se totiż musÝ starat,
jak jsou v~dokumentu vyznaŔeny konce °ßdk¨. Pokud to nevyhovuje
poużitÚmu operaŔnÝmu systÚmu, musÝ provÚst p°ed zpracovßnÝm konverzi
dokumentu (o~problÚmech s~konci °ßdk¨ viz [TBN] stranu 15). M¨że se takÚ stßt,
że p°Ýjemce dostane dokument z~elektronickÚ po╣ty ve \uv{svÚm} kˇdovßnÝ,
zatÝmco odesÝlatel jej poslal v~jinÚm \uv{svÚm} kˇdovßnÝ~--- o~konverzi se
automaticky postaraly systÚmy pro p°enos elektronickÚ po╣ty. Pak zßpis
v~hlaviŔce dokumentu o~kˇdovßnÝ odesÝlatele dokonce lże a m¨że p¨sobit
potÝże. Snaha o~co nejvýt╣Ý pohodlÝ użivatele je oprßvnýnß prßvý
u~nßstroj¨, kterÚ umoż˛ujÝ p°enos dokument¨ z~r¨znřch operaŔnÝch systÚm¨.
V~tomto p°Ýpadý jde o~programy na prßci s~elektronickou po╣tou.
Snażit se o~totÚż v~samotnÚm \LaTeX{}u mi p°ipadß nevhodnÚ s~tÝm, że to
p°inß╣Ý vÝce komplikacÝ neż użitku. 
LaickÚho użivatele výt╣inou v¨bec nezajÝmß, jakÚ poużÝvß
kˇdovßnÝ. Także se mu m¨że jevit pożadavek na uvedenÝ
tohoto ˙daje do hlaviŔky v~{\tt\\usepackage[...]\char`\{inputenc\char`\}}
jako zbyteŔnost, o~kterou by se mýl sprßvný nainstalovanř systÚm postarat
sßm bez jeho pomoci. PoużÝvßnÝ tohoto balÝŔku takÚ
p°edpoklßdß, że A-kˇdovßnÝ = D-kˇdovßnÝ = I-kˇdovßnÝ, coż neguje p¨vodnÝ
Knuth¨v zßmýr, aby se rozdÝlnosti poużitřch operaŔnÝch systÚm¨ °e╣ily na
˙rovni D-kˇdovßnÝ\To I-kˇdovßnÝ.

Pokud jsme po zpracovßnÝ \TeX{}em ztratili p°ehled o~tom, jak dopadlo na╣e
pÝsmeno ° (to se vzhledem ke slożitosti cesty od D-kˇdovßnÝ po T-kˇdovßnÝ
m¨że stßt), pak je vhodnÚ se podÝvat p°Ýmo do dvi souboru. Udýlßme
jednoduchř \TeX{}ovř soubor, kterř tiskne do dvi pouze jedinÚ pÝsmeno
{\tt °}. Pak poużijeme program {\tt dvitype}, kterř vypÝ╣e obsah dvi
souboru v~textovÚ podobý. Najdeme tam nap°Ýklad povel pro sazbu znaku
pÝsmene {\tt °} jako {\tt set\char`\_1 248}.


\sub I-kˇdovßnÝ\To T-kˇdovßnÝ --- dal╣Ý możnosti.
P°i popisu transformace mezi I-kˇdovßnÝm a T-kˇdovßnÝm nesmÝme
zapomenout na býżnÚ situace, kterÚ vlastný dýlajÝ \TeX{}
\TeX{}em. Jednß se o~tyto możnosti: (1)~transformace mezi zßpisem nßzvu makra a
vřslednřm kˇdem v~{\tt dvi}, (2)~transformace v~matematickÚm mˇdu
podle {\tt\\mathcode} a (3)~promýna skupin znak¨ na ligatury.

Transformace kontrolnÝch sekvencÝ na vřstup do {\tt dvi} je °Ýzena
makrojazykem \TeX{}u, kterř mß v~tÚto oblasti velmi ╣irokÚ
możnosti. Z~d¨vodu struŔnosti uvedeme jen jeden z~mnoha p°Ýklad¨. 
Sekvence {\tt\\alpha} na vstupu se p°i poużitÝ
rodiny font¨ Computer Modern p°evede na kˇd {\tt\char`"0B} (hexadecimßlný) ve
fontu {\tt cmmi*}. Vysvýtlit p°esný, jak je to za°Ýzeno, by bylo na
del╣Ý vypravovßnÝ, także bez komentß°e pouze zmÝnÝm, że to souvisÝ 
s~touto deklaracÝ:

\begtt
\mathchardef\alpha="010B
\endtt

V~matematickÚm mˇdu podlÚhajÝ transformaci nejen kontrolnÝ sekvence,
ale i v╣echny býżnÚ znaky. NapÝ╣eme-li nap°Ýklad {\tt\$-\$}, pak toto
\uv{mÝnus} se p°i poużitÝ rodiny Computer Modern p°evede na znak 
s~kˇdem 0 ve fontu {\tt cmsy*}, protoże bylo v~makrojazyku °eŔeno:

\begtt
\mathcode`\-="2200
\endtt

Nakonec zmÝnÝm p°emýnu skupin
znak¨ na ligaturu. Tato vlastnost je definovßna v~metrice fontu 
{\tt tfm}. Promýna v~ligaturu se odehrßvß na ˙rovni T-kˇdovßnÝ.
Mßme-li nap°Ýklad na vstupu {\tt ---} a je zrovna poużit font 
{\tt cmr10}, pak se tyto t°i znaky promýnÝ ve znak jedinř s~kˇdem 
{\tt\char`"7C}, tj. znak \uv{---}.


\sub T-kˇdovßnÝ\To F-kˇdovßnÝ.
Pod F-kˇdovßnÝm rozumÝme kˇdovßnÝ poużitřch font¨ ve formßtu PK, \mf{}u nebo
Encoding vektoru \ps-ovÚho fontu. 

Je-li v~{\tt dvi} odkazovßno na font, kterř je instalovßn jako
{\tt *.mf}, {\tt *.pk} nebo \ps-
a nenÝ p°Ýtomen skript virtußlnÝho fontu {\tt *.vf},
je T-kˇdovßnÝ~=~F-kˇdovßnÝ. To je dosti Ŕastř p°Ýpad.
Zde ale rozebereme p°Ýpad, kdy mezi kˇdovßnÝm {\tt dvi} souboru 
(T-kˇdovßnÝm) a F-kˇdovßnÝm
stojÝ skript virtußlnÝho fontu. Ten m¨że obsahovat pożadavek na
zmýnu pozice znaku. Uvedeme abstraktnÝ p°Ýklad. Nech╗ na╣e pÝsmeno ° je
v~{\tt dvi} na pozici 176 a mß břt vysßzeno fontem {\tt vcsr10}. Tento
font je virtußlnÝ a odkazuje na font {\tt csr10}, p°itom pozici 176
mapuje na pozici 248. Pak bude nakonec na╣e pÝsmeno ° sßzeno fontem
{\tt csr10} z~pozice 248. Uvedeme nynÝ, jak takovř virtußlnÝ font {\tt
vcsr10} zhruba vypadß.

P°edev╣Ým nýkde v~instalaci musÝ břt p°Ýtomen soubor {\tt vcsr10.vf}. Je
tam, kde ho najdou poużitÚ {\tt dvi} ovladaŔe. Chceme-li se mu podÝvat na
zoubek, p°evedeme jej do ŔitelnÚ podoby pomocÝ programu {\tt vftovp}. Po
konverzi najdeme v~souboru {\tt vcsr10.vpl} mimo jinÚ tyto informace:

\begtt
(VTITLE Pouze priklad)
...
(MAPFONT D 0
  (FONTNAME csr10)
  )
...
(CHARACTER O~260
   (CHARWD R 0.391668)
   (CHARHT R 0.694445)
   (MAP
      (SETCHAR O~370)
      )
   )
\endtt

VidÝme tedy, że znaky jsou implicitný Ŕerpßny z~fontu {\tt csr10} (viz
{\tt MAPFONT D 0}) a że pozice 260 (oktalový) je vysßzena jako znak
z~implicitnÝho fontu z~pozice 370 (rovnýż oktalový). Takto je możnÚ
p°ekˇdovat i ostatnÝ pozice. Podrobnýji o~virtußlnÝch fontech~--- viz
nap°Ýklad [TST] stranu 75.

Na ˙rovni T-kˇdovßnÝ\To F-kˇdovßnÝ m¨że tÚż dojÝt k~\uv{rozkladu}
na╣eho pÝsmene ° na samostatnÚ pÝsmeno r a samotnř hßŔek.
Prost°ednictvÝm virtußlnÝch skript¨ lze {\tt dvi} ovladaŔi °Ýci, ve kterÚm
fontu hledat toto pÝsmeno a akcent, a popsat p°esnř zp¨sob, jak tyto
segmenty sesadit k~sobý. V~na╣Ý p°edchozÝ ukßzce virtußlnÝho fontu by
mohlo břt napsßno:

\begtt
(CHARACTER O~260
   (CHARWD R 0.391668)
   (CHARHT R 0.694445)
   (MAP
      (PUSH)
      (PUSH)
      (MOVERIGHT R -0.054167)
      (SETCHAR O~24)
      (POP)
      (SETCHAR C r)
      (POP)
      )
   )
\endtt

Poznamenejme, że tato praxe \uv{rozkladu} znaku prßvý popsanřm
zp¨sobem je hojný poużÝvßna p°i poużitÝ standardnÝch \ps-ovřch font¨
v~\CS\TeX{}u.  U~týchto font¨ se totiż nep°edpoklßdß, że v~nich bude
kresba pÝsmene ° samostatný obsażena, protoże t°eba výt╣ina font¨
z~Adobe Type Library obsahuje pouze sadu znak¨ podle 
tzv.~Adobe StandardEncoding. 
Tato sada mß pÝsmena anglickÚ abecedy a samostatnÚ
akcenty v╣eho druhu, także v╣echna akcentovanß pÝsmena na╣Ý abecedy
lze prostý posklßdat ze segment¨.

Pokud ale \ps-ovř font obsahuje kompletnÝ znak °, pak 
nenÝ t°eba provßdýt zmÝnýnř rozklad na segmenty a 
nastupuje poslednÝ
fßze na╣eho p°ekˇdovacÝho martyria:

\sub F-kˇdovßnÝ\To P-kˇdovßnÝ.
Pod pojmem P-kˇdovßnÝ rozumÝme po°adÝ \ps-ovřch procedur ve fontu na
vykreslenÝ jednotlivřch znak¨. Toto po°adÝ je z~hlediska sßzecÝho
systÚmu naprosto nezajÝmavÚ, protoże font je v~\ps-ovÚm kˇdu poużit
vesmýs prost°ednictvÝm operßtoru {\tt show} (a alternativ).  Tento
operßtor konvertuje pozici sßzenÚho znaku na nßzev procedury pro
vykreslenÝ pożadovanÚho znaku. Konverze je definovßna prost°ednictvÝm
tzv.~Encoding vektoru, kterř je souŔßstÝ każdÚho \ps-ovÚho
fontu. Obsahuje obvykle 256 jmen \ps-ovřch procedur. VysvýtlÝme si to
na p°Ýkladý.

Nech╗ \ps-ovř font obsahuje proceduru na vykreslenÝ kompletnÝho
znaku~°. Tato procedura mß obvykle nßzev {\tt /rcaron}.
P°edpoklßdejme, że na╣e pÝsmeno ° mß v~F-kˇdovßnÝ pozici 248.
Operßtor {\tt show} se p°i pożadavku na vykreslenÝ tohoto znaku podÝvß
do Encoding vektoru na pozici 248 a mýl by tam najÝt nßzev {\tt
/rcaron}.  To je nßzev procedury, kterß je poużita pro vykreslenÝ
pożadovanÚho znaku.  
RIP nynÝ interpretuje proceduru
{\tt /rcaron} a znak vykreslÝ. Slßva, koneŔný vidÝme znak ° po mnoha
zßkrutßch na papÝ°e\kern.1em!

M¨że se stßt, że mßme nýjakř \ps-ovř font s~˙plnou sadou ŔeskÚ abecedy a że
nßm nevyhovuje jeho kˇdovßnÝ. Jak vyplynulo z~p°edchozÝho, nenÝ nic
snadnýj╣Ýho, neż pozmýnit tomuto fontu Encoding vektor. Ten najdeme
v~ŔitelnÚ podobý nap°Ýklad v~souborech s~p°Ýponou {\tt pfb} nebo {\tt pfa}.
P°ed editovßnÝm je vhodnÚ p°evÚst font z~formßtu {\tt pfb} do {\tt pfa}
(nap°Ýklad pomocÝ balÝku {\tt t1utils}, programy {\tt t1binary} a {\tt
t1ascii}) a v~tomto formßtu provÚst
pożadovanÚ zmýny Encoding vektoru. VlastnÝ algoritmy procedur břvajÝ
výt╣inou za╣ifrovanÚ, ov╣em to nßm nevadÝ. Nakonec p°evedeme font zpýt do
formßtu {\tt pfb} a mßme jej p°ipraven v~pożadovanÚm kˇdovßnÝ.

Pokud je font p°Ýmo implementovßn v~\ps-ovÚm RIPu a jeho sada znak¨ obsahuje
˙plnou Ŕeskou abecedu, pak p°ekˇdovßnÝ takovÚho fontu m¨żeme provÚst nÝże
uvedenřmi povely, kterÚ za°adÝme na zaŔßtek \ps-ovÚho kˇdu. V~tomto p°Ýpadý
nelze p°Ýmo p°epsat Encoding vektor, protoże font je specißlnÝ p°Ýpad 
tzv.~\uv{slovnÝku}, kterř je nastaven pouze ke ŔtenÝ. Je proto pot°eba
tento slovnÝk zkopÝrovat, v~kopii pozmýnit Encoding vektor a oznaŔit
jej jako novř font pod jinřm nßzvem. Nap°Ýklad v~RIPu mßme font {\tt
Helvetica-E} s~Encoding vektorem podle CP1250. My bychom ale chtýli
poużÝvat tento font v~kˇdovßnÝ ISO-8859-2. P°ipravÝme si proto Encoding
vektor v~na╣em kˇdovßnÝ (krßceno):

\begtt
/ISOLatin2Encoding [/.notdef /./notdef ...
  /space /exclam /quotedblright /numbersign /dollar /percent ...
  /at /A /B /C /D ...
  /rcaron /uring /uacute /uhungarumlaut /udieresis /yacute ...] def
\endtt
\noindent
a definujeme novř font s~nßzvem {\tt Helvetica-ISOLatin2}:

\begtt
/Helvetica-E findfont
dup length dict begin
  {1 index /FID ne {def} {pop pop} ifelse} forall
  /Encoding ISOLatin2Encoding def
  currentdict 
end
/Helvetica-ISOLatin2 exch definefont pop
\endtt
\noindent
Nakonec mÝsto fontu {\tt Helvetica-E} poużijeme font {\tt
Helvetica-ISOLatin2}. Podrobnýji o~tÚto technologii viz [RB].

Zßsahy do fontu na ˙rovni F-kˇdovßnÝ\To P-kˇdovßnÝ jsou nezßvislÚ na
poużitÚm sßzecÝm systÚmu. NenÝ-li ale k~dispozici
\ps-ovř font s~˙plnou sadou Ŕeskřch znak¨, pak je nutno provÚst
\uv{rozklad} akcentovanřch znak¨ na segmenty uż na ˙rovni
T-kˇdovßnÝ\To F-kˇdovßnÝ, coż je ov╣em vřsadou \TeX{}ovskřch instalacÝ
a virtußlnÝch font¨.

Vřsadou \TeX{}ovskřch instalacÝ je rovnýż ovladaŔ {\tt dvips}, kterÚmu
m¨żeme sdýlit pożadovanř Encoding vektor poużitÚho fontu p°Ýmo
prost°ednictvÝm konfiguraŔnÝho souboru {\tt psfonts.map}. Je-li tam
nap°Ýklad napsßno:

\begtt
csr10 dcr10 "XL2encoding ReEncodeFont" <xl2.enc <dcr10.pfb
\endtt
\noindent
pak se pro sazbu fontu {\tt csr10} poużije font {\tt dcr10.pfb}, ov╣em
s~pozmýnýnřm Encoding vektorem. Program {\tt dvips} zavede do \ps-ovÚho
kˇdu font {\tt dcr10.pfb}, ale zmýnÝ mu Encoding vektor tak, jak je
°eŔeno v~souboru {\tt xl2.enc}. To je textovř soubor, kde je pożadovanř
Encoding vektor zapsßn. NemusÝme tedy tento vektor mýnit p°Ýmo
v~souborech {\tt pfb} a {\tt pfa}. Podrobnýji viz [DVIPS].

\sub Reference.

{\hangindent=\parindent \hangafter=1 \parindent=0pt \def\par{{\endgraf}}

[WWW]
Strßnka o~kˇdovßnÝ Ŕe╣tiny:
{\tt http://www.cuni.cz/cestina}.

[FTP] 
P°ehlednÚ a d¨kladnÚ tabulky jedenßcti kˇdovßnÝ poużÝvanřch v~Ŕe╣tiný:
{\tt http://petr.olsak.net/ftp/tkadlec/text/codestab.ps}.
DostupnÚ tÚż ze strßnky:
{\tt http://math.feld.cvut.cz/tkadlec/others.htm}

[RB] Adobe Systems Incorporated.
{\it PostScript Language Reference Manual.}
Addison-Wesley, Reading, MA, USA, second edition, 1990.

[DVIPS] Tom Rokicki. {\it {\tt dvips} --- dvi to PostScript}.
Manußl k~programu {\tt dvips} ve formßtu {\tt *.tex}
p°ilożen v~distribuci programu.

[EC] Milan Zamazal. 
BalÝk pro poŔe╣týnÝ Emacsu {\tt emacs-czech},\hfil\break
{\tt http://www.fi.muni.cz/\char`~pdm/emacs-czech.html}.

[ENCTEX] Petr Ol╣ßk. 
{\it Enc\TeX{} -- zmýny konverznÝch tabulek \TeX{}u.} Zpravodaj 3/1997.
BalÝk enc\TeX{} roz╣i°ujÝcÝ standardnÝ \TeX{} o~możnost manipulace 
s~{\tt xord/xchr} vektory.
{\tt http://petr.olsak.net/ftp/olsak/enctex/}.

[TBN] Petr Ol╣ßk. {\it \TeX{}book naruby.}
Konvoj, Brno 1997. V~elektronickÚ podobý plnř text k~dispozici na
{\tt http://math.feld.cvut.cz/olsak/tbn/}.

[TST] Petr Ol╣ßk. {\it Typografickř systÚm \TeX.}
CSTUG 1995.

}


\end
