summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/cstex/opmac-d.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/doc/cstex/opmac-d.tex')
-rw-r--r--Master/texmf-dist/doc/cstex/opmac-d.tex639
1 files changed, 518 insertions, 121 deletions
diff --git a/Master/texmf-dist/doc/cstex/opmac-d.tex b/Master/texmf-dist/doc/cstex/opmac-d.tex
index 95d241e0f0a..bb8122b8786 100644
--- a/Master/texmf-dist/doc/cstex/opmac-d.tex
+++ b/Master/texmf-dist/doc/cstex/opmac-d.tex
@@ -7,7 +7,7 @@
% This file is encoded in ISO-8859-2 because
% UTF-8 encTeX has a conflict with DocByTeX
-\def\projectversion{Dec. 2012}
+\def\projectversion{Aug. 2013}
\def\headtitle{OPmac}
\widowpenalty=10000
@@ -198,6 +198,15 @@ znak kategorie 12. Na tento znak se v našem kódu překlopí otazník, Takže
\inext {percent}{}{+-}
+Podobně je naprogramováno makro \db bslash, které vytiskne obyčejné zpětné
+lomítko:
+
+\inext {bslash}{}{+-}
+
+Obě makra chceme při "\write" do souboru nechat v původním stavu:
+
+\inext {addprotect}{}{+-}
+
Makro plain\TeX{}u "\,"
funguje jen v matematické sazbě. Uživatel bude chtít makro často
použít například mezi číslem a jednotkou v textovém módu: "5\,mm", takže
@@ -241,6 +250,9 @@ uživatelské dokumentaci.
\dgn \nb secchook
\dgn \nb cnvhook
\dgn \nb pghook
+\dgn \nb toclinehook
+\dgn \nb mnotehook
+\dgn \nb captionhook
\inext {newdimen}{\count=7 \empty}{+-}
@@ -292,14 +304,17 @@ kódu ze souboru "csfontsm.tex" z balíčku \csplain{}.
Implicitně jsou zavedeny \CS{}fonty, takže k nim přidáme AMS fonty z
"ams-math.tex", které vizuálně odpovídají. Později si může uživatel zavést
-jiné makro (např. "tx-math.tex") a zavede si třeba i jiné textové fonty. To nezmění
-vlastnosti maker v OPmac, pokud nové soubory maker správně předefinují
+jiné makro (např. "tx-math.tex") a zavede si třeba i jiné textové fonty.
+To nezmění vlastnosti maker v OPmac, pokud nové soubory maker správně
+předefinují
makra "\setmathsizes[<text>/<script>/<scriptscript>]", "\normalmath" a
-"\boldmath".
+"\boldmath". Soubor "ams-math.tex" načteme jen tehdy, když není definováno
+"\normalmath". Je totiž možné, že uživatel načetl matematické makro ještě
+před zavoláním "\input opmac".
-\inext {ams-math}{\empty}{+-}
+\inext {ams-math}{}{+-}
-Po načtení souboru ams-math disponujeme makry \db regtfm na registraci
+Po načtení souboru "ams-math.tex" disponujeme makry \db regtfm na registraci
různých metrik pro různé designované velikosti fontů a \db whichtfm, které
expanduje na svůj parametr nebo na metriku, která je registrována pro
velikost \db dgsize. Registrace metrik \CS{}fontů je rovněž provedena
@@ -310,9 +325,11 @@ velikost fontu "<fontselector>" podle obsahu makra "\sizespec" (viz soubor
resizefontskipat na odstranění \uv{sizespec} z názvu metriky. Toto pomocné
makro je v OPmac předefinováno s využitím "\whichtfm", takže když před
voláním makra "\resizefont" připravíme správnou "\dgsize", \TeX{} použije
-metriku designovanou na požadovanou velikost:
+metriku designovanou na požadovanou velikost. Nebyl-li načten
+"ams-math.tex", není "\whichtfm" definováno a v takovém případě
+neprovedeme nic.
-\inext {resizefontskip}{\empty}{+-}
+\inext {whichtfm}{\empty}{+-}
Makra "\typosize", "\fontsizex", "\textfontsize",
"\setbaselineskip" požadují zápis parametru bez jednotky.
@@ -395,9 +412,11 @@ drsným "\space". To separuje číselný parametr dostatečně.
\inext {magstep}{\empty}{+-}
Makro \db em přepíná kontextově do odpovídající varianty a ve spolupráci s
-makrem "\additcorr" přidává italickou korekci. Makro \db additcorr
+makry "\additcorr" a "\afteritcorr" přidává italickou korekci. Makro \db additcorr
si pomocí "\lastskip" zapamatuje poslední mezeru, pak ji odstraní, vloží
italickou korekci a nakonec vrátí tu odstraněnou mezeru.
+Makro \db afteritcorr se probudí k činnosti na konci skupiny a přidá
+italickou korekci, pokud nenásleduje tečka nebo čárka.
\inext {def\nb em}{\empty}{+-}
@@ -557,6 +576,113 @@ potřebujeme asynchronní "\write".
\subsec Kapitoly, sekce, podsekce
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+Od verze OPmac Jul. 2013 jsou zcela přepracována pomocná makra pro návrh
+typografie kapitol, sekcí a podsekcí. Nyní má autor typografického návrhu
+lépe pod vlastní kontrolou, co se vkládá do vertikálního seznamu, což je pro
+programování možných stránkových zlomů a nezlomů důležité.
+
+Autor typografie dokumentu by měl definovat pro
+tisk kapitoly, sekce a podsekce makra "\printchap", "\printsec" a
+"\printsecc". Makra mají jeden parametr "#1", který obsahuje text titulku.
+Typická struktura každého takového makra je:
+
+\bgroup\def\begtthook{\langleactive}
+\begtt
+\par
+<penalta obvykle záporná, neboli bonus, pro zlomení stránky před nadpisem>
+<mezera před nadpisem>
+{<nastavení fontu> \noindent \dotocnum{<značka>}#1\nbpar}
+<případné vložení značky (insertmark) pro plovoucí záhlaví>
+\nobreak <mezera pod napisem>
+\endtt
+\par\egroup
+
+Pro realizaci maker "\printchap", "\printsec" a "\printsecc" může autor
+návrhu využít následujících interních maker OPmac:
+
+\begitems
+\item* "\dotocnum{<značka>}" -- umístí cíle odkazů, zařídí obsah, vytiskne "<značku>"
+\item* "\thetocnum" -- "<značka>", např. 3.2.4 pro secc, 3.2 pro sec a 3 pro chap
+\item* "\insertmark{<text>}" -- vloží "\mark" s expandovaným "\thetocnum"
+ a neexpandovaným "<textem>"
+\item* "\nbpar" -- jako "\par", ale mezi řádky je nezlomitelná mezera
+\item* "\remskip<velikost>" -- mezera (pod nadpisem) odstranitelná
+ následujícím "\norempenalty"
+\item* "\norempenalty<číslo>" -- vloží penaltu "<číslo>" jen pokud nepředchází
+ "\remskip"
+\enditems
+
+Aby fungoval obsah a cíle odkazů, je {\it nutné\/} použít "\dotocnum".
+Parametr makra "\dotocnum" nemusí obsahovat jen "\thetocnum", ale také
+tečky a mezery kolem "<značky>". Předchází-li "\nonum", makro "\dotocnum"
+nevytiskne celý svůj druhý prametr, tedy včetně případného \uv{okolí}
+značky. Návrh tisku sekce může vypadat takto:
+
+\begtt
+\def\printsec#1{\par
+ \norempenalty-500
+ \vskip 12pt plus 2pt
+ {\secfont \noindent \dotocnum{\thetocnum\quad}#1\nbpar}%
+ \placemark{#1}%
+ \nobreak \remskip 6pt plus 1pt
+}
+\endtt
+V tomto návrhu bude nad nadpisem penalta $-500$ (bonus za zlomení nad
+nadpisem), dále je "12pt" mezera, pak je titulek "#1" vytištěný fontem
+"\secfont". Před tímto titulkem je číselná značka oddělená od titulku
+mezerou "\quad". Titulek může být na více
+řádcích. Protože je ukončen "\nbpar", nebude povolen mezi jednotlivými řádky
+titulku řádkový zlom.
+
+Vysvětlíme si nyní na příkladu činnost a smysl "\remskip" a "\norempenalty".
+Předpokládejme pro ilustraci definici "\printsec", jako je uvedená výše.
+Pokud je dále třeba definice podsedkce "\printsecc" zahájena příkazy
+
+\begtt
+\par \norempenalty-200 \vskip 8pt plus2pt
+\endtt
+%
+pak se mohou dít tyto věci:
+
+\begitems
+\item* Následuje-li podsekce těsně za sekcí, pak se vymaže spodní mezera od sekce
+ "6pt plus1pt" a místo ní se vloží mezera "8pt plus2pt". Mezery se tedy
+ nesčítají. Navíc v tomto případě se nevloží penalta $-200$, takže mezi
+ sekcí a podeskcí nedojde nikdy ke stránkovému zlomu.
+\item* Následuje-li za sekcí obyčejný text, pak je pod sekcí a nad textem mezera
+ "6pt plus 1pt", která je nezlomitelná.
+\item* Předchází-li před podseskcí obyčejný text, pak se vloží před nadpisem
+ podsekce "\penalty-200" následovaná "\vskip 8pt plus2pt". Tato mezera je
+ ochotně zlomitelná (bonus $-200$), takže se může nadpis podsekce objevit na
+ následující straně.
+\enditems
+
+Je možné mezeru pod nadpisem složit ze dvou druhů:
+
+\begtt
+\def\printsec{%
+ ...
+ \nobreak \vskip 2pt \remskip 4pt plus1pt}
+\endtt
+
+V tomto příkladě se odstraní při následující podsekci z celkové mezery
+"6pt plus1pt" jen její část "4pt plus1pt".
+
+Defaultní hodnoty maker \db printchap, \db printsec a \db printsecc vypadají
+v OPmac takto:
+
+\inext{printchap}{\count=3 ^^B\cbrace}{++}
+
+Příkazem "\firstnoindent" dávají tato makra najevo,
+že následující odstavec nebude mít odstavcovou zarážku.
+
+Makro pro titul \db tit počítá s tím, že bude titul na více řádcích. Sází ho
+tedy jako odstavec s~pružnými "\leftskip" a "\rightskip". Příkaz "\unskip"
+těsně za parametrem "#1" odstraní mezeru z konce řádku, která tam obvykle
+je. Teprve poté je nadpis řádně centrován.
+
+\inext{tit}{^^B\cbrace}{++}
+
Fonty pro titul, kapitoly a sekce \db titfont,
\db chapfont, \db secfont a \db seccfont
jsou definovány jako odpovídající zvětšení a nastavení tučného duktu.
@@ -566,34 +692,73 @@ kurzívu.
\inext{titfont}{\empty}{+-}
-Pro číslování kapitol, sekcí a podsekcí potřebujeme čítače:
+V další části této sekce je implemantace maker "\chap", "\sec" a "\secc".
+Pro číslování kapitol, sekcí a podsekcí potřebujeme čítače a další registry:
-\dgn \nb chapnum \dgn \nb secnum \dgn \nb seccnum
+\dgn \nb chapnum \dgn \nb secnum \dgn \nb seccnum \dgn \nb nonumnum
-\inext{newcount}{\empty}{+-}
+\inext{newcount}{newcount}{++}
-Makro pro titul \db tit počítá s tím, že bude titul na více řádcích. Sází ho
-tedy jako odstavec s~pružnými "\leftskip" a "\rightskip". Příkaz "\unskip"
-těsně za parametrem "#1" odstraní mezeru z konce řádku, která tam obvykle
-je. Teprve poté je nadpis řádně centrován.
+Makro \db notoc je možno použít jako prefix před "\chap", "\sec", "\secc" s
+tím, že se kapitola, sekce, podsekce nedostane do obsahu. Makro
+\db nonum je možnot použít jako prefix před stejnými makry s tím, že
+kapitola, sekce, podsekce nebude mít číslo. I nečíslovaní kapitola se může
+dostat do obsahu. Je-li obsah klikací, pořebuje mít svoje referenšní číslo
+pro vytvoření linku. K tomu slouží registr "\nonumnum".
-\inext{tit}{^^B\cbrace}{++}
+\inext{notoc}{\empty}{+-}
Makra \db chap, \db sec a \db secc nastaví odpovídající čítače, dále vytvoří
číslování pro tisk (sestávající z více čísel) v makrech \db thechapnum,
-\db thesecnum a \db theseccnum a zavolají odpovídající makro "\printchap",
+\db thesecnum a \db theseccnum. Aktuální čítač má vždy název \db thetocnum.
+S touto hodnotou (nazávisle na tom, zde jde o kapitlu, sekci nebo podsekci,
+bude pracovat "\dotocnum". Dále makra připraví obsah makra \db dotocnumafter,
+což je proměnlivá část makra "\dotocnum".
+Konečně uvedená makra "\chap", "\sec" a "\secc"
+zavolají odpovídající makro "\printchap",
"\printsec" a "\printsecc".
-Poté zavolá "\wlabel" na
-propojení případného labelu s číslem kapitoly/sekce/podsekce a
-pomocí \db wcontents uloží do "\reffile" potřebná data pro obsah.\par\vskip-1pt
-\inext{chap}{\empty}{+-}
+\inext{chap}{\count=3 ^^B\cbrace}{++}
+
+V proměnlivé části makra "\dotocnum", tedy v "\dotocnumafter", se řeší
+uložení informací o kapitole, sekci nebo podsekci do obsahu. K tomu je
+využito makro \db wcontents, které provede
+\bgroup\def\begtthook{\langleactive}
+\begtt
+\write\reffile{\string#1{<expandovaný thetocnum>}{#2}{\the\pageno}}
+\endtt
+\par\egroup
+
+\inext{wcontents}{^^B\cbrace}{++}
+
+Makro \db dotocnum "{<text>}" umístí cíl odkazu do místa, které je od
+účaří vzdáleno o "\destheight". Toto místo se kryje s horní hranou okna
+prohlížeče po kliknutí na odkaz. Dále toto makro vygeneruje data pro obsah
+pomocí předpřipraveného "\dotocnumafter".
+Pokud předchází "\notoc", makro nezapíše nic do obsahu. Pokud předchází
+"\nonum", makro nevytiskne svůj parametr, takže je titulek bez čísla.
+Dále v~takovém případě je pro hyperlinkové odkazy číslo "\nonumnum" uvozeno
+vykřičníkem, což navazuje v~obsahu na makro "\toclinkA".
+
+\inext{dotocnum}{^^B\cbrace}{++}
+
+V makrech "\chap", "\sec", "\secc" je po zavolání "\printchap", "\printsec"
+nebo "\printsecc" voláno \db resetnonunotoc, které vrátí hodnotu přepínačů
+"\ifnonum" a "\ifnotoc" na imlicitní hodnoty. Tím je zaručeno, že makra
+"\nonum" a "\notoc" ovlivní jen následující kapitolu, sekci nebo podsekci
+a fungují jako prefixy. Makro navíc kvůli přechodu na verzi OPmac Jul. 2013
+kontroluje, zda makra "\printchap", "\printsec" a "\printsecc" skutečně
+použila makro "\dotocnum". Pokud ne, náležitě na to upozorní.
+
+\inext{resetnonumnotoc}{^^B\cbrace}{++}
Text titulu sekce a její číslo jsou vloženy do "\mark", takže tyto údaje
můžete použít v plovoucím záhlaví. Tato vlastnost není dokumentována v
-uživatelské části, protože je poněkud techničtějšího charakteru. Makro \db
-insertmark "\thesecnum{<text>}" vloží do "\mark" data ve formátu
-"{<secnum>} {<text>}", takže je možno je použít přímo expanzí např.
+uživatelské části, protože je poněkud techničtějšího charakteru.
+
+Makro \db insertmark "{<text>}" vloží do "\mark" data ve formátu
+"{<thetocnum>} {<text>}",
+takže je možno je použít přímo expanzí např.
"\firstmark", nebo je oddělit a zpracovat zvlášť. Parametru "<text>" je
zabráněna expanze pomocí protažení tohoto parametru přes "\toks", viz TBN
str. 54 dole a strany 55--57. Příkaz "\mark" se totiž snaží o expanzi.
@@ -616,11 +781,19 @@ třeba v okamžiku, kdy je zapnutá jiná velikost písma.
Pokud chcete kombinovat na levých a pravých stránkách plovoucí záhlaví z
kapitol a sekcí, inspirujte se v TBN na stranách 259 a 260.
-Makra \db printchap, \db printsec a \db printsecc vytisknou číslo a titul
-kapitoly, sekce resp. podsekce. Příkazem "\firstnoindent" dávají najevo,
-že následující odstavec nebude mít odstavcovou zarážku.
+Makro \db remskip "<velikost>" je implimentováno jako "\vskip<velikost>"
+následované smluvenou nezlomitelnou penaltou 11333. Makro \db norempenalty
+pak podle této hodnoty poslední penalty v seznamu větví svou činnost.
+V registru \db remskipamount je uložena naposledy vložená mezera z "\remskip".
+
+\inext{remskip}{\empty}{+-}
-\inext {printchap}{\count=3 ^^B\cbrace}{++}
+Makro \db othe pracuje stejně jako primitiv "\the" s tím rozdílem, že
+nezobrazí nic (a sejme následující tečku), pokud je hodnota registru nulová.
+Tímto způsobem lze tisnout dokument jen se sekcemi bez kapitol. Číslo
+kapitoly se pak nezobrazuje jako "0.", protože se nezobrazuje vůbec.
+
+\inext{othe}{\empty}{+-}
Makro \db afternoindent potlačí odstavcovou zarážku pomocí přechodného
naplnění "\everypar" kódem, který odstraní box vzniklý z "\indent" a
@@ -639,6 +812,9 @@ Tomuto makru později v "\output" rutině změníme význam na mezeru.
\inext{nbpar}{\empty}{+-}
+
+
+
\subsec Popisky, rovnice
%%%%%%%%%%%%%%%%%%%%%%%%
@@ -654,13 +830,22 @@ Výchozí hodnoty maker, které se vypisují v místě generovaného čísla jsou:
Makro \db caption "/<typ> " zvedne čítač "\<typ>num" o jedničku,
dále nastaví pružné mezery s odsazením "\iindent" a s centrováním posledního
řádku (viz TBN str.~234), propojí pomocí "\wlabel" číslo s případným
-lejblíkem, vytiskne slovo Tabulka/Obrázek v závislosti na jazyku makrem
-"\mtext", vytiskne číslo "\the<typ>num" a zpracuje odstavec s nastavenými
-"\leftskip", "\rightskip". Předefinuje "\par" tak, že první výskyt prázdného
-řádku ukončí skupinu a tím se všechna nastavení vrátí do původního stavu.
+lejblíkem a vytiskne zahájení popisku makrem "\printcaption".
+Makro "\caption" tím končí svou činnost a dále je zpracován
+odstavec s~nastavenými
+"\leftskip", "\rightskip". Sekvence "\par" je předefinována tak, že první výskyt
+"\par" (alias prázdného řádku) ukončí skupinu a tím se všechna nastavení
+vrátí do původního stavu.
\inext{caption}{^^B\cbrace}{++}
+Makro \db printcaption "{<slovo>}{<číslo>}" vytiskne zahájení popisku
+tabulky a obrázku. Za číslem implicitně není žádná interpunkce, jen
+"\enspace". Je možné předefinovat "\printcaption" s interpunkcí třeba takto:
+"\def\printcaption#1#2{{\bf#1 #2:}\space}"
+
+\inext{printcaption}{\empty}{+-}
+
Makro \db eqmark zvedne "\dnum" o jedničku.
V display módu pak použije primitiv "\eqno", za kterým
následuje "\thednum". V interním módu (v boxu) vytiskne jen "\thetnum".
@@ -743,6 +928,13 @@ upozorní o tom adekvátním způsobem na terminál.
\inext{maketoc}{\empty}{+-}
+Makro \db toclinkA je citlivé na vykřičník jako první znak argumentu. Pokud
+tam je, vytiskne jen mezeru velikosti 0.8em, jinak vytiskne argument.
+Vykřičník do argumentu dáme v případě kapitol a sekcí prefixovaných
+jako "\nonum". V obsahu pak nechceme mít žádné číslo, jen příslušnou mezeru.
+
+\inext{toclinkA}{\empty}{+-}
+
\subsec Sestavení rejstříku
%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -917,10 +1109,12 @@ Makro \uv{print index item} \db printii "<heslo>&" vytiskne jeden údaj do
rejstříku. Makro projde prostřednictvím \db printiiA jednotlivá podslova
oddělená lomítkem a přepíše je do rejstříku odděleny mezerou. Přitom
kontroluje, zda se podslova rovnají odpovídajícím podslovům z předchozího
-hesla, které je uloženo v \db previi. Pokud ano, místo podslova vloží \db
-iiemdash, což je pomlka. Na konci činnosti se spustí makro \db printiiB,
-které nastaví "\previi" na \db currii (nové slovo se pro další zpracování stává
-předchozím) a vytiskne seznam stránek. Makrem \db everyii
+hesla, které je uloženo v \db previi. Toto porovnání je protaženo krz
+"\meaning", protože nechceme porovnávat kategorie, ale jen stringy.
+Pokud se stringy rovnají, místo podslova se vloží \db
+iiemdash, což je pomlka. Na konci činnosti se
+nastaví "\previi" na \db currii (nové slovo se pro další zpracování stává
+předchozím) a vytiskne se seznam stránek. Makrem \db everyii
(implicitně je prázdné) dovolíme uživateli vstoupit do procesu tisku hesla.
Může například psát "\def\everyii{\indent}", pokud chce.
@@ -1213,16 +1407,9 @@ Pak pokračuje ve čtení sazby.
\inext{flushcolumns}{\empty}{+-}
-
-\subsec Barvy
-%%%%%%%%%%%%%
-
-Deklarujeme \db ifpgcolor, což budeme potřebovat v makru "\locpgcolor".
-Dále deklarujeme \db lastpage. Tento registr budeme průběžně zvětšovat při
-čtení REF souboru v makru "\Xpage" a na konci čtení REF souboru tedy bude
-obsahovat číslo poslední strany.
-
-\inext{ifpgcolor}{\empty}{+-}
+
+\subsec [barvy] Barvy
+%%%%%%%%%%%%%%%%%%%%%
Od verze pdf\TeX{}u 1.40 nabízí tento program primitivy
"\pdfcolorstackinit" a "\pdfcolorstack". Makra v OPmac tyto
@@ -1233,12 +1420,19 @@ primitivy nepoužívají, protože:
pdf\TeX{}u vůbec všimli, že existuje problém s přecházením barev na nové
stránky.
\item * Primitivy "\pdfcolorstackinit" a "\pdfcolorstack" stále nejsou dokumentované.
-\item * Barevné řešení v "pdftex.def" pro La\TeX{} nepovažuji za koncepčně
- správné, protože se snaží pomocí "\aftergroup" vytvořit zdání, že
- barvy fungují lokálně uvnitř skupiny. To je zbytečná komplikace
- navíc, která jde proti přirozenosti nastavování barev v PDF souboru.
\enditems
+\noactive {\nb writecolorfalse} \noactive {\nb writecolortrue}
+
+Deklarujeme \db ifwritecolor, což nastaveno na true způsobí, že makro
+"\writecolor" bude zapisovat do REF souboru informaci o zrovna nastavené barvě.
+Tuto informaci pak zužitkujeme ve výstupní rutině při nastavování barev,
+které přetékají ze strany na stranu.
+Dále deklarujeme \db lastpage. Tento registr budeme
+potřebovat pro identifikaci jednotlivých stran při čtení REF souboru.
+
+\inext{ifwritecolor}{\empty}{+-}
+
Barvy se v PDF přepínají pomocí PDF speciálů "<num> <num> <num> <num> k"
(pro text a plochy) a "<num> <num> <num> <num> K" pro linky. Pro oba typy
barev připravíme barevná makra \db Blue, \db Red, \db Brown, \db Green, \db
@@ -1247,49 +1441,170 @@ Uživatel si může definovat další.
\inext{Blue}{\empty}{+-}
+Makro \db setcmykcolor nastaví barvu textu (při "\pdfK" obsahující \uv{k})
+nebo barvu linek (při "\pdfK" obsahující
+\uv{K}). Dále si toto makro globálně uloží nastavenou barvu do
+\db currcolork, resp. \db currcolorK. Také podle předchozí "\currcolork",
+resp. "\currcolorK" testuje, zda je potřeba aktuální barvu
+změnit. Pokud ne, tak "\special" pro nastavení barvy nevloží.
+
+\inext{setcmykcolor}{^^B\cbrace}{++}
+
Problém barev v PDF je, že od výskytu speciálu pro barvu jsou změněné barvy
až po jiný výskyt takového speciálu nebo po konec strany. Na každé nové
straně začíná sazba v barvě černé. Nám ovšem někdy může obarvený text přetéci
-na další stranu. Pak ale musíme v "\output" rutině (v makru "\prepage")
+na další stranu. Pak ale musíme v "\output" rutině
nastavit barvu, která přetekla. Ovšem jak poznáme, že něco přeteklo do další
-strany? Jedině pomocí REF souboru a asynchronního "\write". Proto makro \db
-setcmykcolor nevkládá do PDF jen požadovaný speciál, ale taky ukládá o sobě
-informaci do REF souboru. Jakmile se při čtení REF souboru objeví "\Xpage",
-zkontrolujeme, zda naposledy nastavená barva byla černá. Pokud ne, dáme
-pokyn makru "\prepage" prostřednictvím makra "\pg:<číslo strany>", aby
-aktivovalo hned po "\headline" barvu naposledy nastavenou. To je tedy
-základní idea, nyní implementace:
+strany? Jedině pomocí asynchronního "\write". Proto makro
+"\setcmykcolor" nevkládá do PDF jen požadovaný speciál, ale taky ukládá
+pomocí \db writecolor "<k nebo K>" informaci do REF souboru ve formátu
+"\Xpdfcolork{<CMYK barvy>}" nebo "\XpdfcolorK{<CMYK barvy>}".
-\inext{ifpdftex}{\count=2 \empty}{+-}
+\inext{writecolor}{^^B\cbrace}{++}
Makro \db pdfK má implicitně hodnotu "k" (barva pro texty a plochy) a
-přechodně při použití \db linecolor má hodnotu "K". Právě nastavenou barvu
-pak makro "\setcmykcolor" uloží do REF souboru.
-Jen tehdy, když je explicitně
-známo, že barva nepřeteče do další strany, je možné použít před použitím
-přepínače barvy prefix \db locpgcolor, který potlačí v takovém případě tisk
-informací do REF souboru. Následně budou potlačeny zápisy informací do REF souboru
-všech barevných přepínačů až po "\Black" včetně. Další barevné přepínače (po
-"\Black") se chovají už normálně.
-Toto opatření je zde jen proto, aby byl REF soubor
-poněkud menší a přehlednější i v případě, kdy navrhujeme bohatě barevný dokument.
-
-Makra \db Xpdfcolork a \db XpdfcolorK udržují při čtení REF souboru
-informaci o naposledy vložené barvě v makrech \db pdflastcolork a
-\db pdflastcolorK (název koresponduje typu barvy).
-
-\inext{Xpdfcolork}{\empty}{+-}
-
-Output rutina vkládá na každé stránce do REF souboru
-\db Xpage "{<číslo strany>}".
-Toto makro při čtení REF souboru kontroluje, zda byla naposledy použita
-na předcházející straně barva černá. Pokud ne, přidá do makra
-"\pg:<číslo strany>" pokyn pro nastavení barvy ve tvaru
-\db setpgcolor "<k nebo K>{<čísla barvy>}".
-Toto makro se spustí v output rutině na straně "<číslo strany>"
-za "\headline", ale před sestavením boxu s textem.
-
-\inext{Xpage}{\empty}{+-}
+přechodně při použití \db linecolor "<přepínač barvy>" má hodnotu "K".
+
+\inext{pdfK}{\empty}{+-}
+
+Výchozí hodnoty maker "\currcolork" a "\currcolorK" jsou rovny barvě černé,
+neboli makru \db pdfblackcolor.
+
+\inext{pdfblackcolor}{\empty}{+-}
+
+Následuje výklad makra \db localcolor. Uvědomíme si, co od něj
+vlastně očekáváme. Ukázka první:
+
+\begtt
+\Blue základní text je modrý.
+{\localcolor \Green Zelený, {\localcolor \Red červený,} tady zpátky zelený,
+ \Grey Gandalf šedý} a tady zpátky základní modrý text.
+\endtt
+
+Ukázka druhá:
+
+\begtt
+\Blue základní text je modrý.
+{\localcolor \Green \linecolor\Red Tady je zelený text a červené linky.}
+Zde je zpátky text modrý a linky černé.
+\endtt
+
+Z ukázky první plyne, že "\localcolor" si musí uložit informaci o právě
+nastavené barvě do zásobníku, ze kterého ji na konci skupiny vyzvedneme
+makrem "\restorecolor". Toto makro pošleme na konec skupiny příkazem
+"\aftergroup". Z ukázky druhé plyne, že do zásobníku musíme uložit nejen
+informaci o barvě textu (k) ale též informaci o barvě linek (K) a makro
+"\restorecolor" musí zrestaurovat oba typy barev.
+
+Pro zásobník je rezervováno makro \db savedcolors, do kterého jsou údaje
+vkládány vlevo a zleva jsou též vyzvedávány. Jeden údaj je
+ve tvaru "<vzkaz>{<barva k>}{<barva K>}". Výchozí hodnota zásobníku je
+prázdná.
+
+\inext{savedcolors}{\empty}{+-}
+
+Často se stává, že barvy uvnitř skupin jsou současně barvami v boxech a pak
+máme jistotu, že barva nepřeteče to další strany. Je tedy zbytečné ukládat
+informaci o přechodu barev do REF souboru. Takže makro "\localcolor"
+nastavuje lokálně uvnitř dané skupiny "\writecolorfalse". Pokud uživatel
+pracuje se skupinou, která má tendenci utéci na další stranu, použije místo
+"\localcolor" makro \db longlocalcolor. Makra "\localcolor" a
+"\longlocalcolor" tedy vypadají takto:
+
+\inext{localcolor}{\empty}{+-}
+
+Vidíme, že "<vzkaz>=1" v zásobníku "\savedcolors" znamená, že je třeba změnu
+barvy provedenou na konci skupiny zapsat do REF souboru.
+
+Makro \db restorecolor usazené za koncem skupiny pomocí "\aftergroup" si
+vyzvedne potřebné tři údaje ze zásobníku. K tomu definuje makro "\tmp",
+které to provede. Dále do "\tmpa" vloží "<barvu k>" a do "\tmpb" vloží
+"<barvu K>" a testem proti "\currcolork", resp. "\currcolorK" zjistí, zda je
+vůbec potřeba barvu měnit. Pokud ne, nedělá nic. Jinak zapíše potřebný
+"\special" a přenastaví makro "\currcolork", resp. "\currcolorK".
+Konečně, při "<vzkaz>=1", zapíše nově nastavenou barvu do REF souboru.
+Celou práci vykoná uvnitř skupiny, takže lokální změny se vracejí po
+ukončení práce makra k původním hodnotám.
+
+\inext{restorecolor}{\empty}{+-}
+
+Přepínače barev stejně jako makra "\localcolor" nebo "\longlocalcolor" se
+mohou vyskytnout v~nadpise. Takže je potřeba je zabezpečit proti rozsypání.
+
+\inext{addprotect}{\empty}{+-}
+
+Aby mohla output rutina správně obsloužit barvy, je třeba učinit několik
+opatření, která jsou zhruba načrtnuta v následujícím schémátku.
+
+\begtt
+\output = {
+\begoutput % Záloha aktuálních barev, nastavení \currcolorkK=černá
+...
+\makeheadline % Uživatel může měnit barvy, ale musí se vrátit k černé.
+\pagecontents = {
+ ...\topins % Výchozí barva je černá, k černé je třeba se vrátit.
+ \preboxcclv % Nastavení barvy, která přetekla na tuto stranu.
+ \unvbox256 % Sazba pro tuto stranu.
+ \postboxcclv % Návrat k barvě černé.
+ ...\footins % Poznámky pod čarou.
+}
+\makefootline % Výchozí barva je černá, uživatel může nastavit cokoli.
+...
+\endoutput % návrat \currcolorkK k původním zálohovaným barvám
+}
+\endtt
+
+Při nastavování barev v "\headline" a "\footline" je možné použít
+"\localcolor", protože zásobník se tím při práci output rutiny posune a také
+znovu splaskne na původní hodnotu a neovlivní tedy stav v běžné sazbě (mimo
+output rutinu). Ovšem běžná sazba má nastaveny nějak hodnoty "\currcolork" a
+"\currcolorK" a není žádoucí, aby byly tyto hodnoty output rutinou měněny.
+Proto jsou v makru \db begoutput tyto hodnoty zálohovány a v makru
+\db endoutput se k nim output rutina vrátí. Uvnitř output rutiny potlačíme
+všem přepínačům barev jejich tendenci ukládat něco do REF souboru, takže je
+v makru "\begoutput" použito "\writecolorfalse".
+
+\inext{begoutput}{\empty}{+-}
+
+Poněkud složitější je makro "\preboxcclv", které má nastavit barvu, která
+přetekla z předchozí strany. Abychom se k funkci tohoto makra dobrali,
+vraťme se k makrům
+\db Xpdfcolork "{<CMYK barva>}" a \db XpdfcolorK "{<CMYK barva>}",
+která jsou uložena v REF souboru pro každé (potenciálně dlouhé) přepnutí barvy.
+Povšimněte si, že output rutina ukládá do REF souboru pro každou stranu
+makrem "\begoutput" údaj "\Xpage{<číslo strany>}". Tyto údaje
+tvoří oddělovače mezi jednotlivými stránkami.
+
+Příkazy "\Xpdfcolork" a "\XpdfcolorK" ukládají při čtení REF souboru do
+\db pdflastcolork, resp. \db pdflastcolorK, naposledy použitou barvu. Takže na
+příští straně, až narazíme při čtení REF souboru na další "\Xpage", budeme
+vědět, zda je tato naposledy použitá barva černá nebo jiná. Pokud jiná, je
+potřeba ji nastavit jako výchozí i pro tuto (tedy příští) stranu.
+Makro \db Xpage v takovém případě uloží do makra
+"\pgc:<číslo strany>" povel "\setpgcolor <k nebo K> {<CMYK barvy>}".
+
+\inext{Xpdfcolork}{\count=2 \empty}{+-}
+
+Makro \db preboxcclv jednoduše spustí "\pgc:<číslo strany>". Není-li
+"\pgc:<číslo strany>" definováno, je to známka, že barva na začátku je
+černá a díky dvojici "\csname", "\endcsname" se provede "\relax", tedy nic.
+Jinak se nastaví správná barva pomocí \db setpgcolor.
+
+\inext{preboxcclv}{}{++}
+
+Makro \db postboxcclv nastaví zpět černou barvu. Dělá to inteligentně.
+Nejprve nastaví správné hodnoty makrům "\currcolork" a "\currcolorK" po vložení
+boxu~255. K tomu účelu předefinuje "\setpgcolor" tak, aby pouze ukládal tyto
+hodnoty a spustí "\pgc:<číslo strany+1>".
+Poté příkazy "\Black" a "\linecolor\Black" budou vědět,
+jaká je aktuální barva. A je-li černá, neudělají nic, jinak vloží příslušný
+"\special".
+
+\inext{postboxcclv}{\empty}{+-}
+
+Není-li použit pdf\TeX{}, některá makra pro barvu deaktivujeme:
+
+\inext{ifpdftex}{\empty}{+-}
Makro \db draft vloží do "\headline" box nulové výšky a šířky "\draftbox",
který vystrčí svou šedou sazbu ven ze svého rozměru a je tištěn dřív, než
@@ -1307,16 +1622,19 @@ využity PDF transformace souřadnic.
\subsec Klikací odkazy
%%%%%%%%%%%%%%%%%%%%%%
-Makro \db destactive "[<typ>:<lejblík>]{<výška>}" založí cíl odkazu jen tehdy, když
+Makro \db destactive "[<typ>:<lejblík>]" založí cíl odkazu jen tehdy, když
je "<lejblík>" neprázdný. Ve vertikálním módu se nalepí na předchozí box
díky "\prevdepth=-1000pt" a po vložení boxu s cílem vrátí hodnotu
"\prevdepth" do původního stavu, aby následující box byl správně řádkován.
-V horizontálním módu postě vloží "\destbox". Makro
-\db destbox "[<typ>:<lejblík>]{<výška>}" vytvoří box nulové výšky a z~něj
-vystrčí nahoru cíl klikacího odkazu vzdálený od účaří o "<výška>". Interně
+V horizontálním módu prostě vloží "\destbox". Makro
+\db destbox "[<typ>:<lejblík>]" vytvoří box nulové výšky a z~něj
+vystrčí nahoru cíl klikacího odkazu vzdálený od účaří o "\destheight". Interně
použije pdf\TeX{}ový primitiv "\pdfdest" s parametrem "xyz", což
-charakterizuje obvyklou možnost chování PDF prohlížeče při odskoku na cíl.
-Podrobněji viz manuál k~pdf\TeX{}u.
+charakterizuje obvyklou možnost chování PDF prohlížeče při odskoku na cíl.
+Podrobněji viz manuál k~pdf\TeX{}u. PDF prohlížeče většinou
+lícují horní hranu okna přesně s~místem cíle, je tedy
+potřeba cíl umístit poněkud výše, abychom viděli i odkazovaný text.
+K~tomu právě slouží registr \db destheight.
\inext{dest}{\empty}{+-}
@@ -1324,6 +1642,24 @@ V uživatelské dokumentaci je zmíněno místo "\destactive" makro \db dest
se stejnými parametry. Toto makro je implicitně prázdné a tedy nečiné.
Teprve "\hyperlinks" je přinutí k činnosti.
+Někdy je účelné v režimu \uv{draft} dokumentu tisknout v místě cílů odkazů
+jména lejblíků, aby autor viděl, jaké lejblíky použil a lépe se mu dílo
+modifikovalo. Stačí předefinovat pro tento režim makro
+"\destbox" třeba takto:
+
+\begtt
+\def\destbox[#1#2:#3]{\vbox to0pt{\kern-\destheight
+ \pdfdest name{#1#2:#3} xyz\relax
+ \if#1r\llap{\localcolor\Green\ttt[#3]}\vss
+ \else \if#1c\vss\llap{\localcolor\Green\ttt[\tmpb] }\kern-\prevdepth
+ \else \vss \fi\fi}}
+\endtt
+
+Při tomto řešení budou lejblíky z "\label" tištěny nahoru v místě cíle
+zatímco lejblíky z~"\bib" a "\bibitem" budou tištěny vedle položky se seznamem
+literatury. V obou případech budou lejblíky zelené a díky "\llap" neovlivní
+polohu ostatní sazby.
+
Klikací text vytvoří makro \db link "[<typ>:<lejblík>]{<barva>}{<text>}".
Makro používá
pdf\TeX{}ový primitiv "\pdfstartlink", ve kterém je vymezena výška a hloubka
@@ -1336,16 +1672,11 @@ vytiskne aktivní "<text>" a přepne zpět na černou barvu. Pdf\TeX{}ový primitiv
Makro \db urllink "[<typ>:<lejblík>]{<text>}" pracuje
analogicky jako "\link". Jen navíc přidává některé
atributy do PDF výstupu a pracuje s barvou "\urlcolor".
+Toto makro vytvoří externí odkaz. Je použito v~makru "\url"
+prostřednictvím makra "\ulink".
\inext{urllink}{^^B\cbrace}{++}
-Makro \db url "{<odkaz>}" vysází "<odkaz>" strojopisem, přičemž znak "/" je
-na přechodnou dobu aktivní a definován jako "\\". Toto makro při sestavování
-externího odkazu zpětně expanduje na normální "/", ale při sazbě expanduje
-na "\discretionary", aby bylo možné v něm rozdělit sazbu do více řádků.
-
-\inext{url}{\empty}{+-}
-
Makra \db toclink, \db pglink, \db citelink, \db reflink, \db ulink, která se
specializují na určitý typ linku, implicitně nedělají nic:
@@ -1353,7 +1684,7 @@ specializují na určitý typ linku, implicitně nedělají nic:
Ovšem po použití makra \db hyperlinks "{<barva-lok>}{<barva-url>}" se
uvedená makra "\toclink", "\pglink", "\citelink" a "\reflink" probouzejí k
-životu:
+životu. Zde je také definováno makro \db urlcolor.
\inext{hyperlinks}{\empty}{+-}
@@ -1370,6 +1701,49 @@ deaktivovat:
\inext{ifpdftex}{\empty}{+-}
+Makro \db url "{<text>}" se používá k tisku URL. Vytiskne "<text>" fontem
+\db urlfont, přitom kolem znaků lomítko, tečka a dalších přidává nulovou
+mezeru s dodatečnou mírnou roztažitelností \db urlskip. Mezera vpravo od
+těchto znaků je navíc zlomitelná s penaltou definovanou v makru \db
+urlbskip. Dvojité lomítko \db urlslashslash má zlomitelnou mezeru jen na
+konci.
+
+\inext{url}{\empty}{+-}
+
+Je třeba vysvětlit, proč je v makru "\urlskip" použito "\null", neboli
+"\hbox{}". Tento box se přilepí na předchozí slovo a tím zakážeme toto slovo
+dělit podle vzorů dělení slov. Spojovník při rozděleném slovu je totiž pro
+čtenáře matoucí: nemůže vědět, zda je nebo není součástí URL.
+
+Makro "\url{<text>}" pracuje tak, že uloží "<text>" do "\tmpb" a nechá
+vyměnit příslušné znaky uvnitř "\tmpb" pomocí "\replacestrings".
+Nakonec vytiskne "<text>" prostřednictvím "\ulink".
+
+Aktivní vlnku lze v "<textu>" vyměnit za "\char`\~". Podobně lze řešit
+některé další znaky, ale ne všechny: procento, backlash.
+U těchto znaků bychom nejprve museli vyměnit jejich
+kategorie. Pak by ale makro "\url" nefungovalo uvnitř parametrů jiných
+maker. V zájmu jednoduchosti makra "\url" to neděláme. Takže pokud uživatel
+má v URL znak procento, nahradí ho sekvencí "\percent" manuálně a pokud tam má
+další speciální znak, vyřeší to podobným makrem jako "\percent".
+
+Makro \db replacestrings "{<string1>}{<string2>}" vymění v makru "\tmpb"
+veškeré výskyty "<string1>" za "<string2>". Pro tento účel definuje pracovní
+makro "\tmp", které pracuje podobně, jako makro "\iiscanch" (doporučujeme se
+podívat na výklad makra "\iiscanch"). Makro "\tmp" ale není na rozdíl od
+"\iiscanch" expandující. Místo toho postupně kumuluje
+výsledek do nového "\tmpb" pomocí "\addto". Před spuštěním "\tmp"
+expandujeme "\tmpb" pomocí pěti "\expandafter" a poté ho pronulujeme,
+takže to pracuje jako
+"\def\tmbb{}\tmp<původní obsah tmpb>\/<string1>\relax".
+
+\inext{replacestring}{\empty}{+-}
+
+Na konci "<textu>" je vložena sekvence "\/", která jej odděluje od přidaného
+"<string1>". Kdybychom ji tam nedali, pak při "<string1>=//" a při lomítku
+na konci "<textu>" bychom měli "...///" a to způsobí potíže.
+V závěru makra "\replacestring" je přidaná sekvence "\/" zase odstraněna.
+
\subsec Outlines -- obsah v záložce PDF dokumentu
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1696,15 +2070,14 @@ nepřečnívala, ale byla obsažena v~hloubce výsledného boxu.
\subsec Vložení obrázku
%%%%%%%%%%%%%%%%%%%%%%%
-Nejprve deklarujeme \db picw.
+Nejprve deklarujeme \db picwidth a \db picheight. Z důvodu zpětné
+kompatibility je dále ztotožněn "\picwidth" se sekvencí \db picw.
\inext{picw}{\empty}{+-}
Makro \db inspic je zkratka za použití primitivů "\pdfximage",
"\pdfrefximage" a "\pdflastximage". Kdo si to má pořád pamatovat.
Není-li aktivován PDF výstup, napíšeme jen varování a neprovedeme nic.
-Pokud budeme pracovat se stejnými obrázky v jednom dokumentu, bude
-vhodné možnosti primitivů využít naplno.
\inext{ifpdftex}{\empty}{+-}
@@ -1797,9 +2170,18 @@ Makru \db Xfnote tedy stačí pozvednout
\inext{Xfnote}{\empty}{+-}
+Makro \db runningfnotes vypne lokální číslování poznámek na každé stránce.
+Místo toho se budou poznámky číslovat podle registru "\fnotenum". Ten se
+zvětšuje o jedničku v celém dokumentu. Chcete-li mít poznámky číslované
+zvlášť například v každé kapitole, je nutno navíc resetovat tento čítač
+například pomocí "\addto\chaphook{\global\fnotenum=0}".
+
+\inext{runningfnotes}{\empty}{+-}
+
Registr \db mnotenum.
globálně čísluje okrajové poznámky a plní podobnou funkci, jako registr
-"\fnotenum" pro podčárové poznámky.
+"\fnotenum" pro podčárové poznámky. Registr \db mnoteskip udává hodnotu
+vertikálního posunu poznámky.
\inext{mnotenum}{\empty}{+-}
@@ -2061,20 +2443,27 @@ makra "\bbl:b" a "\bbl:c" si dva seznamy "\citelist" a "\citelistB" před svou
\subsec Úprava output rutiny
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Místo původního makra "\plainoutput" používá OPmac makro \db opmacoutput.
+Místo původního makra "\plainoutput" používá OPmac makro \db opmacoutput,
+která je obklopeno makry "\begoutput" a "\endoutput" kvůli barvám, jak bylo
+vysvětleno v sekci~\ilink[barvy]{\numref[barvy]}.
\inext{opmacoutput}{}{++}
OPmac mění output rutinu proti originální "\plainoutput" jen v nejnutnějších věcech.
-Řeší tyto dva problémy:
+Řeší tyto tři problémy:
\begitems
\item * Místo přímého "\shipout" nechá nejprve box sestavit jako "\box0",
- pak provede "\protectlist" a pak provede "\shipout\box0".
-\item * Mezi "\makeheadline" a "\pagebody" vkládá "\prepage".
+ pak provede "\protectlist" a pak provede "\shipout\box0". Tím jsou
+ zabezpečeny tzv. protektované příkazy při "\write".
+\item * Je vložen "\pghook" po sestavení boxů, ale před
+ "\shipout". Implicitně je "\pghook" prázdný.
+ Mění jej makro "\margins" pro účely pravolevého střídání okrajů.
+\item * Do "\pagecontents" vkládá "\prepage" (kvůli odkazům na stránku)
+ a "\preboxcclv", "\postboxcclv" (kvůli barvám).
\enditems
-První úprava zabrání expanzi maker přidaných pomocí "\addprotect" v době
+První úprava zabrání expanzi maker zabezpečených pomocí "\addprotect" v době
práce příkazu "\shipout", tedy v době, kdy expandují parametry "\write".
Těmto makrům je přidělen prostřednictvím \db doprotect "<makro>"
pro tento okamžik význam "\relax". Je potřeba ještě
@@ -2083,25 +2472,33 @@ ven pomocí "\shipout". Je to z toho důvodu, že v době sestavování "\box0"
jsou expandována "\headline" a "\footline" a pro ten případ ještě chceme,
aby všechna makra správně expandovala.
-\inext{opmacoutput}{\empty}{+-}
+\inext{opmacoutput}{doprotect}{++}
+
+K makru "\begoutput" přidáme lokální změnu makra "\nl" v mezeru.
+Makro "\nl" implicitně zalamuje řádky a může se vyskytovat v titulcích,
+takže může být dopraveno do plovoucího záhlaví, kde je zalamování řádků
+neřádoucí.
+Původní obsah makra "\begoutput" je definován v~sekci~\ilink[barvy]{\numref[barvy]}
+a řeší zejména správné nastavení barev.
+Makro \db prepage vkládá klikatelný cíl pro stránku, je-li známo její číslo.
-Druhá úprava vkládá makro \db prepage, které zajistí tisk stránkové číslice
-do "\reffile" (to je docela užitečné) a kromě toho nastaví správnou barvu
-textu strany pomocí PDF speciálu.
+\inext{begoutput}{\empty}{+-}
-\inext{prepage}{\empty}{+-}
+Poslední úprava mění plainovské \db pagecontents tak, že vkládá
+"\prepage", "\preboxcclv" a "\postboxcclv". Jinak nechává obsah makra
+stejný, jako v plain\TeX{}u.
-Když budou barvy přecházet na další stranu, jistě nechceme mít obarvenu
-stránkovou číslici. Je tedy potřeba do \db footline vložit "\Black". Když
-bude uživatel měnit velikost fontů v dokumentu, jistě nechce mít
+\inext{catcode}{\empty}{+-}
+
+Když bude uživatel měnit velikost fontů v dokumentu, jistě nechce mít
stránkovou číslici pokaždé jinak velkou. Proto je do "\footline" vloženo
"\thefontsize". Je nastaveno pevně na 10pt. Předpokládáme, že pokud bude
-někdo chtít jinak velkou stránkovou číslici, jednoduže si "\footline"
+někdo chtít jinak velkou stránkovou číslici, jednoduše si "\footline"
nastaví podle svého. Jinak je "\footline" shodná s původním nastavením
v~plain\TeX{}u.
\inext{footline}{\empty}{+-}
-
+
\subsec Okraje
%%%%%%%%%%%%%%
@@ -2134,7 +2531,7 @@ počítáme jako "\pgwidth"~"-"~"\hsize"~"-"~"2*<levý>" což dá stejnou hodnotu jako
\inext{margins}{\empty}{+-}
Makro \db setpagedimens "<formát> " spustí
-\db setpagedimensA "<šířka> <výška>/" a k tomu musí
+\db setpagedimensA "(<šířka>,<výška>)<jednotka>&", k~to\-mu musí
dopředu vyexpandovat obsah makra "\pgs:<formát>". To provedeme pomocí tří
"\expandafter".