\input ctuslides2

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

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

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

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

\tit Typografie a \TeX/ (02)

\subtit\bf Značkovací jazyky v \TeX/u \nl petr@olsak.net

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

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

\sec Ini\TeX/ versus makrobalíky

* Ini\TeX/ je vybaven cca 300 primitivními příkazy a registry.
  Příkazy spouštějí vnitřní algoritmy \TeX/u
  (například \code{\\halign}, \code{\\kern}, \code{\\def}, \code{\\hbox})
  zatímco registry obsahují parametry vnitřních algoritmů \TeX/u a je možné
  je měnit: (\code{\\hsize}, \code{\\voffset}, \code{\\tolerance}).
  Příklady:

\pg=\begtt
\hsize = 13cm
\def \TeX {T\_kern-.1667em\_lower.5ex\_hbox{E}\_kern-.125emX}
\endtt

* Začít přímo zpracovávat dokument jen na základě toho, co nabízí Ini\TeX/
  je nelidské a nesportovní. Proto existují makrobalíky implementované
  pomocí \code{\\dump} jako formáty \TeX/u.

* Specifikum \TeX/u: Na vstupu může být směs příkazů, maker a textu z dokumentu, 
  který se má vytisknout. Záleží jen na uživateli, zda udrží jistou kulturu
  zdrojových textů dokumentů, oddělí typografická nastavení od dobře
  označkovaného textu dokumentu, nebo to nevhodně smíchá dohromady.

* Pravidlo: doporučuje se odělit formu od obsahu.

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

\sec Plain \TeX/ Donalda Knutha

* Výchozí sada maker obsažená v přesné nebo modifikované podobě
  i~v~dalších \uv{vyšších} sadách maker.
* Konzervovaná D. Knuthem v roce 1989.
* Dokumentovaná v příloze knihy \TeX/book\nl (1. díl Computers \& Typesetting).
* Je možné v plain \TeX/u psát dokument, ale je často třeba si k tomu dodělat plno
  vlastních maker (na tvorbu obsahu, na vyznačení kapitol, sekcí, na
  efektivnější manipulaci s fonty...)
* D. Knuth v plain\TeX{}u vysázel sérii Computer \& Typesetting nebo \nl
  The Art of Computer Programming. Nepoužil jen plain \TeX/, 
  ale také další (veřejně dostupná) makra \code{manmac.tex}.
* Čistý plain \TeX/ je použitelný jen pro anglické dokumenty. 
* V plain \TeX/u neexistuje jednotný přístup ke značkování dokumentů.

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

\sec Jemná rozšíření plain \TeX/u

* Různé jazykové mutace, např. \csplain, viz
  \url{http://petr.olsak.net/csplain.html}

  Autor \csplain/u zaručuje podobnou neměnnost \csplain/u jako v~případě
  plain~\TeX/u D. Knutha.

* Příkaz \code{csplain} generuje (z konzervativních důvodů)
  DVI, zatímco příkaz \code{pdfcsplain} aktivuje výstup
  do PDF. Obojí je nad enginem \code{pdftex}. Dále je k dispozici 
  příkaz \code{luacsplain}, generuje PDF, používá engine
  \code{luatex} a je to dnes preferovaný způsob použití \csplain/u. 

* Většinou je v distribucích při použití příkazů \code{pdftex},
  \code{luatex} a \code{xetex} dostupný plain \TeX/
  generovaný společně s makrem \code{etex.src}, což zavádí všechny 
  dostupné vzory dělení. Není to tedy čistý plain \TeX/ D. Knutha.

* \csplain/ obsahuje makrobalík OPmac.


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

\sec AMS \TeX/

* Michal Spivak rozšířil makra plain \TeX/u (1981) o dodatečné možnosti v
  matematické sazbě a přidal k tomu sadu matematických fontů s~mnoha
  značkami nepodporovanými přímo v Computer Modern.

* M. Spivak k tomu napsal manuál Joy of \TeX.

* Podporuje to AMS (American Mathematical Society)
 
* Dnes není AMS \TeX/ samostatným formátem. V plain \TeX/u stačí
  \code{\\input amstex.tex}\nl a součástí \LaTeX/u je tzv. AMS\LaTeX/ nabízející
  použít\nl \code{\\usepackage{amsmath}}

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

\sec \LaTeX -- významné časové mezníky

* Leslie Lamport dal veřejnosti svá makra kolem roku 1984. V roce 1986
  publikoval v AW \LaTeX/ manuál. Začalo se to široce užívat pro přípravu odborných
  publikací. 

* \LaTeX/ deklaruje základní principy značkování dokumentu (kapitoly, sekce,
  poznámky, odrážky, citace atd.). Výhoda: dokument je připraven v mezinárodně
  uznávaném značkování.

* \LaTeX/ zavádí koncept hlavního stylu (\code{article}, \code{book},
  \code{report}, \code{letter}, \code{slides}) a dodatečně zavedených balíčků
  maker.

* V roce 1990 předal L. Lamport vývoj \LaTeX/u F. Mittelbachovi.
  Vznik \LaTeX/u2e (1994), existuje tým kolem \LaTeX/u vyvíjející \LaTeX3 (dosud).

* Po zveřejnění Xe\TeX/u a Lua\TeX/u byla makra upravena pro tyto enginy a
  vznikl Xe\LaTeX/ a Lua\LaTeX/ (příkazy \code{xelatex}, \code{lualatex}). Zde
  přestávají mít smysl balíčky \code{inputenc}, \code{fontenc}, \code{babel}
  a je třeba místo nich použít \code{fontspec} a \code{polyglosia}. 

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

\sec \LaTeX/ -- vývojové etapy před Unicode

* Před rokem 1994 se používaly veze $\le$ 2.09. Typické pro ně je první
  povinný příkaz v dokumentu \code{\\documentstyle{...}}.

* Od roku 1994 \LaTeX{} team nabízí verzi pre-\LaTeX3, nazvanou
  {\Red\LaTeX2e}. Dokument může vypadat takto:

\pg=\begtt
\documentclass[a4paper,11pt]{article}  % V LaTeXu povinné
\usepackage[czech]{babel}              % nastavení jazyka
\usepackage[utf8]{inputenc}            % nastavení vstupního kódování
\usepackage[T1]{fontenc}               % nastavení výstupního kódování
\usepackage{newcent}                   % nastavení rodiny fontů
\usepackage ...                        % další balíčky
\begin{document}
...
\end{document}
\endtt

* Detekuje-li \LaTeX2e jako první příkaz \code{\\documentstyle}, přechází do
  tzv. compatibility módu a chová se jako \LaTeX/ verze 2.09.

* Toto je ukázka pro 8bitový engine, zpracujete ji příkazem \code{pdflatex}.

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


\sec \LaTeX2e -- vývojová etapa nyní

* Od roku 2004 existuje Xe\TeX/ a některá volání balíčků je třeba v
  Xe\LaTeX/u (nebo později v Lua\LaTeX/u) nahradit:

\pg=\begtt
\documentclass[a4paper,11pt]{article}  % V LaTeXu povinné
\usepackage{polyglossia}               % nastavení jazyka (náhrada za babel)
\setdefaultlanguage{czech}             % české vzory dělení, atd.
\usepackage{fontspec}                  % nastavení fontu
\setmainfont[Ligatures=TeX,
    Extension=.otf,
    UprightFont= *-regular,
    BoldFont=*-bold,
    ItalicFont=*-italic,
    BoldItalicFont=*-bolditalic]
    {texgyreschola}                    % nastavení rodiny fontů
\usepackage ...                        % další balíčky
\begin{document}
...
\end{document}
\endtt

* Dnes se nemá smysl vracet k \LaTeX/u na 8 bitových enginech. Zkuste
  preferovat Xe\LaTeX/ nebo Lua\LaTeX/, když už tíhnete k \LaTeX/u.
  Ukázku zde uvedenou zpracujete příkazem \code{xelatex} nebo \code{lualatex}.

* Uživatelská základna \LaTeX/u je konzervativní, k Unicode stále mnozí
  nepřešli a používají \code{pdflatex}.

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

\sec Nevýhody La\TeX/u

* Snaží se před uživatelem zakrýt \TeX/, ale to v principu nejde.
* Původně navržen jako jeden formát s konkrétní typografií. Možnosti
  nastavení jiné typografie pomocí balíčků věci znepřehledňují.
* Balíčky desítek různých autorů mohou být vzájemně sporné.
* Makra balíčků i \LaTeX/u samotného jsou zbytečně komplikovaná, protože
  často řeší, jak vytvořit jiné než primitivní 
  \TeX/ové rozhraní.
* Zavádí i pro jednoduché úkony jinou než primitivní syntaxi. Například místo
  \code{\\hsize=10cm} se má v \LaTeX/u použít
  \code{\\setlength{\\textwidth}{10cm}} \nl 
  V dokumentu je pak obojí syntaxe možná a vzniká tak často zmatek.
* \LaTeX/ová dokumentace nerozlišuje, co je \TeX/ové a primitivní
  a co \LaTeX/ové. Například se dozvíme, že \code{\\baselineskip} je
  \LaTeX/ový parametr, ale to není pravda.
* \LaTeX/ mění některá makra plain \TeX{}u (\code{\\line}) a primitivní příkazy 
  (\code{\\end}). 
* Jádro \LaTeX/u2e potřebuje dodatečně načíst plno balíčků, neboť vývojově se
  zastavilo v roce 1992. Neumí barvy, hyperlinky...
* Dále též viz můj článek 
  \ulink[http://petr.olsak.net/ftp/olsak/bulletin/nolatex.pdf]{Proč nerad používám \LaTeX/}
  z roku 1997. 

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

\sec Expl3

* Další rozrhraní mezi uživatelem a \TeX/em snažící se zakrýt chování \TeX/u
  a jeho syntaxi. 
* Vytváří programovací jazyk implemtovaný v makrech \TeX/u.\nl Je určen 
  pro programování \LaTeX/ových balíčků a jádra \LaTeX/u3.
* Velké množství \LaTeX/ových balíčků je již do tohoto jazyka přepsáno. 
* Ve snaze řešit chybějící separaci jmenných prostorů (to \TeX/ bohužel neumí)
  vytváří konvenci pro pojmenovávání kontrolních sekvencí, která je naprosto
  obskurní a silně znepřehledňuje kód.

\pg=\begtt
\cs_new_protected:Npn \kozlovskiy_maketitle:
  {
    \tagstructbegin{tag=Title}
      \prop_map_function:NN \l__kozlovskiy_data_of_title_prop
        \__kozlovskiy_tag_elt:nn
      \__kozlovskiy_original_maketitle:
    \tagstructend
  }
\cs_new_eq:NN \__kozlovskiy_original_maketitle: \maketitle
\cs_gset_protected:Npn \maketitle { \kozlovskiy_maketitle: }
\endtt

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

\sec ConTeXt

* ConTeXt vytvořil v první verzi Hans Haagen v roce 1990, vyvíjí jej dosud.
* ConTeXt udělal velký skok v roce 2009,
  kdy byl propojen s Lua\TeX/em (mark IV ConTeXt). Od té doby tvoří
  nerozlučnou dvojici.
* Na rozdíl od \LaTeX/u nabízí všechny vlastnosti požadované v dnešní době
  při tvorbě dokumentů (barvy, odkazy, zařazování grafiky, bibloigrafie, ...) bez
  nutnosti načítat na každou věc nějaký balíček.
* Pro tvorbu grafikckých prvků je propojen s MetaPostem. 
* Na rozdíl od \LaTeX/u nabízí jednotnou syntaxi pro nastavování
  typografických parametrů, ovšem také zakrývá \TeX/ové primitivní rozhraní.
* Vymezuje jiný značkovací jazyk pro dokumenty než \LaTeX/, více
  přizpůsobený možnostem měnit typografické parametry.
* Výrazně se odchyluje od plain \TeX/u (např. při tvorbě tabulek).

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

\sec OPmac

* Souromý balíček maker nad \csplain/em zveřejnil autor v roce 2013.
* Je součástí \csplain/u a zavolá se pomocí \code{\\input csplain}.
* Snaží se o návrat k \TeX/u, tj. makra nezakývají primitivní úroveň \TeX/u,
  pouze ji doplňují.
* Umí vše, co se typicky předpokládá při přípravě dokumentu v dnešní době: 
  barvy, odkazy, hyperlinky, zařazování grafiky, transformace, bibliografii,
  rejstříky, fontový systém, ... Rejstříky se řadí a bibliografie vybírá jen
  pomocí maker OPmac bez externího programu.
* Běhá na všech enginech se základním makrem plain \TeX.
* Makra jsou jednoduchá a přímočará (v ukázce je srovnání v počtu řádku
  kódu LaTeXových balíčků a OPmac). Důvod je ten, že se makra nesnaží zakrýt
  \TeX/ ani vytvořit nad ním novou syntaxi.
* Chcete-li modifikovat typografii nebo jiné chování dokumentu, neděláte to
  pomocí stovek nových parametrů, ale tak, že si zkopírujete makro OPmac do
  svého makro souboru a upravíte si je podle potřeby.
* Viz např. plakátek OPmac.

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

\sec Op\TeX/

* První verzi autor zveřejnil v lednu v roce 2020.
* Spojuje Lua\TeX, plain\TeX/ a OPmac.
* Viz \url{http://petr.olsak.net/optex/}.
* Využívá síly maker OPmac, opouští komplikované kličky dříve nutné kvůli
  existenci různých kódování a různých enginů. Podporuje jedině Lua\TeX/ a
  Unicode.
* Makra zůstávají jako v Plain\TeX/u jednoduchá.
* Hlavní nápor na vývoj očekává autor v létě roku 2020. Už nyní existuje v
  \TeX/live alpha verze pro testování.

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

\sec CTUstyle

* Šablona pro přípravu závěrečných studentských prací na ČVUT.
* Autor ji vytvořil na na základě námětu vysloveném 
  v~diskusním fóru studentů ČVUT v roce 2013.
* Šablona se opírá o plain \TeX/ a OPmac.
* Viz \url{http://petr.olsak.net/ctustyle.html}.
* V roce 2015 byla Tomášem Hejdou vytvořena šablona CTUthesis postavená na
  \LaTeX/u a přebírající kompletně typografický návrh CTUstyle. Stalo se tak
  na popud \LaTeX/ových uživatelů, kteří nechtěli používat plain \TeX/
  a OPmac. 
* V únoru 2018 byla vytvořena verze 2 CTUstyle, implementující doporučený
  vizuální styl na ČVUT založený na písmu Technika.
* \LaTeX/ová obdoba CTUstyle2 dosud neexistuje.
* Tyto slídy, na které zrovna hledíte, jsou vytvořeny v CTUstyle2.

\pg.
