\input ctustyle3
\slides

\input csf-enc

\addto\TeX{\noslash}
\addto\LaTeX{\noslash}
\addto\csplain{\noslash}
\def\noslash{\futurelet\next\noslashA}
\def\noslashA{\ifx\next/\expandafter\noslashB\fi}
\def\noslashB/{}
\def\code#1{{\Red\_code{#1}}}

\worktype[O/CZ]
\faculty{F8}
\department{Katedra matematiky, katedra teoretické informatiky}

\def\fontsel #1 {\font\test=cs-#1 \sizespec \test}

\font\slabi=slabikar at33pt
\pdfmapline{=slabikar Slabikar <slabikar.pfb}
\font\fivecm=cmr5
\font\tencm=cmr10 
\font\svtncm=cmr17

\def\tthook{\typosize[12/14]}
%\slideshow

\tit Typografie a \TeX/ (03)

\subtit\bf Fonty, grafika, bibliografie, rejstříky\nl\nl petr@olsak.net

\subtit\rm \url{http://petr.olsak.net/typotex.html}

\pg; %---------------------------------------------------

\sec Primitivní příkaz \code{\\font}

* Základní použití:

\begtt
\font\prepinac=soubor % zavede font v jeho základní velikosti
\font\prepinac=soubor at<dimen>    % font v požadované velikosti
\font\prepinac=soubor scaled<koef> % font v pronásobené velikosti
{\prepinac tady je text ve vybraném písmu} 
\endtt

* Rozšířené použití:

\begtt
\font\prepinac="Název fontu:<fontfeatures>" at<dimen>    % XeTeX nebo LuaTeX
\font\prepinac="[soubor fontu]:<fontfeatures>" at<dimen> % XeTeX nebo LuaTeX
\font\prepinac={Název fontu:<fontfeatures>} at<dimen>    % LuaTeX
\font\prepinac={[soubor fontu]:<fontfeatures>} at<dimen> % LuaTeX
\endtt

* Lua\TeX/ potřebuje pro rozšířené použití spustit Lua kód (který nelze
předgenerovat ve formátu a musí se spustit na začátku zpracování dokumentu).
Alternativní možnosti:

\begtt
\input luafonts        % makro soubor z CSplainu 
\input luaotfload.sty  % makro soubor z LuaLaTeXu fungující i v plain TeXu
\initunifonts nebo \fontfam[rodina] nebo \ufont  % makro v OpTeXu
\usepackage{fontspec}                            % balíček v LaTeXu
\endtt

\pg; %----------------------------------------------------

\sec Fontová období

* 1978--1989: Bitmapové fonty rastrované pro různá zařízení různě programem
  Metafont. 128 znaků v jednom fontu (7bit).
* 1989--1994: Bitmapové fonty rastrované programem Metafont, 256 znaků v
  jednom fontu (8bit). V obou případech \TeX/ generuje DVI a následně DVI
  ovladač (pro každé zařízení jiný) využije rastrové fonty.
* 1994--2004: PostScriptové období: Type1 formát fontů rastrovaný 
  v~PostScriptovém RIPu. Font může obsahovat libovolné množství znaků, ale v
  systému na přípravu sazby se interně pracuje s 256 znaky, k fontům se
  přistupuje prostřednictvím 256 znakových encoding vektorů,
  mezi kterými lze v jednom dokumentu přepínat. \TeX/ generuje DVI,
  následně ovladač dvips vytvoří PostScript a ten se pošle na zařízení s
  PostSriptovým RIPem. Nebo pdf\TeX/ vytvoří přímo PDF, ve kterém jsou Type1
  fonty zahrnuty. 
* Od roku 2004: Xe\TeX/ (a později Lua\TeX/) umožil přímé použití 
  Unicode fontů formátu OpenType. Interně pracuje v Unicode.
  Lua\TeX/ i Xe\TeX/ generují přímo PDF, rastrování probíhá v PDF
  rasterizéru (je součástí PDF prohlížeče nebo zařízení pro tisk).

\pg; %------------------------------------------------------

\sec pdftex: PostScriptové fonty

* Zvlášť jsou metriky (afm -> tfm) a zvlášť glyphy (pfb)

* TeX sází podle metrik, dále pdftex přečte potřebné glyphy
  a vloží je do PDF výstupu. K tomu účelu pracuje se souborem
  "pdftex.map".

* Často se používal také koncept virtuálních fontů:

* \TeX/u se podstrčí meriky \code{.tfm} neexistujících
  fontů, on z nich udělá sazbu a při požadavku na vykreslení znaků se volají
  binární skripty \code{.vf}, které odkazují na případně další binární skripty
  \code{.vf} nebo na reálné fonty reprezentované svou metrikou \code{.tfm}, 
  sadou glyphů \code{.pfb} a použitým kódováním těchto glyphů \code{.enc}
  a s konfiguračním řádkem, který to celé dává dohromady (v souboru
  \code{.map}).

* Další technické podrobnosti raději nechtějte vědět...

* V PostScriptové éře se bohužel většina instalací PostScriptových fontů
  nějak opírala o koncept virtuálních fontů, což činilo instalaci fontů pro
  laika zcela nepřehlednou až neprůstřelnou. 

* Porovnejte s možností instalace OpenType fontů dnes (ukázka...)

* LuaTeX+luaoftload: umí přímo číst nejen OpenType fonty, ale též
  PostScriptové fonty (afm+pfb) a pracuje s nimi v Unicode.

\pg; %-----------------------------------------------------

\sec Ukázka použití \code{\\font}

\begtt
\input csf-enc
\font\slabi=slabikar at25pt
\pdfmapline{=slabikar Slabikar <slabikar.pfb}

{\slabi\csfenc Tady píšu, jak mě učili psát v první třídě, ale 
               nikdy jsem se to pořádně nenaučil.}
\endtt

\medskip

{\slabi\csfenc Tady píšu, jak mě učili psát v první třídě,
        ale nikdy jsem se to pořádně nenaučil.}

\medskip

* V tomto písmu je speciálně použit koncept zobecněných ligatur, viz článek
  \ulink[http://petr.olsak.net/ftp/olsak/slabikar/slabi.pdf]{Psané písmo ze slabikáře}
  z roku 1997.

{\slabi\csfenc T a d y \quad p í š u \ \ . . . \ \ B + a = Ba}

* Když ukázku vyzkoušíte bez správně instalované metriky \code{slabikar.tfm} a glyphů
  \code{slabikar.pfb} a bez konfiguračního řádku \code{\\pdfmapline},
  pak pravděpodobně vznikne pokus o zavolání programu Metafont, což tedy
  opravdu nechceme.

\pg; %---------------------------------------------------

\sec Fontfeatures v OpenType fontech

* Mnohé znaky (pod jedním Unicode číslem) mají ve fotnu uloženo více
  variant. Např. Caps \& Small Caps, alternativní \&, ...
* Pomocí font features je možné zapínat a vypínat variantní sady znaků,
  aktivovat a deaktivovat různé tabulky ligatur, kerningových párů atd.
* Features mohou být v různých podobách a s různými defaultními hodnotami 
  seskupeny pod jazyky a různé jazyky mohou být k dispozici pod tzv. skripty 
  (latinka, azbuka, ...)
* Příklad

\begtt
\font=\caps="[lmroman10-regular]:+smcp;+onum"
\endtt
%
  použije font LatinModern 10 se zapnutou sadou Caps \& Small Caps a
  skákavými číslicemi.
* Rozsáhlý seznam font features 
  \ulink[https://en.wikipedia.org/wiki/List_of_typographic_features]{na internetu},
  dostupné fontfeatures konkrétního fontu by měly být v jeho dokumentaci
  nebo lze použít výpis příkazu \code{otfinfo -f font.otf}.

\pg; %----------------------------------------------------

\sec Optické velikosti v rodinách fontů

* Klasický příklad rodiny s optickými velikostmi: Computer Modern.
* Pokyn \code{at} nebo \code{scaled} v příkazu \code{\\font} dělá jen
  lineární transformaci zvětšení či zmenšení.
* Historicky: pro každou velikost bylo písmo navrženo zvlášť s ohledem na
  nejlepší čitelnost a estetické nároky v dané velikosti.

\font\cmrvii=cmr17 at30pt
\font\cmrx=cmr10   at30pt
\font\cmrv=cmr5    at30pt

\bigskip
\line{\quad{\tt cmr17}\quad\svtncm Computer Modern 17 \hfil \cmrvii Computer Modern 17}
\medskip

\line{\quad{\tt cmr10}\quad\tencm Computer Modern 10 \hfil\cmrx Computer Modern 10}
\medskip

\line {\quad{\tt cmr5\enspace}\quad\fivecm Computer Modern 5 \hfil\cmrv Computer Modern 5}
\bigskip

* Fonty různých optických velikostí jedné rodiny bývají v různých souborech
  obsahujících číslo: \code{cmr5}, \code{cmr7}, \code{cmr8}, 
  \code{cmr9}, \code{cmr10}, \code{cmr12}, \code{cmr17}.
  Vybrat vhodný font musíte příkazem \code{\\font}, nebo se o to postará
  chytré makro.

\pg; %----------------------------------------------------

\sec \LaTeX/ font selection system

* Vyvinutý v roce 1992 jako NFSS (new font selection system).

* Rodina fontů ma svůj styl, např. \code{times.sty}. Ten může sdružovat více
  rodin, jsou označeny zkratkami. např. \code{phv} je PostScript Helvetica,
  \code{ptm} je PostScript Times a \code{pcr} je PostScript Courier.
  Každá zkratka sdružuje sadu metrik \code{.tfm} konfigurovanou v souboru
  \code{<kódování><zkrakta-rodiny>.fd}. To jsou tzv. \uv{font definition
  soubory}, například \code{xl2ptm.fd}.

* Instalace byla komplikovaná, existovaly automatické generátory
  \code{.fd} souborů.

* Uživatelsky, viz \code{texdoc psnfss}.

* Z uživatelského hlediska existují přepínače provádějící přepnutí fontu
  nezávisle na nastavení ostatních v těchto aspektech: velikost, tučnost, 
  sklon, rodina, kódování.

* Vybírá vhodnou optickou velikost, je-li konfigurovaná.

* Balíček \code{fontspec.sty} pro Lua\LaTeX/ a Xe\LaTeX/ zachovává
  uživatelská makra pro přepínání fontů, ale přístup k fontům primitivním
  příkazem \code{\\font} řeší zcela jinak bez použití \code{.fd} souborů.

\pg; %-----------------------------------------------------

\sec Op\TeX/ font selection system

* Rodiny jsou sdružovány do \code{f-<název>.opm} souborů (tzv. font soubory). 
  Je tam definováno makro \code{\\_fontnamegen}, které mapuje interní parametry
  maker pro volbu fontů na fyzická jména souborů fontu.

* Uživatel používá základní čtyři přepínače \code{\\rm}, \code{\\bf}
  \code{\\it}, \code{\\bi} a sadu modifikátorů, např. \code{\\sans}
  pro sans serif, \code{\\cond} pro condensed varianty atd. 

* Modifikátory jsou prefixy používané před přepínači a modifikují vlastnost
  fontu nezávisle na jiných modifikátorech, vyplývá-li to z~povahy věci.
  Sada modifikátorů může být různá pro různé rodiny fontů. Dostupné
  modifikátory se vypisují v logu, na terminálu a názorně je jejich funkce
  vidět v {\Red katalogu fontů}.

* Vybírá vhodnou optickou velikost, je-li dostupná.

* Rodiny se zavádějí příkazem \code{\\fontfam[<rodina>]}, například
  \code{\\fontfam[Termes]}. Příkaz \code{\\fontfam[?]} vypíše seznam
  konfigurovaných rodin na terminál a \code{\\fontfam[catalog]} 
  vytiskne katalog fontů.

\pg; %-----------------------------------------------------

\sec Vložení grafiky \code{\\pdfximage}, \code{\\inspic}

* Umožňuje vkládat externí grafické soubory bitmapové
  \code{.png}, \code{.jpg} nebo vektorové \code{.pdf}.

* Příkaz \code{\\pdfximage} vloží jednou data obrázku do
  výstupního PDF a vygeneruje číselný odkaz na objekt, kde jsou data
  uložena. Umístění obrázku v sazbě se pak děje 
  použitím odkazu na tento objekt. Může se tedy stejný obrázek 
  odkazovat opakovaně, je pak vykreslen na více místech, ale data 
  k němu jsou v PDF jen jednou.

* Umístění obrázku lze protáhnout lineární transformací, např. stanovit
  přesně výšku nebo šířku obrázku ve výstupu.

* Je třeba rozlišovat, zda je vhodnější bitmapová nebo vektorová grafika.
  Záleží na typu obrázku. Když bitmapová, pak jaké rozlišení?

* Při vkládání vstupního PDF do výstupního PDF je třeba specifikovat
  číslo strany vstupního PDF, která se jako celek chová jako vložený 
  \uv{obrázek} - bez zkreslení, bez ztráty informace. To umožňuje použít
  \TeX/ např. pro archovu montáž. Viz např. str. 102 
  \ulink[http://petr.olsak.net/tpp.html]{\TeX/u pro pragmatiky}.


\pg; %-----------------------------------------------------

\sec Popisky v obrázku

* Doporučuji obrázky připravit v interaktivním programu, exportovat je do PDF
  a zařadit je do dokumentu. ALE:
* Obsahuje-li obrázek doprovodný text (popisky os, označení geometrických
  bodů atd.), pak je žádoucí, aby tyto popisky byly ve velikosti a 
  rodině fontu jako je celý dokument, jinak to vypadá jak vytržené krávě z huby.
* {\Red Inkscape} je interaktivní vektorový editor obrázků, který mimo jiné 
  umožňuje zvlášť vygenerovat \uv{kostru} obrázku jako PDF a k tomu 
  \LaTeX/ový soubor
  s popisky k obrázku. Obojí se vkládá na stejné místo, tj. sazba popisků
  proběhne ve fontu dokumentu (výhody, nevýhody)
* Třebaže Inkscape generuje \LaTeX/ový soubor, \OpTeX/ jej dovede také přečíst
  pomocí makra \code{\\inkinspic}.
* K řešení popisků může také sloužit {\Red Metapost} nebo {\Red PsTricks} nebo 
  {\Red TikZ}. 

\pg; %---------------------------------------------------------

\sec Sklon k \uv{programování} obrázků

* \TeX/isté jsou zvyklí, že \uv{programují} non-wysiwyg způsobem sazbu,
  takže jim nepřijde divné programovat i obrázky. Dělají to docela často.
* Osobně to nedoporučuji. Je pochopitelně možné k tomu přistoupit, když máte
  jasno, že je to efektivní nebo nezbytné pro daný účel.
* Užití wysiwyg grafických editorů a zařazení jejich výstupu do sazby je
  ve většině případů dostačující.
* Někdy ale chceme, aby grafické prvky navazovaly na výsledek sazby a obráceně,
  pak je \uv{programování} grafiky vhodné.
* Chcete-li \uv{programovat} obrázky, můžete použít primitivní příkazy PDF
  formátu (\code{\\pdfliteral{<kód>}}), nebo 
  {\Red Tikz}, {\Red Metapost}, {\Red Asymptote}, {\Red PsTricks}, \dots
* Ukázka primitivních příkazů PDF formátu (viz též článek
  \ulink[http://petr.olsak.net/ftp/olsak/bulletin/pdfgrafika.pdf]
        {Jednoduchá grafika PDF primitivně}). 
* Ukázky použití {\Red TikZ}, {\Red Metapost}...

\pg; %---------------------------------------------------------

\sec Bibliografie

* {\Red Bib\TeX/} (z roku 1985) navazuje na \LaTeX/. Uživatel píše
  \code{\\cite{<lejblíky>}} a dále v místě seznamu literatury
  napíše \code{\\bibliographystyle{<styl>}} a 
  \code{\\bibliography{<bib-soubor>}}. Po trojím \LaTeX/ování
  se v tom místě objeví seznam literatury podle lejblíků použitých v
  \code{\\cite} a vše je prolinkované.
* \code{<bib-soubor>} by měl obsahovat nadmnožinu citovaných záznamů a
  nadmnožinu údajů v každém záznamu potřebných pro použitý styl.
  Ukázka \code{.bib} souboru...
* {\Red Bib\TeX/} čte \code{.aux}, \code{.bib}, \code{.bst} 
  a generuje \code{.bbl}.
* Stylové soubory \code{.bst} jsou v příšerném postfixovém
  jazyce.
* {\Red \OpTeX} se bez Bib\TeX/u obejde:
  Čte \code{<bib-soubory>} přímo a definuje si vlastní styly pomocí maker
  (příkaz \code{\\usebib}).
  Viz článek
  \ulink[http://petr.olsak.net/ftp/olsak/bulletin/clanek-bib.pdf]
        {OPmac-bib -- bibliografické odkazy jednoduše}.
* {\Red Biber} (z roku 2013) dělá totéž, co Bib\TeX/, ale pracuje v Unicode 
  a konfigurační soubory má v XML. Navazuje na La\TeX/, o možnosti použití Biberu v 
  plain \TeX/u nic nevím.

\pg; %---------------------------------------------------------

\sec Rejstříky

* \TeX/ v místech, které jsou v dokumentu vyznačeny (např.
  \code{\\index{<slovo>}} vloží do souboru \code{.idx} ve tvaru
  \code{<slovo> <strana>}. 
* {\Red Makeindex} (z roku 1986) čte neuspořádaný \code{.idx}
  a vyrábí uspořádaný \code{.ind} soubor vhodný pro čtení v \LaTeX{}u.
  Dále čte stylový soubor \code{.ist}
* V následujícím zpracování \TeX/em se v místě příkazu \code{\\printindex} načte
  soubor \code{.ind}, což vytiskne uspořádaný rejstřík.
* Různé jazyky mají různá pravidla řazení většinou definovaná v~několika 
  průchodech. Čeština vyžaduje: tři průchody, viz například článek
  \ulink[http://petr.olsak.net/ftp/olsak/bulletin/csr.ps]
  {Program csr -- abecední řazení dle normy} z roku 1994. 
  Klasický příklad: pláně $\prec$ plánička $\prec$ Plánička $\prec$ 
  plaňka $\prec$ plankton.\nl 
  Nebo: platno $\prec$ plátno $\prec$ platnost.
* Pro češtinu se dlouho používala mutace Makeindexu \code{csindex}.
* Program {\Red Xindy} (z roku 2004) umí Unicode a obsahuje konfigurační
  soubory implementující pravidla řazení různých jazyků.
* {\Red OPmac}, {\Red Op\TeX} umí řadit rejtříky bez externího programu.

\pg. %--------------------------------------------------------------

