% Атор исходного файла -- Д. Е. Кнут. % страница автора: http://www-cs-faculty.stanford.edu/~knuth/ % Сам файл можно найти в любом каталоге CTAN % Файл русифицировал, добавил гиперссылки и закладки в pdf % Жуков Илья Борисович, к.т.н. % Город Ленинград, 2012--2014 % Сайт: http://ibzh.eko3.ru/index.htm % Почта: ibzh@yandex.ru % Адрес страницы: http://ibzh.eko3.ru/tex/literate.htm % % Гиперссылки и закладки появляются после обработки dvi-файла % программой dvipdfm. Для pdftex эти макросы негодны. % ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ % Макросы для гипрессылок для dvipdfm \def\pdflinkcolor{0.0 0.0 1.0} % Цвет ссылки в pdf \def\SetAnch{\raise 0,75em\hbox{\special{pdf:dest (web\NumReaded) [ @thispage /FitH @ypos ]}}% \gdef\NumReaded{}\gdef\NumEnded{}} \def\SetAnchor#1{\NumRead\SetAnch#1\relax\ignorespaces} % Ставит якорь после числа \def\SetLin{\special{pdf: bann << /Type /Annot /Subtype /Link /Border [ 0 0 0 ] /A << /S /GoTo /D (web\NumReaded) >> >>}% \special{pdf:bc [\pdflinkcolor]}\NumReaded\NumEnded\special{pdf:ec}\special{pdf: eann}\relax% \gdef\NumReaded{}\gdef\NumEnded{}} \def\SetLink#1{\NumRead\SetLin #1\relax} % Ставит ссылку \def\NumReaded{} % Хранит последнее прочитанное число \def\NumEnded{} % Хранит то, что было за числом \def\NumRead#1#2{\xdef\NumEnded{}\begingroup \ifx #21\global\xdef\NumReaded{\NumReaded 1}\aftergroup\NumRead \else \ifx #22\global\xdef\NumReaded{\NumReaded 2}\aftergroup\NumRead \else \ifx #23\global\xdef\NumReaded{\NumReaded 3}\aftergroup\NumRead \else \ifx #24\global\xdef\NumReaded{\NumReaded 4}\aftergroup\NumRead \else \ifx #25\global\xdef\NumReaded{\NumReaded 5}\aftergroup\NumRead \else \ifx #26\global\xdef\NumReaded{\NumReaded 6}\aftergroup\NumRead \else \ifx #27\global\xdef\NumReaded{\NumReaded 7}\aftergroup\NumRead \else \ifx #28\global\xdef\NumReaded{\NumReaded 8}\aftergroup\NumRead \else \ifx #29\global\xdef\NumReaded{\NumReaded 9}\aftergroup\NumRead \else \ifx #20\global\xdef\NumReaded{\NumReaded 0}\aftergroup\NumRead \else \global\xdef\NumEnded{#2}% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\aftergroup#1\endgroup} \def\SetLinks#1{\begingroup \ifx #11\xdef\NumReaded{\NumReaded 1}\aftergroup\SetLinks \else \ifx #12\xdef\NumReaded{\NumReaded 2}\aftergroup\SetLinks \else \ifx #13\xdef\NumReaded{\NumReaded 3}\aftergroup\SetLinks \else \ifx #14\xdef\NumReaded{\NumReaded 4}\aftergroup\SetLinks \else \ifx #15\xdef\NumReaded{\NumReaded 5}\aftergroup\SetLinks \else \ifx #16\xdef\NumReaded{\NumReaded 6}\aftergroup\SetLinks \else \ifx #17\xdef\NumReaded{\NumReaded 7}\aftergroup\SetLinks \else \ifx #18\xdef\NumReaded{\NumReaded 8}\aftergroup\SetLinks \else \ifx #19\xdef\NumReaded{\NumReaded 9}\aftergroup\SetLinks \else \ifx #10\xdef\NumReaded{\NumReaded 0}\aftergroup\SetLinks \else \ifx #1\*\xdef\NumEnded{\*}\aftergroup\SetLinks \else \ifx #1*\xdef\NumEnded{*}\aftergroup\SetLinks \else \ifx #1,\SetLin, \aftergroup\SetLinks \else \ifx #1.\SetLin.% \else\SetLin \aftergroup#1\hskip -0pt% \fi\fi% \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\endgroup} % ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ % Закладки для pdf \newcount\CountForDirtyHack {\catcode`\_=11 \catcode 0=12 \gdef\SetRusskActive{ \catcode`\а=13 \catcode`\к=13 \catcode`\х=13 \catcode`\А=13 \catcode`\К=13 \catcode`\Х=13 \catcode`\б=13 \catcode`\л=13 \catcode`\ц=13 \catcode`\Б=13 \catcode`\Л=13 \catcode`\Ц=13 \catcode`\в=13 \catcode`\м=13 \catcode`\ч=13 \catcode`\В=13 \catcode`\М=13 \catcode`\Ч=13 \catcode`\г=13 \catcode`\н=13 \catcode`\ш=13 \catcode`\Г=13 \catcode`\Н=13 \catcode`\Ш=13 \catcode`\д=13 \catcode`\о=13 \catcode`\щ=13 \catcode`\Д=13 \catcode`\О=13 \catcode`\Щ=13 \catcode`\е=13 \catcode`\п=13 \catcode`\ъ=13 \catcode`\Е=13 \catcode`\П=13 \catcode`\Ъ=13 \catcode`\ё=13 \catcode`\р=13 \catcode`\ы=13 \catcode`\Ё=13 \catcode`\Р=13 \catcode`\Ы=13 \catcode`\ж=13 \catcode`\с=13 \catcode`\ь=13 \catcode`\Ж=13 \catcode`\С=13 \catcode`\Ь=13 \catcode`\з=13 \catcode`\т=13 \catcode`\э=13 \catcode`\З=13 \catcode`\Т=13 \catcode`\Э=13 \catcode`\и=13 \catcode`\у=13 \catcode`\ю=13 \catcode`\И=13 \catcode`\У=13 \catcode`\Ю=13 \catcode`\й=13 \catcode`\ф=13 \catcode`\я=13 \catcode`\Й=13 \catcode`\Ф=13 \catcode`\Я=13} \gdef\SetUnicodeCatcodes{% \catcode`\^^fe=11% Первый байт заголовка строки Unicode \catcode`\^^ff=11% Второй байт заголовка \catcode`\^^04=11% Байт перед русскими буквами \catcode`\^^00=11% Байт перед латинскими буквами } { \gdef\DirtyHackClose#1{^^ff(} \gdef\DirtyHackOpen{^^ff)} \SetUnicodeCatcodes% \catcode`\%=11 \catcode`\&=11 \catcode`\#=11 \catcode`\$=11 \gdef\BeginingOfUnicodeString{^^fe^^ff} \catcode255=6 \catcode`\ =12 \gdef\Translate_Char_To_Uncode^^ff1{\if^^ff1а^^040\else \if^^ff1б^^041\else\if^^ff1в^^042\else\if^^ff1г^^043\else\if^^ff1д^^044\else \if^^ff1е^^045\else\if^^ff1ё^^04Q\else\if^^ff1ж^^046\else\if^^ff1з^^047\else\if^^ff1и^^048\else \if^^ff1й^^049\else\if^^ff1к^^04:\else\if^^ff1л^^04;\else\if^^ff1м^^04<\else\if^^ff1н^^04=\else \if^^ff1о^^04>\else\if^^ff1п^^04?\else\if^^ff1р^^04@\else\if^^ff1с^^04A\else\if^^ff1т^^04B\else \if^^ff1у^^04C\else\if^^ff1ф^^04D\else\if^^ff1х^^04E\else\if^^ff1ц^^04F\else\if^^ff1ч^^04G\else \if^^ff1ш^^04H\else\if^^ff1щ^^04I\else\if^^ff1ъ^^04J\else\if^^ff1ы^^04K\else\if^^ff1ь^^04L\else \if^^ff1э^^04M\else\if^^ff1ю^^04N\else\if^^ff1я^^04O\else \if^^ff1А^^04\else\if^^ff1Б^^04\else\if^^ff1В^^04\else\if^^ff1Г^^04\else\if^^ff1Д^^04\else \if^^ff1Е^^04\else\if^^ff1Ё^^04\else\if^^ff1Ж^^04\else\if^^ff1З^^04\else\if^^ff1И^^04\else \if^^ff1Й^^04\else\if^^ff1К^^04\else\if^^ff1Л^^04\else\if^^ff1М^^04\else\if^^ff1Н^^04\else \if^^ff1О^^04\else\if^^ff1П^^04\else\if^^ff1Р^^04 \else\if^^ff1С^^04!\else\if^^ff1Т^^04"\else \if^^ff1У^^04#\else\if^^ff1Ф^^04$\else\if^^ff1Х^^04%\else\if^^ff1Ц^^04&\else\if^^ff1Ч^^04'\else \if^^ff1Ш^^04(\DirtyHackOpen\else\if^^ff1Щ\DirtyHackClose ^^04)\else\if^^ff1Ъ^^04*\else\if^^ff1Ы^^04+\else\if^^ff1Ь^^04,\else \if^^ff1Э^^04-\else\if^^ff1Ю^^04.\else\if^^ff1Я^^04/\else \if^^ff1^^20^^0^^20\else \ifcat^^ff1z^^00^^ff1\else\ifcat^^ff11^^00^^ff1\else ^^00^^ff1\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi}} \catcode`\ =10 \catcode 255=11 \gdef\DoTranslation#1#2{\expandafter\xdef\csname #1\endcsname{\BeginingOfUnicodeString#2}\endgroup} \gdef\Do_TranslationA#1{\if#1^^ff\else\edef\TextBkMrk{\TextBkMrk\Translate_Char_To_Uncode#1}% \expandafter\Do_TranslationA\fi} \gdef\MkTextBkMrk#1{\edef\TextBkMrk{\BeginingOfUnicodeString} \Do_TranslationA#1^^ff} \gdef\MkBkMarkA#1#2{{\MkTextBkMrk{#2}% \edef\TextBkMrk{pdf: out #1 << /Title (\TextBkMrk)/Dest [ @thispage /FitH @ypos ] /F 2 >>}% \special{\TextBkMrk}}\endgroup} \gdef\MkBkMark{\begingroup\catcode`\^^20=12 \MkBkMarkA} \catcode 32=13 \gdef\SpecialSpace#1{\ifx#1\SpecialSpace\expandafter\SpecialSpace\else\ #1\fi} \gdef\SetSpaceActiveChar{\catcode32=13\let =\SpecialSpace}\catcode32=10 \gdef\SetSpaceAsSpace{\catcode32=10} \gdef\SkipFirstSpaces#1{\ifx#1\SpecialSpace\expandafter\SkipFirstSpaces\else#1\fi} } % ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ % Подключим шрифты AMS и русский язык \input amssym.tex \Russian % ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ % Далее следуют изменённые макросы Д. Е. Кнута % Обычные макросы для листингов WEB (в дополнение к PLAIN.TEX) \xdef\fmtversion{\fmtversion+WEBMAC4.1} % указывает текущий набор макросов \parskip 0pt % нет растяжимости между абзацами \parindent 1em % для абзацев и для первой строки текста на Паскале % \fontprefix -- команда, определяемая в cyrtex.tex, задаёт семейство шрифтов %\font\eightrm=cmr8 \let\sc=\eightrm % NOT a caps-and-small-caps font! \font\eightrm=\fontprefix r8 \let\sc=\eightrm % NOT a caps-and-small-caps font! \let\mainfont=\tenrm %\font\titlefont=cmr7 scaled\magstep4 % title on the contents page \font\titlefont=\fontprefix r7 scaled\magstep4 % title on the contents page %\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title \font\ttitlefont=\fontprefix tt10 scaled\magstep2 % typewriter type in title %\font\tentex=cmtex10 % TeX extended character set (used in strings) \font\tentex=\fontprefix tex10 % TeX extended character set (used in strings) \fontdimen7\tentex=0pt % no extra space after punctuation \def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers \def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way \def\{\hbox{\bf#1\/}} % boldface type for reserved words \def\.#1{\hbox{\tentex % typewriter type for strings \let\\=\BS % обратная косая черта в строках \let\'=\RQ % правая кавычка в строках \let\`=\LQ % левая кавычка в строках \let\{=\LB % в строках квадратная скобка в строках \let\}=\RB % правая квадратная скобка в строках \let\~=\TL % тильда в строках \let\ =\SP % пробел в строках \let\_=\UL % знак подчёпкивания в строках \let\&=\AM % амперсенд в строках #1}} \def\#{\hbox{\tt\char`\#}} % знак параметра \def\${\hbox{\tt\char`\$}} % Знак доллара \def\%{\hbox{\tt\char`\%}} % знак процента \def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % указатель или шляпа % circumflex accents can be obtained from \^^D instead of \^ \def\AT!{@} % знак "коммерческое AT" для управляющих текстов \chardef\AM=`\& % ampersand character in a string \chardef\BS=`\\ % backslash in a string \chardef\LB=`\{ % left brace in a string \def\LQ{{\tt\char'22}} % left quote in a string \chardef\RB=`\} % right brace in a string \def\RQ{{\tt\char'23}} % right quote in a string \def\SP{{\tt\char`\ }} % (visible) space in a string \chardef\TL=`\~ % tilde in a string \chardef\UL=`\_ % underline character in a string \newbox\bak \setbox\bak=\hbox to -1em{} % backspace one em \newbox\bakk\setbox\bakk=\hbox to -2em{} % backspace two ems \newcount\ind % current indentation in ems \def\1{\global\advance\ind by1\hangindent\ind em} % indent one more notch \def\2{\global\advance\ind by-1} % indent one less notch \def\3#1{\hfil\penalty#10\hfilneg} % optional break within a statement \def\4{\copy\bak} % backspace one notch \def\5{\hfil\penalty-1\hfilneg\kern2.5em\copy\bakk\ignorespaces}% optional break \def\6{\ifmmode\else\par % forced break \hangindent\ind em\noindent\kern\ind em\copy\bakk\ignorespaces\fi} \def\7{\Y\6} % forced break and a little extra space \let\yskip=\smallskip \def\to{\mathrel{.\,.}} % две точки, используемые только в математическом режиме \def\note#1#2.{\Y\noindent{\hangindent2em\baselineskip10pt\eightrm#1~#2.\par}} \def\lapstar{\rlap{*}} \def\startsection{\Q\noindent{\let\*=\lapstar\bf\modstar.\quad}} \def\defin#1{\global\advance\ind by 2 \1\&{#1 }} % начало `define' или `format' %\def\A{\note{See also section}} % crossref for doubly defined section name \def\A#1.{\note{См. также раздел} \SetLink{#1}.} % перекрёстная ссылка для имени раздела, определённого в двух местах %\def\As{\note{See also sections}} % crossref for multiply defined section name \def\As{\note{См. также разделы} \SetLinks} % перекрёстная ссылка для имени раздела, определённого во многих местах \def\B{\mathopen{\.{@\{}}} % начало управляющего комментария \def\C#1{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % комментарии Паскаля \XX\hfil\penalty-1\hfilneg\quad$\{\,$#1$\,\}$\XX} \def\D{\defin{define}} % определение макроса \def\E{\cdot10^} % экспонента в константе с плавающей точкой %\def\ET{ and~} % conjunction between two section numbers \def\ET{ и~\SetLinks} % объединение между двумя номерами разделов %\def\ETs{, and~} % conjunction between the last two of several section numbers \def\ETs{ и~\SetLinks} % объединение между последними двумя из нескольких номеров секций \def\F{\defin{format}} % определение формата \let\G=\geqslant % знак больше или равно, в оригинале \ge \def\H#1{\hbox{\rm\char"7D\tt#1}} % шестнадцатиричная константа \let\I=\ne % знак не равно \def\J{\.{@\&}} % операция объединения TANGLE'а \let\K=\gets % стрелка влево \let\L=\leqslant % знак меньше или равно, в оригинале \le \outer\def\M#1.{\MN#1.\ifon\vfil\penalty-100\vfilneg % начало раздела \vskip 12pt minus 3pt\startsection\SetAnchor{#1}} \outer\def\N{\SetSpaceActiveChar\NKnuth} % ИЗМЕНЁННЫЙ ВАРИАНТ \outer\def\NKnuth#1.#2.{\MN#1.\vfil\eject % начало раздела со звёздочкой \def\rhead{\uppercase{\SkipFirstSpaces#2}} % определяет колонтитул define running headline \message{*\modno}% сообщение о продвижении \edef\next{\write\cont{\Z{#2}{\modno}{\the\pageno}}}\next % в файл оглавления \MkBkMark1{#1.\ #2}\SetSpaceAsSpace\ifon\startsection{\bf\SkipFirstSpaces#2.\quad}\SetAnchor{#1}} \def\MN#1.{\par% общий код для \M, \N {\xdef\modstar{#1}\let\*=\empty\xdef\modno{#1}} \ifx\modno\modstar\onmaybe\else\ontrue\fi\mark{\modno}} \def\O#1{\hbox{\rm\char'23\kern-.2em\it#1\/\kern.05em}} % восьмеричная константа \def\P{\rightskip=0pt plus 100pt minus 10pt % вход в режим Паскаля \sfcode`;=3000 \pretolerance 10000 \hyphenpenalty 10000 \exhyphenpenalty 10000 \global\ind=2 \1\ \unskip} \def\Q{\rightskip=0pt % выйти из режима Паскаля \sfcode`;=1500 \pretolerance 200 \hyphenpenalty 50 \exhyphenpenalty 50} \let\R=\lnot % логическое НЕ \let\S=\equiv % знак эквивалентности \def\T{\mathclose{\.{@\}}}} % завершение управляющего комментария %\def\U{\note{This code is used in section}} % crossref for use of a section \def\U#1.{\note{Этот код используется в разделе} \SetLink{#1}.} % crossref for use of a section %\def\Us{\note{This code is used in sections}} % crossref for uses of a section \def\Us{\note{Этот код используется в разделах} \SetLinks} % перекрёстная ссылка для использования раздела \let\V=\lor % logical or \let\W=\land % logical and %\def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % section name % \XX$\langle\,$#2{\eightrm\kern.5em#1}$\,\rangle$\XX} \def\X#1:#2\X{\ifmmode\gdef\XX{\null$\null}\else\gdef\XX{}\fi % имя раздела \XX$\langle\,$#2{\eightrm\kern.5em{\SetLinks#1\relax}}$\,\rangle$\XX} \def\Y{\par\yskip} \let\Z=\let % now you can \send the control sequence \Z \def\){\hbox{\.{@\$}}} % знак для контрольной суммы пула строк \def\]{\hbox{\.{@\\}}} % знак для принудительного разрыва строки \def\=#1{\kern2pt\hbox{\vrule\vtop{\vbox{\hrule \hbox{\strut\kern2pt\.{#1}\kern2pt}} \hrule}\vrule}\kern2pt} % строка "дословной передачи" \let\~=\ignorespaces \let\*=* \def\onmaybe{\let\ifon=\maybe} \let\maybe=\iftrue \newif\ifon \newif\iftitle \newif\ifpagesaved \def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad \tensy x\mainfont\topmark} % верхняя строка на левых страницах \def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead \qquad\mainfont\the\pageno} % верхняя строка на правых страницах \def\page{\box255 } \def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi \shipout\vbox{ \vbox to\fullpageheight{ \iftitle\global\titlefalse \else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi \vfill#1}} % параметр #1 есть сама страница \global\advance\pageno by1} \def\rhead{\.{WEB} OUTPUT} % this running head is reset by starred sections \def\title{} % необязательное название, может быть установлено пользователем \def\topofcontents{\centerline{\titlefont\title} \vfill} % this material will start the table of contents page \def\botofcontents{\vfill} % этот материал будет в конце страницы с оглавлением \def\contentspagenumber{0} % default page number for table of contents \newdimen\pagewidth \pagewidth=6.5in % ширина каждой страницы \newdimen\pageheight \pageheight=8.7in % высота каждой страницы \newdimen\fullpageheight \fullpageheight=9in % высота страницы, включая колонтитулы \newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones \def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein \fullpageheight=9truein\setpage} \def\setpage{\hsize\pagewidth\vsize\pageheight} % используется после изменения размера страниц \def\contentsfile{CONTENTS} % файл, содержащий оглавление \def\readcontents{\input CONTENTS} \newwrite\cont \output{\setbox0=\page % the first page is garbage \openout\cont=\contentsfile \global\output{\normaloutput\page\lheader\rheader}} \setpage \vbox to \vsize{} % первый \topmark не должен быть пустым %\def\ch{\note{The following sections were changed by the change file:} % \let\*=\relax} \def\ch{\note{Следующие разделы изменены CHG-файлом:} \let\*=\relax\SetLinks} \newbox\sbox % сохранённая рамка, предшествующая указателю \newbox\lbox % левая колонка в указателе \def\inx{\par\vskip6pt plus 1fil % мы начинаем указатель \write\cont{} % обеспечь, чтобы файл с оглавлением был не пустой \closeout\cont % данные оглавления подностью собраны \output{\ifpagesaved\normaloutput{\box\sbox}\lheader\rheader\fi \global\setbox\sbox=\page \global\pagesavedtrue} \pagesavedfalse \eject % eject the page-so-far and predecessors \setbox\sbox\vbox{\unvbox\sbox} % take it out of its box \vsize=\pageheight \advance\vsize by -\ht\sbox % the remaining height \hsize=.5\pagewidth \advance\hsize by -10pt % ширина колонки для указателя (20pt между колонками) \parfillskip 0pt plus .6\hsize % пробуй избежать почти пустых строк \def\lr{L} % это говорит, будет ли левая или правая колонка следующей \output{\if L\lr\global\setbox\lbox=\page \gdef\lr{R} \else\normaloutput{\vbox to\pageheight{\box\sbox\vss \hbox to\pagewidth{\box\lbox\hfil\page}}}\lheader\rheader \global\vsize\pageheight\gdef\lr{L}\global\pagesavedfalse\fi} \message{Index:} \parskip 0pt plus .5pt % \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em} % index entry \outer\def\:##1, {\par\hangindent2em\noindent##1:\kern1em\SetLinks} % вхождения в указатель \let\ttentry=\. \def\.##1{\ttentry{##1\kern.2em}} % give \tt a little room % \def\[##1]{$\underline{##1}$} % underlined index item \def\[##1]{$\underline{\SetLink{##1}}$\SetLinks} % подчёркнутый элемент в указателе \rm \rightskip0pt plus 2.5em \tolerance 10000 \let\*=\lapstar \hyphenpenalty 10000 \parindent0pt} \def\fin{\par\vfill\eject % это выполняется, когда мы заканчиваем указатель \ifpagesaved\null\vfill\eject\fi % выведи пустую колонку указателя \if L\lr\else\null\vfill\eject\fi % заверши текущую страницу \MkBkMark1{НАЗВАНИЯ\ РАЗДЕЛОВ} \parfillskip 0pt plus 1fil % \def\rhead{NAMES OF THE SECTIONS} \def\rhead{НАЗВАНИЯ РАЗДЕЛОВ} \message{Section names:} \output{\normaloutput\page\lheader\rheader} \setpage \def\note##1##2.{\hfil\penalty-1\hfilneg\quad{\eightrm##1~##2.}} \linepenalty=10 % try to conserve lines % \def\U{\note{Used in section}} % crossref for use of a section \def\U##1.{\note{Используется в разделе} \SetLink{##1}.} % перекрёстная ссылка для использования раздела % \def\Us{\note{Used in sections}} % crossref for uses of a section \def\Us{\note{Используется в разделах} \SetLinks} % перекрёстная ссылка для использований раздела \def\:{\par\hangindent 2em}\let\*=*\let\.=\ttentry} \def\con{\par\vfill\eject % заверши имена разделов \rightskip 0pt \hyphenpenalty 50 \tolerance 200 \setpage \output{\normaloutput\page\lheader\rheader} \titletrue % готовится вывести оглавление % \pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS} \pageno=\contentspagenumber \def\rhead{СОДЕРЖАНИЕ} \message{Table of contents:} \MkBkMark1{СОДЕРЖАНИЕ} \topofcontents % \line{\hfil Section\hbox to3em{\hss Page}} \line{\hfil Раздел\hbox to3em{\hss Стр.}} \def\Z##1##2##3{\line{\ignorespaces##1 \leaders\hbox to .5em{.\hfil}\hfil\ {% \SetLink{##2}}\hbox to3em{\hss##3}}} \readcontents\relax % читает оглавление \botofcontents \end} % печатает страницу(ы) с оглавлением и завершает работу