From 3718baf0c743e1846d48839f867ad5924e79c8a3 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 9 May 2014 21:59:33 +0000 Subject: cstex (9may14) git-svn-id: svn://tug.org/texlive/trunk@33942 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/cstex/README-opmac | 5 +- Master/texmf-dist/doc/cstex/opmac-d.pdf | Bin 734297 -> 0 bytes Master/texmf-dist/doc/cstex/opmac-d.tex | 244 ++++-- Master/texmf-dist/doc/cstex/opmac-u-en.pdf | Bin 0 -> 227290 bytes Master/texmf-dist/doc/cstex/opmac-u-en.tex | 1251 ++++++++++++++++++++++++++++ Master/texmf-dist/doc/cstex/opmac-u.pdf | Bin 257522 -> 262768 bytes Master/texmf-dist/doc/cstex/opmac-u.tex | 129 ++- 7 files changed, 1531 insertions(+), 98 deletions(-) delete mode 100644 Master/texmf-dist/doc/cstex/opmac-d.pdf create mode 100644 Master/texmf-dist/doc/cstex/opmac-u-en.pdf create mode 100644 Master/texmf-dist/doc/cstex/opmac-u-en.tex (limited to 'Master/texmf-dist/doc') diff --git a/Master/texmf-dist/doc/cstex/README-opmac b/Master/texmf-dist/doc/cstex/README-opmac index 53632ef9a14..b3a34b07dc5 100644 --- a/Master/texmf-dist/doc/cstex/README-opmac +++ b/Master/texmf-dist/doc/cstex/README-opmac @@ -1,7 +1,8 @@ The documentation of the OPmac is: -opmac-u.tex,pdf ... user documentation (in Czech) -opamc-d.tex,pdf ... technical documentation (in Czech) +opmac-u.tex,pdf ... user documentation (in Czech) +opmac-u-en.tex,pdf ... user documentation (in English) +opamc-d.tex ... technical documentation (in Czech) See http://petr.olsak.net/opmac.html for more information. diff --git a/Master/texmf-dist/doc/cstex/opmac-d.pdf b/Master/texmf-dist/doc/cstex/opmac-d.pdf deleted file mode 100644 index 3bba0387253..00000000000 Binary files a/Master/texmf-dist/doc/cstex/opmac-d.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/cstex/opmac-d.tex b/Master/texmf-dist/doc/cstex/opmac-d.tex index 32fef6bf372..735087fd6a8 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{Nov. 2013} +\def\projectversion{May 2014} \def\headtitle{OPmac} \widowpenalty=10000 @@ -253,6 +253,7 @@ u \dgn \nb cnvhook \dgn \nb pghook \dgn \nb toclinehook +\dgn \nb fnotehook \dgn \nb mnotehook \dgn \nb captionhook @@ -1658,7 +1659,7 @@ charakterizuje obvyklou mo 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. +K~tomu právě slouží obsah makra \db destheight. \inext{dest}{\empty}{+-} @@ -1730,15 +1731,13 @@ Makro \db url "{}" se pou 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. +konci. Makro "\|" je lokálně definováno jako prázdné, ale při "\urlfont" +nabývá hodnoty \db urlspecchar. Takže ve skutečném odkaze se neprojeví, ale +při tisku ano. Uživatel si může "\urlspecchar" definovat dle svých představ +(například jako "\hfil\break"). \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{}" pracuje tak, že uloží "" do "\tmpb" a nechá vyměnit příslušné znaky uvnitř "\tmpb" pomocí "\replacestrings". Nakonec vytiskne "" prostřednictvím "\ulink". @@ -1748,8 +1747,9 @@ n 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". +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 "{}{}" vymění v makru "\tmpb" veškeré výskyty "" za "". Pro tento účel definuje pracovní @@ -2238,6 +2238,27 @@ P \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}{++} + 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: @@ -2255,31 +2276,32 @@ pak na definovanost "\mnotesfixed" pt \subsec Bibliografické reference %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -Nejprve uvedeme deklarace deskriptoru \db auxfile a čítačů +Nejprve uvedeme deklarace deskriptoru \db auxfile, stringu \db bibmark a čítačů \db bibnum a \db lastcitenum. \inext{auxfile}{\empty}{+-} -Makro \db cite "[,,...]" si prostřednictvím \db citeA -zavolá "\rcite{}" pro každou jednotlivou položku oddělenou čárkou ve -svém parametru. Makro "\citeA" v sobě skrývá fintu: parametr nemá jediný, -ale dva "#1#2". Protože první z nich je neseparovaný, ignorují se případné -mezery za čárkou a "#1" obsahuje první písmeno "". Uvnitř makra -měníme \db citesep, což je čárka a mezera, která se má mezi údaji -vytisknout. Makro \db nocite "[,,...]" je definováno -stejně, jen připraví jiný význam makra "\docite", krz které budeme tisknout -v "\rcite" potřebný údaj. Veškerá -činnost maker "\cite" a "\nocite" probíhá uvnitř skupiny. +Makro \db cite "[,,...]" si opakovaně zavolá +"\citeA", kde se připraví čísla citovaných publikací do +lokálně tvořeného seznamu "\savedcites". Poté zavolá "\printsavedcites", +které lokálně tvořený seznam čísel vytiskne. Kromě toho makro "\citeA" udělá +plno dalších potřebných věcí, jak uvidíme za chvíli. +Makro \db nocite se chová jako "\cite" až na to, že se nic netiskne. +Makro \db rcite vytiskne čísla publikací, ale bez hranatých závorek kolem. +Makro \db savedcites je globálně prázdné a zaplní se vždy znovu uvnitř +skupiny vymezené makrem "\cite" nebo "\nocite" nebo "\rcite". \inext{cite}{\empty}{+-} -Makro \db rcite "{}" řeší zhruba řečeno následující věci: - +Makro \db citeA "," řeší zhruba řečeno následující věci: \begitems \item * Zjistí, zda je definován "\csname bib:\endcsname". Pokud ano, - vytiskne jeho hodnotu, pokud ne, vytiskne do textu otazníky a na terminál - varování. Tato kontrolní sekvence začne být známá po použití + přidá obsah tohoto makra (což je číslo citovaného záznamu) + do "\savedcites". Pokud ne, přidá do + "\savedcites" otazník a na terminál vypíše varování. + Kontrolní sekvence "\csname bib:\endcsname" bude obsahovat + "<číslo citace>" po použití "\bib[]" nebo "\bibitem{}". Tato makra uloží odpovídající informaci do REF souboru, odkud ji při opakovaném \TeX{}ování vyzvedneme. Je to klasická činnost, kterou provozujeme i u ostatních @@ -2288,41 +2310,45 @@ Makro \db rcite "{) { +function citeA() { if ( == '*') { \citelist '*'; return; } if (\bib: == nedef) { - \citelist ; + \citelist ; "Warning, cite [label] unknown"; - "??"; + \savedcites "?,"; + \savedcites; \bib: = empty; return; if (\bib: == empty) { - "??"; + \savedcites "?,"; + \savedcites; return; } if (\bib: končí znakem '&') { - \citelist ; + \citelist ; \bib:; } - \bib:; + \savedcites "\bib:,"; } \endtt -\def\begtthook{\langleactive} Výklad kódu: Protože chceme šetřit pamětí bufferu "\citelist", zapisujeme tam každý "" jen jednou. Zda se nedeklarovaný "" vyskytl -poprvé poznáme podle nedefinované hodnoty "\bib:". Zda se vyskytl -později znovu poznáme podle toho, že má hodnotu "empty". Zda se deklarovaný -"" vyskytl poprvé poznáme podle znaku "&" v jeho obsahu. +poprvé, poznáme podle nedefinované hodnoty "\bib:". Zda se vyskytl +nedeklarovaný "" později znovu poznáme podle toho, že má makro +"\bib:" hodnotu "empty". Zda se deklarovaný +"" vyskytl poprvé poznáme podle znaku "&" v~jeho obsahu. Návrh kódu v C-like notaci nyní převedeme do maker v \TeX{}u: -\inext{rcite}{^^B\cbrace}{++} +\inext{citeA}{^^B\cbrace}{++} +Makro snímá svůj parametr jako "#1#2," aby mohly být "" odděleny +před čárkou mezerou, která je neseparovaným parametrem "#1" ignorována. Asi nejzajímavější vychytávka v tomto makru se týká testu na znak "&". Implicitně při čtení REF souboru se do makra "bib:" uloží "\bibnn{}&". Příkaz "\if" za sebou totálně expanduje vše @@ -2334,48 +2360,130 @@ Odstran tentokrát "\bibnn" první parametr "" zopakuje a druhý parametr se znakem "&" zahodí. -Než se pustíme do výkladu makra "\docite", připravíme si makra \db printcite -"" a \db printdashcite "". První z nich tiskne jednu -položku oddělenou od případné -další čárkou, druhé tiskne položku, před kterou předchází pomlčka -vyznačující interval položek. Pointa makra "\printcite" je v tom, že si samo -po prvním zavolání připraví separátor "\citesep" (který je na začátku -činnosti "\cite" prázdný), takže při opakovaném volání "\printcite" se -vytiskne i požadovaný separátor. Pomlčka v "\printdashcite" je schována do -"\hbox", aby nedocházelo těsně za ní ke zlomu řádku. - -\inext{printcite}{\empty}{+-} - -Makro \db docite "" vytiskne otazníky při prázdném parametru a jinak +Makro \db printsavedcites případně setřídí seznam "\savedcites" +podle velikosti zavoláním "\sortcitesA" +a dále opakovaně na jednotlivé prvky seznamu zavolá makro +"\citeB", které prvky seznamu vytiskne a případně je zkrátí pomocí intervalů +(místo "3,4,5" píše "3--5"). Pomocnou proměnnou "\tmpb" využije makro +"\citeB", jak uvidíme později při výkladu tohoto makra. + +\inext{printsavedcites}{^^B\cbrace}{++} + +Makro \db sortcitesA seřadí seznam "\savedcites" podle velikosti. Takže třeba +"4,7,3,5," se promění na "3,4,5,7,". Implicitně je definováno jako prázdné +makro, takže řazení se neprovede. Nicméně uživatel ho použitím makra +\db sortcitations v~hlavičce svého dokumentu probudí k životu. + +Oživené "\sortcitesA" nejprve vyvrhne do čtecí fronty obsah "\savedcites" +ukončený další čárkou (máme zde dvě čárky vedle sebe) a následně spustí \db +sortcitesB, které postupně odebírá jednotlivé prvky ze čtecí fronty, předává +je do nově tvořeného setříděného seznamu, kam je vkládá na správné místo. +Výchozí hodnota nově tvořeného seznamu obsahuje číslo "300000", které bude +vždy na konci seznamu, protože se předpokládá větší než jakýkoli tříděný +prvek. Zajímavý trik s "\edef\savedcites{...\expandafter}" způsobí, že se +"\savedcites" nejprve vyvrhne (po aplikaci dvou "\expandafter") do čtecí +fronty a teprve poté dostane novou hodnotu pomocí "\edef". Na konci makra +"\sortcitesA" ze seznamu odebereme koncové číslo "300000". + +\inext{sortcitesA}{\count=2 ^^B\cbrace}{++} + +Vložení prvku do zatříděného seznamu probíhá pomocí \db sortcitesC, což je +makro, které nově tvořený seznam, který je nyní také vyvržen ve čtecí +frontě, projde zleva doprava, dokud nenarazí na číslo větší než vkládané. +Při té činnosti opakovaně sbírá hodnoty a vkládá je zpět do "\savedcites". +Je-li zařazovaný prvek "\tmpa" menší než odebraný prvek z fronty, vloží se +pomocí \db sortcitesD do "\savedcites" původní "\savedcites" následovaný +"\tmpa" následovaný testovaným prvkem následovaný zbytkem vstupní +fronty (až po "\end"). + +\inext{sortcitesC}{\empty}{+-} + +Makro \db citeB "," ukončí činnost při prázdném parametru, +jinak se po vytištění "" zavolá znova. +Vytiskne dva otazníky, je-li parametrem otazník, a jinak vytiskne prostřednictvím "\printcite" jednu "". Kromě toho řeší při nenulovém "\lastcitenum" slučování po sobě následujících čísel položek do intervalů. Naposledy vytištěnou položku uchovává v registru "\lastcitenum". Při příštím zavolání zvětší "\lastcitenum" o jedničku a srovná ji s -"". Jsou-li si rovny, jde o následující položku v řadě a takovou +"". Jsou-li si rovny, jde o~následující položku v řadě a takovou položku netiskneme, nicméně si její hodnotu uchováme v "\tmpb". Pokud je mezi souvislou řadou položek díra, tj. "\lastcitenum" se nerovná "", pak dovytiskneme předchozí interval pomocí "\printdashcite{\the\tmpb}" a následně vytiskneme i "". Makro \db shortcitations jednoduše nastavuje "\lastcitenum" na nenulovou -hodnotu a tím probudí k životu hlavní část makra "\docite". +hodnotu a tím probudí k životu hlavní část makra "\citeB". -\inext{docite}{\empty}{+-} +\inext{citeB}{\empty}{+-} -Následuje kód makra \db bib "[]", které prostřednictvím -\db wbib "{}{}" vloží do REF souboru propojené údaje o -tom, jaké má "" přiřazeno číslo v seznamu literatury. -Makro "\wbib" připojí před "\wref" příkaz "\immediate" právě tehdy, když -"\wref" je ve stavu, kdy skutečně zapisuje do souboru REF. -Makro \db Xbib pracuje při čtení souboru REF a dělá to, co jsme si řekli už -dříve: nastaví hodnotu makra "\bib:" na "\bibnn{}&". +Činnost "\cite" je konečně završena voláním maker +\db printcite "" a \db printdashcite "". První z nich tiskne jednu +položku oddělenou od případné +další čárkou, druhé tiskne položku, před kterou předchází pomlčka +vyznačující interval položek. Pointa makra "\printcite" je v tom, že si samo +po prvním zavolání upraví separátor \db citesep, který je globálně a tedy na začátku +činnosti "\cite" prázdný. Při opakovaném volání "\printcite" se tedy +vytiskne i požadovaný separátor. Pomlčka v~"\printdashcite" je schována do +"\hbox", aby nedocházelo těsně za ní ke zlomu řádku. + +\inext{printcite}{\empty}{+-} + +Při použití \db nonumcitations potlačíme případné předchozí +"\shortcitations" a "\sortcitations" a dále nastavíme \db citelinkA +na jinou, než implicitní prázdnou hodnotu. Makro "\citelinkA" vytiskne +"\bim:<číslo citace>", tedy značku citace (je to nastaveno v "\Xbib"). +Není-li značka citace známá, vypíšeme varování a tiskneme "<číslo citace>". +Makro \db etalchar je potřebné při použití Bib\TeX{}ového stylu "alpha". + +\inext{nonumcitations}{\empty}{+-} + +Makro \db ecite "[]{}" nejprve provede +"\citeA#1,,,", tedy vlastně "\nocite[]" a pak si +\db eciteB vyzvedne ze "\savedcites" +první údaj před čárkou, tedy "<číslo citace>", a uloží do "#1". V~"#2" je případný zbytek ze +"\savedcites" a dále v "#3" pokračuje "". Makro vytiskne jen +"", když je odkaz nedefinován, jinak vytiskne "" prostřednictvím +makra "\citelink". + +\inext{ecite}{\empty}{+-} + +Následuje kód makra \db bib "[]". Nejprve je ošetřeno, zda je použit +zkrácený nebo rozšířený zápis "\bib[] = {}". V prvním +případě 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 "{}{<číslo citace>}{}" do REF souboru propojené údaje o +tom, jaké má "" přiřazeno "<číslo citace>" v seznamu literatury. +Makro "\tmpb" je naplněno "" pro případné použití v "\dest" (při +draft módu) nebo pro použití v makru "\printbib". +Makro "\wbib" připojí před "\wref" příkaz "\immediate", aby byly zapsány +do REF souboru aktuální hodnoty parametrů. \inext{bib}{\empty}{+-} +Makro \db Xbib pracuje při čtení souboru REF a dělá to, co jsme si řekli už +dříve: nastaví hodnotu makra "\bib:" na "\bibnn{<číslo citace>}&". +Dále definuje "\bim:<číslo citace>" jako třetí parametr, který je při použití +"\bib" prázdný, ale při čtení "*.bbl" souboru vygenerovaného pomocí +"alpha.bst" nebo "apalike.bst" tam bude uložena "". Dále "\Xbib" +definuje \db lastbibnum jako "<číslo citace>", takže po přečtení REF souboru +obsahuje největší použité "<číslo citace>". To se může hodit, pokud designér +chce odsadit seznam literatury podle šířky největšího čísla citace. + +\inext{Xbib}{\empty}{+-} + +Makro \db printbib se vloží na začátek každého záznamu v seznamu literatury. +Implicitně vytiskne "\the\bibnum" v hranaté závorce a při "\nonumcitations" +netiskne nic. V obou případech nastaví odsazení druhého a dalších řádků +odstavce na "\iindent". Designér si může toto makro předefinovat dle svého +uvážení. + +\inext{printbib}{\empty}{+-} + Makro \db addcitelist "{}" přidá do \db citelist údaj ve tvaru -"\lcite[]". Hranaté závorky jsou použity proto, aby fungoval test +\db citeI "[]". Hranaté závorky jsou použity proto, aby fungoval test "\isinlist\citelist{[]}". Jak uvidíme za chvíli, makro "\addcitelist" změní během činnosti makra "\usebibtex" svůj význam na -\db writeaux, aby případné použití "\cite" až za "\usebitex" rovnou +\db writeaux, aby případné použití "\cite" až za "\usebibtex" rovnou zapisovalo do AUX souboru. Podobně makro "\addcitelist" změní v makru "\usebbl" svůj význam \db writeXcite "{}", aby v příštím průchodu \TeX{}em @@ -2419,13 +2527,11 @@ V BBL souboru se vyskytuj objeví parametr v~hranaté závorce "[]" a následně je uveden "{}". Pak na dalších řádcích jsou bibliografická data jednoho záznamu ukončená prázdným řádkem. Objeví-li se "[]", dává tím -Bib\TeX{} najevo, že se má tato "" použít místo běžného číslování +Bib\TeX{} najevo, že se může tato "" použít místo běžného číslování záznamů. Následuje kód, který takové údaje přečte, vytiskne a vloží do REF -souboru o tom zprávu prostřednictvím "\wref{}{}". -Rozlišují se dva režimy tisku: není-li přítomna "[]" (makro "\tmpa" -je prázdné), pak pomocí "\llap" vytiskneme "[<číslo>]". Jinak se posuneme o -"-\iindent" a tiskneme "[]" následovanou mezerou. Pak se vytisknou -další údaje bibliografického záznamu. +souboru o tom zprávu prostřednictvím "\wref{}{<číslo citace>}{}". +Makro "\tmpb" je naplněno "" pro případné použití v "\dest" (při +draft módu) nebo pro použití v makru "\printbib". \dgn\nb bibitemB \dgn\nb bibitemC \dgn\nb bibitemD \inext{bibitem}{^^B\cbrace}{++} @@ -2447,7 +2553,7 @@ pr Celý údaj je pak vytištěn jen za předpokladu, že "[]" je přítomen v seznamu "\citelist". Třetí makro "\bbl:c" pracuje jako druhé až na to, že údaj netiskne, ale zapamatuje si ho do makra "\bb:". Po takovém -projití BBL souboru ještě projde "\citelist", kde se "\lcite[]" +projití BBL souboru ještě projde "\citelist", kde se "\citeI[]" promění v "\bb:", takže se záznam vytiskne. Nyní ale v pořadí, v jakém jsou "" zařazeny do "\citelist". diff --git a/Master/texmf-dist/doc/cstex/opmac-u-en.pdf b/Master/texmf-dist/doc/cstex/opmac-u-en.pdf new file mode 100644 index 00000000000..731fca0656b Binary files /dev/null and b/Master/texmf-dist/doc/cstex/opmac-u-en.pdf differ diff --git a/Master/texmf-dist/doc/cstex/opmac-u-en.tex b/Master/texmf-dist/doc/cstex/opmac-u-en.tex new file mode 100644 index 00000000000..95408df9a3e --- /dev/null +++ b/Master/texmf-dist/doc/cstex/opmac-u-en.tex @@ -0,0 +1,1251 @@ + +\input opmac + +\def\toasciidata{}\def\r{} + +\typosize[11/13] + +\def\thefnote{$^{\locfnum}$} + +\catcode`<=13 +\def<#1>{\hbox{$\langle$\it#1\/$\rangle$}} + +\activettchar" + +\insertoutline{CONTENTS} \outlines{0} \hyperlinks{\Blue}{\Green} + + +\tit OPmac -- macros for plain\TeX\fnotemark1 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\centerline{\it Petr Ol\v s\'ak, 2012, 2013, 2014} + +\bigskip +\centerline{\url{http://petr.olsak.net/opmac-e.html}} + + +\fnotetext {This text is second revised version. The first version was + published in TUGboat 34:1, 2013, pp.~88--96} + +\notoc\nonum \sec Contents\par\maketoc + +\nonum \sec Introduction +%%%%%%%%%%%% + +The OPmac package is simple additional macros to plain\TeX{}. It enables +users to take advantage of basic \LaTeX{} functionality: the font size +selection, automatic creation of table of contents and index, working with +bibliography databases, tables, references including hyperlinks option, +margins settings, etc. + +I have decided to publish my macros together with the new version of +\csplain{}. I am using these macros long time for various purposes only in +my own computer. Now, I have made them more clean and added the user and +technical documentation and released them. + +The main reason is to give a set of macros which solves the common tasks to +the plain\TeX{} users. The side effect is that the macros demonstrate +that it is possible to do \TeX{} code simple and effective. Most of +\LaTeX{} macro packages don't have this feature. All macros are in the single +documented file "opmac.tex" with only 1700 lines. On the other hand the +\LaTeX{} code which solves comparable tasks is placed in kernel and tens +of \LaTeX{} packages with many tens of thousands lines in total. + +The main principles which I followed when creating this macro package, are: + +\begitems + * Simplicity is power. + * Macros are not universal, but are readable and understandable. + * User can easily redefine these macros as he/she wishes. +\enditems + +Each part of the macro code is written in order to maximize readability for +human who will want to read it, understand it and change it. + +OPmac package offers a markup language for authors of texts (like \LaTeX), +i.e. the fixed set of tags to define the structure of the document. This +markup is different from the \LaTeX{} markup. It may offer to write the +source text of the document somewhat clearer and more attractive. The OPmac +package, however, does not care for typographic of the document. The simple +sober document is created if no additional macros are used. We assume that +the author of additional macros is able to create a look of the document to +suit specific requirement. + +OPmac has a small number of additional packages: "pdfuni", "opmac-xetex" and +"opmac-bib" (see the end of \url{http://petr.olsak.net/opmac-e.html} page). +Moreover, there exist many tens of little OPmac tricks comparable with +\LaTeX{} packages +mentioned on \url{http://petr.olsak.net/opmac-tricks.html} page. + +\secnum=-1 + +\sec Using OPmac +%%%%%%%%%%%%%%%% + +OPmac is not compiled as a format. For using it in plain\TeX{}, you can simply +"\input opmac" at the beginning of your document. The example of the simple +document follows: + +\begtt +\input opmac +\typosize[11/13] % setting the basic font size and the baselineskip +\margins/1 a4 (1,1,1,1)in % setting 1in margins for A4 paper + +Here is a text. +\bye +\endtt + +You can use \TeX, pdf\TeX, Xe\TeX{} or lua\TeX{} with eplain or \csplain{} +preloaded. The \csplain{} is recommended but it is not explicitly requested if you +don't need to use Czech/Slovak specific features\fnote +{Warnings: ``falling back to ASCII sorting'' +or ``CZ/SK outline-conversion is off'' may occur without \csplain{}.}. + + +\sec Font sizes +%%%%%%%%%%%%%%% + +The commands for font size setting described here have local validity. It +means that if you put them into group, the font sizes are selected locally. + +The command "\typosize[/]" sets the font size of text and +math fonts and baselineskip. If one of these two parameters is empty, the +corresponding feature stays unchanged. The metric unit is supposed "pt" and +this unit isn't written in parameters. You can change the unit by the +command "\ptunit=", for instance "\ptunit=1mm". +Examples: + +\begtt +\typosize[10/12] % default of plainTeX +\typosize[11/12.5] % font 11pt, baseline 12.5pt +\typosize[8/] % font 8pt, baseline unchanged +\endtt + +The command +"\typoscale[/]" +sets the text and math fonts +size and baselineskip as a multiple of the current fonts size and +baselineskip. The factor is written in "scaled"-like way, it means that 1000 +means factor one. The empty parameter is equal to the parameter 1000, +i.e. the value stays unchanged. Examples: + +\begtt +\typoscale[800/800] % fonts and baselineskip re-size to 80 % +\typoscale[\magstep2/] % fonts bigger 1,44times +\endtt + +The sizes declared by these macros (for example in titles) are relative to +the basic size selected for the font (this may be arbitrary size, not only +10pt). + +The size of the current font can be changed by the command +"\thefontsize[]" or can be rescaled by +"\thefontscale[]". These macros don't change math fonts sizes nor +baselineskip. + +The "\resizefont", "\regfont" and "\resizeall" commands (documented in +\csplain) can be used even if +the used format is not \csplain. The best +design size of the font for desired size is selected. +For example "\typosize[18/]" selects the font "cmr17 at 18pt". + +The "\em" macro acts as "\it" if the current font is "\rm", acts as "\rm" if +the current font is "\it", acts as "\bi" if the current font is "\bf" and +acts as "\bf" if the current font is "\bi". The "\/" spaces are inserted +automatically. Example: + +\begtt +This is {\em important} text. % = This is {\it important\/} text. +\it This is {\em important} text. % = This is\/ {\rm important} text. +\bf This is {\em important} text. % = This is {\bi important\/} text. +\bi This is {\em important} text. % = This is\/ {\bf important} text. +\endtt + + +\sec Parts of the document +%%%%%%%%%%%%%%%%%%%%%%%%%% + +The document can be divided into chapters, sections and subsections and titled +by "\tit" command. The parameters have to be separed by empty line (no +braces are used): + +\begtt +\tit Document title +\chap Chapter title +\sec Section title +\secc Subsection title +\endtt + +The chapters are numbered by one number, sections by two numbers +(chapter.section) and subsections by three numbers. If there are no chapters +then section have only one number and subsection two. + +The implicit design of the titles of chapter etc.\ are implemented in the +macros "\printchap", "\printsec" and "\printsecc". User can simply change +these macros if he/she needs another behavior. + +The first paragraph after the title of chapter, section and subsection is +not indented but you can type "\let\firstnoindent=\relax" if you need all +paragraphs indented. + +If a title is so long then it breaks to more lines. It is better to hint the +breakpoints because \TeX{} does not interpret the meaning of the title. +User can put the "\nl" (it means newline) macro to the breakpoints. + +The chapter, section or subsection isn't numbered if the "\nonum" precedes. +And the chapter, section or subsection isn't delivered to the table of +contents if "\notoc" precedes. + + +\sec Another numbered objects +%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +Apart from chapters, sections and subsections, there are another +automatically numbered objects: equations and captions for tables and +figures. + +If user write the "\eqmark" as the last element of the display mode then +this equation is numbered. The format is one number in brackets. This number +is reset in each section. + +If the "\eqalignno" is used, then user can put "\eqmark" to the last column +before "\cr". For example: + +\begtt +\eqalignno{ + a^2+b^2 &= c^2 \cr + c &= \sqrt{a^2+b^2} & \eqmark \cr} +\endtt + +The next numbered object is caption which is tagged by "\caption/t" for +tables and "\caption/f" for figures. Example: + +\begtt +\hfil\table{rl}{ + age & value \crl\noalign{\smallskip} + 0--1 & unmeasured \cr + 1--6 & observable \cr + 6--12 & significant \cr + 12--20 & extremal \cr + 20--40 & normal \cr + 40--60 & various \cr + 60--$\infty$ & moderate} +\par\nobreak\medskip +\caption/t The dependency of the computer-dependency on the age. +\endtt + +This example produces: + +\bigskip +{\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}} +\hfil\table{rl}{age & value \crl\noalign{\smallskip} + 0--1 & unmeasured \cr + 1--6 & observable \cr + 6--12 & significant \cr + 12--20 & extremal \cr + 20--40 & normal \cr + 40--60 & various \cr + 60--$\infty$ & moderate} +\par\nobreak\medskip +{ \leftskip=\parindent plus1fil + \rightskip=\parindent plus-1fil + \parfillskip=0pt plus2fil \noindent +{\bf Table 2.3} The dependency of the com\-puter-dependency on the age.\par} +} +\bigskip + +The word ``Table'' followed by a number is added by the macro +"\caption/t". The macro "\caption/f" creates the word figure. +The caption text is centered. If it occupies more lines then the +last line is centered. + +The added word (table, figure) depends on the actual number of the +"\language" register. OPmac implements the mapping from "\language" +numbers to the languages and the mapping from languages to the generated +words. + +If you wish to make the table or figure as floating object, you need to use +plain\TeX{} macros "\midinsert", "\topinsert" and "\endinsert". + +Each automatically numbered object can be referenced, if the +"\label[