%% This is part of OpTeX project, see http://petr.olsak.net/optex % I plan to re-implement all macros from this file. Something is done already. % OPmac %%%%%%%%%%%%%%%%%%%%%%%%%%% %% Petr Olsak, 2012 -- 2019 %% The history of versions is at the end of this file, after \endpinput \ifx\OPmacversion\undefined \else \endinput \fi \def\OPmacversion{Jul. 2019} \immediate\write16{This is OPmac (Olsak's Plain macros), version <\OPmacversion>} %%%%%%%%%%%%%% Basic macros, sec. 3.1 in opmac-d.pdf \newcount\tmpnum % auxiliary count \newdimen\tmpdim % auxiliary dimen \def\opwarning#1{\immediate\write16{l.\the\inputlineno\space OPmac WARNING: #1.}} \long\def\addto#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}} \def\protectlist{} \def\addprotect#1{\addto\protectlist{\doprotect#1}} \addprotect~ \ifx\pdfextension\undefined \else \let\pdfoutput=\outputmode \def\pdfcolorstackinit{\pdffeedback colorstackinit}\fi \newif\ifpdftex \pdftextrue \ifx\pdfoutput\undefined \pdftexfalse \else \ifnum\pdfoutput=0 \pdftexfalse \fi \fi \ifx\XeTeXversion\undefined \else \pdftextrue \fi \def\sdef#1{\expandafter\def\csname#1\endcsname} \def\sxdef#1{\expandafter\xdef\csname#1\endcsname} \def\slet#1#2{\expandafter\let\csname#1\expandafter\endcsname\csname#2\endcsname} \def\adef#1{\catcode`#1=13 \begingroup \lccode`\~=`#1\lowercase{\endgroup\def~}} \def\isdefined #1#2{\expandafter\ifx \csname#1\endcsname \relax \csname iffalse\expandafter\endcsname \else \csname iftrue\expandafter\endcsname \fi } \long\def\isinlist#1#2#3{\begingroup \long\def\tmp##1#2##2\end{\def\tmp{##2}% \ifx\tmp\empty \endgroup \csname iffalse\expandafter\endcsname \else \endgroup \csname iftrue\expandafter\endcsname \fi}% end of \def\tmp \expandafter\tmp#1\endlistsep#2\end } \long\def\isnextchar#1#2#3{\begingroup\toks0={\endgroup#2}\toks1={\endgroup#3}% \let\tmp=#1\futurelet\next\isnextcharA } \def\isnextcharA{\the\toks\ifx\tmp\next0\else1\fi\space} \def\eoldef#1{\def#1{\begingroup \catcode`\^^M=12 \eoldefA#1}% \expandafter\def\csname\string#1:M\endcsname} {\catcode`\^^M=12 \gdef\eoldefA#1#2^^M{\endgroup\csname\string#1:M\endcsname{#2}}} \def\maybebreak{\afterassignment\maybebreakA\tmpdim=} \def\maybebreakA{\ifvmode \vskip0pt plus\tmpdim \penalty-130 \vskip0pt plus-\tmpdim \else \hskip0pt plus\tmpdim \penalty-130 \hskip0pt plus-\tmpdim \fi \relax } %\long\def\uv#1{\clqq#1\crqq} \let\\=\undefined {\lccode`\?=`\% \lowercase{\gdef\percent{?}}} {\lccode`\?=`\\ \lowercase{\gdef\bslash{?}}} \def\,{\relax\ifmmode \mskip\thinmuskip \else \thinspace \fi} \addprotect\percent \addprotect\bslash \addprotect\, \addprotect\exfont \bgroup \catcode`!=3 \catcode`?=3 \gdef\replacestrings#1#2{\long\def\replacestringsA##1#1{\def\tmpb{##1}\replacestringsB}% \long\def\replacestringsB##1#1{\ifx!##1\relax \else\addto\tmpb{#2##1}% \expandafter\replacestringsB\fi}% improved version inspired \expandafter\replacestringsA\tmpb?#1!#1% from pysyntax.tex by Petr Krajnik \long\def\replacestringsA##1?{\def\tmpb{##1}}\expandafter\replacestringsA\tmpb } \egroup %%%%%%%%%%%%%% Global parameters, sec. 3.2 in opmac-d.pdf \widowpenalty=10000 \clubpenalty=10000 \showboxdepth=7 \showboxbreadth=30 \newdimen\iindent \iindent=\parindent % indentation of items, TOC, captions, list of bib. references \newdimen\ttindent \ttindent=\parindent % indentation in \begtt...\endtt and \verbinput \def\ttskip{\medskip} % space above and below \begtt, \verbinput \mathchardef\ttpenalty=100 % penalty between lines in \begtt, \verbinput \def\tthook{} % hook in \begtt, \verbinput \def\intthook{} % hook in in-text verbatim \def\ptthook{} % hook in \begtt, \verbinput for post-processing \def\iiskip{\medskip} % space above and below \begitems...\enditems \def\itemhook{} % hook in \startitem \def\bibskip{\smallskip} % space between bibitems \def\tabstrut{\strut} % strut in the \table \def\tabiteml{\enspace} % left material before each \table item \def\tabitemr{\enspace} % right material after each \table item \def\vvkern{1pt} % space between vertical lines \def\hhkern{1pt} % space between horizontal lines \def\multiskip{\medskip} % space above and below \begmulti...\endmulti \newdimen\colsep \colsep=2em % space between columns \newdimen\mnoteindent \mnoteindent=10pt % ditance between mnote and text \newdimen\mnotesize \mnotesize=20mm % the width of the mnote paragraph \newskip\titskip \titskip=4em % \vglue above title printed by \tit \def\picdir{} % the directory with picture files \def\bibtexhook{} % hook in \usebibtex and \usebbl macros \def\chaphook{} % hook in \chap \def\sechook{} % hook in \sec \def\secchook{} % hook in \secc \def\cnvhook{} % hook before conversion of outlines \def\prepghook{} % hook before page building in \output routine \def\pghook{} % next hook in \output routine \def\toclinehook{} % hook in \tocline \def\fnotehook{} % hook in \fnote \def\mnotehook{} % hook in \mnote \def\captionhook#1{} % hook in \caption (#1 is "t" or "f") %%%%%%%%%%%%%% OPmac, CSplain and LaTeX logos, sec. 3.3 in opmac-d.pdf %%%%%%%%%%%%%% Sizes of fonts and \baselineskip, sec. 3.4 in opmac-d.pdf %%%%%%%%%%%%%% Multilingual support, sec. 3.5 in opmac-d.pdf \def\mtext#1{\csname mt:#1:\csname _lan:\the\language\endcsname\endcsname} \sdef{mt:chap:en}{Chapter} \sdef{mt:chap:cs}{Kapitola} \sdef{mt:chap:sk}{Kapitola} \sdef{mt:t:en}{Table} \sdef{mt:t:cs}{Tabulka} \sdef{mt:t:sk}{Tabu\v lka} \sdef{mt:f:en}{Figure} \sdef{mt:f:cs}{Obr\'azek} \sdef{mt:f:sk}{Obr\'azok} \sdef{mt:subj:en}{Subject} \sdef{mt:subj:cs}{V\v{e}c} \sdef{mt:subj:sk}{Vec} %%%%%%%%%%%%%% REF file, sec 3.6 in opmac-d.pdf \newwrite\reffile \newread\testin \def\wrefrelax#1#2{} \let\wref=\wrefrelax \def\inputref{ \openin\testin=\jobname.ref \ifeof\testin \else \closein\testin \input \jobname.ref \fnotenum=0 \mnotenum=0 \openrefA{\string\inputref}% \fi } \def\openref{% \ifx\wref\wrefrelax \openrefA{\string\openref}\fi \gdef\openref{}% } \def\openrefA#1{% \immediate\openout\reffile=\jobname.ref \gdef\wref##1##2{\write\reffile{\string##1##2}}% \immediate\write\reffile {\percent\percent\space OPmac - REF file (#1)}% \immediate\wref\Xrefversion{{\REFversion}}% } \def\REFversion{2} \def\Xrefversion#1{\ifnum#1=\REFversion\relax \else \endinput \fi} %%%%%%%%%%%%%% \label, \ref, \pgref, sec. 3.7 in opmac-d.pdf \def\label[#1]{\isdefined{l0:#1}% \iftrue \opwarning{duplicated label [#1], ignored}\else \xdef\lastlabel{#1}\fi \ignorespaces} \def\wlabel#1{% \ifx\lastlabel\undefined \else \dest[ref:\lastlabel]% {\protectlist\edef\tmp{\wref\Xlabel{{\lastlabel}{#1}}}\expandafter}\tmp \sxdef{lab:\lastlabel}{#1}\sxdef{l0:\lastlabel}{}% \global\let\lastlabel=\undefined \fi } \def\ref[#1]{\isdefined{lab:#1}% \iftrue \reflink[#1]{\csname lab:#1\endcsname}% \else ??\opwarning{label [#1] unknown. Try to TeX me again}\openref \fi } \def\pgref[#1]{\isdefined{pgref:#1}% \iftrue \pglink{\csname pgref:#1\endcsname}% \else ??\opwarning{pg-label [#1] unknown. Try to TeX me again}\openref \fi } \def\Xlabel#1#2{\sdef{lab:#1}{#2}\sxdef{pgref:#1}{\the\lastpage}} %%%%%%%%%%%%%% Chapters, sections, subsections -- sec. 3.8 in opmac-d.pdf \def\printchap#1{\vfill\supereject {\chapfont \noindent \mtext{chap} \dotocnum{\thetocnum}\par \nobreak\smallskip\noindent #1\nbpar}\mark{}% \nobreak \remskip\bigskipamount \firstnoindent } \def\printsec#1{\par \norempenalty-400 \bigskip {\secfont \noindent \dotocnum{\thetocnum\quad}#1\nbpar}\insertmark{#1}% \nobreak \remskip\medskipamount \firstnoindent } \def\printsecc#1{\par \norempenalty-200 \medskip {\seccfont \noindent \dotocnum{\thetocnum\quad}#1\nbpar}% \nobreak \remskip\medskipamount \firstnoindent } \eoldef\tit#1{\vglue\titskip {\leftskip=0pt plus1fill \rightskip=\leftskip \titfont \noindent #1\par}% \nobreak\bigskip } \def\titfont{\scalemain\boldify\typoscale[\magstep4/\magstep4]} \def\chapfont{\scalemain\boldify\typoscale[\magstep3/\magstep3]} \def\secfont{\scalemain\boldify\typoscale[\magstep2/\magstep2]} \def\seccfont{\scalemain\boldify\typoscale[\magstep1/\magstep1]} \newcount\chapnum \newcount\secnum \newcount\seccnum \newcount\nonumnum \newif\ifnotoc \notocfalse \def\notoc{\global\notoctrue} \newif\ifnonum \nonumfalse \def\nonum{\global\nonumtrue} \eoldef\chap#1{\ifnonum\else \global\advance\chapnum by1 \fi \chaphook {\globaldefs=1 \secnum=0 \seccnum=0 \tnum=0 \fnum=0 \dnum=0}\relax \edef\thechapnum{\the\chapnum}\let\thetocnum=\thechapnum \edef\thesecnum{\othe\chapnum.\the\secnum}% \def\dotocnumafter{\wtotoc0\bfshape{#1}}% \printchap{#1}\resetnonumnotoc } \eoldef\sec#1{\ifnonum\else \global\advance\secnum by1 \fi \sechook {\globaldefs=1 \seccnum=0 \tnum=0 \fnum=0 \dnum=0}\relax \edef\thesecnum{\othe\chapnum.\the\secnum}\let\thetocnum=\thesecnum \def\dotocnumafter{\wtotoc1\rm{#1}}% \printsec{#1}\resetnonumnotoc } \eoldef\secc#1{\ifnonum\else \global\advance\seccnum by1 \fi \secchook {}\relax \edef\theseccnum{\othe\chapnum.\the\secnum.\the\seccnum}\let\thetocnum=\theseccnum \def\dotocnumafter{\wtotoc2\rm{#1}}% \printsecc{#1}\resetnonumnotoc } \def\wtotoc#1#2#3{% #1 = level, #2 = info, #3 = titletext \ifnotoc\else \def\act{\wref{\Xtoc{#1}{\noexpand#2}}}% \expandafter\act\expandafter{\expandafter{\thetocnum}{#3}{\the\pageno}}% \fi } \def\wcontents#1#2{% #1 = sequence to REF, #2 = titletext \ifnotoc\else \expandafter\wref\expandafter#1\expandafter {\expandafter{\thetocnum}{#2}{\the\pageno}}% \fi } \def\dotocnum#1{% \leavevmode {\ifnonum \global\advance\nonumnum by1 \edef\thetocnum{!\the\nonumnum}\fi \wlabel\thetocnum \dest[toc:\tocilabel.\thetocnum]% \dotocnumafter}\ifnonum\else#1\fi \global\let\dotocnumafter=\relax } \def\resetnonumnotoc{\global\notocfalse \global\nonumfalse \ifx\dotocnumafter\relax \else \opwarning{\noexpand\dotocnum unused in printchap/printsec/printsecc}\fi } \def\insertmark#1{\toks0={#1}\mark{{\ifnonum\else\thetocnum\fi} {\the\toks0}}} \newskip\remskipamount \def\remskip{\afterassignment\remskipA \global\remskipamount} \def\remskipA{\vskip\remskipamount \penalty11333 } \def\norempenalty{\ifnum\lastpenalty=11333 \vskip-\remskipamount \tmpnum=\else \removelastskip \penalty \fi} \def\othe#1.{\ifnum#1>0 \the#1.\fi} \def\thechapnum{} \def\thesecnum{} \def\theseccnum{} \def\afternoindent{\global\everypar={\wipeepar\setbox7=\lastbox}} \def\wipeepar{\global\everypar={}} \let\firstnoindent=\afternoindent \def\nbpar{{\interlinepenalty=10000\endgraf}} \def\nl{\hfil\break} %%%%%%%%%%%%%% Captions, equations -- sec. 3.9 in opmac-d.pdf \newcount\tnum \newcount\fnum \newcount\dnum \def\thetnum{\thesecnum.\the\tnum} \def\thefnum{\thesecnum.\the\fnum} \def\thednum{(\the\dnum)} \def\caption/#1 {\isdefined{#1num}% \iftrue \global\advance \csname #1num\endcsname by1 \else \opwarning{Unknown caption /#1}% \fi \bgroup \leftskip=\iindent plus1fil \rightskip=\iindent plus-1fil \parfillskip=0pt plus2fil \def\par{\nbpar\egroup}% \captionhook{#1}\noindent \wlabel{\csname the#1num\endcsname}% \printcaption{\mtext{#1}}{\csname the#1num\endcsname}% } \def\printcaption#1#2{{\bf#1 #2}\enspace} \expandafter\def\expandafter\endinsert\expandafter{\expandafter\par\endinsert} \def\eqmark{\global\advance\dnum by1 \ifinner\else\eqno \fi \wlabel\thednum \thednum } %%%%%%%%%%%%%% Items -- sec. 3.10 in opmac-d.pdf \newcount\itemnum \itemnum=0 \def\begitems{\par\iiskip\bgroup \itemnum=0 \adef*{\startitem} \advance\leftskip by\iindent \let\printitem=\normalitem } \def\enditems{\par\egroup\iiskip} \def\startitem{\par \advance\itemnum by1 \itemhook \noindent\llap{\printitem}\ignorespaces} \def\normalitem{$\bullet$\enspace} \def\style#1{\expandafter\let\expandafter\printitem\csname item:#1\endcsname \ifx\printitem\relax \let\printitem=\normalitem \fi } \sdef{item:o}{\raise.4ex\hbox{$\scriptscriptstyle\bullet$} } \sdef{item:-}{- } \sdef{item:n}{\the\itemnum. } \sdef{item:N}{\the\itemnum) } \sdef{item:i}{(\romannumeral\itemnum) } \sdef{item:I}{\uppercase\expandafter{\romannumeral\itemnum}\kern.5em} \sdef{item:a}{\athe\itemnum) } \sdef{item:A}{\uppercase\expandafter{\athe\itemnum}) } \sdef{item:x}{\raise.3ex\fullrectangle{.6ex} } \sdef{item:X}{\raise.2ex\fullrectangle{1ex}\kern.5em} \def\fullrectangle#1{\hbox{\vrule height#1 width#1}} \def\athe#1{\ifcase#1?\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else ?\fi } %%%%%%%%%%%%%% TOC -- sec. 3.11 in opmac-d.pdf \def\_toclist{} \newif\ifischap \ischapfalse \def\Xtoc#1#2#3#4#5{\ifnum#1=0 \ischaptrue\fi \addto\_toclist{\_tocline{#1}{#2}{#3}{#4}{#5}}} \def\Xchap{\Xtoc0\bfshape} \def\Xsec{\Xtoc1\rm} \def\Xsecc{\Xtoc2\rm} \def\_tocline#1#2#3#4#5{{\leftskip=#1\iindent \rightskip=2\iindent \ifischap\advance\leftskip by\iindent\fi \ifnum#1>1 \advance\leftskip by\iindent\fi \toclinehook \noindent\llap{#2\toclink{#3}\enspace}% {#2#4}\nobreak\tocdotfill\pglink{#5}\nobreak\hskip-2\iindent\null\par}} \def\tocdotfill{\leaders\hbox to.8em{\hss.\hss}\hskip 1em plus1fill\relax} \def\maketoc{\par \ifx\_toclist\empty \opwarning{\noexpand\maketoc -- data unavailable, TeX me again}\openref \else \_toclist \fi} \def\toclinkA#1{\def\tmp##1!##2\end{\if^##1^\kern.8em \else##1\fi}\tmp#1!\end} %%%%%%%%%%%%%% Index -- sec. 3.12 on opmac-d.pdf \def\iindex#1{\openref\wref\Xindex{{#1}{\the\pageno}}} \def\ii #1 {\leavevmode\def\tmp{#1}\iiA #1,,} \def\iiA #1,{\if$#1$\else\def\tmpa{#1}% \ifx\tmpa\iiatsign \expandafter\iiB\tmp,,\else\iindex{#1}\fi \expandafter\iiA\fi} \def\iiatsign{@} \def\iiB #1,{\if$#1$\else \iiC#1/\relax \expandafter\iiB\fi} \def\iiC #1/#2\relax{\if$#2$\else\iindex{#2#1}\fi} \def\iid #1 {\leavevmode\iindex{#1}#1\futurelet\tmp\iiD} \def\iiD{\ifx\tmp,\else\ifx\tmp.\else\space\fi\fi} \def\Xindex{\Xindexg,} \def\Xindexg#1#2#3{\bgroup \def~{ }% #1=prefix, #2=index-item, #3=pageno \isdefined{#1#2}\iftrue \ifx^#3^\else \expandafter\firstdata \csname#1#2\endcsname \XindexA \ifnum#3=\tmpa % \ii on the same page \else \tmpnum=#3 \advance\tmpnum by\pgfolioB-1 \expandafter\seconddata \csname#1#2\endcsname \XindexB \ifx\tmp\empty \sxdef{#1#2}{{#3/+}{\pgfolioA{#3}}} % previous item: empty page \else \if\tmpb+% state: the pagelist ends by a pagenumber \ifnum\tmpnum=\tmpa % the consecutive page \sxdef{#1#2}{{#3/-}{\tmp\iiendash}} \else % the pages drop \sxdef{#1#2}{{#3/+}{\tmp, \pgfolioA{#3}}} \fi \else % state: the pagelist ends by -- \ifnum\tmpnum=\tmpa % the consecutive page \sxdef{#1#2}{{#3/-}{\tmp}} \else % the pages drop \sxdef{#1#2}{{#3/+}{\tmp\pgfolioA{\tmpa}, \pgfolioA{#3}}} \fi\fi\fi\fi\fi \else % first occurrence of the index item #2 \ifx^#3^\sxdef{#1#2}{{0/+}{}}\else \sxdef{#1#2}{{#3/+}{\pgfolioA{#3}}}\fi \ifx,#1 \global \expandafter\addto \expandafter\iilist \csname#1#2\endcsname \else \isdefined{iilist:#1}\iftrue \global\expandafter\addto \csname iilist:#1\expandafter\endcsname \csname#1#2\endcsname \else \sxdef{iilist:#1}{\expandafter\noexpand \csname#1#2\endcsname} \fi\fi\fi \egroup } \def\iilist{} \def\iiendash{--} \def\firstdata#1#2{\expandafter\expandafter\expandafter #2\expandafter\firstdataA#1} \def\firstdataA#1#2{#1&} \def\seconddata#1#2{\expandafter\expandafter\expandafter #2\expandafter\seconddataA#1} \def\seconddataA#1#2{#2&} \def\XindexA#1/#2&{\def\tmpa{#1}\let\tmpb=#2} \def\XindexB#1&{\def\tmp{#1}} \def\pgfolioA#1{\ifnum#1<0 \romannumeral-\fi#1} \def\pgfolioB{\ifnum\tmpnum<0-\fi} \def\makeindex{\par \ifx\iilist\empty \opwarning{index data-buffer is empty. TeX me again} \else \bgroup \setprimarysorting \def\act##1{\ifx##1\relax \else \firstdata##1\XindexA \seconddata##1\XindexB \if\tmpb+% \preparesorting##1% converted item by sorting data in \tmpb \xdef##1{{\tmpb}{\tmp}} \else \preparesorting##1% converted item by sorting data in \tmpb \xdef##1{{\tmpb}{\tmp\pgfolioA{\tmpa}}} \fi \expandafter\act\fi} \expandafter \act \iilist \relax \egroup \dosorting % sorting is in progress \bgroup \rightskip=0pt plus1fil \exhyphenpenalty=10000 \leftskip=\iindent \def\act##1{\ifx##1\relax \else \prepii##1% \seconddata##1\printiipages \expandafter\act \fi} \expandafter \act \iilist \relax \egroup \fi } \def\printiipages#1&{ #1\par} \def\prepii #1{\isinlist \iispeclist #1\iftrue \expandafter\expandafter\expandafter \printii \csname\string#1\endcsname&% \else \expandafter\prepiiA\string #1&% \fi } \def\prepiiA #1#2#3&{\printii#3&} \def\iis #1 #2{\bgroup \def~{ }% \global\expandafter\addto\expandafter\iispeclist\csname,#1\endcsname \global\sdef{\expandafter\string\csname,#1\endcsname}{#2}% \egroup \ignorespaces } \def\iispeclist{} \def\printii #1&{\gdef\currii{#1}\noindent\everyii \hskip-\iindent \ignorespaces\printiiA#1//} \def\printiiA #1/{\if^#1^\let\previi=\currii \else \expandafter\scanprevii\previi/&\def\tmpb{#1}\edef\tmpb{\meaning\tmpb}% \ifx\tmpa\tmpb \iiemdash \else#1 \gdef\previi{}\fi \expandafter\printiiA\fi } \def\iiemdash{\kern.1em---\space} \def\everyii{} \def\scanprevii#1/#2&{\def\previi{#2}\def\tmpa{#1}\edef\tmpa{\meaning\tmpa}} \def\previi{} % previous index item %%%%%%%%%%%%%% Sorting -- sec. 3.13 in opmac-d.pdf \def\sortingdata{% /,{ },-,&,@,% aA\"a\"A\'a\'A,% bB,% cC,% \v c\v C,% dD\v d\v D,% eE\'e\'E\v e\v E,% fF,% gG,% hH,% ^^T^^U^^V,% ch Ch CH iI\'i\'I,% jJ,% kK,% lL\'l\'L\v l\v L,% mM,% nN\v n\v N,% oO\"o\"O\'o\'O\^o\^O,% pP,% qQ,% rR\'r\'R,% \v r\v R,% sS,% \v s\v S,% tT\v t\v T,% uU\"u\"U\'u\'U\r u\r U,% vV,% wW,% xX,% yY\'y\'Y,% zZ,% \v z\v Z,% 0,1,2,3,4,5,6,7,8,9,'.% } \def\setignoredchars{\setlccodes ,.;.?.!.:.'.".|.(.).[.].<.>.=.+.{}{}} \def\specsortingdatacs {ch:^^T Ch:^^U CH:^^V} \def\specsortingdatask {ch:^^T Ch:^^U CH:^^V} % DZ etc. are sorted normally \def\setprimarysorting {% \isdefined{sortingdata\csname _lan:\the\language\endcsname}\iftrue \expandafter \let\expandafter\sortingdata \csname sortingdata\csname _lan:\the\language\endcsname\endcsname \xdef\sortingmessage{using \string\sortingdata\csname _lan:\the\language\endcsname}% \else \xdef\sortingmessage{using internal \string\sortingdata}% \ifx\r\undefined % \opwarning{\noexpand\csaccents is unused, falling back to ASCII sorting}% \global\let\asciisorting=t% \fi\fi \ifx\asciisorting\undefined \xdef\sortingdata{\sortingdata}% expand sorting data now \isdefined{specsortingdata\csname _lan:\the\language\endcsname}\iftrue \xdef\specsortingdata{\csname specsortingdata\csname _lan:\the\language\endcsname \endcsname\space}% \expandafter\setprimarysortingA \meaning\specsortingdata\relax \else \gdef\specsortingdata{}\fi \else \gdef\sortingdata{.}\gdef\specsortingdata{}\gdef\sortingmessage{ASCII}% \fi \def\act##1{\ifx##1.\else \ifx##1,\advance\tmpnum by1 \else \lccode`##1=\tmpnum \fi \expandafter \act \fi}% \tmpnum=60 \expandafter \act\sortingdata \setignoredchars } \def\setprimarysortingA#1->#2\relax{\gdef\specsortingdata{#2}} \def\sortingmessage{ASCII default} \def\setsecondarysorting {\def\act##1{\ifx##1.\else \ifx##1,\else \advance\tmpnum by1 \lccode`##1=\tmpnum \fi \expandafter \act \fi}% \tmpnum=60 \expandafter \act\sortingdata \setignoredchars } \def\preparesorting#1{\expandafter\preparesortingA\string#1&} \gdef\preparesortingA#1#2#3&{\xdef\tmpb{#3}% \expandafter\preparesortingB\specsortingdata.:{} \lowercase\expandafter{\expandafter\gdef\expandafter\tmpb\expandafter{\tmpb}}% \replacestrings{.}{}% } \def\preparesortingB#1#2:#3 {\ifx.#1\else \replacestrings{#1#2}{#3}\expandafter\preparesortingB\fi} \newif \ifAleB \def\isAleB #1#2{% \edef\tmp{\firstdata#1\empty\relax\firstdata#2\empty\relax \noexpand#1\noexpand#2}% \expandafter \testAleB \tmp } \def\testAleB #1#2\relax #3#4\relax #5#6{% \if #1#3\if #1&\testAleBsecondary #5#6% \else \testAleB #2\relax #4\relax #5#6% \fi \else \ifnum `#1<`#3 \AleBtrue \else \AleBfalse \fi \fi } \def\testAleBsecondary#1#2{% \bgroup \setsecondarysorting \preparesorting#1\let\tmpa=\tmpb \preparesorting#2% \edef\tmp{\tmpa0\relax\tmpb1\relax}% \expandafter\testAleBsecondaryX \tmp \egroup } \def\testAleBsecondaryX #1#2\relax #3#4\relax {% \if #1#3\testAleBsecondaryX #2\relax #4\relax \else \ifnum `#1<`#3 \global\AleBtrue \else \global \AleBfalse \fi \fi } \def\dosorting{% \message{Opmac: Sorting index (\sortingmessage)...}% \def\act##1{\ifx##1\relax\else \addto\iilist{##1,}% \expandafter\act\fi}% \edef\iilist{\expandafter}\expandafter\act \iilist\relax \edef\iilist{\expandafter}\expandafter\mergesort \iilist \end,\end } \def\mergesort #1#2,#3{% by Miroslav Olsak \ifx,#1% % prazdna-skupina,neco, (#2=neco #3=pokracovani) \addto\iilist{#2,}% % dvojice skupin vyresena \sortreturn{\fif\mergesort#3}% % \mergesort pokracovani \fi \ifx,#3% % neco,prazna-skupina, (#1#2=neco #3=,) \addto\iilist{#1#2,}% % dvojice skupin vyresena \sortreturn{\fif\mergesort}% % \mergesort dalsi \fi \ifx\end#3% % neco,konec (#1#2=neco) \ifx\empty\iilist % neco=kompletni setrideny seznam \def\iilist{#1#2}% \sortreturn{\fif\fif\gobbletoend}% % koncim \else % neco=posledni skupina nebo \end \sortreturn{\fif\fif % spojim \indexbuffer+necoa cele znova \edef\iilist{\expandafter}\expandafter\mergesort\iilist#1#2,#3}% \fi\fi % zatriduji: p1+neco1,p2+neco2, (#1#2=p1+neco1 #3=p2) \isAleB #1#3\ifAleB % p1p2 \addto\iilist{#3}% % p2 do bufferu \sortreturn{\fif\mergesort#1#2,}% % \mergesort p1+neco1,neco2, \fi \relax % zarazka, na ktere se zastavi \sortreturn } \def\sortreturn#1#2\fi\relax{#1} \def\fif{\fi} \def\gobbletoend #1\end{} %%%%%%%%%%%%%% \begmulti ... \endmulti TBN p. 244, 245 -- sec. 3.14 in opmac-d.pdf \newcount\mullines \def\corrsize #1{%% #1 := #1 + \splittopskip - \topskip \advance #1 by \splittopskip \advance #1 by-\topskip } \def\begmulti #1 {\par\bgroup\wipeepar\multiskip\penalty0 \def\Ncols{#1} \setbox6=\vbox\bgroup\penalty0 %% \hsize := Sirka sloupce = (\hsize+\colsep) / n - \colsep \advance\hsize by\colsep \divide\hsize by\Ncols \advance\hsize by-\colsep \mullines=0 \def\par{\ifhmode\endgraf\global\advance\mullines by\prevgraf\fi}% } \def\endmulti{\vskip-\prevdepth\vfil \expandafter\egroup\expandafter\baselineskip\the\baselineskip\relax \dimen0=.8\maxdimen \tmpnum=\dimen0 \divide\tmpnum by\baselineskip \splittopskip=\baselineskip \setbox1=\vsplit6 to0pt %% \dimen1 := the free space on the page \ifdim\pagegoal=\maxdimen \dimen1=\vsize \corrsize{\dimen1} \else \dimen1=\pagegoal \advance\dimen1 by-\pagetotal \fi \ifdim \dimen1<2\baselineskip \vfil\break \dimen1=\vsize \corrsize{\dimen1} \fi \ifnum\mullines<\tmpnum \dimen0=\ht6 \else \dimen0=.8\maxdimen \fi \divide\dimen0 by\Ncols \relax %% split the material to more pages? \ifdim \dimen0>\dimen1 \splitpart \else \balancecolumns \fi % only balancing \multiskip\egroup } \def\makecolumns{\bgroup % full page, destination height: \dimen1 \vbadness=20000 \setbox1=\hbox{}\tmpnum=0 \loop \ifnum\Ncols>\tmpnum \advance\tmpnum by1 \setbox1=\hbox{\unhbox1 \vsplit6 to\dimen1 \hss} \repeat \hbox{}\nobreak\vskip-\splittopskip \nointerlineskip \line{\unhbox1\unskip} \dimen0=\dimen1 \divide\dimen0 by\baselineskip \multiply\dimen0 by\Ncols \global\advance\mullines by-\dimen0 \egroup } \def\splitpart{% \makecolumns % full page \vskip 0pt plus 1fil minus\baselineskip \break \ifnum\mullines<\tmpnum \dimen0=\ht6 \else \dimen0=.8\maxdimen \fi \divide\dimen0 by\Ncols \relax \ifx\balancecolumns\flushcolumns \advance\dimen0 by-.5\vsize \fi \dimen1=\vsize \corrsize{\dimen1}\dimen2=\dimen1 \advance\dimen2 by-\Ncols\baselineskip %% split the material to more pages? \ifvoid6 \else \ifdim \dimen0>\dimen2 \expandafter\expandafter\expandafter \splitpart \else \balancecolumns % last balancing \fi \fi } \def\balancecolumns{\bgroup \setbox7=\copy6 % destination height: \dimen0 \ifdim\dimen0>\baselineskip \else \dimen0=\baselineskip \fi \vbadness=20000 \def\tmp{% \setbox1=\hbox{}\tmpnum=0 \loop \ifnum\Ncols>\tmpnum \advance\tmpnum by1 \setbox1=\hbox{\unhbox1 \ifvoid6 \hbox to\wd6{\hss}\else \vsplit6 to\dimen0 \fi\hss} \repeat \ifvoid6 \else \advance \dimen0 by.2\baselineskip \setbox6=\copy7 \expandafter \tmp \fi}\tmp \hbox{}\nobreak\vskip-\splittopskip \nointerlineskip \hbox to\hsize{\unhbox1\unskip}% \egroup } %%%%%%%%%%%%%% Colors -- sec. 3.15 in opmac-d.pdf \newif\iflocalcolor \localcolorfalse \let\localcolor=\localcolortrue % for backward compatibility: \let\longlocalcolor=\localcolor \let\locpgcolor=\relax \def\linecolor#1{} \def\Blue{\setcmykcolor{1 1 0 0}} \def\Red{\setcmykcolor{0 1 1 0}} \def\Brown{\setcmykcolor{0 0.67 0.67 0.5}} \def\Green{\setcmykcolor{1 0 1 0}} \def\Yellow{\setcmykcolor{0 0 1 0}} \def\Cyan{\setcmykcolor{1 0 0 0}} \def\Magenta{\setcmykcolor{0 1 0 0}} \def\White{\setcmykcolor{0 0 0 0}} \def\Grey{\setcmykcolor{0 0 0 0.5}} \def\LightGrey{\setcmykcolor{0 0 0 0.2}} \def\Black{\setcolor{\pdfblackcolor}} \def\setcmykcolor#1{\setcolor{\formatcmyk{#1}}} \def\setrgbcolor#1{\setcolor{\formatrgb{#1}}} \def\formatcmyk#1{#1 k #1 K} \def\formatrgb#1{#1 rg #1 RG} \def\setcolor#1{\global\let\ensureblacko=\ensureblackoA \iflocalcolor \edef\currentcolor{#1}\colorstackpush\currentcolor \aftergroup\colorstackpop \else \xdef\currentcolor{#1}\colorstackset\currentcolor \fi } \def\pdfblackcolor{0 g 0 G} \edef\currentcolor{\pdfblackcolor} \def\ensureblacko#1{#1} \def\ensureblackoA#1{\colorstackpush\pdfblackcolor #1\colorstackpop} \ifx\pdfcolorstackinit\undefined \def\colorstackpush#1{\pdfliteral{#1}} \def\colorstackpop{\colorstackpush\currentcolor} \let\colorstackset=\colorstackpush \else \mathchardef\colorstackcnt=0 % Implicit stack usage \def\colorstackpush#1{\pdfcolorstack\colorstackcnt push{#1}} \def\colorstackpop{\pdfcolorstack\colorstackcnt pop} \def\colorstackset#1{\pdfcolorstack\colorstackcnt set{#1}} \fi \addprotect\setcolor \addprotect\localcolor \addprotect\longlocalcolor \ifpdftex\else \def\setcolor#1{} \def\pdfliteral#1{} \fi \def\draft{\addto\prepghook{\draftbox{\_tenbf DRAFT}\nointerlineskip}} \def\draftbox#1{\vbox to0pt{\setbox0=\hbox{\typosize[10/]#1}% \kern.5\vsize \kern4\wd0 \hbox to0pt{\kern.5\hsize \kern-2.5\wd0 \pdfsave \pdfrotate{55}\pdfscale{10}{10}% \hbox to0pt{\localcolor\LightGrey \box0\hss}% \pdfrestore \hss}\vss}} \ifpdftex\else \def\draft{\opwarning{\string\draft: Grey color is possible in pdfTeX only}} \fi %%%%%%%%%%%%%% Hyperrefs -- sec. 3.16 in opmac-d.pdf \def\destheight{1.4em} \def\destactive[#1:#2]{\if$#2$\else\ifvmode \tmpdim=\prevdepth \prevdepth=-1000pt \destbox[#1:#2]\prevdepth=\tmpdim \else \destbox[#1:#2]% \fi\fi } \def\destbox[#1]{\vbox to0pt{\kern-\destheight \pdfdest name{#1} xyz\vss}} \def\dest[#1]{} \def\linkactive[#1:#2]#3#4{\leavevmode\pdfstartlink height.9em depth.3em \pdfborder{#1} goto name{#1:#2}\relax {#3#4}\pdfendlink } \def\link[#1]#2#3{\leavevmode{#3}} \def\urllink[#1:#2]#3{{\let~=\relax \let\\=\relax \let\{=\relax \let\}=\relax \leavevmode\pdfstartlink height.9em depth.3em \pdfborder{#1}user{/Subtype/Link/A <>}\relax {\def~{\nobreak\space}\_urlcolor#3}\pdfendlink}% } \def\toclink#1{\toclinkA{#1}} \def\pglink#1{\leavevmode{\pgfolioA{#1}}} \def\citelink#1#2{\leavevmode{#2}} \def\reflink[#1]#2{\leavevmode{#2}} \def\ulink[#1]#2{\leavevmode{#2}} \def\_urlcolor{} \def\hyperlinks#1#2{% \let\dest=\destactive \let\link=\linkactive \def\toclink##1{\link[toc:\tocilabel.##1]{\localcolor#1}{\toclinkA{##1}}}% \def\pglink##1{\link[pg:\pgilabel.##1]{\localcolor#1}{\pgfolioA{##1}}}% \def\citelink##1##2{\link[cite:##1]{\localcolor#1}{##2}}% \def\reflink[##1]##2{\link[ref:##1]{\localcolor#1}{##2}}% \def\ulink[##1]##2{\urllink[url:##1]{##2}}% \def\_urlcolor{\localcolor#2}% } \def\tocilabel{} \def\pgilabel{} \def\pdfborder#1{\if^#1^\else \isdefined{#1border}\iftrue \if^\csname#1border\endcsname^\else attr{/C[\csname#1border\endcsname] /Border[0 0 .6]}\fi \else attr{/Border[0 0 0]}\fi\fi } \ifpdftex \else \def\link[#1]#2#3{#3} \def\urllink[#1]#2{#2} \def\hyperlinks#1#2{\opwarning{No pdfTeX detected, \noexpand\hyperlinks ignored}} \fi \def\url#1{{\def\tmpb{#1}% \replacestrings{//}{{\urlskip\urlslashslash\urlbskip}}% \replacestrings{/}{{\urlskip/\urlbskip}}% \replacestrings{.}{{\urlskip.\urlbskip}}% \replacestrings{?}{{\urlskip?\urlbskip}}% \replacestrings{=}{{\urlskip=\urlbskip}}% \replacestrings{~}{{\char`\~}}% \replacestrings{_}{{\char`\_}}% \replacestrings{^}{{\char`\^}}% \replacestrings{\\}{\bslash}% \replacestrings{\{}{{\char`\{}}% \replacestrings{\}}{{\char`\}}}% \replacestrings{&}{{\urlbskip\char`\& \urlskip}}% \def\|{}\ulink[#1]{\urlfont\tmpb\null}% }} \def\urlfont{\tt \let\|=\urlspecchar} \def\urlspecchar{\penalty10 } \def\urlskip{\null\nobreak\hskip0pt plus0.05em\relax} \def\urlbskip{\penalty100 \hskip0pt plus0.05em\relax} \def\urlslashslash{/\urlskip/} \addprotect\url %%%%%%%%%%%%%% Outlines -- sec. 3.17 in opmac-d.pdf %%%%%%%%%%%%%% Verbatim, \begtt, \endtt -- sec. 3.18 in opmac-d.pdf \newcount\ttline \ttline=-1 \newcount\viline \newread\vifile \def\setverb{\frenchspacing\def\do##1{\catcode`##1=12}\dospecials \catcode`\*=12 } \def\begtt{\par \vskip\parskip \ttskip \bgroup \wipeepar \setverb \adef{ }{\ }% \ifx\savedttchar\undefined \else \catcode\savedttchar=12 \fi \parindent=\ttindent \parskip=0pt \tthook\relax \ifnum\ttline<0 \else \_tenrm \thefontscale[700]\ea\let\ea\sevenrm\the\font \everypar\expandafter{\the\everypar \global\advance\ttline by1 \printttline}\fi \def\par##1{\endgraf\ifx##1\egroup\else\penalty\ttpenalty\leavevmode\fi ##1}% \obeylines \startverb} {\catcode`\|=0 \catcode`\\=12 |gdef|startverb#1\endtt{|tt|ptthook#1|egroup|par|ttskip|testparA}} \def\testparA{\expandafter\testparB\romannumeral-`\.} \def\testparB{\futurelet\tmpa\testparC} \def\testparC{\ifx\tmpa\par\else\afternoindent\fi} \def\printttline{\llap{\sevenrm\the\ttline\kern.9em}} \def\activettchar#1{% \ifx\savedttchar\undefined\else \catcode\savedttchar=\savedttcharc \fi \chardef\savedttchar=`#1% \chardef\savedttcharc=\catcode`#1% \bgroup\lccode`\~=`#1% \lowercase {\egroup\def~}{\leavevmode\hbox\bgroup\setverb\adef{ }{\ }% \intthook\tt\readverb}% \bgroup\lccode`\~=`#1\lowercase{\egroup\def\readverb ##1~}{##1\egroup}% \catcode`#1=13 } \def\verbinput (#1) #2 {\par \def\tmpa{#2}% \ifx\vifilename\tmpa \else \openin\vifile=#2 \global\viline=0 \global\let\vifilename=\tmpa \ifeof\vifile \opwarning{\noexpand\verbinput - file "#2" is unable to reading} \expandafter\expandafter\expandafter\skiptorelax \fi \fi \viscanparameter #1+\relax } \def\skiptorelax#1\relax{} \def \viscanparameter #1+#2\relax{% \if$#2$\viscanminus(#1)\else \viscanplus(#1+#2)\fi } \def\viscanplus(#1+#2+){% \if$#1$\tmpnum=\viline \else \ifnum#1<0 \tmpnum=\viline \advance\tmpnum by-#1 \else \tmpnum=#1 \advance\tmpnum by-1 \ifnum\tmpnum<0 \tmpnum=0 \fi % (0+13) = (1+13) \fi \fi \edef\vinolines{\the\tmpnum}% \if$#2$\def\vidolines{0}\else\edef\vidolines{#2}\fi \doverbinput } \def\viscanminus(#1-#2){% \if$#1$\tmpnum=0 \else \tmpnum=#1 \advance\tmpnum by-1 \fi \ifnum\tmpnum<0 \tmpnum=0 \fi % (0-13) = (1-13) \edef\vinolines{\the\tmpnum}% \if$#2$\tmpnum=0 \else \tmpnum=#2 \advance\tmpnum by-\vinolines \fi \edef\vidolines{\the\tmpnum}% \doverbinput } \def\doverbinput{% \tmpnum=\vinolines \advance\tmpnum by-\viline \ifnum\tmpnum<0 \openin\vifile=\vifilename\space \global\viline=0 \else \edef\vinolines{\the\tmpnum}% \fi \vskip\parskip \ttskip \bgroup \wipeepar \setverb \adef{ }{\ }% \ifx\savedttchar\undefined \else \catcode\savedttchar=12 \fi \parindent=\ttindent \parskip=0pt \tthook\relax \ifnum\ttline<-1 \else \_tenrm \thefontscale[700]\ea\let\ea\sevenrm\the\font \everypar\expandafter{\the\everypar \glob\advance\ttline by1 \printttline}\fi \def\par##1{\endgraf\ifx##1\egroup\else\penalty\ttpenalty\leavevmode\fi ##1}% \obeylines \tmpnum=0 \lccode`\~=`\^^M \lowercase{\def\tmpb{~}}% \loop \ifeof\vifile \tmpnum=\vinolines\space \fi \ifnum\tmpnum<\vinolines\space \vireadline \advance\tmpnum by1 \repeat %% skip line \ifnum\ttline=-1 \ttline=\viline \let\glob=\relax \else\let\glob=\global \fi \tmpnum=0 \ifnum\vidolines=0 \tmpnum=-1 \fi \ifeof\vifile \tmpnum=\vidolines\space \fi \loop \ifnum\tmpnum<\vidolines\space \vireadline \ifeof\vifile \tmpnum=\vidolines\space \else \viprintline \fi %% print line \ifnum\vidolines=0 \else\advance\tmpnum by1 \fi \repeat \tt\expandafter\ptthook\tmpb\egroup\par\ttskip\testparA } \def\vireadline{\read\vifile to \tmp \global\advance\viline by1 } \def\viprintline{\expandafter\addto\expandafter\tmpb\expandafter{\tmp}} %%%%%%%%%%%%%% \table -- sec. 3.19 in opmac-d.pdf \newtoks\tabdata \def\tabstrutA{\tabstrut} \newcount\colnum \def\ddlinedata{} \def\vvleft{} \def\table{\vbox\bgroup \catcode`\|=12 \tableA} \def\tableA#1#2{\offinterlineskip \colnum=0 \def\tmpa{}\tabdata={}\scantabdata#1\relax \halign\expandafter{\the\tabdata\cr#2\crcr}\egroup} \def\scantabdata#1{\let\next=\scantabdata \ifx\relax#1\let\next=\relax \else\ifx|#1\addtabvrule \else\ifx(#1\def\next{\scantabdataE}% \else\isinlist{123456789}#1\iftrue \def\next{\scantabdataC#1}% \else \expandafter\ifx\csname tabdeclare#1\endcsname \relax \expandafter\ifx\csname paramtabdeclare#1\endcsname \relax \opwarning{tab-declarator "#1" unknown, ignored}% \else \def\next{\expandafter\scantabdataB\csname paramtabdeclare#1\endcsname}\fi \else \def\next{\expandafter\scantabdataA \csname tabdeclare#1\endcsname}% \fi\fi\fi\fi\fi \next } \def\scantabdataA#1{\addtabitem \expandafter\addtabdata\expandafter{#1\tabstrutA}\scantabdata} \def\scantabdataB#1#2{\addtabitem\expandafter\addtabdata\expandafter{#1{#2}\tabstrutA}\scantabdata} \def\scantabdataC {\def\tmpb{}\afterassignment\scantabdataD \tmpnum=} \def\scantabdataD#1{\loop \ifnum\tmpnum>0 \advance\tmpnum by-1 \addto\tmpb{#1}\repeat \expandafter\scantabdata\tmpb} \def\scantabdataE#1){\addtabdata{#1}\scantabdata} \def\tabdeclarec{\tabiteml\hfil##\unsskip\hfil\tabitemr} \def\tabdeclarel{\tabiteml##\unsskip\hfil\tabitemr} \def\tabdeclarer{\tabiteml\hfil##\unsskip\tabitemr} \def\paramtabdeclarep#1{\tabiteml\vtop{\hsize=#1\relax \baselineskip=\normalbaselineskip \lineskiplimit=0pt \noindent##\unsskip \vbox to0pt{\vss\hbox{\tabstrutA}}}\tabitemr} \def\unsskip{\ifdim\lastskip>0pt \unskip\fi} \def\addtabitem{\ifnum\colnum>0 \addtabdata{&}\addto\ddlinedata{&\dditem}\fi \advance\colnum by1 \let\tmpa=\relax} \def\addtabdata#1{\tabdata\expandafter{\the\tabdata#1}} \def\addtabvrule{% \ifx\tmpa\vrule \addtabdata{\kern\vvkern}% \ifnum\colnum=0 \addto\vvleft{\vvitem}\else\addto\ddlinedata{\vvitem}\fi \else \ifnum\colnum=0 \addto\vvleft{\vvitemA}\else\addto\ddlinedata{\vvitemA}\fi\fi \let\tmpa=\vrule \addtabdata{\vrule}} \def\crl{\crcr\noalign{\hrule}} \def\crll{\crcr\noalign{\hrule\kern\hhkern\hrule}} \def\crli{\crcr \omit \gdef\dditem{\omit\tablinefil}\gdef\vvitem{\kern\vvkern\vrule}\gdef\vvitemA{\vrule}% \vvleft\tablinefil\ddlinedata\crcr} \def\crlli{\crli\noalign{\kern\hhkern}\crli} \def\tablinefil{\leaders\hrule\hfil} \def\crlp#1{\crcr \noalign{\kern-\drulewidth}% \omit \xdef\crlplist{#1}\xdef\crlplist{,\expandafter}\expandafter\crlpA\crlplist,\end,% \global\tmpnum=0 \gdef\dditem{\omit\crlpD}% \gdef\vvitem{\kern\vvkern\kern\drulewidth}\gdef\vvitemA{\kern\drulewidth}% \vvleft\crlpD\ddlinedata \global\tmpnum=0 \crcr} \def\crlpA#1,{\ifx\end#1\else \crlpB#1-\end,\expandafter\crlpA\fi} \def\crlpB#1#2-#3,{\ifx\end#3\xdef\crlplist{\crlplist#1#2,}\else\crlpC#1#2-#3,\fi} \def\crlpC#1-#2-#3,{\tmpnum=#1\relax \loop \xdef\crlplist{\crlplist\the\tmpnum,}\ifnum\tmpnum<#2\advance\tmpnum by1 \repeat} \def\crlpD{\global\advance\tmpnum by1 \edef\tmpa{\noexpand\isinlist\noexpand\crlplist{,\the\tmpnum,}}% \tmpa\iftrue \kern-\drulewidth \tablinefil \kern-\drulewidth\else\hfil \fi} \def\tskip{\afterassignment\tskipA \tmpdim} \def\tskipA{\gdef\dditem{}\gdef\vvitem{}\gdef\vvitemA{}\gdef\tabstrutA{}% \vbox to\tmpdim{}\ddlinedata \crcr \noalign{\gdef\tabstrutA{\tabstrut}}} \def\mspan{\omit \tabdata={\tabstrut}\let\tmpa=\relax \afterassignment\mspanA \_mscount=} \def\mspanA[#1]#2{\loop \ifnum\_mscount>1 \csname span\endcsname \omit \advance\_mscount-1 \repeat \colnum=0 \def\tmpa{}\tabdata={}\scantabdata#1\relax \setbox0=\vbox{\halign\expandafter{\the\tabdata\cr#2\crcr}\global\setbox8=\lastbox}% \setbox0=\hbox{\unhbox8 \unskip \global\setbox8=\lastbox}% \unhbox8 \ignorespaces} \newdimen\drulewidth \drulewidth=0.4pt \let\orihrule=\hrule \let\orivrule=\vrule \def\rulewidth{\afterassignment\rulewidthA \drulewidth} \def\rulewidthA{\edef\hrule{\orihrule height\the\drulewidth}% \edef\vrule{\orivrule width\the\drulewidth}} \long\def\frame#1{% \hbox{\vrule\vtop{\vbox{\hrule\kern\vvkern \hbox{\kern\hhkern\relax#1\kern\hhkern}% }\kern\vvkern\hrule}\vrule}} %%%%%%%%%%%%%% \inspic -- sec. 3.20 in opmac-d.pdf \newdimen\picwidth \picwidth=0pt \let\picw=\picwidth \newdimen\picheight \picheight=0pt \ifpdftex \def\inspic #1 {\hbox{% \pdfximage \ifdim\picwidth=0pt \else width\picwidth\fi \ifdim\picheight=0pt \else height\picheight\fi \inspicpage {\picdir#1}% \pdfrefximage\pdflastximage}} \else \def\inspic #1 {\opwarning {The \noexpand\inspic is supported for PDF output only}} \fi \def\inspicpage{} %%%%%%%%%%%%%%% transformation matrix -- sec. 3.21 in opmac-d.pdf \def\pdfscale#1#2{\pdfsetmatrix{#1 0 0 #2}} \def\pdfrotate#1{\tmpdim=#1pt \ifdim\tmpdim=0pt \else \ifdim\tmpdim=90pt \pdfsetmatrix{0 1 -1 0}% \else \edef\tmp{#1}\expandafter\pdfrotateA\tmp..\relax \fi \fi } \def\pdfrotateA #1.#2.#3\relax{% \def\tmp##1.##2\relax {##1}% \tmpnum=\expandafter \tmp \the\tmpdim \relax % round \ifdim\tmpdim>0pt \def\tmpa{}\else\def\tmpa{-}\fi % save - \loop \ifnum\tmpnum<0 \advance\tmpnum by360 \repeat \loop \ifnum\tmpnum>360 \advance\tmpnum by-360 \repeat \loop \ifnum\tmpnum>90 \pdfrotate{90}\advance\tmpnum by-90 \repeat \ifnum\tmpnum=90 \pdfrotate{90}\else \ifnum\tmpnum>44 \pdfsetmatrix{.7071 .7071 -.7071 .7071}% \advance\tmpnum by-45 \fi \ifnum\tmpnum>22 \pdfsetmatrix{.9272 .3746 -.3746 .9272}% \advance\tmpnum by-22 \fi \ifnum\tmpnum>0 \pdfsetmatrix{\smallcos \smallsin -\smallsin \smallcos}% \fi\fi \if$#2$\else % fraction part \tmpdim=.01745329pt % \pi/180 \tmpdim=.#2\tmpdim % \edef\tmp{\expandafter\ignorept\the\tmpdim\space}% \ifx\tmpa\empty \pdfsetmatrix{1 \tmp -\tmp 1}% \else \pdfsetmatrix{1 -\tmp \tmp 1}% \fi\fi } \def\smallcos{.\ifcase\tmpnum \or9998\or9994\or9986\or9976\or9962\or9945\or 9925\or9903\or9877\or9848\or9816\or9781\or9744\or9703\or9659\or9613\or 9563\or9511\or9455\or9397\or9336\or9272\fi\space} \def\smallsin{.\ifcase\tmpnum 0\or0175\or0359\or0523\or0698\or0872\or1045\or 1219\or1391\or1564\or1736\or1908\or2079\or2250\or2419\or2588\or2756\or 2924\or309\or3256\or342\or3584\or3746\fi\space} \ifpdftex \else \def\pdfsetmatrix#1{} \def\pdfsave{} \def\pdfrestore{} \fi %%%%%%%%%%%%%% \fnote, \mnote -- sec 3.22 in opmac-d.pdf \newcount\fnotenum \fnotenum=0 \newcount\fnotenumlocal \newif\iflocfnum \locfnumtrue \long\def\fnoteG#1#2{\global\advance \fnotenum by1 \ifx\relax#1\relax\else\leavevmode\fi \iflocfnum \openref\wref\Xfnote{}% \isdefined{fn:\the\fnotenum}\iftrue \else\opwarning{unknown \noexpand\fnote mark. TeX me again}\fi\fi #1{\everypar={}\fnotehook\scalemain\typoscale[800/800]\vfootnote\fnmarkx{#2}}% } \def\fnote{\fnoteG\fnmarkx} \def\fnotetext{\fnoteG{}} \def\fnotemark#1{{\advance\fnotenum by#1\relax \fnmarkx}} \def\fnmarkx{\isdefined{fn:\the\fnotenum}\iftrue\thefnote\else$^?$\fi} \def\thefnote{$^{\locfnum}$} \def\locfnum{\csname fn:\the\fnotenum\endcsname} \def\Xfnote{\advance\fnotenumlocal by1 \advance\fnotenum by1 \sxdef{fn:\the\fnotenum}{\the\fnotenumlocal}} \def\runningfnotes{\locfnumfalse\def\locfnum{\the\fnotenum}\def\fnmarkx{\thefnote}} \newcount\mnotenum \mnotenum=0 % global counter of mnotes \newdimen\mnoteskip \mnoteskip=0pt \long\def\mnote#1{\ifvmode \hbox{\vbox to\ht\strutbox{}\mnoteA{#1}}\nobreak\vskip-\baselineskip \else \strut\vadjust{\kern-\dp\strutbox \mnoteA{#1}\kern\dp\strutbox}% \fi } \long\def\mnoteA#1{\global\advance \mnotenum by1 \ifx\mnotesfixed\undefined \isdefined{mn:\the\mnotenum}\iftrue \else\opwarning{unknown \noexpand\mnote side. TeX me again}\fi \edef\tmp{\csname mn:\the\mnotenum\endcsname}% \openref\wref\Xmnote{}\ifvmode\nobreak\fi \else \let\tmp=\mnotesfixed \fi \expandafter\ifx\tmp \left \hbox to0pt{\kern-\mnotesize \kern-\mnoteindent \vbox to0pt{\vss \setbox0=\vtop{\hsize=\mnotesize \leftskip=0pt plus 1fill \rightskip=0pt {\mnotehook\noindent#1\endgraf}}% \dp0=0pt \box0 \kern\mnoteskip \global\mnoteskip=0pt}\hss}% \else \hbox to0pt{\kern\hsize \kern\mnoteindent \vbox to0pt{\vss \setbox0=\vtop{\hsize=\mnotesize \rightskip=0pt plus 1fil \leftskip=0pt {\mnotehook\noindent#1\endgraf}}% \dp0=0pt \box0 \kern\mnoteskip \global\mnoteskip=0pt}\hss}% \fi } \def\Xmnote{\advance\mnotenum by1 \sxdef{mn:\the\mnotenum}{\ifodd\lastpage \right \else \left \fi}} \def\fixmnotes#1{\def\mnotesfixed{#1}} %%%%%%%%%%%%%% \cite, \bib, \usebibtex, \usebbl -- sec. 3.23 in opmac-d.pdf \newwrite\auxfile % AUX file for BibTeX \newcount\bibnum % the bibitem counter \newtoks\bibmark % the bibmark used if \nonumcitations \newcount\lastcitenum \lastcitenum=0 % for \shortcitations \def\cite[#1]{{\citeA#1,,,[\printsavedcites]}} \def\nocite[#1]{{\citeA#1,,,}} \def\rcite[#1]{{\citeA#1,,,\printsavedcites}} \def\savedcites{} \def\citeA #1#2,{\if#1,\else \if *#1\addcitelist{*}\expandafter \skiptorelax \fi \isdefined{bib:#1#2}\iftrue \else \addcitelist{#1#2}% \opwarning{The cite [#1#2] unknown. Try to TeX me again}\openref \addto\savedcites{?,}\def\sortcitesA{}\lastcitenum=0 \expandafter\gdef\csname bib:#1#2\endcsname {}% \expandafter \skiptorelax \fi \expandafter \ifx \csname bib:#1#2\endcsname \empty \addto\savedcites{?,}\def\sortcitesA{}\lastcitenum=0 \expandafter \skiptorelax \fi \def\bibnn##1{}% \if &\csname bib:#1#2\endcsname \addcitelist{#1#2}% \def\bibnn##1##2{##1}% \sxdef{bib:#1#2}{\csname bib:#1#2\endcsname}% \fi \edef\savedcites{\savedcites \csname bib:#1#2\endcsname,}% \relax \expandafter\citeA\fi } \def\printsavedcites{\sortcitesA \chardef\tmpb=0 \expandafter\citeB\savedcites,% \ifnum\tmpb>0 \printdashcite{\the\tmpb}\fi } \def\sortcitesA{} \def\sortcitations{% \def\sortcitesA{\edef\savedcites{300000,\expandafter}\expandafter\sortcitesB\savedcites,% \def\tmpa####1300000,{\def\savedcites{####1}}\expandafter\tmpa\savedcites}% } \def\sortcitesB #1,{\if $#1$% \else \mathchardef\tmpa=#1 \edef\savedcites{\expandafter}\expandafter\sortcitesC \savedcites\end \expandafter\sortcitesB \fi } \def\sortcitesC#1,{\ifnum\tmpa<#1\edef\tmpa{\the\tmpa,#1}\expandafter\sortcitesD \else\edef\savedcites{\savedcites#1,}\expandafter\sortcitesC\fi} \def\sortcitesD#1\end{\edef\savedcites{\savedcites\tmpa,#1}} \def\citeB#1,{\if$#1$\else \if?#1\relax??% \else \ifnum\lastcitenum=0 % only comma separated list \printcite{#1}% \else \ifx\citesep\empty % first cite item \lastcitenum=#1\relax \printcite{#1}% \else % next cite item \advance\lastcitenum by1 \ifnum\lastcitenum=#1\relax % cosecutive cite item \mathchardef\tmpb=\lastcitenum \else % there is a gap between cite items \lastcitenum=#1\relax \ifnum\tmpb=0 % previous items were printed \printcite{#1}% \else \printdashcite{\the\tmpb}\printcite{#1}\chardef\tmpb=0 \fi\fi\fi\fi\fi \expandafter\citeB\fi } \def\shortcitations{\lastcitenum=1 } \def\printcite#1{\citesep\citelink{#1}{\citelinkA{#1}}\def\citesep{,\hskip.2em\relax}} \def\printdashcite#1{\ifmmode-\else\hbox{--}\fi\citelink{#1}{\citelinkA{#1}}} \def\citesep{} \def\nonumcitations{\lastcitenum=0\def\sortcitesA{}\def\etalchar##1{$^{##1}$}% \def\citelinkA##1{\isdefined{bim:##1}\iftrue \csname bim:##1\endcsname \else ##1\opwarning{\noexpand\nonumcitations + empty bibmark. Maybe bad BibTeX style}\fi} } \def\citelinkA{} \def\ecite[#1]{\bgroup\citeA#1,,,\expandafter\eciteB\savedcites;} \def\eciteB#1,#2;#3{\if?#1\relax #3\else \citelink{#1}{#3}\fi\egroup} \def\bib[#1]{\def\tmp{\isnextchar={\bibA[#1]}{\bibmark={}\bibB[#1]}}% \expandafter\tmp\romannumeral-`\.} % ignore optional space \def\bibA[#1]=#2{\bibmark={#2}\bibB[#1]} \def\bibB[#1]{\par \ifnum\bibnum>0 \bibskip \fi \advance\bibnum by1 \noindent \def\tmpb{#1}\wbib{#1}{\the\bibnum}{\the\bibmark}% \printbib \ignorespaces } \def\wbib#1#2#3{\dest[cite:\the\bibnum]% \ifx\wref\wrefrelax\else \immediate\wref\Xbib{{#1}{#2}{#3}}\fi} \def\Xbib#1#2#3{\sdef{bib:#1}{\bibnn{#2}&}\if^#3^\else\sdef{bim:#2}{#3}\fi\def\lastbibnum{#2}} \def\printbib{\hangindent=\iindent \ifx\citelinkA\empty \noindent\hskip\iindent \llap{[\the\bibnum] }% \else \noindent \fi } \def\addcitelist#1{\global\addto\citelist{\citeI[#1]}} \def\writeaux#1{\immediate\write\auxfile{\string\citation{#1}}} \def\writeXcite#1{\openref\immediate\wref\Xcite{{#1}}} \def\citelist{} \def\citelistB{} \def\usebibtex#1#2{% \openref \openauxfile{#1}{#2}% \def\citeI[##1]{\writeaux{##1}}\citelist \global\let\addcitelist=\writeaux \bgroup \readbblfile{\jobname}\egroup } \def\openauxfile#1#2{% \immediate\openout\auxfile=\jobname.aux \immediate\write\auxfile {\percent\percent\space Opmac: AUX file reserved for bibtex only}% \immediate\write\auxfile{\string\bibdata{#1}}% \immediate\write\auxfile{\string\bibstyle{#2}}% } \def\readbblfile #1{% \openin\testin=#1.bbl \ifeof\testin \opwarning{The `#1.bbl' file doesn't exist. Use `bibtex'..}% \else \closein\testin \bibnum=0 \long\def\begin##1\bibitem{\bibitem}\def\end##1{}% LaTeX environment \def\httpAddr##1{\url{http:##1}}\def\\{\hfill\break}% \def\newblock{\hskip .11em plus.33em minus.07em}% \def\mbox{\leavevmode\hbox}\def\emph##1{{\it##1}}% \parindent=\iindent \bibtexhook\relax \input #1.bbl \par \fi } \def\bibitem{\isnextchar[{\bibitemB}{\bibmark={}\bibitemC}} \def\bibitemB[#1]{\bibmark={#1}\bibitemC} \def\bibitemC#1{\bibitemD{#1}} \def\bibitemD#1{\par\ifnum\bibnum>0 \bibskip \fi \advance\bibnum by1 \noindent \def\tmpb{#1}\wbib{#1}{\the\bibnum}{\the\bibmark}% \printbib \ignorespaces } \def\genbbl#1#2{\openauxfile{#1}{#2}% \immediate\write\auxfile{\string\citation{*}}% \bgroup \iindent=4em \def\bibitemC##1{\par\ifnum\bibnum>0 \bibskip \fi \advance\bibnum by1 \noindent \hangindent=\parindent \indent \llap{[##1]\enspace}\ignorespaces }% \readbblfile{\jobname}% \egroup } \def\usebbl/#1 #2 {\isdefined{bbl:#1}% \iftrue \csname bbl:#1\endcsname {#2}\else \opwarning{\string\usebbl/#1 #2 ... the `#1' type undefined}% \fi } \sdef{bbl:a}#1{\bgroup \readbblfile{#1}\egroup} \sdef{bbl:b}#1{\bgroup \let\citeI=\relax \xdef\citelist{\citelist\citelistB}% \def\bibitemC##1 ##2\par{% \isinlist\citelist{[##1]}\iftrue \bibitemD{##1}##2\par\fi}% \readbblfile{#1}% \global\let\addcitelist=\writeXcite \egroup } \sdef{bbl:c}#1{\bgroup \ifx\citelinkA\empty \else \opwarning{\string\nonumcitations: don't use \string\usebbl/c}\fi \let\citeI=\relax \xdef\citelist{\citelist\citelistB}% \def\bibitemC##1 ##2\par{% \isinlist\citelist{[##1]}\iftrue \if^\the\bibmark^\sdef{bb:##1}{\bibitemD{##1}##2\par}% \else \toks0={##2\par}% \edef\tmpa{\noexpand\sdef{bb:##1}{% \the\bibmark have to expand \noexpand\bibitemB[\the\bibmark]{##1}\the\toks0}}\tmpa \fi\fi}% \readbblfile{#1}% \def\bibitemC##1{\bibitemD{##1}}% \def\citeI[##1]{\csname bb:##1\endcsname}\citelist \global\let\addcitelist=\writeXcite \egroup } \def\Xcite#1{\addto\citelistB{\citeI[#1]}} \def\usebib{\par \input opmac-bib \usebib} %%%%%%%%%%%%%% output -- sec. 3.24 in opmac-d.pdf \addto\_begoutput{% \immediate\wref\Xpage{{\the\pageno}}% \def\nl{ }\def\fnote##1{}\def\fnotemark##1{}% } \def\doprotect#1{\let#1=\relax} \def\_pagedest{\def\destheight{25pt}\dest[pg:\pgilabel.\the\pageno]} %\footline={\hss\_tenrm\thefontsize[10]\folio\hss} \newcount\lastpage \lastpage=0 % the last page of the document \def\Xpage#1{\lastpage=#1 \fnotenumlocal=0 } %%%%%%%%%%%%%% margins -- sec. 3.25 in opmac-d.pdf %%%%%%%%%%%%%% Pre-defined document styles \def\boxlines{% \def\boxlinesE{\ifhmode\egroup\empty\fi}\def\nl{\boxlinesE}% \bgroup \lccode`\~=`\^^M\lowercase{\egroup\let~}\boxlinesE \everypar{\setbox0=\lastbox\endgraf \hbox\bgroup \catcode`\^^M=13 \let\par=\nl \aftergroup\boxlinesC}% } \def\boxlinesC{\futurelet\next\boxlinesD} \def\boxlinesD{\ifx\next\empty\else\expandafter\egroup\fi} \def\report{ \typosize[11/13.2] \let\titfont=\chapfont \titskip=3ex \eoldef\author##1{\removelastskip\bigskip {\leftskip=0pt plus1fill \rightskip=\leftskip \it \noindent ##1\par}\nobreak\bigskip } \parindent=1.2em \iindent=\parindent \ttindent=\parindent \footline={\global\footline={\hss\_tenrm\thefontsize[10]\folio\hss}} \runningfnotes } \def\letter{ \def\address{\vtop\bgroup\boxlines \parskip=0pt \let\par=\egroup} \def\subject{{\bf \mtext{subj}: }} \typosize[11/14] \parindent=0pt \parskip=\medskipamount \nopagenumbers } \endinput