Seminář o TeXu (WIP)
[Edit]Úvod
- Text bere:
- texový zdroják (
.tex
)
- texový zdroják (
- Tex produkuje:
- log (
.log
) - tfm (
.tfm
) - dvi (
.dvi
)
- log (
- dvi je syrový formát, který je potřeba převést na konkrétní
- DVIPS: dvi -> post script
- DVIPFS: dvi -> pdf
- XDVI: zobrazí dvi
- dříve existoval initex (dnes už dohromady s texovou binárkou), který umí načítat šablony
- pdftex - verze texu, která rovnou produkuje
.pdf
soubory
Primitiva
- Všechny makra se skládají z jiných maker nebo primitiv.
- Primitiva - nejhlubší funkce texu
- plainTeX - sbírka základních maker
- Latex (pozor je potvora a předefinovává plaintex makra), Context, OPmac
- zůstává po zlomení řádku
- box, písmenka, ligantury, null
- discretionary break - rozdělení slov na konci řádků
- skládá se z
- prebreak - co má být před zalomeným místem
- postbreak - co má být po zalomeném místě
- nobreak - co tam má být, když to v tom místě není zlomené
- skládá se z
- whatsit - věc, která není vidět v textu, ale je důležité jejich umístění
- vertikální materiál
- Pokud se nachází za místem zlomu, tak zmizí
- lepidlo (
\glue
) - věc co má horizontální rozměr, roztažitelnost a stlačitelnost (používají se na leaders). Pružnost může být i nekonečná. - kern (
\kern
) - to stejné co glue, akorát nepruží - penalta - neviditelná a bezrozměrná věc. Ovlivňuje řádkový zlom tím, že dává pokuty za zlomy řádků. Používá se rozsah -10000 do 10000 s tím, že okraje intervalu se berou jako nekonečno.
- math on/off
- lepidlo (
Zalamování řádků
Kde se může lámat řádek
- před lepidlem, za podmínky, že před nímž je
nondiscardeble
a není uvnitř matematiky - před kernem, je-li za ním lepidlo a není uvnitř matematiky
- math off, je-li za ním lepidlo
- discretionary breaky
- penalta pokud je menší než 10000
Jak funguje zalamování řádků
badness
\leftship
\rightship
\pretolerance
-
\tolerance
\hyphenpenalty
- penalta za explicitní rozdělení (platím za běžná dělení slov)\exhyphenpenalty
- prebreak má prázdný
///////////////////////////////////////////////////////////////////////////////////////
\null
- prázdný\hbox
o rozměrech 0x0- baseline se česky řekne “účaří”
- část stránky, do které se opravdu sází se jmenuje “zrcadlo”
\hboxto100mm{...}
- roztáhni obsah hboxu na 100mm\hboxspread5mm{...}
- přičti k přirozené šířce 5mm\thinspace
- malá mezera, např mezi hodnotou a jednotkami (5\thinspace kg
)\relax
- nedělej nic, používá se na oddělení parametrů od textu
Jednotky
- pt - Tiskařský bod = 1/72.27 palce ~ 1/3 mm (V postcriptu 1/72 palce), reprezentuje prostorové rozlišení
- pb - big point = 1/72 palce
- cm - centimetr
- in - palec
- sp - scaled point (menší než vlnová délka viditelného světla)
- em, ex - relativní vůči velikosti aktuálního fontu (em = šířka velkého
M
, ex = výška maléhox
)
Rozměry pružných věcí
- nekonečno
\fil
\fill
\filll
- zapisuje se
10pt plus <...> minus <...> {}
- Vlastnosti
- základní rozměr - pokud nesedí, tak se roztahuje nebo smršťuje glue
- roztažitelnost -
- smrštitelnost -
Algoritmus na zarovnávání řádků
1. spočítáme rozměry a roztažnosti
2. deformujeme glue
3. určíme zbylé rozměry (výška řádku)
4. spočítat badness
\vrule
- věc co má výšku a šířku a (bez parametrů vysoka 0.4pt)\vrule width 0pt height 12pt depth 5pt
\strut
- podpěra\unhbox
- ?\raise 3pt \hbox {...}
\lower
Vertikální zarovnávání
\maxdepth
\boxmaxdepth
\vtop
\vcenter
Vznik horizontálního seznamu
- box-like
- písmenko (znak z fontu)
- ligatury (slitky)
- např: fi, ff, fl, ffi, ffl
-
= ,--
= ,---
=
\hbox
,\vbox
- akcenty
- linky
\vrule
- discretionary break
\discretionary {} {} {}
- nebo generuje algoritmus na dělení slov
- kerny
\kern 10pt
- automatické kerny (např: zvětšování mezer mezi kulatými znaky)
\/
- italická korekce (tex doplní kern podle informace naklonění fontu)
- glue
\hskip rozměr roztažnost
- explicitní\hfil
- glue s rozměrem 0 a roztažností nekonečno prvního řadu\hfill
- glue s rozměrem 0 a roztažností nekonečno druhého řadu\hss
- “horizontal stretch or shrink” - mezera co se umí libovolně zmáčknout nebo roztáhnout\quad
- mezera velká 1em\qquad
- ?
- penalty
\nobreak
- penalta 10000\break
- penalta -10000\allowbreak
- penalta 0
- vertikální materiál
\vjust {...}
- věc co se přidá za řádkem
Užitečná makra
\line{...}
=\hbox to \hsize
\leftline{x}
=\line{x\hss}
\rightline{x}
=\line{\hss x}
\centerline{x}
=\line{\hfill\hfill x \hfill}
- x se objeví ve 2/3 řádku\smash{...}
=\phantom{...}
= box o velikosti zadaného materiálu, ale je prázdný\hphantom
= nemá výšku\vphantom
= nemá šířku
Fonty
Fontdimen
- sklon
- standardní mezera
- standardní roztažnost
- standardní stlačitelnost
- em
- ex
- extra mezera
\sfcode <kódznaku> = přirozené číslo
\spacefactor
- defualtně = 1000
- znak:
- sf - sfcode
- ale pokud sf < 1000 < sfcode
- sf - 1000
- box/linka
- sf - 1000
- mezera
- velikost = fd2 + fd7 pokud fs 1000
- roztažnost =
- smrštitelnost =
Plainové sfcodes
\nonfrenchspacing
A-Z
: 999a-z
: 1000.!?
: 3000,
: 1250()
: 0:
: 2000-
;
: 1500 \spaceskip
= glue
\discretionary
\-
explicitní discretioanry - vkládá\hyphenchar
- znak ve fontu na dělení slov
\hyphenation{nej-vět-ší}
- patterns
.ne1
Vertikální seznam
\prevdepth
- odsazení ze shora\baselineskip plus minus
- pružnost mezi řádky\lineskip plus minus
--
lineskuplimit <dimen>
- - box (rule)
Staré poznámky
Vnitřní registry
Dělí se na zabudované a uživatelské. Typ má registry 0 až 255.
Typy:
\count
- 31-bitové číslo se znaménkem\dimen
- sign + 30 bitů ve sp= pt [14bitů]+[16bitů] 16383.9999pt\skip
- roztažnost 13+16 bitů\muskup
-\task
-\box
-
Alokace registrů
- Výjimky
\count0...9
- číslo stránky\count0
- číslo stránky
\box255
- přenos obsahu strany do output rutiny0...9
- pro lokální výpočty
\countdef\cs=
N\countdef\pageno=0
- count def existuje pro všechny typy\newcount\pocitadlo
= interně\countdef\pocitadlo=...
\newinsert
- ?
Boxové registry
Mohu obsahovat:
- nic
- hbox
- vbox
Příklady:
\setbox0=\hbox{...}
= nastaví hodnotu do boxu\box0
= přiřadí hodnotu jiného registru a vyprázdní původní registr (destruktivní, ale efektivní)\copy0
- nevyprázdní\unhbox0
-\wd0
- šířka boxu\ht0
- výška boxu\dp0
- hloubka boxu\phantom{...}
- prázdný box s rozměry jeho obsahu\hphantom
,\vphantom
- mají jeden rozměr v kolmém směru jsou nulové\shadowbox0
- ?\newbox\cs
\chardef
Použití:
\count74
[=
]32
- dosazení číselné hodnoty\parskip
[=
]10pt
- dosazení hodnoty s jednotkami\leftskip=0.1\hsize
- dosazení násobku jiného registru\showthe\count5
- vypsat obsah registru do konzole\count\count5
- obsah registru číslo hodnoty v registru 5
Aritmetika
\advanced
registrby
hodnota\multiply
registrby
hodnota (Jen číslem)\devide
registrby
hodnota (Jen číslem)
Stránkový zlom
Vertikální seznam:
Non-discardeble | Discardeble |
box | glue |
linka | kern |
odkaz na insert | penalta |
mark | |
unhactsit (\special , \write ) |
Místa zlomu
- glue, před níž je non-discardeble
- kern za glue
- penalta < 10000
Cost
- - cost
- - badnes
- - penalta
- - dodatečná penalta
1.
2.
3.
4.
Tabulky
\halign[tosize]{ # & # \cr