Seminář o TeXu
V zimním semestru 2016/2017 vedeme s Vladanem Majerechem Seminář o TeXu. Spíš než uživatelskému pohledu na TeX se věnujeme tomu, jak TeX funguje uvnitř, jaké algoritmy používá a jak ho přiohnout pro různé méně obvyklé účely. Také se chceme zabývat různými rozšířeními TeXu, jako je pdfTeX a LuaTeX. Viz též reklamní letáček.
Seminář se koná ve čtvrtek od 10:40 v S7. Začínáme 6. října.
Zápočet si vysloužíte za vyřešení alespoň 7 domacích úkolů. Zadání najdete níže, řešení prosím posílejte e-mailem na tex@ucw.cz.
datum | co jsme dělali |
---|---|
6. 10. | Jak TeX interaguje s okolím. První představení algoritmu na odstavcový zlom. |
13. 10. | Odstavcový zlom: anatomie horizontálnich seznamů, sestavení boxu a výpočet badness, zlom jako nejkratší cesta v grafu. |
20. 10. | Jak vzniká horizontální seznam: kerning, ligatury, mezislovní mezery. Převod nalámaného odstavce na vertikální seznam. |
27. 10. | Hledání míst k dělení slov. Jak vzniká vertikální seznam: meziřádkové mezery, topskip. Sestavení vboxu. Různé druhy registrů. |
3. 11. | Aritmetika s registry, použití boxových registrů, token listy. Stránkový zlom a output routiny. |
10. 11. |
Inserty a marky. Jak funguje \raggedbottom .
|
24. 11. | Input procesor, token procesor. |
1. 12. |
Expand procesor: expanze maker, \noexpand a \expandafter ,
podmínky, idiomy pro cykly.
|
8. 12. |
Detaily hlavního procesoru:
Smyčky pomocí \loop ...\repeat .
Výroba znaku s libovolnou kategorií pomocí \uppercase .
Konstrukce \every* , \after* a \futurelet .
Leaders.
Sazba tabulek pomocí \halign a \valign .
|
15. 12. |
\begingroup versus \bgroup . Whatsity: \special
a \write . Základy matematického módu.
|
22. 12. |
Fonty a jejich metriky. Program dvips a jeho speciality.
Sazba postscriptovými fonty.
|
5. 1. | Rozšíření TeXu: TeX-XeT, mlTeX, encTeX, ε-TeX, pdfTeX. |
12. 1. | Rozšíření TeXu: LuaTeX. Sazba OpenType fonty. Jak jsme sázeli letáček semináře. |
Domácí úkoly
Datum | Kód | Bodů | Zadání |
---|---|---|---|
6. 10. | ndsp | 1 | Popište, jaké položky vložit do horizontálního seznamu, aby vznikla neodstranitelná mezera. Tedy (potenciálně pružná) mezera, na níž je možné provést zlom, ale místo aby pak zmizela, objeví se na začátku následujícího řádku. |
13. 10. | dskip | 1 | Vymyslete, jak vytvořit horizontální discretionary mezeru: pokud v ní nedojde ke zlomu, má šírku A; dojde-li, na konci řádku zbude mezera šírky B a na začátku dalšího mezera šířky C. Všem třem rozměrům má jít specifikovat i roztažnost a smrštitelnost. |
20. 10. | slpc | 1 | Vysázejte tento text základním TeXovým písmem (csr10)
do sloupce šířky 4cm (do bloku, nikoliv na praporek). Snažte se najít nastavení parametrů lámacího algoritmu,
s nímž žádný řádek nevyjde výrazně špatný. Pošlete nám jak zdrojový text, tak
výsledné PDF. (Kromě parametrů zmíněných na semináři by se vám mohly hodit
registry \hfuzz , \lefthyphenmin a \righthyphenmin .)
|
27. 10. | ram | 1 | Vysázejte odstavec obklopený rámečkem. Odstavec budiž široký 10cm, rámeček 1pt.
Mezi levým/pravým okrajem ostavce a rámečkem vynechejte 2pt. Ve svislém směru
by rámeček měl ležet 10.5pt nad účařím prvního řádku a 5.5pt pod účařím posledního
řádku. (Může se ještě hodit vědět, že odstavcová sazba funguje i uvnitř vboxu a
zalamuje na šířku \hsize .)
|
3. 11. | box | 1 | Vysázejte box zadaný v registru \box0 tak, aby okolo něj byl
rámeček odpovídající rozměrům boxu a uvnitř linka na účaří. (Podobně, jako
jsou kreslené boxy v letáčku.)
|
10. 11. | okraj | 1 | Navrhněte sazbu poznámek v okraji stránky. Měly by se chovat podobně jako poznámky pod čarou (s odkazem z kokrétního místa v textu), ale místo pod text je sázejte do pravého okraje stránky shora dolů. Zrcadlo vhodným způsobem zužte, aby na poznámky zbylo dost místa. Nemusíte se starat o kompatibilitu se stávajícími plainovými inserty (můžete předefinovat celou output-routinu). |
24. 11. | token | 1 | Předpokládejme, že bylo provedeno \catcode`\*=10 a \def\a#1#2{} .
Co a proč je výsledkem expanze při vstupu \a*a*b*c ?
|
1. 12. | gcd | 1 | Definujte makro \gcd{ číslo}{ číslo} ,
které dostane dvě přirozená čísla (v běžném TeXovském zápisu) a vysází jejich největšího
společného dělitele.
|
8. 12. | rozvrh | 1 | Vysázejte svůj rozvrh hodin. (Nebo třeba rozvrh své oblíbené posluchárny.) |
15. 12. | bull | 1 | Napište makro na sazbu matematického binárního operátoru „býčí oko“. Ten vznikne
soutiskem \circ přes \odot . Operátor by měl fungovat
ve všech stylech.
|
12. 1. | font | 2 | Vyberte si nějaký český TrueType nebo Type 1 font (spoustu jich najdete třeba na ceskefonty.cz) a naučte pdfTeX, aby tímto fontem sázel. Dejte si pozor na tabulky ToUnicode, aby z výsledného PDF šlo správně extrahovat text. Tento a následující úkol lze odevzdávat kdykoliv. |
linum | 2 | Napište LuaTeXová makro, které vysází zadaný odstavec a očísluje jeho řádky. |
Literatura
- Donald Knuth: The TeXbook. (Addison-Wesley Professional, 1984, ISBN 0201134489)
- Donald Knuth: TeX: The Program. (Addison-Wesley Professional, 1986, ISBN 0201134373)
- Petr Olšák: TeXbook naruby. (2. vydání, Konvoj, 2001, ISBN 8073020076)