diff options
author | Karl Berry <karl@freefriends.org> | 2015-02-11 21:49:44 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-02-11 21:49:44 +0000 |
commit | 5b1aa58b4889aeb3418a3007a831bbb0b3fe72e4 (patch) | |
tree | b33801a520f724cb145a845d7ae407b4b6d6fc2e /Master/texmf-dist/doc | |
parent | 79a499bdfb2822be4bab61f6c6720f4c52119c3b (diff) |
cstex (11feb15)
git-svn-id: svn://tug.org/texlive/trunk@36259 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc')
-rw-r--r-- | Master/texmf-dist/doc/cstex/opmac-d.tex | 738 | ||||
-rw-r--r-- | Master/texmf-dist/doc/cstex/opmac-u-en.pdf | bin | 227867 -> 227735 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/cstex/opmac-u-en.tex | 46 | ||||
-rw-r--r-- | Master/texmf-dist/doc/cstex/opmac-u.pdf | bin | 262553 -> 264133 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/cstex/opmac-u.tex | 192 | ||||
-rw-r--r-- | Master/texmf-dist/doc/cstex/prvni.pdf | bin | 246318 -> 254373 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/cstex/prvni.tex | 56 |
7 files changed, 485 insertions, 547 deletions
diff --git a/Master/texmf-dist/doc/cstex/opmac-d.tex b/Master/texmf-dist/doc/cstex/opmac-d.tex index 7fd3da08a92..8643c42bdba 100644 --- a/Master/texmf-dist/doc/cstex/opmac-d.tex +++ b/Master/texmf-dist/doc/cstex/opmac-d.tex @@ -8,7 +8,7 @@ % UTF-8 encTeX has a conflict with DocByTeX \chyph -\def\projectversion{Jul 2014} +\def\projectversion{Dec. 2014} \def\headtitle{OPmac} \widowpenalty=10000 @@ -225,9 +225,58 @@ Definovaná makra chceme při "\write" do souboru nechat v původním stavu: \inext {addprotect}{}{+-} Makro "\exfont" se vyskytuje v souboru "exchars.tex" z \CS{}plainu. -Příkaz "\addprotect\exfont" zaprotektuje všechny znaky deklarované v toto +Příkaz "\addprotect\exfont" zaprotektuje všechny znaky deklarované v tomto souboru naráz. Podrobnosti lze nalézt v uvedeném souboru. +Makro \db replacestrings "{<string1>}{<string2>}" vymění v makru "\tmpb" +veškeré výskyty "<string1>" za "<string2>". Pro tento účel definuje pracovní +makro \db replacestringsA se separátorem "<string1>". Jak to pracuje je +ukázáno na příkladu níže. +Před spuštěním "\replacestringsA" je třeba nejprve vyvrhnout obsah "\tmpb" +do vstupní fronty, poté provést "\def\tmpb{}" a nakonec provést +"\replacestringsA". To je uděláno pomocí triku s "\edef\tmpb" a se dvěma "\expandafter". +V makru pracujeme s tokeny "!" a "?" kategorie 3, které slouží jako +separátory. Předpokládáme, že takové nestandardní tokeny se ve zpracovávaném +textu nikdy neobjeví, protože vykřičník a otazník mají normálně kategorii +12. + +\inext{bgroup}{\empty}{+-} + +Jak to pracuje si ukážeme na příkladu "\replacestrings{XX}{YY}", pokud máme +v "\tmpb" uložen třeba text "ahaXXuffXXkonec". Makro "\replacestringsA" je v +takovém případě definováno jako: + +\begtt +\def\replacestringsA #1XX#2!{% + \ifx!#2!\addto\tmpb{#1}\else\addto\tmpb{#1YY}\replacestringsA#2!\fi}% +\endtt +% +a jednotlivé kroky zpracování probíhají takto: + +\begtt +\replacestringsA ahaXXuffXXkonec?XX! +#1 = "aha" #2 = "uffXXkonec?XX!" +\addto\tmpb{ahaYY} +\replacestringsA uffXXkonec?XX! +#1 = "uff" #2 = "konec?XX!" +\addto\tmpb{uffYY}, tj. \tmpb obsahuje "ahaYYuffYY". +\replacestringsA konec?XX! +#1 = "konec?" #2 = "" (prázdný parametr) +\addto\tmpb{konec?}, tj. \tmpb obsahuje "ahaYYuffYYkonec?" a rekurze končí. +\endtt +% +Dále se předefinuje "\def\replacestrin""gsA#1?{\def\tmpb{#1}}" a provede se + +\begtt +\replacestringsA ahaYYuffYYkonec? +#1 = "ahaYYuffYYkonec" +\def\tmpb{ahaYYuffYYkonec} +\endtt +% +tedy tímto algoritmem odstraníme koncový otazník. Proč jsme ho tam vlastně +dávali? Kdyby tam nebyl, tak by nesprávně fungovalo +"\replacestrings{XX}{YY}" při "\tmpb" ve tvaru "ahaX". + \subsec Globální parametry %%%%%%%%%%%%%%%%%%%%%%%%%% @@ -716,7 +765,7 @@ kurzívu. \inext{titfont}{\empty}{+-} -V další části této sekce je implemantace maker "\chap", "\sec" a "\secc". +V další části této sekce je implementace 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 nonumnum @@ -1125,7 +1174,7 @@ znovu přechodně předefinuje "\act" a předloží mu "\iilist". \ilabel [mkindex:od] {firstdata} \ilabel [mkindex:do] {after\nb act} -\ilabel [mkindex:orippx] {orippx} +\ilabel [mkindex:par] {exhyphenpenalty} \inext{makeindex}{^^B\cbrace}{++} @@ -1171,20 +1220,12 @@ Může například psát "\def\everyii{\indent}", pokud chce. \ilabel [printii:iindent] {iindent} \inext{printii}{\empty}{+-} -Makro \db iiparparams nastavuje parametry sazby odstavce v rejstříku. Vlevo +Makro "\makeindex" nastavuje na řádku \cite[mkindex:par] lokálně +parametry sazby odstavce v rejstříku. Vlevo budeme mít "\leftskip" rovný "\iindent", ale první řádek posuneme o "-\iindent" (viz řádek kódu~\cite[printii:iindent]) takže první řádek je vystrčen doleva. Vpravo máme pružnou mezeru, aby se seznam čísel stran mohl -rozumně lámat, když je moc dlouhý. Makro "\iiparparams" si musí poznačit do -makra \db orippx původní údaje měněných hodnot. Není možné se totiž schovat -do skupiny, protože rejstřík je obvykle tištěn pomocí -"\begmulti...\endmulti" a toto makro občas ukončuje plnění boxu a spouští -"\flushcolumns". Kdybychom měli "\makeindex" ve skupině, pak by při -"\flushcolumns" došlo ke křížení skupin. Na konci práce "\makeindex" na -řádku \cite[mkindex:orippx] je makro "\orippx" zavoláno a tím jsou parametry -odstavce vráceny do původní podoby. - -\inext{iiparparams}{\empty}{+-} +rozumně lámat, když je moc dlouhý. Pomocné makro \db scanprevii "<expanded-previi>&" se podívá do "\previi", odloupne z něj úsek před prvním lomítkem a tento úsek definuje jako @@ -1205,112 +1246,131 @@ Nejprve se zaměříme na vytvoření makra "\isAleB"~"\,<heslo1>"~"\,<heslo2>", které rozhodne, zda je "<heslo1>" řazeno před "<heslem2>" nebo ne. Výsledek zkoumání můžeme prověřit pomocí "\ifAleB". -Pro porovnání dvou údajů vyžaduje norma dva průchody. V prvním (primární +Pro porovnání dvou údajů vyžaduje norma dva průchody. V prvním (primárním řazení) se rozlišuje jen mezi písmeny A B C Č D E F G H Ch I J K L M N O P Q R Ř S Š T U V W X Y Z Ž. Pokud jsou hesla z tohoto pohledu stejná, pak se provede druhý průchod (sekundární řazení), ve kterém jsou řazena neakcentovaná písmena před přehlasovaná před čárkovaná před háčkovaná před stříškovaná před kroužkovaná a dále s nejnižší prioritou malá písmena před -velká. Připravíme si tedy dvě sady "\lccode" dvojic: pro první průchod a pro -druhý. Porovnávaná hesla zkonvertujeme pomocí "\lowercase" při nastavení -"\lccode" odpovídajícího průchodu. Pak takto zkonvertovaná hesla teprve -začneme porovnávat. - -Makro \db setprimarysorting připraví "\lccode" znaků české a slovenské -abecedy pro první průchod a \db setsecondarysorting pro druhý průchod. -Makro "\setprimarysorting" expanduje \db sortingdata -a předhodí před takto expandovaná data "\act". +velká. + +Nejprve připravíme data pro porovnávací algoritmus. + +\inext{sortingdata}{\empty}{+-} + +Mezi jednotlivými čárkami v makru \db sortingdata jsou skupiny znaků, které +se z hlediska prvního průchodu řadicím algoritmem nerozlišují. Jednotlivé +znaky v "\sortingdata" se rozliší při případném druhém průchodu. Řazení +znaků v "\sortingdata" odpovídá požadovanému abecednímu řazení. + +Dále je makrem \db setignoredchars vyjmenován seznam znaků, které se při +řazení zcela ignorují (jakoby tam vůbec nebyly). Typicky jde o interpunkci. +Makro nastaví všem těmto znakům pomocí "\setlccodes" kód tečky a tato tečka +se posléze z porovnávaného textu odstraní. Seznam znaků je oddělen tečkou a +ukončen dvojicí "{}{}". Seznam ignorovaných znaků odpovídá pravidlům českého +řazení. Norma doporučuje sice pro případ, kdy se hesla neliší jinak než těmito znaky, +nasadit další průchod řazení, ale pro jednoduchost a velkou výjimečnost +takové situace toto v OPmac implementováno není. + +Makra \db specsortingdatacs a \db specsortingdatask deklarují náhrady před +použitím řadicího algoritmu. Jednotivá náhrada je deklarována jako +"<string1>:<string2>" a je od další deklarace náhrady oddělena mezerou. +Tímto způsobem jsou implementovány spřežky ch, Ch a CH, které se nahrazují +znaky "^^T", "^^U" a "^^V". Ty vystupují v řadicím algoritmu jako jediný +znak, a mají své místo v makru "\sortingdata" Slovenština má sice další +spřežky dz, Dz, DZ, dž, Dž, DŽ, ale ty jsou řazeny těsně za D, takže jsou +řazeny správně i za situace, kdy nejsou nahrazeny jediným znakem. Nicméně, +pokud by někdo chtěl tyto spřežky (například pro ošetřování výjimek) použít +jako samostatné znaky, může si definovat své makro "\sortingdata", které by +obsahovalo + +\begtt + ... + dD\v d\v D,% + ^^N^^O^^P,% dz Dz DZ + ^^Q^^R^^S,% dž Dž DŽ + eE\'e\'E\v e\v E,% + ... +\endtt +a dále definuje +\begtt +\def\specsortingdatask {ch:^^T Ch:^^U CH:^^V + dz:^^N Dz:^^O DZ:^^P d\v z:^^Q D\v z:^^R D\v Z:^^S} +\endtt +% +Makra pro spřežky mají název ve tvaru "\specsortingdata<kód jazyka>". +Použije se makro odpovídající jazyku podle nastaveného dělení slov. +Není-li makro pro použitý jazyk definováno, žádné náhrady se neprovedou. +Je třeba upozornit (například uživatele maďarštiny), pokud by se v těchto +spřežkách chtěli rozšoupnout, vyhněte se znakům "^^I" a "^^M", kterým +plain\TeX, resp. ini\TeX, nastavuje speciální kategorie. + +Implementaci řadicího algoritmu zahájíme makrem \db setprimarysorting, které +se spustí jednou při sestavení rejstříku, přečte výše uvedená data a +připraví odpovídající datové stuktury pro první průchod řadicího algoritmu. +Hlavní činností tohoto makra je, že připraví "\lccode" znaků vyjmenovaných v +"\sortingdata" podle jejich vzestupného pořadí, přitom znakům v jedné +skupině (oddělené čárkou) přiřadí stejné "\lccode". Text před řazením pak +budeme konvertovat použitím "\lowercase". + +\inext{setprimarysorting}{\empty}{+-} + +Vidíme, že makro "\setprimarysorting" nejprve expanduje "\sortingdata", +aby se realizovaly znaky typu "\v c" podle nastaveného kódování. +Dělá to jen tehdy, když je definováno makro "\r", tj. uvedené sekvence pro +akcenty expandují na správné kódy. Rovněž pomocí +"\let"\db asciisorting \unskip"=t" +je možné zabránit použití "\sortingdata" a řadicí algoritmus řadí podle +ASCII. + +Dále "\setprimarysorting" připraví makro +\db specsortingdata (bez přípony jazyka) z makra +"\specsortingdata<aktuální jazyk>". Nejrve je expanduje a pak pomocí triku s +"\meaning" za spoluráce s~makrem \db setprimarysortingA převede všechny znaky +v makru na kategorii 12, protože toto budeme pro řadicí algoritmus potřebovat. + +Konečně se v makru "\setprimarysorting" připraví (za použití opakovaného +volání "\act") "\lccode" všech znaků zmíněných v "\sortingdata". Povšimneme si, že pro první průchod dostanou stejný "\lccode" všechny znaky -na společném řádku makra "\sortingdata", zatímco v druhém průchodu budou mít -všechny znaky z tohoto makra rozdílný "\lccode", ve vzestupném pořadí. +ve skupině mezi čárkami. Je to tím, že v makru "\setprimarysorting" se zvedá "\tmpnum" jen v místě -čárky, zatímco v "\setsecondarysorting" se "\tmpnum" zvedá pro každý znak. -Nejnižší hodnotu má mezera vyznačená v "\sortingdata" pomocí "{ }". +čárky. Nejnižší hodnotu má mezera vyznačená v "\sortingdata" pomocí "{ }". Tím je zaručeno, že kratší slovo je řazeno dřív než delší slovo se stejným začátkem, obsahující celé kratší slovo (ten~tučňák$\prec$tento). Je sice pravda, že ASCII hodnota mezery je ještě menší, ale my musíme mezeru někam šoupnout na jiný kód než 32, jinak by nám ji nepřečetlo makro s~neseparovaným parametrem. Ovšem my budeme chtít mezeru přečíst. - -\ilabel [sorten] {sort:en} -\ilabel [lan] {lan:} -\ilabel [chsorting] {chsorting} - -\inext{sortingdata}{\count=3 ^^B\cbrace}{++} - -Jedním z problémů českého řazení je dvojhláska ch. Tu potřebujeme -proměnit v jediný znak. Pro potřeby řazení proměníme ch v "^^T", Ch v "^^U" -a CH v "^^V". Uděláme to následujícím okultním kódem, který definuje makro -\db preparesorting "\,<heslo>". Toto makro připraví pomocí do "\tmpb" -"<heslo>" zkonvertované krz "\lowercase", -ovšem nejprve je dvojhláska ch nahrazena jedním znakem. -Makro \db chsorting je implicitně nedefinované, což znamená, že pracujeme s -dvojhláskou ch. Na řádku \cite[sorten], \cite[lan] a \cite[chsorting] je ovšem nastaveno -"\chsorting" jako "n", což je vzkaz, že dvojhlásku ch nechceme -interpretovat. - -\inext{bgroup}{\empty}{+-} - -Tento kód je bohužel obtížněji čitelný, protože makra "\iiscanch" a další -potřebují mít separátor "ch" ve stavu, kdy jednotlivá písmena mají "\catcode" 12. -Pracujeme totiž s výstupem primitivu "\string", který bohužel vše (až na -mezeru) balí do tokenů s kategorií 12. Proto je celý kód obalen do -"\bgroup", "\egroup" a "\lowercase". Tam jsou znaky 4, 5, 6, 7, -které mají kategorii 12, šoupnuty na c, h, C, H. Po tomto dešifrování tedy -vidíme, že makro \db iiscanch je definováno takto: - -\begtt -\gdef\iiscanch #1ch#2\relax{#1\if$#2$\else^^T\iiscanch #2\relax\fi} -\iiscanch Schází hrách, který bych házel na stěnu.ch\relax -\endtt - -Uvedený příklad expanduje postupně na - -\begtt -#1<-S -#2<-ází hrách, který bych házel na stěnu.ch -=> s^^T\iiscanch #2\relax - -#1<-ází hrá -#2<-, který bych házel na stěnu.ch -=> s^^Tází hrá^^T\iiscanch #2\relax - -#1<-, který by -#2<- házel na stěnu.ch -=> s^^Tází hrá^^T, který by^^T\iiscan #2\relax - -#1<- házel na stěnu. -#2<- -=> s^^Tází hrá^^T, který by^^T házel na stěnu. -\endtt -a to nahradí všechny výskyty dvojhlásky ch znakem "^^T". Analogicky pracují -makra \db iiscanCh a \db iiscanCH. Makro \db preparesortingA nakonec zavolá -všechna tři makra, takže máme nahrazeny všechny dvojhlásky ch, Ch i CH. - -V rámci optimalizace rychlosti jsou před algoritmem na setřídění seznamu -všechna hesla jednorázově zkonvertovaná podle pravidel prvního průchodu -řazení a tato data jsou uložena v prvním datovém údaji hesla (ve druhém máme -seznam stránek). Není tedy nutné dělat konverzi při každém porovnávání dvou -hesel. Ovšem, pokud porovnání hesel vyjde bez rozdílu, je potřeba provést -druhý průchod řazení (sekundární řazení). Ten nastavujeme jednotlivě jen pro -takové dvojice hesel, kde to je potřeba. Pravděpodobnost, že to je vůbec -někdy potřeba, je mizivá. Data pro primární řazení jsou tedy už připravena na -řádcích \cite[mkindex:od] až \cite[mkindex:do] v makru "\makeindex". - -V českém řazení se nemá přihlížet na interpunkční znaky (tečka, středník, -otazník, atd.). Hesla máme řadit tak, jako kdyby tam tyto znaky nebyly. -Kdyby se dvě hesla podle tohoto pravidla nelišila, norma předepisuje nasadit -cca čtvrtý průchod, ve kterém se tyto znaky rozliší. Čtvrtý průchod -implementován není: hesla lišící se jen interpunkčními znaky, jsou v OPmac -při řazení nerozlišitelná, tj. jsou řazena v pořadí, v jakém vstupují do -rejstříku. Ignorování interpunkčních znaků je provedeno tak, že všem -těmto znakům je přidělen makrem \db setignoredchars "\lccode" tečky a -tečka je při zpracování v~"\setprimarysorting" a "\setsecondarysorting" odstraněna -makrem \db removedot. - -\inext{removedot}{\empty}{+-} - -Připravíme si "\newif", kterým ohlásíme výsledek porovnání dvou hesel: +Makrem "\setignoredchars" se zcela nakonec nastaví ignorovaným znakům +"\lccode" tečky. + +Makro \db setsecondarysorting se volá opakovaně a příležitostně pro případy, +kdy jsou hesla z~hlediska primárního řazení totožná. Nastaví jinak "\lccode" +znaků. Tentokrát mají všechny znaky ze "\sortingdata" rozdílný "\lccode", ve +vzestupném pořadí. + +\inext{setsecondarysorting}{\empty}{+-} + +Makro \db preparesorting se volá (s nastavenými parametry podle +"\setprimarysorting") pro každé heslo jednou. Heslo je uloženo v názvu +kontrolní sekvence, která je parametrem makra "\preparesorting". Data pro +primární řazení jsou už připravena na řádcích \cite[mkindex:od] až +\cite[mkindex:do] v makru "\makeindex". V případech, kdy jsou dvě hesla +shodná z hlediska primárního řazení (to nastane asi velmi výjimečně), je pro +danou dvojici hesel znovu zavoláno makro "\preparesorting", tentokrát s +přednastavenými daty podle "\setsecondarysorting". Makro "\preparesorting" +má za úkol uložit výsledek své konverze do "\tmpb". + +\inext{preparesorting}{\empty}{+-} + +Všimneme si, že "\preparesorting" vykonává jádro své činnosti v \db +preparesortingA, které přebere text hesla extrahovaný do parametru "#3". +Toto makro pomocí \db preparesortingB opakovaně volá "\replacestrings", aby +nahradilo spřežky odpovídajícími náhradami. Dále pomocí "\lowercase" provede +konverzi a konečně pomocí "\replacestrings{.}{}" odstraní z hesla nejen +tečky, ale i znaky vyjmenované v makru "\setignoredchars". + +Připravíme si pomocí "\newif" makro \db ifAleB, kterým ohlásíme výsledek +porovnání dvou hesel: \inext{newif}{\empty}{+-} @@ -1407,18 +1467,15 @@ měnit výstupní rutinu. Makro z TBN je zde v OPmac ve dvou věcech přepracováno: \item * Důslednější balancování sloupců vylučující možnost ztráty sazby a umožňující mít sazbu s nezlomitelnými mezerami mezi řádky. \item * Makro měří kumulovanou sazbu a umožňuje při rozsáhlém množství - tiskového materiálu přechodně přejít do režimu \uv{vyprazdňování}. + tiskového materiálu obejít problém \uv{dimension too large}. \enditems Makra \db begmulti, \db endmulti, \db corrsize, \db makecolumns a \db splitpart pracují zhruba tak, jak je popsáno v TBN. -\ilabel [mul:endgraf] {endgraf} -\ilabel [mul:balance] {last balancing} -\ilabel [mul:relax] {relax\cbrace} -\ilabel [mul:prevgraf] {prevdepth} +\ilabel[mul:prevgraf] {prevgraf} -\inext{corrsize}{\count=2 \empty}{+-} +\inext{mullines}{\count=5 ^^B\cbrace}{++} Výstup rozlomené sazby do sloupců probíhá ve dvou režimech: když je třeba sloupci zaplnit celou stránku, použijeme "\makecolumns". Toto makro neřeší @@ -1434,226 +1491,112 @@ prázdný. \inext{balancecolumns}{^^B\cbrace}{++} -Když je sazba plněna do boxu~6, může ji být tak moc, že tento box -překročí maximální výšku boxu, která je v \TeX{}u bohužel -omezena na cca pět metrů -(16383~pt). Proto na řádku~\cite[mul:endgraf] je předefinován "\par", který -přičítá do "\dimen0" celkovou výšku postupně kumulované sazby. Jakmile tato -výška dosáhne "0.9\maxdimen", předefinujeme makro -"\balancecolumns" na "\flushcolumns" a spustíme předčasně "\endmulti". Toto makro -vyprázdní box pomocí opakovaného "\splitpart", ovšem nevyprázdní ho celý. -Jen tu část, která zaplní celé stránky. Jakmile bude chtít -"\splitpart" přejít k~vybalancování sazby pomocí -"\balancecolumns" na řádku \cite[mul:balance], spustí se místo běžného -"\balancecolumns" makro \db flushcolumns. Toto makro ignoruje zbytek činnosti -"\endmulti" až po "\relax" na řádku \cite[mul:relax], takže vyskočí z -trojitě zanořeného "\if". Musí tedy vrátit příslušné množství "\fi" a dále -vystartuje nový "\setbox6=\vbox". Uvnitř tohoto boxu nejprve vysype zbytek -boxu~6, pomocí "\unskip\unskip" odstraní "\vfil" a "\vskip-\prevdepth", -který tam vložil "\endmulti" na řádku~\cite[mul:prevgraf], -vrátí se k zálohovanému významu makra \db ibalancecolumns -a znovu definuje "\par" obdobným způsobem jako v~"\begmulti". -Pak pokračuje ve čtení sazby. - -\inext{flushcolumns}{\empty}{+-} +Když je sazba plněna do boxu~6, může ji být tak moc, že se nedá změřit jeho +výška pomocí "\dimen0=\ht6". Box samotný sice může být vyšší než pět metrů, +ale "\dimen0" nikoli: objeví se chyba \uv{dimension too large}. +Z toho důvodu je v makrech zavedena proměnná \db mullines, která pomocí +předefinovaného "\par" (na řádku \cite[mul:prevgraf]) +počítá počet řádků sazby. Je-li "\mullines" větší než +"\tmpnum" (což při daném "\baselineskip" odpovídá 0,8"\maxdimen"), makro +pracuje, jakoby výška boxu 6 byla 0,8"\maxdimen", tedy rozběhne se +"\splitpart" a "\makecolumns". Přitom makro "\makecolumns" snižuje hodnotu +"\mullines" o~počet vytištěných řádků, takže příště už může být "\mullines" +menší než "\tmpnum". K tomu určitě na několika posledních stránkách dojde, +takže nakonec "\balancecolumns" pracuje s přesnou výškou boxu~6. \subsec [barvy] Barvy %%%%%%%%%%%%%%%%%%%%% -Od verze pdf\TeX{}u 1.40 nabízí tento program primitivy -"\pdfcolorstackinit" a "\pdfcolorstack". Makra v OPmac tyto -primitivy nepoužívají, protože: - -\begitems -\item * Řešení v OPmac jsem vytvořil a použil podstatně dřív, než si programátoři - 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é. -\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 +Až po verzi OPmac Nov. 2014 byly barvy implementovány pomocí "\pdfliteral" +za použití maker, která sama implementují "\colorstack" pomocí REF +souboru. V prosinci 2014 jsem se rozhodl tento kód z OPmac odstranit a +využít přímo primitivní "\pdfcolorstack" (v pdf\TeX{}u od verze 1.40). +OPmac se tak zbavil asi 30~řádků +poměrně komplikovaného kódu a ušetřil množství zápisů do REF souboru. Tyto +změny jsou v souladu s~myšlenkou \uv{v jednoduchosti je síla}. Uvedené rozhodnutí není +zcela zpětně kompatibilní, protože opouští možnost samostatného nastavení +barvy pro tenké linky a pro text. Domnívám se, že to nevadí, protože pokud +uživatel potřebuje elementární manipulaci s barvami, použije sám přímo +"\pdfliteral". Makra "\setcmykcolor" se nyní opírají o "\pdfcolorstack" a +nastavují oba typy barev společně. Bylo sice možné inicializovat dva +zásobníky barev (pro linky a pro text), ale to by fungovalo jen +v~pdf\TeX{}u. Nikoli v~Xe\TeX{}u. Cílem ovšem je, aby se barvy v pdf\TeX{}u a Xe\TeX{}u +chovaly pokud možno stejně. Navíc, když uživatel napíše barevně odmocninu, +musí mít oba typy barev zapnuty současně na stejnou hodnotu, jinak má véčko +odmocniny v jiné barvě než vodorovnou čáru. Je tedy i pro uživatele +jednodušší tyto dva typy barev nerozlišovat. + +Makro \db localcolor (na rozdíl od předchozí verze) pouze +nastavuje "\localcolortrue". Podle \db localcolortrue +resp. \db localcolorfalse se bude větvit činnost přepínačů barev, které +ukládají aktuální barvu do zásobníku. To je tedy druhá mírná odlišnost od starší verze +OPmac Nov. 2014, kdy makro "\localcolor" přímo ukládalo aktuální barvu do zásobníku +barev, zatímco přepínače barev toto neřešily. Původní typické použití makra +"\localcolor" není ve sporu s jeho novým významem. + +\inext{iflocalcolor}{\empty}{+-} + +Makro "\longlocalcolor" dříve umožňovalo přechod barvy na další stránku, +nyní je tato vlastnost přímo řešena díky "\pdfcolorstack", takže netřeba +rozlišovat mezi "\localcolor" a \db longlocalcolor. +Makro \db linecolor nyní nedělá nic, protože nerozlišujeme mezi barvou linek +a barvou textu. V původní verzi bylo prefixem pro barvy linek. + +\inext{backward}{\empty}{+-} + +Připravíme barevná makra \db Blue, \db Red, \db Brown, \db Green, \db Yellow, \db Cyan, \db Magenta, \db White, \db Grey, \db LightGrey, \db Black. 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 "\pdfliteral" pro nastavení barvy nevloží. +Makro \db setcmykcolor "{<CMYK barva>}" nastaví požadovanou barvu. +Nejprve přepne makro "\ensureblacko" do aktivního stavu. V tomto stavu makro +setrvá právě tehdy, když je v dokumentu použit aspoň jednou přepínač barvy. +Dále makro "\setcmykcolor" nastaví při +"\localcolorfalse" barvu přímo a při "\localocolortrue" barvu vloží do +zásobníku a pomocí "\aftergroup" zajistí návrat k původní hodnotě. +Navíc nastaví na odpovídající hodnotu makro \db currentcolor. \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ě -nastavit barvu, která přetekla. Ovšem jak poznáme, že něco přeteklo do další -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>}". +Makro "\currentcolor" je nastaveno na výchozí hodnotu \db pdfblackcolor -\inext{writecolor}{^^B\cbrace}{++} +\inext{pdfblackcolor}{currentcolor}{++} -Makro \db pdfK má implicitně hodnotu "k" (barva pro texty a plochy) a -přechodně při použití \db linecolor "<přepínač barvy>" má hodnotu "K". +Makro \db ensureblacko "{<sazba>}" je použito pro sazbu záhlaví a zápatí ve +výstupní rutině v~makru "\opmacoutput". Implicitně se "\ensureblacko{<sazba>}" chová +stejně jako samotná "<sazba>", ale po použití přepínače barvy +"\setcmykcolor" začne fungovat jako \db ensureblackoA, což zajistí bravu +"<sazby>" v~černém. Je to provedeno tak, že je na začátku "<sazby>" +alokována nová úroveň zásobníku barev s výchozí černou barvou a na konci +"<sazby>" je tato úroveň zásobníku ukončena. -\inext{pdfK}{\empty}{+-} +\inext{ensureblacko}{\empty}{+-} -Výchozí hodnoty maker "\currcolork" a "\currcolorK" jsou rovny barvě černé, -neboli makru \db pdfblackcolor. +Makra \db colorstackpush "{<CMYK barva>}" a \db colorstackpop implementují +práci se zásobníkem barev za použití odpovídajících \TeX{}ových primitivů. +Není-li přítomen pdf\TeX{} ve verzi aspoň 1.40, je barva nastavena pomocí +"\pdfliteral" (což v komplikovanějších případech při přechodu na další +stránky nefunguje správně), jinak je použit "\pdfcolorstack", který je +inicializován pomocí "\pdfcolorstackinit". Povšimněte si, že se současně +pracuje s barvou textu "<c> <m> <y> <k> k" i s barvou tenkých linek +"<c> <m> <y> <k> K". +Konečně makro \db colorstackset "{<CMYK barva>}" nastavuje barvu přímo s +umístěním této bravy na vrchol zásobníku místo bravy předchozí. -\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}{+-} +\inext{pdfcolorstack}{\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ý -"\pdfliteral" 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}{+-} +Makra "\colorstackpush", "\colorstackpop" a "\colorstackset" jsou +odpovídajícím způsobem předefinována v souboru "opmac-xetex.tex", aby bylo +možné pracovat s barvami i v Xe\TeX{}u. 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>}". -Opakuje-li se stejná strana (např. postupné odkrývání výkřiků ve -slideshow), další "\Xpage" se stejnou stranou nedělají nic. - -\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}{+-} @@ -1662,7 +1605,7 @@ 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ž jakýkoli jiný materiál na stránce. -\inext{draft}{\empty}{+-} +\inext{draft}{}{++} V makru \db draftbox "{<text>}" je "<text>" otočen o 55 stupňů, zvětšen desetkrát a vytištěn v barvě "\LightGrey". K tomu jsou @@ -1670,7 +1613,7 @@ využity PDF transformace souřadnic. \inext{draftbox}{\empty}{+-} -Když není použit pdf\TeX{}, není makro deaktivujeme. +Když není použit pdf\TeX{}, barvy nefungují, takže makro "\draft" deaktivujeme. \inext{ifpdftex}{\empty}{+-} @@ -1706,9 +1649,10 @@ modifikovalo. Stačí předefinovat pro tento režim makro \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 + \if#1r\llap{\labelfont[\detokenize\expandafter{#3}]}\vss \else + \if#1c\vss\llap{\labelfont[\detokenize\expandafter{\tmpb}] }\kern-\prevdepth \else \vss \fi\fi}} +\def\labelfont{\localcolor\Red\tt\thefontsize[10]} \endtt Při tomto řešení budou lejblíky z "\label" tištěny nahoru v místě cíle @@ -1749,8 +1693,9 @@ uvedená makra "\toclink", "\pglink", "\citelink" a "\reflink" probouzejí k Pdf\TeX{}ové primitivy pro klikací odkazy dovolují dopravit do PDF další atributy odkazu za slovem "attr". Tam je možné dát najevo, že chceme vidět aktivní plochy ve formě rámečků. To zařídí makro \db pdfborder "{<typ>}", které -expanduje na nic, pokud není kontrolní sekvence "\<typ>border" definována. -Jinak expandují na "arrt" "/C" s obsahem podle "\<typ>border". +expanduje na "attr" "/Border[0 0 0]", pokud není kontrolní sekvence +"\<typ>border" definována. Jinak expanduje na "arrt" "/Border[0 0 .6]" a +"/C" s obsahem podle "\<typ>border". \inext{pdfborder}{\empty}{+-} @@ -1784,26 +1729,6 @@ má v URL znak procento, musí psát "\%" nebo si změní kategorie sám. Podobná poznámka platí pro znaky "{", "}", "\", "#" a "$". -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". - -V makru pracujeme s tokeny "!" a "?" kategorie 3, které slouží jako -separátory. Předpokládáme, že takové tokeny se ve zpracovávaném textu nikdy neobjeví. - -\inext{bgroup}{\empty}{+-} - -Na konci "<textu>" je vložen "?", který jej odděluje od přidaného -"<string1>". Kdybychom jej 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ý otazník zase odstraněn. - \subsec Outlines -- obsah v záložce PDF dokumentu %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -2071,8 +1996,9 @@ do více řádků. Je možné si vyzkoušet třeba tento kód: \begtt \newdimen\Pwidth \def\tabdeclareP {\enskip\vtop{\hsize=\Pwidth \rightskip=0pt plus1fil - \baselineskip=1.2em\lineskiplimit=0pt \noindent##\tabstrutA}\hss\enskip} - + \baselineskip=1.2em\lineskiplimit=0pt + \noindent##\unskip\tabstrutA}\hss\enskip +} \Pwidth=3cm \table{|c|P|}{\crl \tskip3pt aaa & Tady je delší textík, který se nevejde na řádek. \crl \tskip3pt bb & A tady je taky je něco delšího. \crl} @@ -2114,18 +2040,12 @@ TBN na str.~328. \inext{orihrule}{\empty}{+-} -Makro \db frame "{<text>}" vloží vnější "\vbox{\hrule..\hrule}". -V něm se nachází další box "\hbox{\vrule\kern\vvkern..\kern\vvkern\vrule}" -a v něm "\vbox{\kern\hhkern..\kern\hhkern}". -Nejvíce uvnitř je pak "\hbox{<text>}". To by pro sazbu rámovaného textu -stačilo, nicméně my ještě řešíme úpravu výsledného boxu tak, aby měl účaří -ve stejném místě jako je účaří textu. Proto uložíme "\hbox{<text>}" do boxu0 -a změříme mu hloubku. V proměnné "\tmpdim" spočítáme celkovou hloubku -výsledného boxu. Ve výpočtu přičítáme výšku "\hrule", která nemusí být -0.4pt. Proto si její výšku změříme v boxu1. Ve vnějším "\vbox"u po -nakreslení spodní "\hrule" se pak vracíme pomocí "\kern-\tmpdim" na úroveň -účaří a zde umístíme strut hloubky "\tmpdim", aby sazba směrem dolů -nepřečnívala, ale byla obsažena v~hloubce výsledného boxu. +Makro \db frame "{<text>}" vloží vnější "\hbox{\vrule<vnitřek>\vrule}". +Uvnitř tohoto boxu se nachází "\vtop{<další>\kern\vvkern\hrule}", takže "<další>" +zůstává na účaří. Přitom "<další>" je "\vbox{\hrule\kern\vvkern<další2>}", +takže "<další2>" zůstává na účaří. V tuto chvíli jsou již vytvořeny čáry +vlevo, vravo, nahoře i dole. Konečně "<další2>" je +"\hbox{\kern\hhkern<text>\kern\hhkern}". \inext{frame}{\empty}{+-} @@ -2274,39 +2194,6 @@ Při kladení vlevo musíme použít "fill", abychom přeprali natahovací mezeru z \inext{mnoteA}{^^B\cbrace}{++} -Text uvnitř "\mnote" přebírá barvu kvůli "\vadjust" \uv{se zpožděním}, podle -barvy, která je na konci řádku, vedle kterého je "\mnote" umístěna. Makra -tedy při zpracování parametru "\mnote" nemohou dopředu vědět, jaká to bude -barva, a nelze tedy použít zásobník barev řízený makry. Uživateli přitom -musíme dát možnost barvu "\mnote" nastavit, například: - -\begtt -\def\mnotehook{\noindent\Black} -\endtt -zajistí, že budou všechny poznámky na okraji černé bez ohledu na to, jakou -barvu mají řádky, vedle kterých ty poznámky stojí. K tomu účelu je nastavení -případných barev uživatelem jednak v makru "\mnoteA" obklopeno do dvojice -"\pdfsave"--"\pdfrestore" a dále je nastartován pomocí \db mnoteC lokální -zásobník barev, který je pomocí \db mnoteD vrácen do stavu, v jakém byl před -zahájemním zpracování "\mnote". Uživatel může v prametru "\mnote" používat -"{\localcolor\Green X{\localcolor\Blue Y}Z}" s~očekávaným výsledkem. -Barvy neoznačené "\localcolor" končí svou platnost na konci poznámky -"\mnote". - -\inext{mnoteC}{^^B\cbrace}{++} - -Základová barva lokálního zásobníku barev je převzata jako -aktuální barva v době zpracování "\mnote", ale je pozměněna prefixem "\long", -aby explicitní nastavení barvy vždy založilo barvu. Obecně -totiž "\setcmykcolor" zakládá barvu jen tehdy, když je rozdílná od -aktuální. Zde je rozdílnost zajištěna prefixem "\long". -Tento trik zabere, pokud se uvnitř "\mnote" pomocí "A{\localcolor\Red BC}DE" -má přejít k původní barvě pro písmena "DE". Ovšem ne vždy bude barva "A" -shodná s barvou "DE", protože barva "A" odpovídá barvě na koci aktuálního -řádku odstavce, zatímco "DE" odpovídá barvě v době činnosti makra "\mnote". -Pokud toto bude uživateli vadit, musí si pomocí "\mnotehook" nastavit -explicitní barvu poznámky. - Makro \db Xmnote pracuje během čtení REF souboru a využívá toho, že makro "\Xpage" nastavuje číslo právě procesované strany do registru "\lastpge". Takže stačí použít "\sxdef" následujícím způsobem: @@ -2495,8 +2382,12 @@ makra "\citelink". \inext{ecite}{\empty}{+-} Následuje kód makra \db bib "[<lejblík>]". Nejprve je ošetřeno, zda je použit -zkrácený nebo rozšířený zápis "\bib[<lejblík>] = {<značka>}". V prvním -případě se zavolá "\bibB" s prázdným "\bibmark", v druhém případě se +zkrácený nebo rozšířený zápis "\bib[<lejblík>] = {<značka>}". Případná +mezera před rovnítkem je odstaněna pomocí triku s~"\rommannumeral", který +při záporném čísle expanduje na prázdný výsledek, ale případná mezera za "`\." při +skenování tohoto čísla je pozřena. +Při zkráceném zápisu makra "\bib" (bez rovnítka) +se zavolá "\bibB" s prázdným "\bibmark", v druhém případě se "\bibmark" nejprve naplní prostřednictvím makra \db bibA. Makro \db bibB vloží prostřednictvím \db wbib "{<lejblík>}{<číslo citace>}{<značka>}" do REF souboru propojené údaje o @@ -2624,50 +2515,56 @@ 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, -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 tři problémy: +Řeší následující problémy: \begitems \item * Místo přímého "\shipout" nechá nejprve box sestavit jako "\box0", pak provede "\protectlist" a pak provede "\shipout\box0". Tím jsou zabezpečeny tzv. protektované příkazy při "\write". +\item * Pomocí "\ensureblacko" jsou řešeny barvy záhlaví, zápatí, "\topins" + a "\footins". \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). +\item * Makro "\pagecontents" obsahuje navíc "\prepage" (kvůli odkazům na stránku). \enditems -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ě -vysvětlit, proč bylo nutné sestavit nejprve "\box0" a teprve poté jej poslat -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. +Místo původního makra "\plainoutput" používá OPmac makro "\opmacoutput", +která je obklopeno makry "\begoutput" a "\endoutput". Makro \db begoutput +zapíše do REF souboru údaj o čísle strany a předefinuje makra, která se +mohou vyskytnout v záhlaví či zápatí stránky, pokud od nich chceme, aby +se chovaly jinak než obvykle. Makro \db endoutput je prázdné a je určeno +pro strýčka Příhodu. + +\inext{opmacoutput}{\empty}{+-} + +Makro \db opmacoutput se chová analogicky, jako "\plainoutput". Rozdíl je v +tom, že nejprve sestaví celou stranu do boxu0 a v té době expandují makra v +"\headline" a "\footline". Pak spustí "\pghook" a +"\protectlist". Makro "\protectlist" nastaví díky \db doprotect kontrolní sekvence +označené jako "\addprotect<sekvence>" na "\relax", takže během "\shipout" (tedy +během expanze záznamů "\write") se nebudou expandovat. +Další činnost je zcela shodná s činností makra "\plainoutput". \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. +Barvy jsou v textu nastaveny pomocí "\pdfcolorstack", takže na začátku +následující strany začíná barva, která skončila na straně předchozí. +My ale nechceme, aby +barva textu ovlivnila barvu záhlaví a zápatí. Proto je sazba "\makeheadline" +a "\makefootline" realizována pomocí makra "\ensureblacko". -\inext{begoutput}{\empty}{+-} +Makro \db prepage se spustí na začátku "\pagecontents" a zajistí uložení +cíle pro odskok podle čísla strany. Makra \db preboxcclv a \db postboxcclv +se spustí na začátku a na konci sazby boxu~255, jsou prázdná a zůstávají v +kódu pro zachování zpětné kompatibility. -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. +\inext{prepage}{\empty}{+-} + +OPmac předefinovává makro \db pagecontents z plain\TeX{}u tak, že přidává +makra "\prepage", "\preboxcclv" a "\postboxcclv". Také obsah boxů "\topins" +a "\footins" tiskne pomocí "\ensureblacko". \inext{catcode}{\empty}{+-} @@ -2679,7 +2576,12 @@ nastaví podle svého. Jinak je "\footline" shodná s původním nastavením v~plain\TeX{}u. \inext{footline}{\empty}{+-} + +Makro \db Xpage z REF souboru nastavuje \db lastpage a "\fnotenumlocal". +S těmito registry také spolupracují makra "\Xlabel", "\Xmnote" a "\Xfnote". +\inext{lastpage}{\empty}{+-} + \subsec Okraje %%%%%%%%%%%%%% @@ -2712,9 +2614,11 @@ 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>)<jednotka>&", k~to\-mu musí -dopředu vyexpandovat obsah makra "\pgs:<formát>". To provedeme pomocí tří -"\expandafter". +\db setpagedimensB "(<šířka>,<výška>)<jednotka> ", pokud je prvním znakem +"<formátu>" závorka, jinak spustí \db setpagedimensA, což je makro, které +použije definovaný formát, ten expanduje a zavolá "\setpagedimensB". Pomocné +makro \db setpagedimensC "<reg>=<num>:<jednotka>" přiřadí do "<reg>" daný +rozměr. \inext{setpagedimens}{\empty}{+-} @@ -2747,5 +2651,3 @@ na zpracování dokumentu, který nám připravil uživatel. Přeji dobré pořízení. \bye - - diff --git a/Master/texmf-dist/doc/cstex/opmac-u-en.pdf b/Master/texmf-dist/doc/cstex/opmac-u-en.pdf Binary files differindex 37f865a8ba6..1a30d653693 100644 --- a/Master/texmf-dist/doc/cstex/opmac-u-en.pdf +++ b/Master/texmf-dist/doc/cstex/opmac-u-en.pdf diff --git a/Master/texmf-dist/doc/cstex/opmac-u-en.tex b/Master/texmf-dist/doc/cstex/opmac-u-en.tex index 82c65e45165..c81b6c9ac19 100644 --- a/Master/texmf-dist/doc/cstex/opmac-u-en.tex +++ b/Master/texmf-dist/doc/cstex/opmac-u-en.tex @@ -487,7 +487,8 @@ character between h and i. \sec Colors %%%%%%%%%%% -The colors selection macros are working only if pdf\TeX-like engine is used. +The colors selection macros are working only if pdf\TeX-like engine (or +Xe\TeX) is used. OPmac provides a small number of color selectors: {\localcolor\Blue "\Blue"}, {\localcolor\Red "\Red"}, @@ -499,31 +500,31 @@ OPmac provides a small number of color selectors: {"\White"}, {\localcolor\Grey "\Grey"}, {\localcolor\LightGrey "\LightGrey"} and -"\Black". But user can define more +"\Black". User can define more such selectors by setting the CMYK components. For example \begtt \def\Orange{\setcmykcolor{0 0.5 1 0}} \endtt -The selectors itself change the color of the text and of the lines with the -thickness more than 1bp. If the "\linecolor" immediately precedes the color -selector then the lines with thickness less or equal 1bp are colored. This -is a second independent type of the color. +The current color in CMYK format is saved in the "\currentcolor" macro, thus you +can save it to your macro "\let\yourmacro=\currentcolor" and you can return to +this color by "\setcmykcolor\yourmacro". -The color selectors work globally on the one page. If the colored text is -broken to the next page then the color is correctly set on the following -page(s) after the second run of \TeX, because this event is implemented via -external file. User can write "\localcolor" inside the group. This command -saves the current color and restore it after the group is completed. It is -supposed that the group corresponds to the boundary of a box which cannot break -to more pages. If this is not true case then user can use "\longlocalcolor" -instead "\localcolor". Example: +The color selectors work globally by default. It means that colors don't +respect the \TeX{} groups and you have to return back to the black +typesetting explicitly by the "\Black" selector. + +OPmac provides the macro "\localcolor". If it is used then the +colors return back to the original value after \TeX{} groups automatically. +The macro has local validity. You can use it at begin of your document +(for all \TeX{} broups) or only in selected \TeX{} group (for this group +and nested goups). Example: \begtt \Red The text is red -\hbox{\localcolor \Blue here is blue {\localcolor \Green and green} - restored blue \Brown and brown} +{\localcolor \Blue here is blue {\Green and green} + restored blue \Brown and brown} now the text is red. \endtt @@ -1153,7 +1154,7 @@ Parameters are: \begitems * <pg> \dots\ "1" or "2" specifies one-page or two-pages design. -* <fmt> \dots\ paper format (a4, a4l, etc.). +* <fmt> \dots\ paper format (a4, a4l, a5, letter, etc. or user defined). * <left>, <right>, <top>, <bot> \dots\ gives the amount of left, right, top and bottom margins. * <unit> \dots\ unit used for values <left>, <right>, <top>, <bot>. @@ -1177,6 +1178,17 @@ declared margins are true for odd pages. The margins at the even pages are mirrored in such case, it means that <left> is replaced by <right> and vice versa. +The "<fmt>" can be in the form "(<width>,<height>)<unit>" where "<unit>" is +optional. If it is missing then "<unit>" after margins sspecification is +used. Fo example: + +\begtt +\margins/1 (100,200) (7,7,7,7)mm +\endtt +% +declares the paper 100$\times$200\,mm with all four margins 7\,mm. The spaces +before and after "<fmt>" parameter are necessery. + The command "\magscale[<factor>]" scales the whole typesetting area. The fixed point of such scaling is the so called the ``Knuth's point'': 1in below and 1in right of paper sides. Typesetting (breakpoints etc.) is diff --git a/Master/texmf-dist/doc/cstex/opmac-u.pdf b/Master/texmf-dist/doc/cstex/opmac-u.pdf Binary files differindex b1fb80155bd..3a485896585 100644 --- a/Master/texmf-dist/doc/cstex/opmac-u.pdf +++ b/Master/texmf-dist/doc/cstex/opmac-u.pdf diff --git a/Master/texmf-dist/doc/cstex/opmac-u.tex b/Master/texmf-dist/doc/cstex/opmac-u.tex index 87eb21a924f..fa26b8e53ab 100644 --- a/Master/texmf-dist/doc/cstex/opmac-u.tex +++ b/Master/texmf-dist/doc/cstex/opmac-u.tex @@ -94,8 +94,8 @@ PojÄme spoleÄnĂ˝mi silami tomu odstranit pĹĂpadnĂŠ mouchy a muĹĄky. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% VĹĄechna makra popsanĂĄ v tĂŠto sekci nastavujĂ zmÄny ve fontech a dalĹĄĂch -parametrech jen lokĂĄlnÄ, takĹže po ukonÄenĂ skupiny se nastavenĂ vracĂ k pĹŻvodnĂm -hodnotĂĄm. +parametrech jen lokĂĄlnÄ, takĹže jsou-li ve skupinÄ, +za nĂ se nastavenĂ vracĂ k pĹŻvodnĂm hodnotĂĄm. Makro "\typosize[<velikost fontu>/<ĹĂĄdkovĂĄnĂ>]" nastavĂ velikost textovĂ˝ch i matematickĂ˝ch fontĹŻ a ĹĂĄdkovĂĄnĂ. Je-li nÄkterĂ˝ z parametrĹŻ prĂĄzdnĂ˝, makro @@ -115,10 +115,10 @@ ZaÄĂĄtek dokumentu tedy mĹŻĹže vypadat takto: \endtt Makro "\typoscale[<faktor-font>/<faktor-ĹĂĄdkovĂĄnĂ>]" zvÄtĹĄĂ nebo zmenĹĄĂ velikost -textovĂ˝ch i matematickĂ˝ch fontĹŻ resp. ĹĂĄdkovĂĄnĂ <faktor> krĂĄt aktuĂĄlnĂ +textovĂ˝ch i matematickĂ˝ch fontĹŻ resp. ĹĂĄdkovĂĄnĂ <faktor>krĂĄt aktuĂĄlnĂ velikost fontĹŻ resp. ĹĂĄdkovĂĄnĂ. Faktor je celĂŠ ÄĂslo, pĹitom 1000 znamenĂĄ -jedniÄku (jako za slovem "scaled" v~pĹĂkazu "\font"). Je-li parametr +faktor jedna ku jednĂŠ (jako za slovem "scaled" v~pĹĂkazu "\font"). Je-li parametr prĂĄzdnĂ˝, je to stejnĂŠ, jako by byl roven 1000. \begtt @@ -217,7 +217,7 @@ K tomu slouŞà makro "\nl", kterĂŠ odĹĂĄdkuje v mĂstÄ pouĹžitĂ (newline). Toto makro se navĂc v obsahu chovĂĄ jako mezera. Kapitola, sekce, podsekce se neÄĂsluje, pĹedchĂĄzĂ-li "\nonum". Kapitola, -sekce, podeskce se neobjevĂ v obsahu, pĹedchĂĄzlĂ-li "\notoc". +sekce, podsekce se neobjevĂ v obsahu, pĹedchĂĄzlĂ-li "\notoc". \label[cislovani] \sec DalĹĄĂ ÄĂslovanĂŠ objekty a odkazy na nÄ @@ -226,7 +226,7 @@ sekce, podeskce se neobjevĂ v obsahu, pĹedchĂĄzlĂ-li "\notoc". KromÄ kapitol, sekcĂ a podsekcĂ se automaticky ÄĂslujĂ jeĹĄtÄ rovnice a popisky pod obrĂĄzky a pod tabulkami. -Pokud na konci display mĂłdu je uvedeno +Pokud je na konci display mĂłdu uvedeno "\eqmark", tato rovnice bude ÄĂslovanĂĄ. FormĂĄt ÄĂslovĂĄnĂ je implicitnÄ jedinĂŠ ÄĂslo uzavĹenĂŠ v kulatĂŠ zĂĄvorce resetovanĂŠ pĹi kaĹždĂŠm zahĂĄjenĂ novĂŠ sekce. PĹĂklad: "$$ a^2 + b^2 = c^2 \eqmark $$" vytiskne @@ -253,7 +253,7 @@ $$ DalĹĄĂmi ÄĂslovanĂ˝mi objekty jsou popisky. Popisek pod obrĂĄzky je potĹeba uvĂŠst slovem "\caption/f" a popisek pod -tabulkami slovem "\caption/t". Pak nĂĄsleduje text popisku ukonÄenĂ˝ +nebo nad tabulkami slovem "\caption/t". Pak nĂĄsleduje text popisku ukonÄenĂ˝ prĂĄzdnĂ˝m ĹĂĄdkem. PĹĂklad: \begtt @@ -329,7 +329,7 @@ pomocĂ plain\TeX{}ovĂŠho makra "\topinsert" resp. "\midinsert". NapĹĂklad: Na automaticky ÄĂslovanĂŠ objekty je nutno se obÄas v textu odkazovat. ProtoĹže dopĹedu nevĂme, pod jakĂ˝m ÄĂslem se rovnice, sekce, tabulka atd. -vytiskne, je potĹeba pouĹžĂt internĂ lejblĂky k oznaÄkovĂĄnĂ odkazovanĂ˝ch +vytiskne, je potĹeba pouĹžĂt internĂ lejblĂky k oznaÄenĂ odkazovanĂ˝ch objektĹŻ. K tomu slouŞà makro "\label[<lejblĂk>]", kterĂŠ musĂ pĹedchĂĄzet makru, jeĹž generuje ÄĂslo. NenĂ nutnĂŠ, aby "\label" pĹedchĂĄzel tÄsnÄ danĂŠmu makru. Tedy napĹĂklad: @@ -352,14 +352,14 @@ kterĂĄ shrnuje jistĂ˝ druh zĂĄvislosti. Text z ukĂĄzky vytvoĹĂ zhruba toto: \uv{NynĂ mĹŻĹžeme hovoĹit o sekci 2.1 na stranÄ 13 nebo taky o rovnici (1) na stranÄ 15. DĂĄle bude -potĹeba upozornit na tabulku 1.3.1 na stranÄ 42, +potĹeba upozornit na tabulku 5.3.1 na stranÄ 42, kterĂĄ shrnuje jistĂ˝ druh zĂĄvislosti.} JestliĹže se v textu vyskytujĂ dopĹednĂŠ reference (tj. odkazujeme na objekt, kterĂ˝ jeĹĄtÄ nenĂ vytiĹĄtÄn) nebo text odkazuje na strĂĄnky ("\pgref"), je nutnĂŠ -\TeX{}ovat dokument dvakrĂĄt. +\TeX{}ovat dokument aspoĹ dvakrĂĄt. -PomocĂ "\label[<lejblĂk>]\wlabel[<text>]" se dĂĄ vytvoĹit kdekoli +PomocĂ "\label[<lejblĂk>]\wlabel{<text>}" se dĂĄ vytvoĹit kdekoli obecnĂ˝ cĂl <text>, na kterĂ˝ je moĹžnĂŠ odkazovat makry "\ref[<lejblĂk>]" nebo "\pgref[<lejblĂk>]". @@ -427,13 +427,13 @@ doporuÄuji na stejnou hodnotu nastavit "\iindent". VertikĂĄlnĂ mezera nad a pod prostĹedĂm s odrĂĄĹžkami je ĹĂzena makrem "\iiskip". -\sec Tvorba obsahu -%%%%%%%%%%%%%%%%%% +\sec Tvorba automaticky generovanĂŠho obsahu +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Makro "\maketoc" vytiskne v mĂstÄ svĂŠho pouĹžitĂ obsah dokumentu bez nadpisu, jen jednotlivĂŠ ĹĂĄdky obsahu. OdsazenĂ jednotlivĂ˝ch ĹĂĄdkĹŻ je nastaveno na nĂĄsobky registru "\iindent". Äasto je potĹeba dokument \TeX{}ovat vĂcekrĂĄt, -neĹž se obsah zjevĂ a neĹž se strĂĄnkovĂŠ ÄĂslice srovnajĂ sprĂĄvnÄ, protoĹže po +neĹž se obsah zjevĂ a neĹž se ÄĂsla stran srovnajĂ sprĂĄvnÄ, protoĹže po prvnĂm zjevenĂ obsahu se mohou strĂĄnky posunout jinam. Titulek k obsahu by nemÄl bĂ˝t ÄĂslovanĂ˝ a nemÄl by se zjevit v obsahu, takĹže @@ -443,7 +443,7 @@ jej zapĂĹĄeme tĹeba pomocĂ \nonum\notoc\sec Obsah \endtt -Tituly kapitol, sekcĂ a podsekcĂ zapisuje OPmac pro ĂşÄely sestavenĂ obsahu do +Titulky kapitol, sekcĂ a podsekcĂ zapisuje OPmac pro ĂşÄely sestavenĂ obsahu do externĂho souboru "*.ref". MĹŻĹže se stĂĄt, Ĺže uĹživatel v tÄchto textech pouĹžije nÄjakĂŠ komplikovanĂŠ makro, kterĂŠ se pak v souboru \uv{rozsype} do takovĂŠho stavu, Ĺže nejde vzĂĄpÄtĂ pĹeÄĂst. V takovĂŠm pĹĂpadÄ je potĹeba @@ -456,17 +456,21 @@ proti expanzi do "*.ref" souboru. NapĹĂklad OPmac deklaruje: \endtt % a mnoho dalĹĄĂch. NenĂ moĹžnĂŠ ale pĹedvĂdat vĹĄechno, co mĹŻĹže uĹživatel -nacpat do titulu sekce nebo kapitoly. Pokud se tedy \uv{rozsype} +nacpat do titulku sekce nebo kapitoly. Pokud se tedy \uv{rozsype} REF soubor, je potĹeba si tĂmto zpĹŻsobem zabezpeÄit pouĹžĂvanĂŠ makro. +PoznĂĄmka: PĹi pĹechodu na novÄjĹĄĂ verzi OPmac se mĹŻĹže stĂĄt, Ĺže REF soubor +vygenerovanĂ˝ starou verzĂ zpĹŻsobĂ chyby pĹi dalĹĄĂm zpracovĂĄnĂ. Pak je +potĹebnĂŠ nejprve REF soubor smazat. + \sec SestavenĂ rejstĹĂku %%%%%%%%%%%%%%%%%%%%%%%% Makro pro zanĂĄĹĄenĂ slov do rejstĹĂku je navrĹženo s ohledem na optimalizaci poÄtu ĂşhozĹŻ na klĂĄvesnici. Autor uĹž napsal svĂŠ dĂlo, mĂĄ danĂ˝ termĂn -odevzdĂĄnĂ a nynĂ ho ÄekĂĄ ĂşmornĂĄ prĂĄce vyhledĂĄvĂĄnĂ slov v textu, kterĂŠ by -mÄly pĹijĂt do rejstĹĂku, a jejich vyznaÄovĂĄnĂ. Je tĹeba mu tuto prĂĄci co +odevzdĂĄnĂ a nynĂ ho ÄekĂĄ ĂşmornĂĄ prĂĄce vyhledĂĄvĂĄnĂ slov v textu, kterĂĄ by +mÄla pĹijĂt do rejstĹĂku, a jejich vyznaÄovĂĄnĂ. Je tĹeba mu tuto prĂĄci co nejvĂce usnadnit. Pro zanesenĂ slova do rejstĹĂku slouŞà makro "\ii". Je to zkratka za @@ -525,7 +529,7 @@ kterĂŠ naznaÄujĂ, Ĺže se do rejstĹĂku dĂĄvĂĄ vĂce slov: % Dostaneme totĂŠĹž jako pĹi "\ii lineĂĄrnĂ~prostor \ii vektorovĂ˝~prostor " a tato ukĂĄzka demonstruje jeĹĄtÄ jednu vÄc: je-li potĹeba do parametru "\ii" -dostat mezeru, piĹĄte vlnku. +dostat mezeru, piĹĄte vlnku nebo napiĹĄte heslo uzavĹenĂŠ ve svorkĂĄch. Pokud se v rejstĹĂku objevĂ hesla sklĂĄdajĂcĂ se z vĂce slov, obvykle chceme, aby u~hesla, kterĂŠ opakuje prvnĂ slovo, se toto slovo @@ -533,9 +537,9 @@ v rejstĹĂku nevypisovalo opakovanÄ, ale aby bylo nahrazeno pomlÄkou. NapĹĂklad: \par\nobreak \medskip -\hbox{\indent lineĂĄrnĂ podprostor 12, 16, 18, 29}\nobreak -\hbox{\indent \space --- prostor 12, 16--32, 51}\nobreak -\hbox{\indent \space --- zĂĄvislost 18--20, 34} +\hbox{\indent lineĂĄrnĂ podprostor \ 12, 16, 18, 29}\nobreak +\hbox{\indent \space --- prostor \ 12, 16--32, 51}\nobreak +\hbox{\indent \space --- zĂĄvislost \ 18--20, 34} \medskip \noindent PĹi takovĂŠm poĹžadavku piĹĄte mĂsto vlnky mezi slovy lomĂtko. PĹĂklad: @@ -556,8 +560,8 @@ prostor/lineĂĄrnĂ. Aby se to nemuselo psĂĄt dvakrĂĄt, je k dispozici zkratka PoÄet lomĂtek v hesle pro rejstĹĂk nenĂ omezen. MĹŻĹžete tedy vytvoĹit vĂceĂşrovĹovĂ˝ rejstĹĂk. NicmĂŠnÄ je tĹeba vÄdÄt, Ĺže zkratka "@" nevytvĂĄĹĂ -vĹĄechny permutace, ale jen prohazuje prvnĂ Ăşdaj pĹed lomĂtkem se vĹĄemi -ostatnĂmi. TakĹže "\ii a/b/c,@" je totĂŠĹž jako "\ii a/b/c" "\ii b/c/a". +vĹĄechny permutace, ale jen pĹesune prvnĂ Ăşdaj pĹed lomĂtkem za vĹĄechny +ostatnĂ. TakĹže "\ii a/b/c,@" je totĂŠĹž jako "\ii a/b/c" "\ii b/c/a". SamotnĂ˝ rejstĹĂk vznikne v mĂstÄ pĹĂkazu "\makeindex". RejstĹĂk obsahuje data z pĹedchozĂho zpracovĂĄnĂ dokumentu \TeX{}em, takĹže je potĹeba @@ -587,7 +591,7 @@ Funkci si vysvÄtlĂme na pĹĂkladu: \iis vÄta/o~neĂşplnosti/Goedelova {vÄta/o~neĂşplnosti/G\"odelova} \endtt % -Lze pak psĂĄt "\ii relax" nebo "\ii chikvadrat" nebo +Lze pak psĂĄt "\ii relax", "\ii chikvadrat" nebo "\ii Goedelova/vÄta/o~neĂşplnosti,@". OPmac abecednÄ ĹadĂ podle tÄchto hesel, ale kdyĹž dojde na potĹebu heslo vytisknout do rejstĹĂku, vytiskne mĂsto tÄchto hesel @@ -596,8 +600,7 @@ kterĂ˝ je uveden na pravĂŠ stranÄ slovnĂku. PĹĂklad ukazuje, Ĺže tĂm lze ĹeĹĄit nejen tisk hesel, kterĂĄ je potĹeba oĹĄetĹit speciĂĄlnĂmi makry (v pĹĂkladu slovo relax), ale takĂŠ -vĂ˝jimky abecednĂho ĹazenĂ (pĂsmeno "\"{\tt\char`\"o} -nemĂĄme v ÄeskĂŠ abecedÄ, kdovĂ, kam by se to zaĹadilo). +vĂ˝jimky abecednĂho ĹazenĂ. % SlovnĂk vĂ˝jimek je moĹžnĂ˝ zapsat kamkoli pĹed "\makeindex", typicky se pĂĹĄe na zaÄĂĄtek dokumentu. @@ -625,8 +628,8 @@ TakĹže tĹeba "\ii Ernst~@~Young" pro ĹazenĂ a \sec Barvy, vodoznaky %%%%%%%%%%%%%%%%%%%%% -Makra uvedenĂĄ v tĂŠto sekci nastavujĂ barvy jen pĹi pouĹžitĂ pdf\TeX{}u a pĹi -vĂ˝stupu do PDF. Jinak tato makra neudÄlajĂ nic. +Makra uvedenĂĄ v tĂŠto sekci nastavujĂ barvy jen pĹi pĹĂmĂŠm +vytvĂĄĹenĂ do PDF. TakĹže pĹi vĂ˝stupu do DVI tato makra neudÄlajĂ nic. % Barvu textu mĹŻĹžete nastavit pomocĂ pĹepĂnaÄĹŻ {\localcolor\Blue "\Blue"}, @@ -639,48 +642,53 @@ Barvu textu mĹŻĹžete nastavit pomocĂ pĹepĂnaÄĹŻ {"\White"}, {\localcolor\Grey "\Grey"}, {\localcolor\LightGrey "\LightGrey"} a -{"\Black"}. Je potĹeba si uvÄdomit, Ĺže tyto -pĹepĂnaÄe pracujĂ globĂĄlnÄ nezĂĄvisle na skupinÄ uvnitĹ boxu i mimo, prostÄ -kdekoli. Barvu jinou neĹž Äernou je potĹeba nakonec vypnout pĹepĂnaÄem -"\Black". Pokud barvu jinou neĹž Äernou zapnete na nÄkterĂŠ strĂĄnce a text v -tĂŠto barvÄ pĹeteÄe do strĂĄnek dalĹĄĂch, pĹi opakovanĂŠm \TeX{}ovĂĄnĂ se objevĂ -sprĂĄvnĂĄ barva i na nĂĄsledujĂcĂch strĂĄnkĂĄch. Tuto skuteÄnost si totiĹž -\TeX{} musĂ ujasnit prostĹednictvĂm pomocnĂŠho souboru s odkazy. - -SpoleÄnÄ s barvou textu tyto pĹepĂnaÄe zapĂnajĂ i barvu vÄtĹĄĂch ploch -vytvoĹenĂ˝ch pomocĂ "\hrule" a "\vrule". Ve specifikaci formĂĄtu PDF je -nicmĂŠnÄ jeĹĄtÄ jeden pĹepĂnaÄ barev nezĂĄvislĂ˝ na barvÄ textu a vÄtĹĄĂch ploch. -Jsou to barvy linek, kterĂŠ majĂ tlouĹĄĹĽku menĹĄĂ neĹž 1~bp. Tento \uv{druh -barvy} se pĹepĂnĂĄ stejnĂ˝mi pĹepĂnaÄi "\Blue", ..., "\Black" ovĹĄem -pĹed tĂmto pĹepĂnaÄem musĂ bezprostĹednÄ pĹedchĂĄzet slovo "\linecolor". -TakĹže "\linecolor\Red" zapne barvu linek na Äervenou, ale barva textu -zĹŻstane pĹŻvodnĂ. Nebo "\Black" vrĂĄtĂ do normĂĄlu barvu textu, zatĂmco -"\linecolor\Black" zpĹŻsobĂ, Ĺže takĂŠ linky budou dĂĄle ÄernĂŠ. +{"\Black"}. + +ImplicitnÄ tyto pĹepĂnaÄe pracujĂ globĂĄlnÄ nezĂĄvisle na \TeX{}ovĂŠ skupinÄ. +Barvu jinou neĹž Äernou je pak potĹeba ukonÄit explicitnĂm pĹepĂnaÄem +"\Black". Toto chovĂĄnĂ je moĹžnĂŠ zmÄnit uvedenĂm pĹĂznaku "\localcolor". +Tento pĹĂznak je moĹžnĂŠ nastavit globĂĄlnÄ (napĹĂklad na zaÄĂĄtku dokumentu) +nebo lokĂĄlnÄ uvnitĹ skupiny. PĹi globĂĄlnĂm nastavenĂ se sazba vracĂ +k~pĹŻvodnĂ barvÄ za vĹĄemi \TeX{}ovĂ˝mi skupinami +a pĹi lokĂĄlnĂm nastavenĂ se k pĹŻvodnĂ barvÄ vracĂ sazba +za skupinou zaÄĂnajĂcĂ pĹĂznakem "\localcolor" (a za vĹĄemi vnoĹenĂ˝mi skupinami). +PĹĂklad: \def\podbarvi#1#2#3{\setbox0=\hbox{#3}\leavevmode {\localcolor\rlap{#1\strut\vrule width\wd0}#2\box0}} +\begtt +ÄernĂ˝ {\localcolor \Blue modrĂ˝ {\Green zelenĂ˝ \Red ÄervenĂ˝} modrĂ˝} ÄernĂ˝. +\endtt +% +DalĹĄĂ pĹĂklad vytvoĹĂ \podbarvi\Yellow\Brown{podbarvenĂ˝ text:} + +\begtt +\def\podbarvi#1#2#3{\setbox0=\hbox{#3}\leavevmode + {\localcolor\rlap{#1\strut\vrule width\wd0}#2\box0}} + \podbarvi\Yellow\Brown{Tady je hnÄdĂ˝ text na ĹžlutĂŠm pozadĂ.} +\endtt + +V pĹŻvodnĂ verzi OPmac bylo moĹžnĂŠ rozliĹĄovat barvy tenkĂ˝ch linek a pĂsma. +Tuto vlastnost jsem opustil od verze Dec.~2014. ZdĹŻvodnÄnĂ najdete v +technickĂŠ dokumentaci. + KromÄ uvedenĂ˝ch barevnĂ˝ch pĹepĂnaÄĹŻ si mĹŻĹžete \uv{namĂchat} v reĹžimu CMYK i barvy vlastnĂ. StaÄĂ se inspirovat, jak jsou uvedenĂŠ pĹepĂnaÄe definovĂĄny:\par\nobreak \begtt -\def\Red{\setcmykcolor{0.0 1.0 1.0 0}} +\def\Red{\setcmykcolor{0 1 1 0}} \def\Brown{\setcmykcolor{0 0.67 0.67 0.5}} ... \endtt -UvnitĹ skupiny, kterĂĄ se nerozpadne do vĂce strĂĄnek, je moĹžno pĹed pĹepnutĂm -barvy pouĹžĂt "\localcolor". \TeX{} si v mĂstÄ tohoto pĹĂkazu -zapamatuje aktuĂĄlnĂ barvu a po ukonÄenĂ -skupiny se k nĂ automaticky vrĂĄtĂ. -NĂĄsleduje pĹĂklad, kterĂ˝m vytvoĹĂme \podbarvi\Yellow\Brown{podbarvenĂ˝ text:} +AktuĂĄlnĂ barvu ve formÄ ÄtyĹ ÄĂsel CMYK je moĹžnĂŠ pĹeÄĂst z makra +"\currentcolor" napĹĂklad pomocĂ +"\let\savedcolor=\currentcolor" a pozdÄji je moĹžnĂŠ se k tĂŠto barvÄ +vrĂĄtit pomocĂ "\setcmykcolor\savedcolor". -\begtt -\def\podbarvi#1#2#3{\setbox0=\hbox{#3}\leavevmode - {\localcolor\rlap{#1\strut\vrule width\wd0}#2\box0}} - \podbarvi\Yellow\Brown{Tady je hnÄdĂ˝ text na ĹžlutĂŠm pozadĂ.} -\endtt +\medskip {\bf Vodoznakem} je mĂnÄn ĹĄedĂ˝ text opakujĂcĂ se na kaĹždĂŠ strĂĄnce, kterĂ˝ je vytiĹĄtÄn pod obvyklĂ˝m textem. NapĹĂklad OPmac nabĂzĂ makro "\draft", kterĂŠ zpĹŻsobĂ, Ĺže kaĹždĂĄ strĂĄnka obsahuje ĹĄikmo napsanĂ˝ velikĂ˝ ĹĄedĂ˝ @@ -800,7 +808,7 @@ odsazenĂ. Je-li pĹed zahĂĄjenĂm "\begtt" nastaven registr "\ttline" na nezĂĄpornou hodnotu, bude makro ÄĂslovat ĹĂĄdky. PrvnĂ ĹĂĄdek mĂĄ ÄĂslo "\ttline+1" -a po prĂĄci makra se registr "\ttbline" posune na ÄĂslo poslednĂho +a po prĂĄci makra se registr "\ttline" posune na ÄĂslo poslednĂho vytiĹĄtÄnĂŠho ĹĂĄdku. TakĹže v~dalĹĄĂm prostĹedĂ "\begtt" ... "\endtt" ÄĂslovĂĄnĂ pokraÄuje tam, kde pĹestalo. ImplicitnÄ je "\ttline=-1", takĹže ÄĂslovĂĄnĂ neprobĂhĂĄ. @@ -852,7 +860,7 @@ makrosouborĹŻ. DĹŻvod: "\activettchar" nastavuje <znak> jako aktivnĂ, coĹž mĹŻĹ ÄtenĂ souborĹŻ maker vadit. NenĂ taky rozumnĂŠ aktivovat znak pro derivaci nebo jinĂ˝ v~textu pouĹžĂvanĂ˝ znak. -Verbatim listingy je moĹžnĂŠ tisknout z externĂho souboru. NapĹĂklad +Verbatim vĂ˝pisy je moĹžnĂŠ tisknout z externĂho souboru. NapĹĂklad \begtt \verbinput (12-42) program.c @@ -866,7 +874,7 @@ Parametry v kulatĂŠ zĂĄvorce mohou vypadat takĂŠ takto: \verbinput (-60) program.c % vĂ˝pis od zaÄĂĄtku souboru do ĹĂĄdku 60 \verbinput (61-) program.c % vĂ˝pis od ĹĂĄdku 61 do konce souboru \verbinput (-) program.c % vĂ˝pis celĂŠho souboru -\verbinput (70+10) program.c % ÄtenĂ od ĹĂĄdku 70, pĹeÄteno bude 10 ĹĂĄdkĹŻ +\verbinput (70+10) program.c % vĂ˝pis od ĹĂĄdku 70, tiskne 10 ĹĂĄdkĹŻ \endtt V dalĹĄĂch ukĂĄzkĂĄch OPmac Äte od ĹĂĄdku, kterĂ˝ nĂĄsleduje za naposledy @@ -875,8 +883,8 @@ pĹeÄtenĂ˝m ĹĂĄdkem souboru z pĹedchozĂho volĂĄnĂ "\verbinput". Je-li soubo ĹĂĄdek je oznaÄen v komentĂĄĹĂch jako "n". \begtt -\verbinput (+10) program.c % ÄtenĂ deseti ĹĂĄdkĹŻ od ĹĂĄdku n -\verbinput (+) program.c % ÄtenĂ od ĹĂĄdku n do konce souboru +\verbinput (+10) program.c % vĂ˝pis deseti ĹĂĄdkĹŻ od ĹĂĄdku n +\verbinput (+) program.c % vĂ˝pis od ĹĂĄdku n do konce souboru \vebrinput (-5+7) program.c % vynechĂĄ 5 ĹĂĄdkĹŻ, od n+5 tiskne dalĹĄĂch 7 \verbinput (-3+) program.c % vynechĂĄ 3 ĹĂĄdky, tiskne do konce souboru \endtt @@ -902,7 +910,7 @@ OPmac v makru "\table{<deklarace>}{<data>}". PĹĂklad: \begtt \table{||lc|r||}{\crl - MÄsĂc & zboŞà & cena\hfil \crli \tskip.2em + mÄsĂc & zboŞà & cena\hfil \crli \tskip.2em leden & noĹĽas & 14 kKÄ \cr Ăşnor & skejt & 2 kKÄ \cr Äervenec & jachtiÄka & 3,4 MKÄ \crl} @@ -912,7 +920,7 @@ UvedenĂ˝ pĹĂklad povede na nĂĄsledujĂcĂ vĂ˝sledek: \medskip \hfil\table{||lc|r||}{\crl - MÄsĂc & zboŞà & cena\hfil \crli \tskip.2em + mÄsĂc & zboŞà & cena\hfil \crli \tskip.2em leden & noĹĽas & 14 kKÄ \cr Ăşnor & skejt & 2 kKÄ \cr Äervenec & jachtiÄka & 3,4 MKÄ \crl} @@ -1022,10 +1030,10 @@ TBN, kapitolu Ätvrtou. Makro "\inspic <jmĂŠno>.<pĹĂpona><mezera>" vloŞà obrĂĄzek. Je-li pĹedem nastaven registr "\picw", mĂĄ obrĂĄzek poĹžadovanou ĹĄĂĹku. -ImplicitnĂ hodonta registru je 0\,pt, coĹž znamenĂĄ, Ĺže bude obrĂĄzek vloĹžen +ImplicitnĂ hodnota registru je 0\,pt, coĹž znamenĂĄ, Ĺže bude obrĂĄzek vloĹžen ve svĂŠ pĹirozenĂŠ velikosti. Analogicky lze nastavit výťku obrĂĄzku registrem "\picheight". -PĹĂpony souboru s obrĂĄzkem mohou bĂ˝t: "png", "jpg", "jbig2", "pdf". +PĹĂpony souboru s obrĂĄzkem mohou bĂ˝t "png", "jpg", "jbig2", "pdf". ObrĂĄzek je vyhledĂĄn v adresĂĄĹi "\picdir". Toto makro je implicitnÄ prĂĄzdnĂŠ, tj. obrĂĄzek je vyhledĂĄn v aktuĂĄlnĂm adresĂĄĹi. @@ -1045,7 +1053,7 @@ do PDF dokumentu jen jednou pdf\TeX{}ovĂ˝m pĹĂkazem "\pdfximage" a dĂĄle opakovat jeho zobrazenĂ na rĹŻznĂ˝ch mĂstech dokumentu pomocĂ "\pdfrefximage". Dokumentace k pdf\TeX{}u Ĺekne vĂc. -Makro "\inspic" pracuje jen v pdf\TeX{}u pĹi vĂ˝stupu do PDF. Pokud mĂĄte +Makro "\inspic" pracuje jen pĹi vĂ˝stupu do PDF. Pokud mĂĄte nastaven vĂ˝stup do DVI, mĹŻĹžete pouĹžĂt makro "epsf.tex". Vzhledem k omezenĂ˝m moĹžnostem (obrĂĄzek jen ve formĂĄtu EPS) nenĂ tento zpĹŻsob prĂĄce s obrĂĄzky v makru OPmac podporovĂĄn. @@ -1106,14 +1114,13 @@ tĹetĂ: \bigskip\bigskip - \sec PoznĂĄmky pod Äarou a na okraji %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% {\bf PoznĂĄmku pod Äarou} vytvoĹĂte pomocĂ "\fnote{<text>}". V mĂstÄ tohoto zĂĄpisu v textu se objevĂ automaticky generovanĂĄ znaÄka a pod Äarou dole na strĂĄnce -je tato znaÄka zopakovanĂĄ a vedle nĂ je <text>. +je tato znaÄka zopakovĂĄna a vedle nĂ je <text>. ZnaÄka je implicitnÄ definovanĂĄ jako ÄĂslo v exponentu nĂĄsledovanĂŠ zĂĄvorkou. ÄĂslovĂĄnĂ poznĂĄmek je na kaĹždĂŠ strĂĄnce zapoÄato @@ -1144,11 +1151,11 @@ PĹĂklad: \begtt {\typoscale[/1200]\table{||lc|r||}{\crl - MÄsĂc & zboŞà & cena\hfil \crli \tskip.2em + mÄsĂc & zboŞà & cena\hfil \crli \tskip.2em leden & noĹĽas\fnotemark1 & 14 kKÄ \cr Ăşnor & skejt\fnotemark2 & 2 kKÄ \cr Äervenec & jachtiÄka\fnotemark3 & 3,4 MKÄ \crl}} -\par\nobreak \fnotetext{notebook}\fnotetext{scateboard}\fnotetext{jachta} +\par\nobreak \fnotetext{notebook}\fnotetext{skateboard}\fnotetext{jachta} \endtt % ÄĂsla za slovy "\fnotemark" je tĹeba psĂĄt od jednĂŠ v kaĹždĂŠ tabulce/boxu. @@ -1188,7 +1195,7 @@ nahoru. PĹi zĂĄpornĂŠ hodnotÄ se posune dolĹŻ. NapĹĂklad %%%%%%%%%%%%%%%%%%%%%%%%% {\bf Odkazy.} -PomocĂ "\cite[<lejblĂk>]" nebo "\cite[<lejbĂk1>,<lejblĂk2>,<lejblĂk3>]" +PomocĂ "\cite[<lejblĂk>]" nebo "\cite[<lejblĂk1>,<lejblĂk2>,<lejblĂk3>]" atd. vytvoĹĂme v~textu odkazy na poloĹžky v seznamu literatury. V seznamu literatury je tĹeba uvĂŠst zĂĄznamy, kterĂŠ majĂ odkazovanĂŠ lejblĂky. Tyto zĂĄznamy dostanou v seznamu automaticky vygenerovanĂĄ ÄĂsla a sekvence @@ -1238,16 +1245,16 @@ JednotlivĂŠ zpĹŻsoby jsou nĂĹže probrĂĄny podrobnÄji. \par\nobreak \begtt -\bib [tbn] Petr OlĹĄĂĄk. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. +\bib [tbn] Petr OlĹĄĂĄk. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001. \bib [tst] Petr OlĹĄĂĄk. {\it TypografickĂ˝ systĂŠm \TeX.} - 269~s. Praha: CSTUG, 1995. + 300~s. Brno: Konvoj, 2000. \endtt % Výťe uvedenĂĄ ukĂĄzka dĂĄ nĂĄsledujĂcĂ vĂ˝stup: \medskip -\bib[tbn] Petr OlĹĄĂĄk. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. +\bib[tbn] Petr OlĹĄĂĄk. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001. \bib[tst] Petr OlĹĄĂĄk. {\it TypografickĂ˝ systĂŠm \TeX.} - 269~s. Praha: CSTUG, 1995. + 300~s. Brno: Konvoj, 2000. \medskip Je moĹžnĂŠ pouĹžĂt rozĹĄĂĹenĂ˝ zpĹŻsob zĂĄpisu "\bib [<lejblĂk>] = {<znaÄka>} <text zĂĄznamu>". Ădaj "<znaÄka>" se @@ -1255,8 +1262,8 @@ pouĹžije do odkazĹŻ pĹi zapnutĂŠm "\nonumcitations". Kolem rovnĂtka musejĂ bĂ NapĹĂklad: \begtt -\bib [tbn] = {OlĹĄĂĄk, 1997} - OLĹ ĂK, P. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997. +\bib [tbn] = {OlĹĄĂĄk, 2001} + OLĹ ĂK, P. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001. \endtt \medskip\noindent @@ -1290,7 +1297,7 @@ pokyny pro Bib\TeX{} do souboru "<dokument>.aux" a zjistĂ, Ĺže soubor WARNING: .bbl file doesn't exist. Use the ``bibtex <dokument>'' command. \endtt -PĹejdÄte tedy na pĹĂkazovĂ˝ ĹĂĄdek a napĂĹĄeme "bibtex <dokument>". TĂm se +PĹejdÄte tedy na pĹĂkazovĂ˝ ĹĂĄdek a napiĹĄte "bibtex <dokument>". TĂm se spustĂ program Bib\TeX{}, kterĂ˝ pĹeÄte ze souboru "<dokument>.aux" vstupnĂ pokyny (kterou otevĹĂt ".bib" databĂĄzi, kterĂ˝ ".bst" styl a jakĂŠ lejblĂky jsou poĹžadovĂĄny) a na zĂĄkladÄ toho vygeneruje soubor "<dokument>.bbl", kterĂ˝ @@ -1376,7 +1383,7 @@ podle rĹŻznĂ˝ch stylĹŻ rĹŻznĂŠ soubory typu "mybbl-plain.bbl", \noindent {\bf PĹĂmĂŠ ÄtenĂ ".bib" databĂĄze} je moĹžnĂŠ po "\input opmac-bib.tex". Tato pĹĂdavnĂĄ makra navĂc pouĹžĂvajĂ externĂ balĂÄek na ÄtenĂ ".bib" souborĹŻ -"librarian.tex" od Paula Isamberta. UĹžitĂ je podobnĂŠ, jako pĹi "\usebbl": +"librarian.tex" od Paula Isamberta. UĹžitĂ je podobnĂŠ jako pĹi "\usebbl": \begtt \usebib/c (<style>) <bib-bĂĄze> % Ĺadit podle poĹadĂ citace (c=cite), @@ -1394,7 +1401,7 @@ pĹedstav. VĂce informacĂ je na konci souboru "opmac-bib.tex". \noindent {\bf FormĂĄtovĂĄnĂ seznamu literatury} je ĹĂzeno makrem "\printbib", kterĂŠ je vloĹženo na zaÄĂĄtek kaĹždĂŠ poloĹžky v seznamu. -ImplicitnĂ hodnota makra tiskne ÄĂsla poloĹžek do +ImplicitnÄ makro tiskne ÄĂsla poloĹžek do hranatĂ˝ch zĂĄvorek a pĹi pouĹžitĂ "\nonumcitations" pĹedsadĂ prvnĂ ĹĂĄdek poloĹžky a nepĹidĂĄvĂĄ nic. Makro mĹŻĹže vyuĹžĂt "\the\bibnum" pro tisk ÄĂsla nebo "\the\bibmark" pro tisk znaÄky (pĹi "\nonumcitations"). @@ -1471,7 +1478,7 @@ je moĹžnĂŠ pouĹžĂt nĂĄsledujĂcĂ globĂĄlnĂ pĹepĂnaÄe: Plain\TeX{} nastavuje levĂ˝ okraj 1~in a ĹĄĂĹku sazby ("\hsize") nastavuje tak, aby i pravĂ˝ okraj pĹi formĂĄtu papĂru \uv{letter} byl 1\,in. TakĂŠ hornĂ a -dolnĂ okraj (do kterĂŠho pĹesahuje zĂĄhlavĂ a strĂĄnkovĂĄ ÄĂslice) jsou +dolnĂ okraj (do kterĂŠho pĹesahuje zĂĄhlavĂ a ÄĂsla stran) jsou nastaveny na 1~in pĹi formĂĄtu papĂru \uv{letter} a tĂm je urÄena výťka sazby ("\vsize"). \csplain{} dÄlĂĄ totĂŠĹž, tj. okraje jsou 1~in, ale formĂĄt papĂru je~A4.\fnote @@ -1504,14 +1511,25 @@ s~výťkou sazby "\vsize". NapĹĂklad % \hsize, \vsize beze zmÄny. \endtt -UĹživatel mĹŻĹže pĹed pouĹžitĂm "\margins" definovat vlastnĂ <formĂĄt> papĂru pomocĂ -pĹĂkazu "\sdef{pgs:<formĂĄt>}{(<ĹĄĂĹka>,<výťka>)<jednotka>}". -Opmac napĹĂklad implicitnÄ definuje: +Ădaj "<formĂĄt>" mĹŻĹže bĂ˝t tĂŠĹž ve tvaru "(<ĹĄĂĹka>,<výťka>)<jednotka>", kde +"<jednotka>" je nepovinnĂĄ a pokud chybĂ, pouĹžije se jednotka za Ăşdaji s +okraji. Tedy tĹeba \begtt -\sdef{pgs:a4}{(210,297)mm} \sdef{pgs:letter}{(8.5,11)in} -\sdef{pgs:b5}{(176,250)mm} \sdef{pgs:a4l}{(297,210)mm} +\margins/1 (100,200) (7,7,7,7)mm \endtt +% +deklaruje papĂr o rozmÄru 100$\times$200\,mm a s okraji 7\,mm po kaĹždĂŠ +stranÄ. Mezery pĹed a za Ăşdajem "<formĂĄt>" nelze vynechat. + +UĹživatel mĹŻĹže takĂŠ pĹed pouĹžitĂm "\margins" definovat vlastnĂ <formĂĄt> papĂru pomocĂ +pĹĂkazu "\sdef{pgs:<formĂĄt>}{(<ĹĄĂĹka>,<výťka>)<jednotka>}". +%Opmac napĹĂklad implicitnÄ definuje: +% +%\begtt +%\sdef{pgs:a4}{(210,297)mm} \sdef{pgs:letter}{(8.5,11)in} +%\sdef{pgs:b5}{(176,250)mm} \sdef{pgs:a4l}{(297,210)mm} +%\endtt Celou sazbu na Ăşkor okrajĹŻ je moĹžno zvÄtĹĄit/zmenĹĄit pĹĂkazem "\magscale[<factor>]". NapĹĂklad "\magscale[500]" zmenĹĄĂ sazbu na polovinu. diff --git a/Master/texmf-dist/doc/cstex/prvni.pdf b/Master/texmf-dist/doc/cstex/prvni.pdf Binary files differindex 27d61de1727..1940d05919b 100644 --- a/Master/texmf-dist/doc/cstex/prvni.pdf +++ b/Master/texmf-dist/doc/cstex/prvni.pdf diff --git a/Master/texmf-dist/doc/cstex/prvni.tex b/Master/texmf-dist/doc/cstex/prvni.tex index 7b0f8e0b932..346e3cc3d6b 100644 --- a/Master/texmf-dist/doc/cstex/prvni.tex +++ b/Master/texmf-dist/doc/cstex/prvni.tex @@ -136,7 +136,7 @@ OstatnĂ v manuĂĄlu pouĹžitĂŠ nĂĄzvy programovĂ˝ch produktĹŻ, firem apod. mohou bĂ˝t ochrannĂ˝mi znĂĄmkami nebo registrovanĂ˝mi ochrannĂ˝mi znĂĄmkami pĹĂsluĹĄnĂ˝ch vlastnĂkĹŻ. \vfill -Copyright $\copyright$ RNDr. Petr OlĹĄĂĄk, 1999, 2012, 2013 +Copyright $\copyright$ RNDr. Petr OlĹĄĂĄk, 1999, 2012, 2013, 2015 \par Tento text si mĹŻĹžete vytisknout pro vlastnĂ potĹeby. Je k~dispozici spoleÄnÄ s~balĂkem \CS\TeX{} na @@ -203,8 +203,10 @@ odkazujĂ na tzv.~\uv{mĂstnĂ pĹĂruÄku} (Local Guide), kterĂĄ by mÄla toto rozhranĂ popisovat. Tato pĹĂruÄka je zĂĄvislĂĄ na pouĹžitĂŠm operaÄnĂm systĂŠmu, na Äase jejĂho vzniku, na pouĹžitĂŠ distribuci \TeX{}u, na vybranĂŠm textovĂŠm editoru a nÄkdy tĂŠĹž na administrĂĄtorovi systĂŠmu, kterĂ˝ konfiguruje nÄkterĂŠ -vÄci specificky pro vÄtĹĄĂ pohodlĂ uĹživatelĹŻ. Ani v~tomto manuĂĄlu nejsou -uvedeny podrobnosti o~uĹživatelskĂŠm rozhranĂ. +vÄci specificky pro vÄtĹĄĂ pohodlĂ uĹživatelĹŻ. Texty o \TeX{}u uĹživatelskĂŠ +prosĹedĂ vÄtĹĄinou neuvĂĄdÄjĂ (je totiĹž zĂĄvislĂŠ na okolnostech) a popisujĂ pouze +na systĂŠmu nezĂĄvislĂŠ vlastnosti \TeX{}u jako formĂĄtoru. Ani tento manuĂĄl +nenĂ v tomto ohledu vĂ˝jimkou. PĹi prĂĄci s \TeX{}em je obvyklĂŠ mĂt otevĹen v~jednom okĂŠnku textovĂ˝ editor, ve kterĂŠm uĹživatel pĂĹĄe nebo @@ -222,8 +224,8 @@ prĂĄce s~\TeX{}em nepouĹžĂvĂĄme. Zvyklosti ve znaÄkovĂĄnĂ dokumentu jsou vesmÄs zĂĄvislĂŠ na pouĹžitĂŠm {\it formĂĄtu} \TeX{}u, kterĂ˝ modifikuje jeho chovĂĄnĂ. ĹĂkĂĄme, Ĺže je dokument napsĂĄn ve formĂĄtu {\it \LaTeX}, pokud je nÄkde na zaÄĂĄtku -vstupnĂho textu dokumentu uvedena znaÄka "\documentclass" nebo -"\documentstyle". Pokud tam tuto znaÄku nenajdeme, mĹŻĹžeme +vstupnĂho textu dokumentu uvedena znaÄka "\documentclass" (nebo dĹĂve +"\documentstyle"). Pokud tam tuto znaÄku nenajdeme, mĹŻĹžeme pĹedpoklĂĄdat, Ĺže je dokument napsĂĄn ve formĂĄtu {\it plain}. Ten umoĹžĹuje psĂĄt jen anglickĂŠ texty. V ÄechĂĄch nebo na slovensku se mĂsto formĂĄtu plain @@ -245,10 +247,10 @@ vstupnĂ text dokumentu pĹipraven v~souboru {\tt dokument.tex}. pĹĂkazovĂ˝ ĹĂĄdek & komentĂĄĹ \tabline "tex dokument" & anglickĂ˝ dokument, formĂĄt plain - "csplain dokument" & formĂĄt csplain, vĂ˝stup do DVI "pdfcsplain dokument" & formĂĄt csplain, vĂ˝stup do PDF - "latex dokument" & formĂĄt \LaTeX, vĂ˝stup do DVI + "csplain dokument" & formĂĄt csplain, vĂ˝stup do DVI "pdflatex dokument" & formĂĄt \LaTeX, vĂ˝stup do PDF + "latex dokument" & formĂĄt \LaTeX, vĂ˝stup do DVI \endtable VĹĄimneme si, Ĺže v~pĹĂkazovĂŠm ĹĂĄdku pĂĹĄeme za jmĂŠno formĂĄtu nĂĄzev vstupnĂho @@ -259,14 +261,16 @@ prĂĄvÄ tĂmto formĂĄtem. Pokud nemĂĄme ve svĂŠ distribuci \TeX{}u formĂĄt csplain, je to ĹĄpatnĂŠ znamenĂ. Nebudeme totiĹž schopni zpracovat ani tento manuĂĄl ani ukĂĄzku, kterĂĄ je v~nÄm obsaĹžena. V~takovĂŠm pĹĂpadÄ lze doporuÄit -poohlĂŠdnout se po \CS\TeX{}u, kterĂ˝ najdeme napĹĂklad na -\url{http://petr.olsak.net/cstex.html}. +poohlĂŠdnout se www strĂĄnce csplainu, kterou najdeme napĹĂklad na +\url{http://petr.olsak.net/csplain.html}. \sekce Jdeme na to %%%%%%%%%%%%%%%%%% -Nejprve zkusĂme v~nÄjakĂŠm textovĂŠm editoru vytvoĹit soubor {\tt pokus.tex}, +Nejprve zkusĂme v~nÄjakĂŠm textovĂŠm editoru vytvoĹit soubor {\tt +pokus.tex}\footnote{Soubor musĂ bĂ˝t kĂłdovanĂ˝ pĹi pouĹžitĂ cslainu z roku 2013 +a novÄjĹĄĂho ~v UTF-8.}, kterĂ˝ obsahuje zkuĹĄebnĂ vÄtu: \begtt %-------------------------------------------------------------- @@ -286,8 +290,8 @@ oÄekĂĄvanĂ˝ vĂ˝sledek: \enduk %------------------------------------------------------------- \pp PĹitom dole na strĂĄnce je jeĹĄtÄ vytiĹĄtÄno ÄĂslo strany:~1. -Povelem {\tt csplain pokus} dostaneme tentýŞ vĂ˝sledek, ale -vĂ˝stupem je DVI soubor. +%Povelem {\tt csplain pokus} dostaneme tentýŞ vĂ˝sledek, ale +%vĂ˝stupem je DVI soubor. Pokud zkusĂme tentýŞ soubor zpracovat \TeX{}em s~formĂĄtem plain (pĹĂkazovĂ˝ ĹĂĄdek {\tt tex pokus}), vĂ˝stup bude zmrĹĄenĂ˝: \uv{Ahoj svte!}. @@ -412,6 +416,7 @@ prohlĂĹžeÄem {\tt dvi} souboru nĂĄsledujĂcĂ vĂ˝sledek: \par\nobreak\medskip} % konec ĹĂĄdku, zakĂĄzanĂ˝ zlom, menĹĄĂ mezera \bigskipamount=12truept \medskipamount=6truept \let\itemskip=\medskip % kolem vĂ˝Ätu prvkĹŻ bude menĹĄĂ mezera \medskip +\csname mitvariables\endcsname \nadpis MĹŻj prvnĂ dokument @@ -781,22 +786,23 @@ To by pro zaÄĂĄtek staÄilo. PĹĂkazem \verb|\bye| ukonÄĂme svĂŠ pokusy. \end{document} \endtt %-------------------------------------------------------------- -Poznamenejme, Ĺže zavedenĂ doplĹkovĂŠho stylu {\tt czech} zpĹŻsobĂ aktivaci -ÄeskĂ˝ch vzorĹŻ dÄlenĂ slov a pĂsma s~ÄeskĂ˝mi znaky. Bez pouĹžitĂ tohoto stylu -pracuje \LaTeX{} implicitnÄ s~anglickĂ˝mi vzory dÄlenĂ slov a s~pĂsmy, kterĂĄ -neobsahujĂ hĂĄÄkovanĂĄ a ÄĂĄrkovanĂĄ pĂsmena. +%Poznamenejme, Ĺže zavedenĂ doplĹkovĂŠho stylu {\tt czech} zpĹŻsobĂ aktivaci +%ÄeskĂ˝ch vzorĹŻ dÄlenĂ slov a pĂsma s~ÄeskĂ˝mi znaky. Bez pouĹžitĂ tohoto stylu +%pracuje \LaTeX{} implicitnÄ s~anglickĂ˝mi vzory dÄlenĂ slov a s~pĂsmy, kterĂĄ +%neobsahujĂ hĂĄÄkovanĂĄ a ÄĂĄrkovanĂĄ pĂsmena. UpozorĹujeme, Ĺže v~souÄasnĂŠ dobÄ je bohuĹžel \LaTeX{}ĹŻ nÄkolik druhĹŻ. \uv{StarĂ˝ \LaTeX} (verze~2.09), ve kterĂŠm se -struktura zĂĄhlavĂ dokumentu mĂrnÄ liĹĄila. DĂĄle je pro potĹeby -ÄeskĂ˝ch dokumentĹŻ nutnĂŠ rozliĹĄovat mezi \LaTeX{}em a \CS\LaTeX{}em -(druhĂ˝ jmenovanĂ˝ je dnes povaĹžovĂĄn zastaralĂ˝). -\LaTeX{} implementuje -ÄeskĂ˝ a slovenskĂ˝ jazyk pomocĂ balĂku maker \uv{Babel} nebo -\uv{polyglossia}, zatĂmco \CS\LaTeX{} mÄl k tomu vlastnĂ stylovĂ˝ soubor. -\CS\LaTeX{} byl u nĂĄs mnoho let pouĹžĂvĂĄn jako jistĂĄ -modifikace \LaTeX{}u. UvedenĂĄ ukĂĄzka pĹedpoklĂĄdĂĄ \LaTeX{} s balĂÄkem -Babel. +struktura zĂĄhlavĂ dokumentu mĂrnÄ liĹĄila (byl pouĹžit pĹĂkaz "\documentstyle" +mĂsto "\documentclass"). DĂĄle se pro potĹeby +ÄeskĂ˝ch dokumentĹŻ dlouho pouĹžĂval mĂsto \LaTeX{}u tzv. \CS\LaTeX{}, kterĂ˝ se +vyhĂ˝bal balĂÄku "babel". OvĹĄem \CS\LaTeX{} je dnes takĂŠ povaĹžovĂĄn zastaralĂ˝. +UvedenĂĄ ukĂĄzka zahrnuje klasickĂ˝ \LaTeX{}, Äasto oznaÄovanĂ˝ jako verze 2e. + +Na druhĂŠ stranÄ na novÄjĹĄĂch modifikacĂch \TeX{}u (Lua\TeX{} a Xe\TeX) je vybudovĂĄna novÄjĹĄĂ +verze \LaTeX{}u zvanĂĄ Lua\LaTeX{} a Xe\LaTeX. V tĂŠto novÄjĹĄĂ verzi se nepouĹžĂvajĂ +balĂÄky {\tt inputenc}, {\tt fontenc} ani {\tt babel}, ale mĂsto toho balĂÄky +{\tt fontspec} a {\tt polyglossia}. O tom ale tento ĂşvodnĂ text nepojednĂĄvĂĄ. VĂ˝sledek po zpracovĂĄnĂ naĹĄeho dokumentu \LaTeX{}em v~tomto manuĂĄlu pro struÄnost neuvĂĄdĂme. Kdo chce, mĹŻĹže si sĂĄm \LaTeX{} |