summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/disser/src
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/disser/src
Initial commit
Diffstat (limited to 'macros/latex/contrib/disser/src')
-rw-r--r--macros/latex/contrib/disser/src/Makefile112
-rw-r--r--macros/latex/contrib/disser/src/autoref.dtx91
-rw-r--r--macros/latex/contrib/disser/src/bachelor.dtx135
-rw-r--r--macros/latex/contrib/disser/src/candidate.dtx161
-rw-r--r--macros/latex/contrib/disser/src/chapter.dtx310
-rw-r--r--macros/latex/contrib/disser/src/counters.dtx131
-rw-r--r--macros/latex/contrib/disser/src/custom.dtx254
-rw-r--r--macros/latex/contrib/disser/src/disser.dtx675
-rw-r--r--macros/latex/contrib/disser/src/disser.ins58
-rw-r--r--macros/latex/contrib/disser/src/doctor.dtx146
-rw-r--r--macros/latex/contrib/disser/src/dtx.ist5
-rw-r--r--macros/latex/contrib/disser/src/env.dtx193
-rw-r--r--macros/latex/contrib/disser/src/floats.dtx229
-rw-r--r--macros/latex/contrib/disser/src/footnote.dtx65
-rw-r--r--macros/latex/contrib/disser/src/gost732.dtx338
-rw-r--r--macros/latex/contrib/disser/src/lists.dtx108
-rw-r--r--macros/latex/contrib/disser/src/manual.tex500
-rw-r--r--macros/latex/contrib/disser/src/master.dtx149
-rw-r--r--macros/latex/contrib/disser/src/nomake.cmd130
-rw-r--r--macros/latex/contrib/disser/src/page.dtx210
-rw-r--r--macros/latex/contrib/disser/src/part.dtx205
-rw-r--r--macros/latex/contrib/disser/src/sections.dtx415
-rw-r--r--macros/latex/contrib/disser/src/specialist.dtx152
-rw-r--r--macros/latex/contrib/disser/src/titledefs.dtx514
-rw-r--r--macros/latex/contrib/disser/src/titlepage.dtx74
-rw-r--r--macros/latex/contrib/disser/src/toc.dtx180
26 files changed, 5540 insertions, 0 deletions
diff --git a/macros/latex/contrib/disser/src/Makefile b/macros/latex/contrib/disser/src/Makefile
new file mode 100644
index 0000000000..92bab2d943
--- /dev/null
+++ b/macros/latex/contrib/disser/src/Makefile
@@ -0,0 +1,112 @@
+#
+# Makefile for disser package
+# Author: Stanislav Kruchinin <stanislav.kruchinin@gmail.com>
+#
+
+TARGET := disser
+DTXFILES := $(TARGET) gost732
+MANUAL := manual
+
+CLSFILES := *.cls *.rtx
+DOCFILES := $(addsuffix .pdf, $(DTXFILES) $(MANUAL))
+TEXTFILES := ../README ../README.ru ../ChangeLog
+SRCFILES := *.dtx $(TARGET).ins dtx.ist $(MANUAL).tex Makefile \
+ nomake.cmd
+
+TEXMF ?= /usr/share/texmf
+DESTDIR ?= $(TEXMF)
+CLSDIR ?= $(DESTDIR)/tex/latex/$(TARGET)
+DOCDIR ?= $(DESTDIR)/doc/latex/$(TARGET)
+SRCDIR ?= $(DESTDIR)/source/latex/$(TARGET)
+
+CLEXT ?= *.aux *.toc *.idx *.ind *.ilg *.log *.out *.lof *.lot *.lol \
+ *.bbl *.blg *.bak *.dvi *.ps *.pdf *.synctex *.synctex.gz
+CLFILES ?= $(CLEXT) $(CLSFILES) $(BSTFILES)
+
+LATEX ?= latex
+PDFLATEX ?= pdflatex
+MI ?= makeindex
+
+LATEXFLAGS ?= --src-specials
+PDFLATEXFLAGS ?= --shell-escape --synctex=1
+MIFLAGS ?= -r -s dtx.ist
+
+.PHONY: all package doc dvi pdf clean install uninstall reinstall help
+
+all: package doc
+
+package: $(TARGET).cls
+
+doc: pdf
+
+dvi: $(addsuffix .dvi, $(DTXFILES) $(MANUAL))
+
+pdf: $(DOCFILES)
+
+clean:
+ -rm -f $(CLFILES)
+
+install: all
+ mkdir -p $(CLSDIR) ;\
+ mkdir -p $(BSTDIR) ;\
+ mkdir -p $(CSFDIR) ;\
+ mkdir -p $(DOCDIR) ;\
+ mkdir -p $(SRCDIR) ;\
+ cp $(CLSFILES) $(CLSDIR) ;\
+ cp $(DOCFILES) $(DOCDIR) ;\
+ cp $(TEXTFILES) $(DOCDIR) ;\
+ cp $(SRCFILES) $(SRCDIR)
+
+uninstall:
+ -rm $(addprefix $(CLSDIR)/, $(CLSFILES))
+ -rm $(addprefix $(DOCDIR)/, $(DOCFILES))
+ -rm $(addprefix $(DOCDIR)/, $(notdir $(TEXTFILES)))
+ -rm $(addprefix $(SRCDIR)/, $(SRCFILES))
+ -rmdir $(CLSDIR)
+ -rmdir $(DOCDIR)
+ -rmdir $(SRCDIR)
+
+reinstall: uninstall install
+
+$(TARGET).dvi: $(TARGET).dtx
+ $(LATEX) $(LATEXFLAGS) $<
+ $(MI) $(MIFLAGS) $(TARGET)
+ $(LATEX) $(LATEXFLAGS) $<
+ $(LATEX) $(LATEXFLAGS) $<
+
+$(TARGET).pdf: $(TARGET).dtx
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+ $(MI) $(MIFLAGS) $(TARGET)
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+
+%.cls: %.ins
+ $(LATEX) $^
+
+%.dvi: %.dtx
+ $(LATEX) $(LATEXFLAGS) $<
+ $(LATEX) $(LATEXFLAGS) $<
+
+%.dvi: %.tex
+ $(LATEX) $(LATEXFLAGS) $<
+ $(LATEX) $(LATEXFLAGS) $<
+
+%.pdf: %.dtx
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+
+%.pdf: %.tex
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+ $(PDFLATEX) $(PDFLATEXFLAGS) $<
+
+help:
+ @echo " all (default) build package and documentation" ;\
+ echo " clean remove output files" ;\
+ echo " doc alias for pdf target" ;\
+ echo " dvi build documentation in DVI format" ;\
+ echo " help show description of targets" ;\
+ echo " install install package and documentation" ;\
+ echo " package build package" ;\
+ echo " pdf build documentation in PDF format" ;\
+ echo " reinstall reinstall package and documentation" ;\
+ echo " uninstall uninstall package and documentation"
diff --git a/macros/latex/contrib/disser/src/autoref.dtx b/macros/latex/contrib/disser/src/autoref.dtx
new file mode 100644
index 0000000000..0b0f590d20
--- /dev/null
+++ b/macros/latex/contrib/disser/src/autoref.dtx
@@ -0,0 +1,91 @@
+% \begin{macrocode}
+
+%<autoref>\ProvidesFile{autoref.rtx}
+
+%<*autoref>
+% \end{macrocode}
+% \subsubsection{Стиль автореферата}
+%
+% Нумерация.
+% \begin{macrocode}
+\newcommand\autoref@the{\default@the}
+\autoref@the
+
+% \end{macrocode}
+% Титульный лист.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+\if@titlepage\renewcommand\maketitle{
+% \end{macrocode}
+% Вертикальные интервалы между элементами титульного листа.
+% \DescribeMacro{\firstskip}\index{Интервалы!\verb*+\firstskip+}
+% \DescribeMacro{\secondskip}\index{Интервалы!\verb*+\secondskip+}
+% \DescribeMacro{\thirdskip}\index{Интервалы!\verb*+\thirdskip+}
+% \DescribeMacro{\fourthskip}\index{Интервалы!\verb*+\fourthskip+}
+% \DescribeMacro{\fifthskip}\index{Интервалы!\verb*+\fifthskip+}
+% \begin{macrocode}
+\ifundeflength\firstskip{1cm}
+\ifundeflength\secondskip{3cm}
+\ifundeflength\thirdskip{1cm}
+\ifundeflength\fourthskip{1cm}
+\ifundeflength\fifthskip{1cm}
+
+% \end{macrocode}
+% Шрифты элементов титульного листа.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \DescribeMacro{\authorfont}\index{Макросы!\verb*+\authorfont+}
+% \DescribeMacro{\specfont}\index{Макросы!\verb*+\specfont+}
+% \begin{macrocode}
+\def\titlefont{\normalsize}
+\def\topicfont{\Large\bfseries}
+\def\authorfont{\large}
+\def\specfont{\normalsize}
+
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\vspace*{-2cm}
+
+\begin{flushright}
+% \end{macrocode}
+% Гриф секретности
+% \begin{macrocode}
+ \ifDis@classified\classify\fi
+% \end{macrocode}
+% На правах рукописи
+% \begin{macrocode}
+ \vskip\firstskip
+ {\normalfont\asmanuscript}
+ \ifDis@facsimile\facsimile\fi
+\end{flushright}
+\begin{center}
+% \end{macrocode}
+% Автор
+% \begin{macrocode}
+ \vskip\secondskip
+ {\authorfont\@author}
+% \end{macrocode}
+% Название диссертации
+% \begin{macrocode}
+ \vskip\thirdskip
+ {\topicfont\@topic\par}
+% \end{macrocode}
+% Шифр и наименование специальности
+% \begin{macrocode}
+ \vskip\fourthskip
+ {\specfont\@specnum~--\ \@spec}
+% \end{macrocode}
+% Диссертация на соискание ученой степени...
+% \begin{macrocode}
+ \vskip\fifthskip
+ {\titlefont\@title}
+% \end{macrocode}
+% \paragraph{Город и год}
+% \begin{macrocode}
+ \vfill
+ {\@city\cdsep\@date}
+\end{center}
+\normalfont\clearpage
+}\fi
+%</autoref>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/bachelor.dtx b/macros/latex/contrib/disser/src/bachelor.dtx
new file mode 100644
index 0000000000..41ddcaf968
--- /dev/null
+++ b/macros/latex/contrib/disser/src/bachelor.dtx
@@ -0,0 +1,135 @@
+% \begin{macrocode}
+
+%<bachelor>\ProvidesFile{bachelor.rtx}
+
+%<*bachelor>
+% \end{macrocode}
+% \subsubsection{Стиль работы бакалавра}
+%
+% Нумерация.
+% \begin{macrocode}
+\newcommand\bachelor@the{\default@the}
+\bachelor@the
+
+% \end{macrocode}
+% Титульный лист.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+\if@titlepage\renewcommand\maketitle[1][]{
+% \end{macrocode}
+% Переопределения некоторых полей титульного листа для англоязычной версии.
+% \begin{macrocode}
+\ifthenelse{\equal{#1}{en}}{\@titlepage@entrue}{\@titlepage@enfalse}
+\if@titlepage@en
+ \def\appos{Head of Department}
+ \def\approved{``Approved for defence''}
+ \def\revname{Reviewer}
+ \def\revsndname{\revname}
+ \def\revlabel{\revname}
+ \def\revsndlabel{\revsndname}
+ \def\saname{Scientific Supervisor}
+ \def\sasndname{\saname}
+ \def\salabel{\saname}
+ \def\sasndlabel{\saname}
+ \def\topicname{Topic}
+ \def\coursename{Speciality}
+ \def\studentname{Student}
+ \def\studentlabel{\studentname\hspace{6cm}}
+\fi
+
+% \end{macrocode}
+% Вертикальные интервалы между элементами титульного листа.
+% \DescribeMacro{\firstskip}\index{Интервалы!\verb*+\firstskip+}
+% \DescribeMacro{\secondskip}\index{Интервалы!\verb*+\secondskip+}
+% \DescribeMacro{\thirdskip}\index{Интервалы!\verb*+\thirdskip+}
+% \DescribeMacro{\fourthskip}\index{Интервалы!\verb*+\fourthskip+}
+% \DescribeMacro{\fifthskip}\index{Интервалы!\verb*+\fifthskip+}
+% \begin{macrocode}
+\ifundeflength\firstskip{1.5cm}
+\ifundeflength\secondskip{1.5cm}
+\ifundeflength\thirdskip{1ex}
+\ifundeflength\fourthskip{1ex}
+\ifundeflength\fifthskip{2cm}
+\ifundeflength\sixthskip{1.5ex}
+
+% \end{macrocode}
+% Горизонтальный отступ перед чертой в текстовым поле для имени, ученой
+% степени и звания научного руководителя и консультанта.
+% \DescribeMacro{\fieldhshift}\index{Интервалы!\verb*+\fieldhshift+}
+% \begin{macrocode}
+\setlength\fieldhshift{8.5cm}
+
+% \end{macrocode}
+% Шрифты элементов титульного листа.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topiclabelfont}\index{Макросы!\verb*+\topiclabelfont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \begin{macrocode}
+\def\titlefont{\Large\bfseries}
+\def\topiclabelfont{\large}
+\def\topicfont{\large\bfseries}
+
+% \end{macrocode}
+% Работа
+% \DescribeMacro{\workname}\index{Макросы!\verb*+\topicfont+}
+% \begin{macrocode}
+\def\workname{\CYRR\cyra\cyrb\cyro\cyrt\cyra}
+
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\vspace*{-2cm}
+% \end{macrocode}
+% \paragraph{Название организации}
+% \begin{macrocode}
+\begin{center}
+ {\instfont\@institution}
+\end{center}
+
+% \end{macrocode}
+% Работа допущена к защите
+% \begin{macrocode}
+\vskip\firstskip
+{\@approved}
+\vskip\secondskip
+% \end{macrocode}
+% Заголовок
+% \begin{macrocode}
+\begin{center}
+ {\titlefont\@title}
+ \vskip\thirdskip
+% \end{macrocode}
+% Тема
+% \begin{macrocode}
+ {\topiclabelfont\topiclabel\ }
+ {\topicfont\@topic}
+ \vskip\fourthskip\normalfont
+ {\courselabel\ \@coursenum~--\ \@course}
+\end{center}
+
+% \end{macrocode}
+% Специальность, автор, руководитель.
+% \begin{macrocode}
+\vskip\fifthskip
+\begin{tabbing}
+% \end{macrocode}
+%
+% Выполнил студент гр. номер...
+% \begin{macrocode}
+ \studentlabel\=\makebox[\fieldhshift][l]{\hrulefill\ \@author}\\[\sixthskip]
+% \end{macrocode}
+% Научный руководитель.
+% \begin{macrocode}
+ \ifx\@sa\empty\else\diplomafield{sa}\\[\sixthskip]\fi
+ \ifx\@sasnd\empty\else\diplomafield{sasnd}\\[\sixthskip]\fi
+\end{tabbing}
+% \end{macrocode}
+% \paragraph{Город и год}
+% \begin{macrocode}
+\vfill
+\begin{center}
+ {\@city\cdsep\@date}
+\end{center}
+\normalfont\clearpage
+}\fi
+%</bachelor>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/candidate.dtx b/macros/latex/contrib/disser/src/candidate.dtx
new file mode 100644
index 0000000000..73f0986916
--- /dev/null
+++ b/macros/latex/contrib/disser/src/candidate.dtx
@@ -0,0 +1,161 @@
+% \begin{macrocode}
+
+%<candidate>\ProvidesFile{candidate.rtx}
+
+%<*candidate>
+% \end{macrocode}
+% \subsubsection{Стиль кандидатской диссертации}
+%
+% Нумерация.
+% \begin{macrocode}
+\newcommand\candidate@the{\default@the}
+\candidate@the
+
+% \end{macrocode}
+% Титульный лист.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+\if@titlepage\renewcommand\maketitle[1][]{
+\ifthenelse{\equal{#1}{en}}{\@titlepage@entrue}{\@titlepage@enfalse}
+\if@titlepage@en
+ \def\appos{Head of Department}
+ \def\saname{Scientific Supervisor}
+ \def\salabel{\saname}
+ \def\sasndname{\saname}
+ \def\sasndlabel{\sasndname}
+ \def\sconname{Scientific Consultant}
+ \def\sconlabel{\sconname}
+ \def\sconsndname{\sconname}
+ \def\sconsndlabel{\sconname}
+ \def\topicname{Topic}
+ \def\asmanuscript{As Manuscript}
+\fi
+
+% \end{macrocode}
+% Вертикальные интервалы между элементами титульного листа.
+% \DescribeMacro{\firstskip}\index{Интервалы!\verb*+\firstskip+}
+% \DescribeMacro{\secondskip}\index{Интервалы!\verb*+\secondskip+}
+% \DescribeMacro{\thirdskip}\index{Интервалы!\verb*+\thirdskip+}
+% \DescribeMacro{\fourthskip}\index{Интервалы!\verb*+\fourthskip+}
+% \DescribeMacro{\fifthskip}\index{Интервалы!\verb*+\fifthskip+}
+% \DescribeMacro{\sixthskip}\index{Интервалы!\verb*+\sixthskip+}
+% \DescribeMacro{\saskip}\index{Интервалы!\verb*+\saskip+}
+% \DescribeMacro{\specskip}\index{Интервалы!\verb*+\specskip+}
+% \begin{macrocode}
+\ifx\firstskip\undefined
+ \newlength\firstskip
+ \ifx\@libcatnum\empty
+ \setlength\firstskip{4ex}
+ \else
+ \setlength\firstskip{2ex}
+ \fi
+\fi
+\ifundeflength\secondskip{2cm}
+\ifundeflength\thirdskip{1cm}
+\ifundeflength\fourthskip{1cm}
+\ifundeflength\fifthskip{1cm}
+\ifundeflength\sixthskip{0cm}
+\ifundeflength\libcatskip{0cm}
+\ifundeflength\specskip{-6pt}
+\ifundeflength\saskip{0pt}
+
+% \end{macrocode}
+% Шрифты элементов титульного листа.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \DescribeMacro{\authorfont}\index{Макросы!\verb*+\authorfont+}
+% \DescribeMacro{\specfont}\index{Макросы!\verb*+\specfont+}
+% \begin{macrocode}
+\def\titlefont{\normalsize}
+\def\topicfont{\Large\bfseries}
+\def\authorfont{\large}
+\def\specfont{\normalsize}
+
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\vspace*{-2cm}
+% \end{macrocode}
+% \paragraph{Название организации}
+% \begin{macrocode}
+\begin{center}
+ \instfont\@institution\par
+\end{center}
+\vskip\firstskip
+\begin{flushright}
+% \end{macrocode}
+% Гриф секретности
+% \begin{macrocode}
+ \ifDis@classified\classify\fi
+% \end{macrocode}
+% На правах рукописи
+% \begin{macrocode}
+ \asmanuscript
+% \end{macrocode}
+% Факсимиле
+% \begin{macrocode}
+ \ifDis@facsimile\facsimile\fi
+% \end{macrocode}
+% Номер УДК
+% \begin{macrocode}
+ \ifx\@libcatnum\empty\else
+ \vskip\libcatskip
+ {\libcatname\ \@libcatnum}
+ \fi
+\end{flushright}
+\begin{center}
+% \end{macrocode}
+% Автор
+% \begin{macrocode}
+ \vskip\secondskip
+ {\authorfont\@author}
+% \end{macrocode}
+% Название диссертации
+% \begin{macrocode}
+ \vskip\thirdskip
+ {\topicfont\@topic\par}
+% \end{macrocode}
+% Шифр и наименование специальности
+% \begin{macrocode}
+ \vskip\fourthskip
+ {\specfont\@specnum~--\ \@spec}
+ \ifx\@specsndnum\empty\else
+ \vskip\specskip
+ {\specfont\@specsndnum~--\ \@specsnd}
+ \fi
+% \end{macrocode}
+% Диссертация на соискание ученой степени...
+% \begin{macrocode}
+ \vskip\fifthskip
+ {\titlefont\@title}
+\end{center}
+% \end{macrocode}
+% Научный руководитель
+% \begin{macrocode}
+\ifx\@sa\empty\else
+ \vskip\sixthskip\disserfield{sa}
+\fi
+\ifx\@sasnd\empty\else
+ \vskip\saskip\disserfield{sasnd}
+\fi
+% \end{macrocode}
+% Научный консультант
+% \begin{macrocode}
+\ifx\@scon\empty\else
+ \vskip\saskip
+ \disserfield{scon}
+\fi
+\ifx\@sconsnd\empty\else
+ \vskip\saskip
+ \disserfield{sconsnd}
+\fi
+% \end{macrocode}
+% \paragraph{Город и год}
+% \begin{macrocode}
+\vfill
+\begin{center}
+ {\@city\cdsep\@date}
+\end{center}
+\normalfont\clearpage
+}\fi
+%</candidate>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/chapter.dtx b/macros/latex/contrib/disser/src/chapter.dtx
new file mode 100644
index 0000000000..984d935219
--- /dev/null
+++ b/macros/latex/contrib/disser/src/chapter.dtx
@@ -0,0 +1,310 @@
+
+% \iffalse
+%%% From File: chapter.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*chapter>
+% \end{macrocode}
+%
+% \subsection{Глава}
+%
+% \subsubsection{Параметры формата главы в оглавлении}
+%
+% \DescribeMacro{\tocprethechapter}\index{Макросы!\verb*+\tocprethechapter+}
+% \DescribeMacro{\tocpostthechapter}\index{Макросы!\verb*+\tocpostthechapter+}
+% \DescribeMacro{\tocchapterfill}\index{Макросы!\verb*+\tocchapterfill+}
+%
+% \DescribeMacro{\tocchapterfont}\index{Макросы!\verb*+\tocchapterfont+}
+% \DescribeMacro{\tocchapterfillfont}\index{Макросы!\verb*+\tocchapterfillfont+}
+% \DescribeMacro{\tocchapternumfont}\index{Макросы!\verb*+\tocchapternumfont+}
+% \begin{macrocode}
+\providecommand\tocprethechapter{\protect\chaptername~}
+\providecommand\tocpostthechapter{.\@postskip}
+\providecommand\tocchapterfill{\tocfill{.}}
+
+\providecommand\tocchapterfont{\bfseries}
+\providecommand\tocchapterfillfont{\normalfont}
+\providecommand\tocchapternumfont{\normalfont}
+
+% \end{macrocode}
+% \subsubsection{Параметры формата нумеруемой главы в тексте}
+% \DescribeMacro{\thechapteralign}\index{Макросы!\verb*+\thechapteralign+}
+% \DescribeMacro{\thechapterfont}\index{Макросы!\verb*+\thechapterfont+}
+% \DescribeMacro{\prethechapter}\index{Макросы!\verb*+\prethechapter+}
+% \DescribeMacro{\postthechapter}\index{Макросы!\verb*+\postthechapter+}
+%
+% \DescribeMacro{\chapteralign}\index{Макросы!\verb*+\chapteralign+}
+% \DescribeMacro{\chapterfont}\index{Макросы!\verb*+\chapterfont+}
+% \DescribeMacro{\beforechapter}\index{Макросы!\verb*+\beforechapter+}
+% \DescribeMacro{\afterchapter}\index{Макросы!\verb*+\afterchapter+}
+% \begin{macrocode}
+\providecommand\thechapteralign{\centering}
+\providecommand\thechapterfont{\Large}
+\providecommand\prethechapter{\protect\chaptername~}
+\providecommand\postthechapter{\par\nobreak\vskip 5\p@}
+
+\providecommand\chapteralign{\centering}
+\providecommand\chapterfont{\Large\bfseries}
+\providecommand\beforechapter{}
+\providecommand\afterchapter{\par\nobreak\vskip 20\p@}
+\newlength{\chapterindent}
+\setlength{\chapterindent}{0\p@}
+
+% \end{macrocode}
+% \subsubsection{Параметры формата ненумеруемой главы в тексте}
+% \DescribeMacro{\schapteralign}\index{Макросы!\verb*+\schapteralign+}
+% \DescribeMacro{\schapterfont}\index{Макросы!\verb*+\schapterfont+}
+% \DescribeMacro{\beforeschapter}\index{Макросы!\verb*+\beforeschapter+}
+% \DescribeMacro{\afterschapter}\index{Макросы!\verb*+\afterschapter+}
+% \begin{macrocode}
+\providecommand\schapteralign{\chapteralign}
+\providecommand\schapterfont{\chapterfont}
+\providecommand\beforeschapter{\beforechapter}
+\providecommand\afterschapter{\afterchapter}
+\newlength{\schapterindent}
+\setlength{\schapterindent}{0\p@}
+
+% \end{macrocode}
+%
+% \subsubsection{Низкоуровневые команды}
+%
+% Пустое определение колонтитула главы.
+% \DescribeMacro{\chaptermark}\index{Макросы!\verb*+\chaptermark+}
+% \begin{macrocode}
+\newcommand*\chaptermark[1]{}
+
+% \end{macrocode}
+% Интерфейс.
+% \DescribeMacro{\chapter}\index{Макросы!\verb*+"\chapter+}
+% \begin{macrocode}
+\newcommand\chapter{%
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{\@chapterpagestyle}%
+ \global\@topnum\z@
+ \@afterindentfalse
+ \secdef\@chapter\@schapter
+}
+
+% \end{macrocode}
+% Команда, формирующая нумеруемый заголовок |\chapter|.
+% \DescribeMacro{\@chapter}\index{Макросы!\verb+"\"@chapter+}
+% \begin{macrocode}
+\def\@chapter[#1]#2{
+ \ifnum \c@secnumdepth >\m@ne
+ \refstepcounter{chapter}%
+ {\addcontentsline{toc}{chapter}{\@tocseccntformat{chapter} #1}}%
+ \else
+ {\addcontentsline{toc}{chapter}{#1}}%
+ \fi
+ \chaptermark{#1}%
+ \addtocontents{lof}{\protect\addvspace{10\p@}}%
+ \addtocontents{lot}{\protect\addvspace{10\p@}}%
+ \if@twocolumn
+ \@topnewpage[\@makechapterhead{#2}]%
+ \else
+ \@makechapterhead{#2}%
+ \@afterheading
+ \fi
+}
+
+% \end{macrocode}
+% Формат нумеруемого заголовка.
+% \DescribeMacro{\@makechapterhead}\index{Макросы!\verb+"\"@makechapterhead+}
+% \begin{macrocode}
+\def\@makechapterhead#1{{%
+ \parindent\z@
+ \normalfont\hskip\chapterindent%
+ \ifnum \c@secnumdepth >\m@ne
+ {\thechapterfont\thechapteralign\@seccntformat{chapter}}
+ \fi
+ \interlinepenalty\@M
+ \chapterfont\chapteralign\beforechapter #1\afterchapter
+}}
+
+% \end{macrocode}
+% Команда, формирующая ненумеруемый заголовок |\chapter*|.
+% \DescribeMacro{\@schapter}\index{Макросы!\verb+"\"@schapter+}
+% \begin{macrocode}
+\def\@schapter#1{
+ \if@twocolumn
+ \@topnewpage[\@makeschapterhead{#1}]%
+ \else
+ \@makeschapterhead{#1}%
+ \@afterheading
+ \fi
+}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\@makeschapterhead}\index{Макросы!\verb+"\"@makeschapterhead+}
+% Формат ненумеруемого заголовка.
+% \begin{macrocode}
+\def\@makeschapterhead#1{{%
+ \parindent\z@
+ \normalfont\hskip\schapterindent%
+ \interlinepenalty\@M
+ \schapteralign\schapterfont\beforeschapter #1\afterschapter
+}}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\l@chapter}\index{Макросы!\verb+"\l"@chapter+}
+% Команда, создающая запись в оглавлении.
+% \begin{macrocode}
+\newcommand*\l@chapter[2]{%
+ \ifnum \c@tocdepth >\m@ne
+ \addpenalty{-\@highpenalty}
+ \vskip 1.0em \@plus\p@
+ \setlength\@tempdima{1.5em}
+ \begingroup
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ \leavevmode\tocchapterfont
+ \advance\leftskip\@tempdima
+ \hskip -\leftskip
+ #1\nobreak
+ \tocchapterfillfont\tocchapterfill\hfill
+ \nobreak\hb@xt@\@pnumwidth{\hss\tocchapternumfont #2}\par
+ \penalty\@highpenalty
+ \endgroup
+ \fi
+}
+
+% \end{macrocode}
+%
+% \subsection{Приложение}
+%
+% \subsubsection{Параметры формата записи в оглавлении}
+% \DescribeMacro{\tocpretheappendix}\index{Макросы!\verb*+\tocpretheappendix+}
+% \DescribeMacro{\tocposttheappendix}
+% \index{Макросы!\verb*+\tocposttheappendix+}
+% \DescribeMacro{\tocappendixfill}\index{Макросы!\verb*+\tocappendixfill+}
+% \DescribeMacro{\tocappendixfont}\index{Макросы!\verb*+\tocappendixfont+}
+% \DescribeMacro{\tocappendixfillfont}
+% \index{Макросы!\verb*+\tocappendixfillfont+}
+% \DescribeMacro{\tocappendixnumfont}
+% \index{Макросы!\verb*+\tocappendixnumfont+}
+% \begin{macrocode}
+\providecommand\tocpretheappendix{\protect\appendixname~}
+\providecommand\tocposttheappendix{.\@postskip}
+\providecommand\tocappendixfill{\tocfill{.}}
+
+\providecommand\tocappendixfont{\bfseries}
+\providecommand\tocappendixfillfont{\normalfont}
+\providecommand\tocappendixnumfont{\normalfont}
+
+% \end{macrocode}
+% \subsubsection{Параметры формата в тексте}
+% \DescribeMacro{\theappendixalign}\index{Макросы!\verb*+\theappendixalign+}
+% \DescribeMacro{\theappendixfont}\index{Макросы!\verb*+\theappendixfont+}
+% \DescribeMacro{\pretheappendix}\index{Макросы!\verb*+\pretheappendix+}
+% \DescribeMacro{\posttheappendix}\index{Макросы!\verb*+\posttheappendix+}
+%
+% \DescribeMacro{\appendixalign}\index{Макросы!\verb*+\appendixalign+}
+% \DescribeMacro{\appendixfont}\index{Макросы!\verb*+\appendixfont+}
+% \DescribeMacro{\beforeappendix}\index{Макросы!\verb*+\beforeappendix+}
+% \DescribeMacro{\afterappendix}\index{Макросы!\verb*+\afterappendix+}
+% \begin{macrocode}
+\providecommand\theappendixalign{\centering}
+\providecommand\theappendixfont{\Large}
+\providecommand\pretheappendix{\protect\appendixname~}
+\providecommand\posttheappendix{\par\nobreak\vskip 5\p@}
+
+\providecommand\appendixalign{\centering}
+\providecommand\appendixfont{\Large\bfseries}
+\providecommand\beforeappendix{}
+\providecommand\afterappendix{\par\nobreak\vskip 20\p@}
+\providecommand\appendixindent{0\p@}
+% \end{macrocode}
+%
+% Команда для создания глав приложений. Сохранение и восстановление
+% значений параметров формата глав делаются для случая, когда
+% приложения идут до списка литературы.
+% \DescribeMacro{\appendix}\index{Макросы!\verb*+\appendix+}
+% \begin{macrocode}
+\newcommand\appendix{
+ \setcounter{chapter}{0}
+ \setcounter{section}{0}
+
+% \end{macrocode}
+% Сохранение старых значений.
+% \begin{macrocode}
+ \let\oldtocprethechapter=\tocprethechapter
+ \let\oldtocpostthechapter=\tocpostthechapter
+ \let\oldtocchapterfill=\tocchapterfill
+
+ \let\oldtocchapterfont=\tocchapterfont
+ \let\oldtocchapterfillfont=\tocchapterfillfont
+ \let\oldtocchapternumfont=\tocchapternumfont
+
+ \let\oldthechapteralign=\thechapteralign
+ \let\oldthechapterfont=\thechapterfont
+ \let\oldprethechapter=\prethechapter
+ \let\oldpostthechapter=\postthechapter
+
+ \let\oldchapteralign=\chapteralign
+ \let\oldchapterfont=\chapterfont
+ \let\oldchapterindent=\chapterindent
+ \let\oldbeforechapter=\afterchapter
+ \let\oldafterchapter=\afterchapter
+ \let\oldthechapter=\thechapter
+
+% \end{macrocode}
+% Перезапись параметров формата главы для оформления приложений.
+% \begin{macrocode}
+ \renewcommand\tocprethechapter{\tocpretheappendix}
+ \renewcommand\tocpostthechapter{\tocposttheappendix}
+ \renewcommand\tocchapterfill{\tocappendixfill}
+
+ \renewcommand\tocchapterfont{\tocappendixfont}
+ \renewcommand\tocchapterfillfont{\tocappendixfillfont}
+ \renewcommand\tocchapternumfont{\tocappendixnumfont}
+
+ \renewcommand\thechapteralign{\theappendixalign}
+ \renewcommand\thechapterfont{\theappendixfont}
+ \renewcommand\prethechapter{\pretheappendix}
+ \renewcommand\postthechapter{\posttheappendix}
+
+ \renewcommand\chapteralign{\appendixalign}
+ \renewcommand\chapterfont{\appendixfont}
+ \renewcommand\beforechapter{\beforeappendix}
+ \renewcommand\afterchapter{\afterappendix}
+ \renewcommand\chapterindent{\appendixindent}
+
+ \gdef\thechapter{\theappendix}
+}
+
+% \end{macrocode}
+% Восстановление исходных параметров формата заголовков глав.
+% \DescribeMacro{\noappendix}\index{Макросы!\verb*+\noappendix+}
+% \begin{macrocode}
+\newcommand\noappendix{
+ \let\tocprethechapter=\oldtocprethechapter
+ \let\tocpostthechapter=\oldtocpostthechapter
+ \let\tocchapterfill=\oldtocchapterfill
+
+ \let\tocchapterfont=\oldtocchapterfont
+ \let\tocchapterfillfont=\oldtocchapterfillfont
+ \let\tocchapternumfont=\oldtocchapternumfont
+
+ \let\thechapteralign=\oldthechapteralign
+ \let\thechapterfont=\oldthechapterfont
+ \let\prethechapter=\oldprethechapter
+ \let\postthechapter=\oldpostthechapter
+
+ \let\chapteralign=\oldchapteralign
+ \let\chapterfont=\oldchapterfont
+ \let\beforechapter=\oldbeforechapter
+ \let\afterchapter=\oldafterchapter
+
+ \gdef\thechapter{\oldthechapter}
+}
+
+%</chapter>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/counters.dtx b/macros/latex/contrib/disser/src/counters.dtx
new file mode 100644
index 0000000000..b1deb46a13
--- /dev/null
+++ b/macros/latex/contrib/disser/src/counters.dtx
@@ -0,0 +1,131 @@
+
+% \iffalse
+%%% From File: counters.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*counters>
+% \end{macrocode}
+%
+% \subsection{Создание и настройка счетчиков}
+%
+% Максимальный уровень вложенности секций, помещаемых в оглавление
+% (по умолчанию вносятся |\part|, |\chapter| и |\section|).
+% \DescribeCounter{tocdepth}
+% \begin{macrocode}
+\setcounter{tocdepth}{1}
+% \end{macrocode}
+% Максимальный уровень вложенности нумеруемых секций
+% (по умолчанию нумеруются |\part|, |\chapter|, |\section| и |\subsection|).
+% \DescribeCounter{secnumdepth}
+% \begin{macrocode}
+\setcounter{secnumdepth}{2}
+
+% \end{macrocode}
+%
+% \DescribeCounter{part}
+% \DescribeCounter{chapter}
+% \DescribeCounter{section}
+% \DescribeCounter{subsection}
+% \DescribeCounter{subsubsection}
+% \DescribeCounter{paragraph}
+% \DescribeCounter{subparagraph}
+% \begin{macrocode}
+\newcounter{part}
+\newcounter{chapter}
+\newcounter{section}[chapter]
+\newcounter{subsection}[section]
+\newcounter{subsubsection}[subsection]
+\newcounter{paragraph}[subsubsection]
+\newcounter{subparagraph}[paragraph]
+
+% \end{macrocode}
+%
+% \DescribeCounter{figure}
+% \DescribeCounter{table}
+% \begin{macrocode}
+\newcounter{figure}[chapter]
+\newcounter{table}[chapter]
+
+% \end{macrocode}
+%
+% Формат нумерации разделов документа в тексте.
+% \DescribeMacro{\thepart}\index{Макросы!\verb*+\thepart+}
+% \DescribeMacro{\thechapter}\index{Макросы!\verb*+\thechapter+}
+% \DescribeMacro{\theappendix}\index{Макросы!\verb*+\theappendix+}
+% \DescribeMacro{\thesection}\index{Макросы!\verb*+\thesection+}
+% \DescribeMacro{\thesubsection}\index{Макросы!\verb*+\thesubsection+}
+% \DescribeMacro{\thesubsubsection}\index{Макросы!\verb*+\thesubsubsection+}
+% \DescribeMacro{\theparagraph}\index{Макросы!\verb*+\theparagraph+}
+% \DescribeMacro{\thesubparagraph}\index{Макросы!\verb*+\thesubparagraph+}
+% \begin{macrocode}
+
+\renewcommand\thepart{\Roman{part}}
+\renewcommand\thechapter{\arabic{chapter}}
+\newcommand\theappendix{\Asbuk{chapter}}
+\renewcommand\thesection{%
+\ifnum\c@chapter > \z@
+ \thechapter.\arabic{section}%
+\else\arabic{section}\fi}
+\renewcommand\thesubsection{\thesection.\arabic{subsection}}
+\renewcommand\thesubsubsection{\thesubsection.\arabic{subsubsection}}
+\renewcommand\theparagraph{\arabic{paragraph}}
+\renewcommand\thesubparagraph{\theparagraph.\arabic{subparagraph}}
+
+% \end{macrocode}
+% Формат нумерации разделов документа в оглавлении.
+% \DescribeMacro{\tocthepart}\index{Макросы!\verb*+\tocthepart+}
+% \DescribeMacro{\tocthechapter}\index{Макросы!\verb*+\tocthechapter+}
+% \DescribeMacro{\toctheappendix}\index{Макросы!\verb*+\toctheappendix+}
+% \DescribeMacro{\tocthesection}\index{Макросы!\verb*+\tocthesection+}
+% \DescribeMacro{\tocthesubsection}\index{Макросы!\verb*+\tocthesubsection+}
+% \DescribeMacro{\tocthesubsubsection}\index{Макросы!\verb*+\tocthesubsubsection+}
+% \DescribeMacro{\toctheparagraph}\index{Макросы!\verb*+\toctheparagraph+}
+% \DescribeMacro{\tocthesubparagraph}\index{Макросы!\verb*+\tocthesubparagraph+}
+% \begin{macrocode}
+\providecommand\tocthepart{\thepart}
+\providecommand\tocthechapter{\thechapter}
+\providecommand\toctheappendix{\theappendix}
+\providecommand\tocthesection{\thesection}
+\providecommand\tocthesubsection{\thesubsection}
+\providecommand\tocthesubsubsection{\thesubsubsection}
+\providecommand\toctheparagraph{\theparagraph}
+\providecommand\tocthesubparagraph{\thesubparagraph}
+
+% \end{macrocode}
+%
+% Схема нумерации объектов по умолчанию.
+% \DescribeMacro{\default@the}\index{Макросы!\verb*+\default"@the+}
+% \begin{macrocode}
+\newcommand\default@the{%
+% \end{macrocode}
+% Нумерация сносок и формул начинается заново в каждой главе.
+% \begin{macrocode}
+ \@addtoreset{footnote}{chapter}
+ \@addtoreset{equation}{chapter}
+
+% \end{macrocode}
+% Формат номера формулы.
+% \DescribeMacro{\theequation}\index{Макросы!\verb*+\theequation+}
+% \begin{macrocode}
+ \renewcommand\theequation{%
+ \ifnum\c@chapter > \z@\thechapter.\fi%
+ \@arabic\c@equation}
+% \end{macrocode}
+% Формат номера таблицы.
+% \DescribeMacro{\thetable}\index{Макросы!\verb*+\thetable+}
+% \begin{macrocode}
+ \renewcommand\thetable{%
+ \ifnum \c@chapter>\z@\thechapter.\fi%
+ \@arabic\c@table}
+% \end{macrocode}
+% Формат номера рисунка.
+% \DescribeMacro{\thefigure}\index{Макросы!\verb*+\thefigure+}
+% \begin{macrocode}
+ \renewcommand\thefigure{%
+ \ifnum \c@chapter>\z@\thechapter.\fi%
+ \@arabic\c@figure}
+}
+%</counters>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/custom.dtx b/macros/latex/contrib/disser/src/custom.dtx
new file mode 100644
index 0000000000..f585d74e8f
--- /dev/null
+++ b/macros/latex/contrib/disser/src/custom.dtx
@@ -0,0 +1,254 @@
+
+% \iffalse
+%%% From File: custom.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*custom>
+% \end{macrocode}
+% \subsection{Подключение и настройка сторонних пакетов}
+%
+% Прямые символы интегралов из шрифтов семейства Euler.
+% \begin{macrocode}
+\ifDis@fixint
+ \DeclareSymbolFont{EulerExtension}{U}{euex}{m}{n}
+ \DeclareMathSymbol\intop\mathop{EulerExtension}{"52}
+ \DeclareMathSymbol\ointop\mathop{EulerExtension}{"48}
+ \AtBeginDocument{%
+ \def\intkern@{\mkern -6mu }%
+ \def\ints@#1{\mkern -3mu
+ \mathop{\mkern 3mu
+ \intop
+ \ifnum #1=\z@ \intdots@ \else
+ \intkern@
+ \ifnum #1>\tw@ \intop\intkern@
+ \ifnum #1>\thr@@ \intop\intkern@ \fi
+ \fi
+ \fi
+ \intop
+ }\ilimits@
+ }%
+ \renewcommand{\iint}{\DOTSI\protect\MultiIntegral{2}}
+ \renewcommand{\iiint}{\DOTSI\protect\MultiIntegral{3}}
+ \renewcommand{\iiiint}{\DOTSI\protect\MultiIntegral{4}}
+ \renewcommand{\idotsint}{\DOTSI\protect\MultiIntegral{0}}
+ }{}
+\fi
+
+% \end{macrocode}
+% \subsubsection{Библиографические ссылки}
+% \DescribePackage{natbib}
+% \begin{macrocode}
+\ifDis@natbib
+ \usepackage[square,comma,sort&compress,numbers]{natbib}
+\else
+% \end{macrocode}
+% Пустые определения команд из пакета |natbib|.
+% \DescribeMacro{\bibsection}\index{Макросы!\verb*+\bibsection+}
+% \DescribeMacro{\bibpreamble}\index{Макросы!\verb*+\bibpreamble+}
+% \DescribeMacro{\bibpostamble}\index{Макросы!\verb*+\bibpostamble+}
+% \DescribeMacro{\bibsep}\index{Макросы!\verb*+\bibsep+}
+% \begin{macrocode}
+ \providecommand*\bibsection{}
+ \providecommand*\bibpreamble{}
+ \providecommand*\bibpostamble{}
+ \newlength\bibsep
+\fi
+
+% \end{macrocode}
+% Команда, создающая заголовок библиографии.
+% \DescribeMacro{\bibsection}\index{Макросы!\verb*+\bibsection+}
+% \begin{macrocode}
+\renewcommand\bibsection{\nchapter{\bibname}}
+
+% \end{macrocode}
+% Преамбула окружения |thebibliography|.
+% \DescribeMacro{\bibpreamble}\index{Макросы!\verb*+\bibpreamble+}
+% \begin{macrocode}
+\renewcommand\bibpreamble{%
+% \end{macrocode}
+% Формат номера в списке литературы.
+% \DescribeMacro{\@biblabel}\index{Макросы!\verb*+"\"@biblabel+}
+% \begin{macrocode}
+ \renewcommand\@biblabel[1]{##1.}%
+ \setlength\bibsep{0pt}
+}
+
+\@ifpackageloaded{natbib}{
+ \@ifundefined{chapter}{%
+ \renewcommand\bibsection{%
+ \nsection{\bibname\@mkboth{\MakeUppercase{\bibname}}{\MakeUppercase{\bibname}}}%
+ }%
+ }{%
+ \@ifxundefined\NAT@sectionbib{%
+ \renewcommand\bibsection{%
+ \nchapter{\bibname\@mkboth{\MakeUppercase{\bibname}}{\MakeUppercase{\bibname}}}%
+ }%
+ }{%
+ \renewcommand\bibsection{%
+ \nsection{\bibname\ifx\@mkboth\@gobbletwo\else\markright{\MakeUppercase{\bibname}}\fi}%
+ }%
+ }%
+ }%
+}{%
+ \@ifundefined{chapter}{%
+ \renewcommand\bibsection{%
+ \nsection{\bibname\@mkboth{\MakeUppercase{\bibname}}{\MakeUppercase{\bibname}}}%
+ }%
+ }{}
+% \end{macrocode}
+% \DescribeEnv{thebibliography}\index{Окружения!\verb*+thebibliography+}
+% \begin{macrocode}
+ \renewenvironment{thebibliography}[1]{
+ \bibsection
+ \parindent\z@
+ \bibpreamble\normalfont\selectfont
+ \list{\@biblabel{\@arabic\c@enumiv}}{\settowidth\labelwidth{\@biblabel{#1}}%
+ \setlength{\itemsep}{\bibsep}
+ \setlength{\parsep}{\bibsep}
+ \leftmargin\labelwidth
+ \advance\leftmargin\labelsep
+ \@openbib@code
+ \usecounter{enumiv}%
+ \let\p@enumiv\@empty
+ \renewcommand\theenumiv{\@arabic\c@enumiv}}%
+ \sloppy\clubpenalty4000\widowpenalty4000
+ \sfcode`\.\@m
+ }{%
+ \bibpostamble
+ \def\@noitemerr
+ {\@latex@warning{Empty `thebibliography' environment}}%
+ \endlist
+ }
+}
+
+% \end{macrocode}
+% \subsubsection{Плавающие объекты}
+%
+% Пакеты \pkg{caption} и \pkg{subcaption} для вложенной нумерации плавающих
+% объектов.
+% \DescribePackage{caption}
+% \DescribePackage{subcaption}
+% \begin{macrocode}
+\ifDis@subf
+ \usepackage[font=small,labelsep=period]{caption}
+ \usepackage[list=true,subrefformat=parens]{subcaption}
+ \captionsetup{compatibility=false}
+% \end{macrocode}
+% Формат счетчика.
+% \begin{macrocode}
+ \DeclareCaptionSubType[asbuk]{figure}
+ \def\thesubfigure{\textit{\asbuk{subfigure}}}
+% \end{macrocode}
+% Формат ссылки через |\ref|.
+% \DescribeMacro{\thefigsubsep}\index{Макросы!\verb*+\thefigsubsep+}
+% \begin{macrocode}
+ \providecommand\thefigsubsep{,~}
+ \def\p@subfigure{\@nameuse{thefigure}\thefigsubsep}
+\fi
+
+% \end{macrocode}
+% \subsubsection{Hyperref}
+% \begin{macrocode}
+\ifpdf
+ \ifDis@href
+% \end{macrocode}
+% \DescribePackage{hyperref}
+% \begin{macrocode}
+ \usepackage[pdftex,unicode]{hyperref}
+ \hypersetup{
+ colorlinks = false,
+ bookmarksopen = true,
+ bookmarksnumbered = true,
+ bookmarksopenlevel = 2,
+ pdfstartview = {FitH},
+ pdfborder = {0 0 0}
+ }
+ \pdfcompresslevel = 9
+ \fi
+% \end{macrocode}
+% \DescribePackage{graphicx}
+% \DescribePackage{cmap}
+% \begin{macrocode}
+ \usepackage[pdftex]{graphicx}
+ \usepackage{cmap}
+\else
+ \ifDis@href
+% \end{macrocode}
+% \DescribePackage{hyperref}
+% \begin{macrocode}
+ \usepackage[hypertex,colorlinks=false]{hyperref}
+ \fi
+% \end{macrocode}
+% \DescribePackage{graphicx}
+% \begin{macrocode}
+ \usepackage{graphicx}
+\fi
+\ifDis@href
+% \end{macrocode}
+% Включение и настройка цветных ссылок.
+% \begin{macrocode}
+ \ifDis@colorlinks
+ \usepackage{color}
+ \definecolor{darkblue}{rgb}{0,0,.6}
+ \hypersetup{
+ colorlinks = true, linkcolor = darkblue,
+ citecolor = darkblue, filecolor = darkblue,
+ menucolor = darkblue, urlcolor = darkblue
+ }
+ \fi
+\fi
+
+% \end{macrocode}
+% Команда, создающая цель для гиперссылок над заголовками ненумеруемых
+% разделов.
+% \DescribeMacro{\hrefphantom}\index{Макросы!\verb*+\hrefphantom+}
+% \begin{macrocode}
+\providecommand\hrefphantom[1]{%
+ \ifDis@href
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \xdef\@currentHref{#1*.\the\Hy@linkcounter}%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
+ \fi
+}
+
+% \end{macrocode}
+% Команды для создания ненумеруемых глав и секций, которые включаются в
+% оглавление и PDF-закладки.
+% \DescribeMacro{\nchapter}\index{Макросы!\verb*+\nchapter+}
+% \DescribeMacro{\nsection}\index{Макросы!\verb*+\nsection+}
+% \DescribeMacro{\nsubsection}\index{Макросы!\verb*+\nsubsection+}
+% \DescribeMacro{\nsubsubsection}\index{Макросы!\verb*+\nsubsubsection+}
+% \begin{macrocode}
+\newcommand\nchapter[1]{%
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{\@chapterpagestyle}%
+ \global\@topnum\z@
+ \hrefphantom{chapter}
+ \addcontentsline{toc}{chapter}{#1}%
+ \@afterindentfalse
+ \@schapter{#1}
+}
+\newcommand\nsection[1]{%
+ \hrefphantom{section}%
+ \addcontentsline{toc}{section}{#1}
+ \section*{#1}
+}
+\newcommand\nsubsection[1]{%
+ \hrefphantom{subsection}%
+ \addcontentsline{toc}{subsection}{#1}
+ \subsection*{#1}
+}
+\newcommand\nsubsubsection[1]{%
+ \hrefphantom{subsubsection}%
+ \addcontentsline{toc}{subsubsection}{#1}
+ \subsubsection*{#1}
+}
+
+%</custom>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/disser.dtx b/macros/latex/contrib/disser/src/disser.dtx
new file mode 100644
index 0000000000..92ca65b346
--- /dev/null
+++ b/macros/latex/contrib/disser/src/disser.dtx
@@ -0,0 +1,675 @@
+% \iffalse meta-comment
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% disser -- LaTeX document class for dissertations.
+%%
+%% Copyright (c) Stanislav Kruchinin
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2003/12/01 or later.
+%%
+%% This program is distributed in the hope that it will be useful,
+%% but WITHOUT ANY WARRANTY; without even the implied warranty of
+%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%<*driver>
+\ProvidesFile{disser.drv}[2017/03/03 1.5.0 Document class for dissertations]
+
+\documentclass{ltxdoc}
+\usepackage[a4paper,includeheadfoot,nohead,mag=1000,
+ left=5cm,right=1cm,top=1.5cm,bottom=1.5cm]{geometry}
+\usepackage{ifpdf,indentfirst,tabularx,doc,makeidx,longtable,color}
+
+\definecolor{darkblue}{rgb}{0,0,.6}
+
+\ifpdf
+ \usepackage[pdftex,hyperindex,unicode]{hyperref}
+ \usepackage{cmap}
+\else
+ \usepackage[hypertex]{hyperref}
+\fi
+
+\hypersetup{
+ pdftitle = {Documented source code of disser class},
+ pdfauthor = {Stanislav Kruchinin},
+ pdfsubject = {disser},
+ pdfstartview = {FitH},
+ pdfborder = {0 0 0},
+ bookmarksopen = true,
+ bookmarksnumbered = true,
+ bookmarksopenlevel = 2,
+ colorlinks = true, linkcolor = darkblue,
+ citecolor = darkblue, filecolor = darkblue,
+ menucolor = darkblue, urlcolor = darkblue
+}
+
+\IfFileExists{url.sty}{\usepackage{url}}{\newcommand\url{\texttt}}
+
+\usepackage[T2A]{fontenc}
+\usepackage[cp1251]{inputenc}
+\usepackage[english,russian]{babel}
+
+\usepackage{microtype}
+
+\MakeShortVerb{\|}
+
+\def\file#1{\texttt{#1}}
+\def\pkg#1{\textsf{#1}}
+\def\cmd#1{\texttt{#1}}
+
+\def\deflabel#1{\ttfamily #1\hfill}
+\newenvironment{deflist}[1]{%
+ \begin{list}{}{%
+ \settowidth\labelwidth{\ttfamily #1}%
+ \setlength\leftmargin\labelwidth
+ \addtolength\leftmargin\labelsep
+ \let\makelabel\deflabel}
+}{\end{list}}
+
+\newcommand\DescribePackage[1]{%
+ \DescribeEnv{#1}\index{Пакеты!\texttt{#1}}
+}
+
+\newcommand\DescribeCounter[1]{%
+ \DescribeMacro{#1}\index{Счетчики!\texttt{#1}}
+}
+
+\newcommand\DescribeOption[1]{
+ \DescribeMacro{#1}\index{Опции!\texttt{#1}}
+}
+
+\makeatletter
+ \def\IndexParms{%
+ \parindent \z@
+ \columnsep 15pt
+ \parskip 0pt plus 1pt
+ \rightskip 15pt
+ \mathsurround \z@
+ \parfillskip=-15pt
+ \small
+ \def\@idxitem{\normalfont\par\hangindent 30pt\bfseries}%
+ \def\subitem{\normalfont\par\hangindent 30pt}%
+ \def\subsubitem{\normalfont\par\hangindent 30pt\hspace*{15pt}}%
+ \def\indexspace{\par\vspace{10pt plus 2pt minus 3pt}}%
+ }
+ \def\theindex{\@restonecoltrue\if@twocolumn\@restonecolfalse\fi
+ \columnseprule \z@ \columnsep 35\p@
+ \twocolumn[\index@prologue]%
+ \IndexParms \let\item\@idxitem \ignorespaces}
+ \def\endtheindex{\if@restonecol\onecolumn\else\clearpage\fi}
+\makeatother
+
+\setlength\hfuzz{20pt}
+\hbadness=10000
+
+\makeindex
+
+\GetFileInfo{disser.drv}
+
+\begin{document}
+ \sloppy
+ \DocInput{disser.dtx}
+ \DocInput{counters.dtx}
+ \DocInput{part.dtx}
+ \DocInput{chapter.dtx}
+ \DocInput{sections.dtx}
+ \DocInput{lists.dtx}
+ \DocInput{floats.dtx}
+ \DocInput{env.dtx}
+ \DocInput{page.dtx}
+ \DocInput{titledefs.dtx}
+ \DocInput{titlepage.dtx}
+ \DocInput{bachelor.dtx}
+ \DocInput{specialist.dtx}
+ \DocInput{master.dtx}
+ \DocInput{candidate.dtx}
+ \DocInput{doctor.dtx}
+ \DocInput{autoref.dtx}
+ \DocInput{toc.dtx}
+ \DocInput{custom.dtx}
+ \IndexPrologue{\section{Предметный указатель}}
+ \printindex
+\end{document}
+%</driver>
+% \fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \title{\pkg{disser} "--- пакет для оформления диссертаций}
+% \date{Версия \fileversion\\[6pt]\filedate}
+% \author{Станислав Кручинин\\[6pt]
+% \normalsize E-mail:
+% \href{mailto:stanislav.kruchinin@gmail.com}
+% {\texttt{stanislav.kruchinin@gmail.com}}}
+%
+% \maketitle
+%
+% \section*{Обзор документации}
+%
+% Документация пакета состоит из следующих файлов:
+% \begin{deflist}{README, README.ru }
+% \item[\href{file:manual.pdf}{manual.pdf}]
+% Руководство пользователя.
+% \item[README, README.ru]
+% Информация о сборке и установке пакета.
+% \item[ChangeLog]
+% История версий.
+% \end{deflist}
+%
+% Документированные исходные тексты:
+% \begin{deflist}{README, README.ru }
+% \item[\href{file:disser.pdf}{disser.dtx}]
+% Исходный текст класса \pkg{disser} (данный файл).
+% \item[\href{file:gost732.pdf}{gost732.dtx}]
+% Исходный текст класса \pkg{gost732} для оформления документов в
+% соответствии с ГОСТ 7.32-2001.
+% \end{deflist}
+%
+% \clearpage
+% \tableofcontents
+%
+% \section{Исходный текст класса}\parindent=0pt
+%
+% \begin{macrocode}
+
+%<*disser>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{disser}[2017/03/03 1.4.1 Document class for dissertations]
+
+% \end{macrocode}
+% Подключение пакета \pkg{kvoptions} для обработки опций в формате
+% <<ключ = значение>>.
+% \DescribePackage{kvoptions}
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+
+% \end{macrocode}
+% Определение операторов условного выполнения:
+% \begin{itemize}
+% \item подключение пакета \pkg{ifpdf}, определяющего команду |\ifpdf|.
+% \DescribePackage{ifpdf}
+% \begin{macrocode}
+\RequirePackage{ifpdf}
+
+% \end{macrocode}
+% \item подключение пакета \pkg{ifthen} для построчных сравнений.
+% \DescribePackage{ifthen}
+% \begin{macrocode}
+\RequirePackage{ifthen}
+
+% \end{macrocode}
+% \item Англоязычная версия титульного листа.
+% \begin{macrocode}
+\newif\if@titlepage@en\@titlepage@enfalse
+% \end{macrocode}
+% \item Разрешено оставлять одну колонку при двухколонном наборе.
+% \begin{macrocode}
+\newif\if@restonecol
+% \end{macrocode}
+% \item Отображение титульного листа (включено).
+% \begin{macrocode}
+\newif\if@titlepage\@titlepagetrue
+% \end{macrocode}
+% \item Главы начинаются только с нечетных страниц (отключено).
+% \begin{macrocode}
+\newif\if@openright\@openrightfalse
+% \end{macrocode}
+% \item Типы документов (по умолчанию candidate).
+% \begin{macrocode}
+\newif\ifDis@bachelor\Dis@bachelorfalse
+\newif\ifDis@specialist\Dis@specialistfalse
+\newif\ifDis@master\Dis@masterfalse
+\newif\ifDis@candidate\Dis@candidatetrue
+\newif\ifDis@doctor\Dis@doctorfalse
+\newif\ifDis@autoref\Dis@autoreffalse
+% \end{macrocode}
+% \item Отображение УДК на титульном листе (отключено).
+% \begin{macrocode}
+\newif\ifDis@libcat\Dis@libcatfalse
+% \end{macrocode}
+% \item Отображение грифа секретности на титульном листе (отключено).
+% \begin{macrocode}
+\newif\ifDis@classified\Dis@classifiedfalse
+% \end{macrocode}
+% \item Отображение подписей диссертанта и ученого секретаря (отключено).
+% \begin{macrocode}
+\newif\ifDis@facsimile\Dis@facsimilefalse
+% \end{macrocode}
+% \item Подключение \pkg{hyperref} (отключено).
+% \begin{macrocode}
+\newif\ifDis@href\Dis@hreffalse
+% \end{macrocode}
+% \item Подключение \pkg{subcaption} (отключено).
+% \begin{macrocode}
+\newif\ifDis@subf\Dis@subffalse
+% \end{macrocode}
+% \item Шрифт Times как основной (отключено).
+% \begin{macrocode}
+\newif\ifDis@times\Dis@timesfalse
+% \end{macrocode}
+% \item Поддержка математических шрифтов MathTime Pro (отключено).
+% \begin{macrocode}
+\newif\ifDis@mtpro\Dis@mtprofalse
+% \end{macrocode}
+% \item Подключение \pkg{natbib} (отключено).
+% \begin{macrocode}
+\newif\ifDis@natbib\Dis@natbibfalse
+% \end{macrocode}
+% \item Использовать цветные ссылки (отключено).
+% \begin{macrocode}
+\newif\ifDis@colorlinks\Dis@colorlinksfalse
+% \end{macrocode}
+% \item Исправление знаков интегралов на более привычные (отключено).
+% \begin{macrocode}
+\newif\ifDis@fixint\Dis@fixintfalse
+% \end{macrocode}
+% \end{itemize}
+%
+% \subsection{Опции класса}
+%
+% Подключение пакета \pkg{hyperref} и необходимых настроек.
+% \begin{macrocode}
+\DeclareOption{href}{\Dis@hreftrue}
+% \end{macrocode}
+% Подключение пакета \pkg{subcaption} и необходимых настроек.
+% \begin{macrocode}
+\DeclareOption{subf}{\Dis@subftrue}
+% \end{macrocode}
+% Отображение УДК на титульном листе.
+% \begin{macrocode}
+\DeclareOption{libcat}{\Dis@libcattrue}
+% \end{macrocode}
+% Отображение грифа секретности.
+% \begin{macrocode}
+\DeclareOption{classified}{\Dis@classifiedtrue}
+% \end{macrocode}
+% Отображение подписей диссертанта и ученого секретаря.
+% \begin{macrocode}
+\DeclareOption{facsimile}{\Dis@facsimiletrue}
+% \end{macrocode}
+% Подключение пакета \pkg{natbib} и необходимых настроек.
+% \begin{macrocode}
+\DeclareOption{natbib}{\Dis@natbibtrue}
+% \end{macrocode}
+% Исправление знаков интегралов на более привычные.
+% \begin{macrocode}
+\DeclareOption{fixint}{\Dis@fixinttrue}
+% \end{macrocode}
+% Создание цветных ссылок.
+% \begin{macrocode}
+\DeclareOption{colorlinks}{\Dis@colorlinkstrue}
+% \end{macrocode}
+% Размеры листов.
+% \begin{macrocode}
+\DeclareOption{a4paper}{%
+ \setlength\paperheight{297mm}
+ \setlength\paperwidth {210mm}
+}
+\DeclareOption{a5paper}{%
+ \setlength\paperheight{210mm}
+ \setlength\paperwidth {148mm}
+}
+\DeclareOption{b5paper}{%
+ \setlength\paperheight{250mm}
+ \setlength\paperwidth {176mm}
+}
+% \end{macrocode}
+% Альбомная ориентация.
+% \begin{macrocode}
+\DeclareOption{landscape}{%
+ \setlength\@tempdima {\paperheight}%
+ \setlength\paperheight{\paperwidth}%
+ \setlength\paperwidth {\@tempdima}
+}
+
+% \end{macrocode}
+% Размер шрифта основного текста.
+% \begin{macrocode}
+\newcommand\@ptsize{}
+\DeclareOption{8pt} {\renewcommand\@ptsize{8}}
+\DeclareOption{9pt} {\renewcommand\@ptsize{9}}
+\DeclareOption{10pt}{\renewcommand\@ptsize{10}}
+\DeclareOption{11pt}{\renewcommand\@ptsize{11}}
+\DeclareOption{12pt}{\renewcommand\@ptsize{12}}
+\DeclareOption{14pt}{\renewcommand\@ptsize{14}}
+\DeclareOption{16pt}{\renewcommand\@ptsize{16}}
+\DeclareOption{18pt}{\renewcommand\@ptsize{18}}
+\DeclareOption{20pt}{\renewcommand\@ptsize{20}}
+
+% \end{macrocode}
+% Установка полей для односторонней или двухсторонней печати.
+% \begin{macrocode}
+\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
+
+% \end{macrocode}
+% Включение сообщений о строках, выходящих за поля.
+% \begin{macrocode}
+\DeclareOption{draft}{\setlength\overfullrule{5pt}}
+\DeclareOption{final}{\setlength\overfullrule{0pt}}
+
+% \end{macrocode}
+% Печатать титульный лист или нет.
+% \begin{macrocode}
+\DeclareOption{titlepage} {\@titlepagetrue}
+\DeclareOption{notitlepage}{\@titlepagefalse}
+
+% \end{macrocode}
+% Главы будут начинаться только на нечетной странице (будет всегда справа на
+% развороте) или на первой доступной.
+% \begin{macrocode}
+\DeclareOption{openright}{\@openrighttrue}
+\DeclareOption{openany}{\@openrightfalse}
+
+% \end{macrocode}
+% Верстка в один или в два столбца.
+% \begin{macrocode}
+\DeclareOption{onecolumn}{\@twocolumnfalse}
+\DeclareOption{twocolumn}{\@twocolumntrue}
+
+% \end{macrocode}
+% Номера размещаются слева, а не справа от формул.
+% \begin{macrocode}
+\DeclareOption{leqno}{\input{leqno.clo}}
+
+% \end{macrocode}
+% Выключные формулы будут выравнены по левому краю, а не по центру.
+% \begin{macrocode}
+\DeclareOption{fleqn}{\input{fleqn.clo}}
+% \end{macrocode}
+% Если указана эта опция, то блоки текста в списке литературы будут печататься
+% на новых строках и с отступом.
+% \begin{macrocode}
+\DeclareOption{openbib}{%
+ \AtEndOfPackage{%
+ \renewcommand\@openbib@code{%
+ \advance\leftmargin\bibindent
+ \itemindent -\bibindent
+ \listparindent \itemindent
+ \parsep \z@
+ }%
+ \renewcommand\newblock{\par}
+ }%
+}
+
+% \end{macrocode}
+% Тип диссертации.
+% \begin{macrocode}
+\DeclareOption{bachelor}{%
+ \Dis@bachelortrue
+ \Dis@specialistfalse
+ \Dis@masterfalse
+ \Dis@candidatefalse
+ \Dis@doctorfalse
+ \Dis@autoreffalse
+}
+\DeclareOption{specialist}{%
+ \Dis@bachelorfalse
+ \Dis@specialisttrue
+ \Dis@masterfalse
+ \Dis@candidatefalse
+ \Dis@doctorfalse
+ \Dis@autoreffalse
+}
+\DeclareOption{master}{%
+ \Dis@bachelorfalse
+ \Dis@specialistfalse
+ \Dis@mastertrue
+ \Dis@candidatefalse
+ \Dis@doctorfalse
+ \Dis@autoreffalse
+}
+\DeclareOption{candidate}{%
+ \Dis@bachelorfalse
+ \Dis@specialistfalse
+ \Dis@masterfalse
+ \Dis@candidatetrue
+ \Dis@doctorfalse
+ \Dis@autoreffalse
+}
+\DeclareOption{doctor}{%
+ \Dis@bachelorfalse
+ \Dis@specialistfalse
+ \Dis@masterfalse
+ \Dis@candidatefalse
+ \Dis@doctortrue
+ \Dis@autoreffalse
+}
+\DeclareOption{autoref}{%
+ \Dis@bachelorfalse
+ \Dis@specialistfalse
+ \Dis@masterfalse
+ \Dis@candidatefalse
+ \Dis@doctorfalse
+ \Dis@autoreftrue
+}
+
+% \end{macrocode}
+% Обработка опций в формате <<ключ-значение>>.
+% \begin{macrocode}
+\SetupKeyvalOptions{
+ family=Dis,
+ prefix=Dis@
+}
+
+\DeclareStringOption{substylefile}
+
+% \end{macrocode}
+% Выполнение опций по умолчанию.
+% \begin{macrocode}
+\ExecuteOptions{a4paper,14pt,oneside,titlepage,onecolumn,final,openany,candidate}
+% \end{macrocode}
+% Выполнение пользовательских опций.
+% \begin{macrocode}
+\ProcessKeyvalOptions{Dis}
+\ProcessOptions
+
+% \end{macrocode}
+% Файл с описанием разметки титульного листа по умолчанию.
+% \begin{macrocode}
+\ifx\Dis@substylefile\@empty
+ \ifDis@bachelor \renewcommand*{\Dis@substylefile}{bachelor.rtx}\fi
+ \ifDis@specialist \renewcommand*{\Dis@substylefile}{specialist.rtx}\fi
+ \ifDis@master \renewcommand*{\Dis@substylefile}{master.rtx}\fi
+ \ifDis@candidate \renewcommand*{\Dis@substylefile}{candidate.rtx}\fi
+ \ifDis@doctor \renewcommand*{\Dis@substylefile}{doctor.rtx}\fi
+ \ifDis@autoref \renewcommand*{\Dis@substylefile}{autoref.rtx}\fi
+\fi
+
+% \end{macrocode}
+% Подключение стиля документа.
+% \begin{macrocode}
+\AtEndOfClass{\input{\Dis@substylefile}}
+
+% \end{macrocode}
+% Определение команд изменения регистра |\MakeTextUppercase| и
+% |\MakeTextLowercase|.
+% \DescribePackage{textcase}
+% \begin{macrocode}
+\RequirePackage[overload]{textcase}
+
+% \end{macrocode}
+% \subsection{Настройка шрифтов}
+% \subsubsection{Определение размеров}
+%
+% \begin{macrocode}
+\def\EC@family#1#2#3#4#5{%
+ \DeclareFontShape{#1}{#2}{#3}{#4}%
+ {<5><6><7><8><9><10><10.95><12><14.4><17.28><20.74>%
+ <24.88><29.86><35.83><42.99><51.59>genb*#5}{}}
+
+\EC@family{T1}{cmr}{m}{n}{ecrm}
+\EC@family{T1}{cmr}{m}{sl}{ecsl}
+\EC@family{T1}{cmr}{m}{it}{ecti}
+\EC@family{T1}{cmr}{m}{sc}{eccc}
+\EC@family{T1}{cmr}{bx}{n}{ecbx}
+\EC@family{T1}{cmr}{b}{n}{ecrb}
+\EC@family{T1}{cmr}{bx}{it}{ecbi}
+\EC@family{T1}{cmr}{bx}{sl}{ecbl}
+\EC@family{T1}{cmr}{bx}{sc}{ecxc}
+\EC@family{T1}{cmr}{m}{ui}{ecui}
+
+\DeclareFontShape{OT1}{cmr}{m}{n}{%
+ <5><6><7><8><9><10><12>gen*cmr%
+ <10.95>cmr10%
+ <14.4>cmr12%
+ <17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmr17%
+}{}
+\DeclareFontShape{OT1}{cmr}{m}{sl}{%
+ <5><6><7>cmsl8%
+ <8><9>gen*cmsl%
+ <10><10.95>cmsl10%
+ <12><14.4><17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmsl12%
+}{}
+\DeclareFontShape{OT1}{cmr}{m}{it}{%
+ <5><6><7>cmti7%
+ <8>cmti8%
+ <9>cmti9%
+ <10><10.95>cmti10%
+ <12><14.4><17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmti12%
+}{}
+\DeclareFontShape{OT1}{cmr}{m}{sc}{%
+ <5><6><7><8><9><10><10.95><12>%
+ <14.4><17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmcsc10%
+}{}
+\DeclareFontShape{OT1}{cmr}{m}{ui}{%
+ <5><6><7><8><9><10><10.95><12>%
+ <14.4><17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmu10%
+}{}
+\DeclareFontShape{OT1}{cmr}{b}{n}{%
+ <5><6><7><8><9><10><10.95><12>%
+ <14.4><17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmb10%
+}{}
+\DeclareFontShape{OT1}{cmr}{bx}{n}{%
+ <5><6><7><8><9>gen*cmbx%
+ <10><10.95>cmbx10%
+ <12><14.4><17.28><20.74><24.88><29.86><35.83><42.99><51.59>cmbx12%
+}{}
+\DeclareFontShape{OT1}{cmr}{bx}{sl}{%
+ <5><6><7><8><9>%
+ <10><10.95><12><14.4><17.28><20.74><24.88><29.86><35.83><42.99>%
+ <51.59>cmbxsl10%
+}{}
+\DeclareFontShape{OT1}{cmr}{bx}{it}{%
+ <5><6><7><8><9>%
+ <10><10.95><12><14.4><17.28><20.74><24.88><29.86><35.83><42.99>%
+ <51.59>cmbxti10%
+}{}
+\input{size\@ptsize.clo}
+\RequirePackage{exscale}
+
+% \end{macrocode}
+%
+% \subsubsection{Старые команды изменения начертания шрифтов (без NFSS)}
+%
+% Изменение начертания в текстовом режиме.
+% \begin{macrocode}
+\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
+\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
+\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
+\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
+\DeclareOldFontCommand{\it}{\normalfont\itshape} {\mathit}
+\DeclareOldFontCommand{\sl}{\normalfont\slshape} {\@nomath\sl}
+\DeclareOldFontCommand{\sc}{\normalfont\scshape} {\@nomath\sc}
+% \end{macrocode}
+% В математическом режиме.
+% \begin{macrocode}
+\DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
+\DeclareRobustCommand*\mit{\@fontswitch\relax\mathnormal}
+
+% \end{macrocode}
+% Команда, объединяющая |\newlength| и |\setlength|.
+% \DescribeMacro{\Dis@deflength}\index{Макросы!\verb*+\Dis"@deflength+}
+% \begin{macrocode}
+\providecommand\Dis@deflength[2]{\newlength{#1}\setlength{#1}{#2}}
+\providecommand\ifundeflength[2]{%
+\ifx#1\undefined \newlength{#1}\setlength{#1}{#2} \else \relax \fi
+}
+
+% \end{macrocode}
+%
+% \subsection{Параметры текста}
+%
+% \DescribeMacro{\lineskip}\index{Интервалы!\verb*+\lineskip+}
+% \DescribeMacro{\normallineskip}\index{Интервалы!\verb*+\normallineskip+}
+% Вертикальный интервал между строками. Упоминаемый здесь и далее макрос
+% |\p@| определяет стандартную единицу длины. По умолчанию она равна
+% английскому пункту (pt).
+% \begin{macrocode}
+\setlength\lineskip{1\p@}
+\setlength\normallineskip{1\p@}
+
+% \end{macrocode}
+% \DescribeMacro{\Dis@singlespacing} \index{Макросы!\verb*+\Dis"@singlespacing+}
+% \DescribeMacro{\Dis@onehalfspacing}\index{Макросы!\verb*+\Dis"@onehalfspacing+}
+% \DescribeMacro{\Dis@doublespacing} \index{Макросы!\verb*+\Dis"@doublespacing+}
+% Характерные величины межстрочнах интервалов.
+% \begin{macrocode}
+\newcommand\Dis@singlespacing {\renewcommand\baselinestretch{1}\normalsize}
+\newcommand\Dis@onehalfspacing{\renewcommand\baselinestretch{1.5}\normalsize}
+\newcommand\Dis@doublespacing {\renewcommand\baselinestretch{2}\normalsize}
+% \end{macrocode}
+% Межстрочный интервал по умолчанию.
+% \begin{macrocode}
+\Dis@onehalfspacing
+
+% \end{macrocode}
+% \DescribeMacro{\parindent}\index{Интервалы!\verb*+\parindent+}
+% Абзацный отступ.
+% \begin{macrocode}
+\setlength\parindent{5ex}
+
+% \end{macrocode}
+% Интервал между абзацами (добавляется к межстрочному).
+% \DescribeMacro{\parskip}\index{Интервалы!\verb*+\parskip+}
+% \begin{macrocode}
+\setlength\parskip{0\p@ \@plus \p@}
+
+% \end{macrocode}
+%
+% Интервал между колонками текста.
+% \DescribeMacro{\columnsep}\index{Интервалы!\verb*+\columnsep+}
+% \begin{macrocode}
+\setlength\columnsep{10\p@}
+
+% \end{macrocode}
+%
+% Ширина разделителя (линии) между колонками текста (по умолчанию его нет).
+% \DescribeMacro{\columnseprule}\index{Интервалы!\verb*+\columnseprule+}
+% \begin{macrocode}
+\setlength\columnseprule{0\p@}
+
+% \end{macrocode}
+% Характерные величины штрафов. Штраф --- мера <<красоты>> разбиения
+% абзаца на строки. Чем больше величина, тем менее красиво.
+% \begin{macrocode}
+\@lowpenalty 51
+\@medpenalty 151
+\@highpenalty 301
+
+% \end{macrocode}
+% Всегда ставить отступ в первой строке первого абзаца.
+% \begin{macrocode}
+\let\@afterindentfalse\@afterindenttrue
+\@afterindenttrue
+
+% \end{macrocode}
+% Перенос в словах с дефисом.
+% \begin{macrocode}
+\lccode`\-=`\-
+\defaulthyphenchar=127
+% \end{macrocode}
+% Пустое определение макроса для вывода сегодняшней даты (переопределяется
+% в \pkg{babel}).
+% \DescribeMacro{\today}\index{Макросы!\verb*+\today+}
+% \begin{macrocode}
+\newcommand\today{}
+
+%</disser>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/disser.ins b/macros/latex/contrib/disser/src/disser.ins
new file mode 100644
index 0000000000..221baf6b03
--- /dev/null
+++ b/macros/latex/contrib/disser/src/disser.ins
@@ -0,0 +1,58 @@
+%%
+%% This file is part of the standard disser bundle. It extracts the
+%% files from disser.dtx to be installed in the TeX hierarchy.
+%%
+%% This file may not be changed unless it is distributed under a
+%% different name, accompanied by a copy of the original file.
+%% The author of the changes and their scope should be clearly
+%% documented, so that questions can be distributed to the proper author.
+%%
+\def\batchfile{disser.ins}
+
+\input docstrip
+\preamble
+
+Copyright (c) Stanislav Kruchinin.
+All rights reserved.
+
+This file is part of the disser package.
+
+\endpreamble
+
+\def\ffrom#1{\from{#1.dtx}{#1}}
+\def\rtxfile#1{\file{#1.rtx}{\from{#1.dtx}{#1}}}
+\def\clsfile#1{\file{#1.cls}{\from{#1.dtx}{#1}}}
+
+\keepsilent
+\askforoverwritefalse
+
+\generate{%
+ \usedir{tex/latex/disser}
+ \file{disser.cls}{%
+ \ffrom{disser}
+ \ffrom{counters}
+ \ffrom{part}
+ \ffrom{chapter}
+ \ffrom{sections}
+ \ffrom{lists}
+ \ffrom{floats}
+ \ffrom{footnote}
+ \ffrom{env}
+ \ffrom{page}
+ \ffrom{titlepage}
+ \ffrom{toc}
+ \ffrom{custom}
+ }
+ \rtxfile{titledefs}
+ \rtxfile{bachelor}
+ \rtxfile{specialist}
+ \rtxfile{master}
+ \rtxfile{candidate}
+ \rtxfile{doctor}
+ \rtxfile{autoref}
+ \clsfile{gost732}
+ \nopostamble
+ \usedir{bibtex/bst/disser}%
+}
+\endbatchfile
+\endinput
diff --git a/macros/latex/contrib/disser/src/doctor.dtx b/macros/latex/contrib/disser/src/doctor.dtx
new file mode 100644
index 0000000000..e528782e1a
--- /dev/null
+++ b/macros/latex/contrib/disser/src/doctor.dtx
@@ -0,0 +1,146 @@
+% \begin{macrocode}
+
+%<doctor>\ProvidesFile{doctor.rtx}
+
+%<*doctor>
+% \end{macrocode}
+% \subsubsection{Стиль докторской диссертации}
+%
+% Нумерация.
+% \begin{macrocode}
+\newcommand\doctor@the{\default@the}
+\doctor@the
+
+% \end{macrocode}
+% Титульный лист.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+\if@titlepage\renewcommand\maketitle[1][]{
+\ifthenelse{\equal{#1}{en}}{\@titlepage@entrue}{\@titlepage@enfalse}
+\if@titlepage@en
+ \def\appos{Head of Department}
+ \def\sconname{Scientific Consultant}
+ \def\sconlabel{\sconname}
+ \def\sconsndname{\sconname}
+ \def\sconsndlabel{\sconname}
+ \def\topicname{Topic}
+ \def\asmanuscript{As Manuscript}
+\fi
+
+% \end{macrocode}
+% Вертикальные интервалы между элементами титульного листа.
+% \DescribeMacro{\firstskip}\index{Интервалы!\verb*+\firstskip+}
+% \DescribeMacro{\secondskip}\index{Интервалы!\verb*+\secondskip+}
+% \DescribeMacro{\thirdskip}\index{Интервалы!\verb*+\thirdskip+}
+% \DescribeMacro{\fourthskip}\index{Интервалы!\verb*+\fourthskip+}
+% \DescribeMacro{\fifthskip}\index{Интервалы!\verb*+\fifthskip+}
+% \DescribeMacro{\sixthskip}\index{Интервалы!\verb*+\sixthskip+}
+% \DescribeMacro{\specskip}\index{Интервалы!\verb*+\specskip+}
+% \begin{macrocode}
+\ifx\firstskip\undefined
+ \newlength\firstskip
+ \ifx\@libcatnum\empty
+ \setlength\firstskip{4ex}
+ \else
+ \setlength\firstskip{2ex}
+ \fi
+\fi
+\ifundeflength\secondskip{3cm}
+\ifundeflength\thirdskip{1cm}
+\ifundeflength\fourthskip{1cm}
+\ifundeflength\fifthskip{1cm}
+\ifundeflength\sixthskip{0cm}
+\ifundeflength\libcatskip{0cm}
+\ifundeflength\specskip{-6pt}
+
+% \end{macrocode}
+% Шрифты элементов титульного листа.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \DescribeMacro{\authorfont}\index{Макросы!\verb*+\authorfont+}
+% \DescribeMacro{\specfont}\index{Макросы!\verb*+\specfont+}
+% \begin{macrocode}
+\def\titlefont{\normalsize}
+\def\topicfont{\Large\bfseries}
+\def\authorfont{\large}
+\def\specfont{\normalsize}
+
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\vspace*{-2cm}
+% \end{macrocode}
+% \paragraph{Название организации}
+% \begin{macrocode}
+\begin{center}
+ \instfont\@institution\par
+\end{center}
+\vskip\firstskip
+\begin{flushright}
+% \end{macrocode}
+% Гриф секретности
+% \begin{macrocode}
+ \ifDis@classified\classify\fi
+% \end{macrocode}
+% На правах рукописи
+% \begin{macrocode}
+ \asmanuscript
+% \end{macrocode}
+% Факсимиле
+% \begin{macrocode}
+ \ifDis@facsimile\facsimile\fi
+% \end{macrocode}
+% Номер УДК
+% \begin{macrocode}
+ \ifx\@libcatnum\empty\else
+ \vskip\libcatskip
+ {\libcatname\ \@libcatnum}
+ \fi
+\end{flushright}
+\begin{center}
+% \end{macrocode}
+% Автор
+% \begin{macrocode}
+ \vskip\secondskip
+ {\authorfont\@author}
+% \end{macrocode}
+% Название диссертации
+% \begin{macrocode}
+ \vskip\thirdskip
+ {\topicfont\@topic\par}
+% \end{macrocode}
+% Шифр и наименование специальности
+% \begin{macrocode}
+ \vskip\fourthskip
+ {\specfont\@specnum~--\ \@spec}
+ \ifx\@specsndnum\empty\else
+ \vskip\specskip
+ {\specfont\@specsndnum~--\ \@specsnd}
+ \fi
+% \end{macrocode}
+% Диссертация на соискание ученой степени...
+% \begin{macrocode}
+ \vskip\fifthskip
+ {\titlefont\@title}
+\end{center}
+% \end{macrocode}
+% Научный консультант
+% \begin{macrocode}
+\ifx\@scon\empty\else
+ \vskip\sixthskip
+ \disserfield{scon}
+\fi
+\ifx\@sconsnd\empty\else
+ \vskip\sixthskip
+ \disserfield{sconsnd}
+\fi
+% \end{macrocode}
+% \paragraph{Город и год}
+% \begin{macrocode}
+\vfill
+\begin{center}
+ {\@city\cdsep\@date}
+\end{center}
+\normalfont\clearpage
+}\fi
+%</doctor>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/dtx.ist b/macros/latex/contrib/disser/src/dtx.ist
new file mode 100644
index 0000000000..850e35ce92
--- /dev/null
+++ b/macros/latex/contrib/disser/src/dtx.ist
@@ -0,0 +1,5 @@
+item_0 "\n \\vskip12pt \\item"
+item_x1 "\n \\vskip6pt \\subitem"
+delim_0 "\\hfill"
+delim_1 "\\leaders\\hbox to 1em{\\hss.\\hss}\\hfill"
+delim_2 "\\leaders\\hbox to 1em{\\hss.\\hss}\\hfill"
diff --git a/macros/latex/contrib/disser/src/env.dtx b/macros/latex/contrib/disser/src/env.dtx
new file mode 100644
index 0000000000..c1372c1394
--- /dev/null
+++ b/macros/latex/contrib/disser/src/env.dtx
@@ -0,0 +1,193 @@
+
+% \iffalse
+%%% From File: env.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*env>
+% \end{macrocode}
+% \subsection{Окружения}
+%
+% \DescribeEnv{description}\index{Окружения!\verb*+description+}
+% \subsubsection{Примечание}
+% \begin{macrocode}
+\newenvironment{description}
+ {\list{}{\labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+ {\endlist}
+
+% \end{macrocode}
+% \DescribeMacro{\descriptionlabel}\index{Макросы!\verb*+\descriptionlabel+}
+% \begin{macrocode}
+\newcommand*\descriptionlabel[1]{\hspace\labelsep\normalfont\bfseries #1}
+
+% \end{macrocode}
+% \DescribeMacro{\abstractnamefont}\index{Макросы!\verb*+\abstractnamefont+}
+% \DescribeMacro{\abstractfont}\index{Макросы!\verb*+\abstractfont+}
+% \DescribeMacro{\postabstract}\index{Макросы!\verb*+\postabstract+}
+% \begin{macrocode}
+\newcommand\abstractnamefont{\bfseries\small}
+\newcommand\abstractfont{\small}
+\newcommand\postabstract{\par\vfil\null}
+
+% \end{macrocode}
+% \DescribeEnv{abstract}\index{Окружения!\verb*+abstract+}
+% \subsubsection{Аннотация}
+% \begin{macrocode}
+\if@titlepage
+ \newenvironment{abstract}{
+ \thispagestyle{empty}
+ \@beginparpenalty\@lowpenalty
+ \begin{center}%
+ \abstractnamefont\abstractname
+ \@endparpenalty\@M
+ \end{center}\abstractfont
+ }{\postabstract}
+\else
+ \newenvironment{abstract}{
+ \if@twocolumn
+ \section*{\abstractname}
+ \else
+ \begin{center}
+ {\abstractnamefont\vspace{-.5em}\vspace{\z@}}%
+ \end{center}\abstractfont
+ \quotation
+ \fi
+ }{\if@twocolumn\else\endquotation\fi}
+\fi
+
+% \end{macrocode}
+% \DescribeEnv{quotation}\index{Окружения!\verb*+quotation+}
+% \subsubsection{Цитирование}
+% \begin{macrocode}
+\newenvironment{quotation}{
+ \list{}{
+ \listparindent 1.5em
+ \itemindent\listparindent
+ \rightmargin\leftmargin
+ \parsep\z@ \@plus\p@
+ }
+ \item\relax
+}{\endlist}
+
+% \end{macrocode}
+% \DescribeEnv{quote}\index{Окружения!\verb*+quote+}
+% \subsubsection{Выдержка}
+% \begin{macrocode}
+\newenvironment{quote}{
+ \list{}{\rightmargin\leftmargin}
+ \item\relax
+}{\endlist}
+
+% \end{macrocode}
+% \DescribeEnv{titlepage}\index{Окружения!\verb*+titlepage+}
+% \subsubsection{Титульный лист}
+% \begin{macrocode}
+\newenvironment{titlepage}{
+ \if@twocolumn
+ \@restonecoltrue\onecolumn
+ \else
+ \@restonecolfalse\newpage
+ \fi
+ \thispagestyle{empty}
+ \setcounter{page}\@ne
+}{
+ \if@restonecol\twocolumn\else\newpage\fi
+ \if@twoside\else\setcounter{page}\@ne\fi
+}
+
+% \end{macrocode}
+%
+% \DescribeEnv{figure}\index{Окружения!\verb*+figure+}
+% \DescribeEnv{figure*}\index{Окружения!\verb*+figure*+}
+% \subsubsection{Рисунок}
+% \begin{macrocode}
+\newenvironment{figure}{\@float{figure}}{\end@float}
+\newenvironment{figure*}{\@dblfloat{figure}}{\end@dblfloat}
+% \end{macrocode}
+%
+% \DescribeEnv{table}\index{Окружения!\verb*+table+}
+% \DescribeEnv{table*}\index{Окружения!\verb*+table*+}
+% \subsubsection{Таблица}
+% \begin{macrocode}
+\newenvironment{table}{\@float{table}}{\end@float}
+\newenvironment{table*}{\@dblfloat{table}}{\end@dblfloat}
+% \end{macrocode}
+%
+% \subsubsection{Генератор окружений типа <<теорема>>}
+%
+% \DescribeMacro{\newtheorem}\index{Макросы!\verb*+\newtheorem+}
+% Переопределяем |\newtheorem| так, чтобы автоматически создавались
+% параметры формата теорем.
+% \begin{macrocode}
+
+\def\newtheorem#1{%
+% \end{macrocode}
+% \DescribeMacro{\theoremstyle}\index{Макросы!\verb*+\theoremstyle+}
+% \DescribeMacro{\thetheoremstyle}\index{Макросы!\verb*+\thetheoremstyle+}
+% \DescribeMacro{\postthetheorem}\index{Макросы!\verb*+\postthetheorem+}
+% \DescribeMacro{\opargtheorem}\index{Макросы!\verb*+\opargtheorem+}
+% \DescribeMacro{\preopargtheorem}\index{Макросы!\verb*+\preopargtheorem+}
+% \DescribeMacro{\postopargtheorem}\index{Макросы!\verb*+\postopargtheorem+}
+% \begin{macrocode}
+ {
+% \end{macrocode}
+% Стиль текста теоремы.
+% \begin{macrocode}
+ \global\@namedef{#1style}{\itshape}
+% \end{macrocode}
+% Стиль заголовка и номера теоремы.
+% \begin{macrocode}
+ \global\@namedef{the#1style}{\bfseries}
+% \end{macrocode}
+% Символ после номера.
+% \begin{macrocode}
+ \global\@namedef{postthe#1}{.}
+% \end{macrocode}
+% Стиль опционального аргумента (текста в скобках после заголовка и номера).
+% \begin{macrocode}
+ \global\@namedef{oparg#1style}{\upshape}
+% \end{macrocode}
+% Символы, окружающие опциональный аргумент (по умолчанию --- круглые скобки).
+% \begin{macrocode}
+ \global\@namedef{preoparg#1}{(}
+ \global\@namedef{postoparg#1}{)}
+ }
+ \@ifnextchar[{\@othm{#1}}{\@nthm{#1}}%
+}
+
+% \end{macrocode}
+% У команд |\@begintheorem| и |\@opargbegintheorem| изменены аргументы,
+% чтобы можно было использовать обобщенное форматирование.
+% \DescribeMacro{\@xthm}\index{Макросы!\verb*+"\"@xthm+}
+% \DescribeMacro{\@ythm}\index{Макросы!\verb*+"\"@ythm+}
+% \DescribeMacro{\@begintheorem}\index{Макросы!\verb*+"\"@begintheorem+}
+% \DescribeMacro{\@opargbegintheorem}\index{Макросы!\verb*+"\"@opargbegintheorem+}
+% \DescribeMacro{\@endtheorem}\index{Макросы!\verb*+"\"@endtheorem+}
+% \begin{macrocode}
+\def\@xthm#1#2{%
+ \@begintheorem{#1}{#2}\ignorespaces}
+\def\@ythm#1#2[#3]{%
+ \@opargbegintheorem{#1}{#2}{#3}\ignorespaces}
+
+\def\@begintheorem#1#2{\trivlist
+ \item[\hskip\labelsep%
+ {\csname the#1style\endcsname #2\ %
+ \csname the#1\endcsname\unskip\csname postthe#1\endcsname}]%
+ \csname #1style\endcsname%
+}
+
+\def\@opargbegintheorem#1#2#3{\trivlist
+ \item[\hskip\labelsep%
+ {\csname the#1style\endcsname #2\ \csname the#1\endcsname}\ %
+ {\csname oparg#1style\endcsname%
+ \csname preoparg#1\endcsname #3%
+ \csname postoparg#1\endcsname}]%
+ \csname #1style\endcsname%
+}
+
+\def\@endtheorem{\endtrivlist}
+
+%</env>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/floats.dtx b/macros/latex/contrib/disser/src/floats.dtx
new file mode 100644
index 0000000000..0fff4ca0b1
--- /dev/null
+++ b/macros/latex/contrib/disser/src/floats.dtx
@@ -0,0 +1,229 @@
+
+% \iffalse
+%%% From File: floats.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*floats>
+% \end{macrocode}
+%
+% \subsection{Плавающие объекты}
+% \subsubsection{Параметры размещения плавающих объектов на странице}
+% \paragraph{Количество объектов}
+% \begin{itemize}
+% \item Максимальное количество плавающих объектов, размещаемое вверху
+% страницы (при двухколонном наборе --- вверху колонки).
+% \DescribeCounter{topnumber}
+% \begin{macrocode}
+\setcounter{topnumber}{2}
+% \end{macrocode}
+% \item Максимальное количество плавающих объектов, размещаемое внизу
+% страницы (при двухколонном наборе --- внизу колонки).
+% \DescribeCounter{bottomnumber}
+% \begin{macrocode}
+\setcounter{bottomnumber}{1}
+% \end{macrocode}
+% \item Максимальное количество плавающих объектов, размещаемое
+% на странице (при двухколонном наборе --- в колонке).
+% \DescribeCounter{totalnumber}
+% \begin{macrocode}
+\setcounter{totalnumber}{3}
+% \end{macrocode}
+% \item При наборе в две колонки: максимальное количество плавающих
+% объектов шириной во всю страницу, которое разрешается разместить вверху
+% страницы
+% \begin{macrocode}
+\setcounter{dbltopnumber}{2}
+% \end{macrocode}
+% \end{itemize}
+%
+% \paragraph{Величина места, занимаемого плавающими объектами}
+% \begin{itemize}
+% \item Максимальная доля страницы по высоте, которую могут занимать
+% плавающие объекты, размещаемые вверху страницы.
+% \DescribeMacro{\topfraction}\index{Макросы!\verb*+\topfraction+}
+% \begin{macrocode}
+\renewcommand\topfraction{.7}
+% \end{macrocode}
+% \item Максимальная доля страницы по высоте, которую могут занимать
+% плавающие объекты, размещаемые внизу страницы.
+% \DescribeMacro{\bottomfraction}\index{Макросы!\verb*+\bottomfraction+}
+% \begin{macrocode}
+\renewcommand\bottomfraction{.3}
+% \end{macrocode}
+% \item Минимальная доля страницы, которую должен занимать текст, а не
+% плавающие объекты на обычной странице (к страницам, создаваемым
+% \LaTeX{}'ом
+% специально для размещения плавающих объектов при обработке
+% необязательного аргумента |p|, это не относится).
+% \DescribeMacro{\textfraction}\index{Макросы!\verb*+\textfraction+}
+% \begin{macrocode}
+\renewcommand\textfraction{.2}
+% \end{macrocode}
+% \item Параметр, аналогичный предыдущему, относящийся к страницам для
+% плавающих объектов.
+% \DescribeMacro{\floatpagefraction}\index{Макросы!\verb*+\floatpagefraction+}
+% \begin{macrocode}
+\renewcommand\floatpagefraction{.5}
+% \end{macrocode}
+% \item Тоже, что |\topfraction|, применительно к иллюстрациям (таблицам)
+% шириной в целую страницу при двухколонном наборе.
+% \DescribeMacro{\dbltopfraction}\index{Макросы!\verb*+\dbltopfraction+}
+% \begin{macrocode}
+\renewcommand\dbltopfraction{.7}
+% \end{macrocode}
+% \item Тоже, что |\floatpagefraction|, применительно к иллюстрациям
+% (таблицам) шириной в целую страницу при двухколонном наборе.
+% \DescribeMacro{\dblfloatpagefraction}\index{Макросы!\verb*+\dblfloatpagefraction+}
+% \begin{macrocode}
+\renewcommand\dblfloatpagefraction{.5}
+% \end{macrocode}
+% \end{itemize}
+%
+% \subsubsection{Параметры формата подписей}
+%
+% \DescribeMacro{\abovecaptionskip}\index{Интервалы!\verb*+\abovecaptionskip+}
+% Вертикальный интервал перед подписью.
+% \begin{macrocode}
+\Dis@deflength\abovecaptionskip{10\p@}
+% \end{macrocode}
+% \DescribeMacro{\belowcaptionskip}\index{Интервалы!\verb*+\belowcaptionskip+}
+% Вертикальный интервал за подписью.
+% \begin{macrocode}
+\Dis@deflength\belowcaptionskip{0\p@}
+% \end{macrocode}
+% \DescribeMacro{\captionlabeldelim}\index{Макросы!\verb*+\captionlabeldelim+}
+% Разделитель метки (постоянная часть + номер) и текста подписи.
+% \begin{macrocode}
+\newcommand\captionlabeldelim{.}
+% \end{macrocode}
+% \DescribeMacro{\captionfont}\index{Макросы!\verb*+\captionfont+}
+% Шрифт подписи.
+% \begin{macrocode}
+\newcommand\captionfont{\small}
+% \end{macrocode}
+% \DescribeMacro{\captionlabelfont}\index{Макросы!\verb*+\captionlabelfont+}
+% Шрифт метки.
+% \begin{macrocode}
+\newcommand\captionlabelfont{\small\selectfont}
+% \end{macrocode}
+% \DescribeMacro{\@makecaption}\index{Макросы!\verb+"\"@makecaption+}
+% Низкоуровневая команда, создающая подпись.
+% \begin{macrocode}
+\long\def\@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{{\captionlabelfont #1\captionlabeldelim} {\captionfont #2}}%
+ \ifdim \wd\@tempboxa >\hsize
+ {{\captionlabelfont #1\captionlabeldelim} {\captionfont #2}}\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip
+}
+
+% \end{macrocode}
+%
+% \subsubsection{figure}
+%
+% \DescribeMacro{\thefigure}\index{Макросы!\verb*+\thefigure+}
+% Формат номера.
+% \begin{macrocode}
+\renewcommand\thefigure{\ifnum \c@chapter>\z@\thechapter.\fi\@arabic\c@figure}
+
+% \end{macrocode}
+% \DescribeMacro{\fps@figure}
+% Дескриптор положения плавающих объектов типа |figure|.
+% \begin{macrocode}
+\def\fps@figure{tbp}
+% \end{macrocode}
+% \DescribeMacro{\ftype@figure}
+% Номер типа плавающего объекта |figure|.
+% \begin{macrocode}
+\def\ftype@figure{1}
+% \end{macrocode}
+% \DescribeMacro{\ext@figure}
+% Расширение файла со списком иллюстраций.
+% \begin{macrocode}
+\def\ext@figure{lof}
+% \end{macrocode}
+% \DescribeMacro{\fnum@figure}
+% Формат заголовка подписи (Рис.~1).
+% \begin{macrocode}
+\def\fnum@figure{\figurename~\thefigure}
+
+% \end{macrocode}
+%
+% \subsubsection{table}
+%
+% \DescribeMacro{\thetable}\index{Макросы!\verb*+\thetable+}
+% Формат номера.
+% \begin{macrocode}
+\renewcommand\thetable{\ifnum \c@chapter>\z@\thechapter.\fi\@arabic\c@table}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\arraycolsep}\index{Интервалы!\verb*+\arraycolsep+}
+% Промежуток между колонками в |array|.
+% \begin{macrocode}
+\setlength\arraycolsep{5\p@}
+% \end{macrocode}
+% \DescribeMacro{\tabcolsep}\index{Интервалы!\verb*+\tabcolsep+}
+% Промежуток между колонками в таблице.
+% \begin{macrocode}
+\setlength\tabcolsep{6\p@}
+% \end{macrocode}
+% \DescribeMacro{\arrayrulewidth}\index{Интервалы!\verb*+\arrayrulewidth+}
+% Толщина линейки в |array|.
+% \begin{macrocode}
+\setlength\arrayrulewidth{.4\p@}
+% \end{macrocode}
+% \DescribeMacro{\doublerulesep}\index{Интервалы!\verb*+\doublerulesep+}
+% Промежуток между линиями в двойной линейке |\hrule\hrule|.
+% \begin{macrocode}
+\setlength\doublerulesep{2\p@}
+% \end{macrocode}
+% \DescribeMacro{\tabbingsep}\index{Интервалы!\verb*+\tabbingsep+}
+% Промежуток между столбцами в окружении |tabular|.
+% \begin{macrocode}
+\setlength\tabbingsep{\labelsep}
+% \end{macrocode}
+% Промежуток, добавляемый при наличии сноски при использовании окружения
+% |minipage|.
+% \begin{macrocode}
+\skip\@mpfootins = \skip\footins
+% \end{macrocode}
+% \DescribeMacro{\fboxsep}\index{Интервалы!\verb*+\fboxsep+}
+% Промежуток между линией и текстом в |\fbox|.
+% \begin{macrocode}
+\setlength\fboxsep{3\p@}
+% \end{macrocode}
+% \DescribeMacro{\fboxrule}\index{Интервалы!\verb*+\fboxrule+}
+% Толщина линии для |\fbox|.
+% \begin{macrocode}
+\setlength\fboxrule{.4\p@}
+
+% \end{macrocode}
+% \DescribeMacro{\fps@table}
+% Описатель положения плавающих объектов типа |table|.
+% \begin{macrocode}
+\def\fps@table{tbp}
+% \end{macrocode}
+% \DescribeMacro{\ftype@table}
+% Номер типа, ассоциированный с |figure|.
+% \begin{macrocode}
+\def\ftype@table{2}
+% \end{macrocode}
+% \DescribeMacro{\ext@table}
+% Расширение файла, содержащего сгенерированный список таблиц.
+% \begin{macrocode}
+\def\ext@table{lot}
+% \end{macrocode}
+% \DescribeMacro{\fnum@table}
+% Формат заголовка подписи (Таблица~1).
+% \begin{macrocode}
+\def\fnum@table{\tablename~\thetable}
+
+%</floats>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/footnote.dtx b/macros/latex/contrib/disser/src/footnote.dtx
new file mode 100644
index 0000000000..838e06b769
--- /dev/null
+++ b/macros/latex/contrib/disser/src/footnote.dtx
@@ -0,0 +1,65 @@
+
+% \iffalse
+%%% From File: footnote.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*footnote>
+% \end{macrocode}
+%
+% \subsection{Сноска}
+%
+% \end{macrocode}
+% \DescribeMacro{\thefootnote}\index{Макросы!\verb+\thefootnote+}
+% Формат счетчика сносок.
+% \begin{macrocode}
+\def\thefootnote{\@arabic\c@footnote}
+
+% \end{macrocode}
+% \DescribeMacro{\thempfootnote}\index{Макросы!\verb+\thempfootnote+}
+% Формат счетчика сносок внутри окружения |minipage|.
+% \begin{macrocode}
+\def\thempfootnote{{\itshape\@alph\c@mpfootnote}}
+
+% \end{macrocode}
+% \DescribeMacro{\footnoterule}\index{Макросы!\verb+\footnoterule+}
+% Команда, рисующая линию.
+% \begin{macrocode}
+\def\footnoterule{%
+ \kern-3\p@\hrule\@width.4\columnwidth\kern2.6\p@
+}
+
+% \end{macrocode}
+% \DescribeMacro{\prethefootnote}\index{Макросы!\verb+\prethefootnote+}
+% \DescribeMacro{\postthefootnote}\index{Макросы!\verb+\postthefootnote+}
+% \DescribeMacro{\prefootnotetext}\index{Макросы!\verb+\prefootnotetext+}
+% Дополнительный текст до и после номера сноски, перед текстом сноски.
+% \begin{macrocode}
+\providecommand\prethefootnote{}
+\providecommand\postthefootnote{}
+\providecommand\prefootnote{\;}
+% \end{macrocode}
+% \DescribeMacro{\footnoteindent}\index{Интервалы!\verb+\footnoteindent+}
+% \begin{macrocode}
+\Dis@deflength{\footnoteindent}{\parindent}
+
+% \end{macrocode}
+% \DescribeMacro{\@makefnmark}\index{Макросы!\verb+\@makefnmark+}
+% Формат метки сноски.
+% \begin{macrocode}
+\def\@makefnmark{\hbox{\prethefootnote%
+\@textsuperscript{\normalfont\@thefnmark}%
+\postthefootnote}}
+
+% \end{macrocode}
+% \DescribeMacro{\@makefntext}\index{Макросы!\verb+\@makefntext+}
+% Команда, создающая текст сноски.
+% \begin{macrocode}
+\newcommand\@makefntext[1]{%
+ \noindent\hspace{\footnoteindent}%
+ \@makefnmark\prefootnote #1
+}
+
+%</footnote>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/gost732.dtx b/macros/latex/contrib/disser/src/gost732.dtx
new file mode 100644
index 0000000000..1d29304f00
--- /dev/null
+++ b/macros/latex/contrib/disser/src/gost732.dtx
@@ -0,0 +1,338 @@
+% \iffalse meta-comment
+%
+% gost732 -- GOST 7.32-2001 implementation.
+%
+% Copyright (c) Stanislav Kruchinin
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3c of this license or (at your option) any later
+% version. This version of this license is in
+% http://www.latex-project.org/lppl/lppl-1-3c.txt
+% and the latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of
+% LaTeX version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status "maintained".
+%
+% Current Maintainer of this work is Stanislav Kruchinin.
+%
+% This work consists of the main source file gost732.dtx
+% and the derived files
+% gost732.cls, gost732.pdf.
+%
+% Distribution:
+% CTAN:macros/latex/contrib/disser/src/gost732.dtx
+%
+% Unpacking:
+% (a) If disser.ins present:
+% latex disser.ins
+% (b) Without disser.ins:
+% tex gost732.dtx
+%
+% Documentation:
+% latex gost732.dtx; ...
+%
+% Programm calls to get the documentation (example):
+% pdflatex gost732.dtx
+% makeindex -r -s dtx.ist gost732
+% pdflatex gost732.dtx
+% pdflatex gost732.dtx
+%
+% Installation:
+% TDS:tex/latex/disser/
+% TDS:doc/latex/disser/
+% TDS:source/latex/disser/
+%
+%<*ignore>
+\begingroup
+ \catcode123=1 %
+ \catcode125=2 %
+ \def\x{LaTeX2e}%
+\expandafter\endgroup
+\ifcase 0\ifx\install y1\fi\expandafter
+ \ifx\csname processbatchFile\endcsname\relax\else1\fi
+ \ifx\fmtname\x\else 1\fi\relax
+\else\csname fi\endcsname
+%</ignore>
+%<*install>
+\input docstrip.tex
+\Msg{************************************************************************}
+\Msg{* Installation}
+\Msg{* gost732: GOST 7.32-2001 implementation}
+\Msg{************************************************************************}
+
+\keepsilent
+\askforoverwritefalse
+
+\let\MetaPrefix\relax
+\preamble
+
+This is a generated file.
+
+This document class attempts to format LaTeX document according to
+GOST 7.32-2001.
+
+Copyright (C) Stanislav Kruchinin
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3c of this license or (at your option) any later
+version. This version of this license is in
+ http://www.latex-project.org/lppl/lppl-1-3c.txt
+and the latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of
+LaTeX version 2005/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+Current Maintainer of this work is Stanislav Kruchinin.
+
+This work consists of the main source file gost732.dtx
+and the derived files
+ gost732.cls gost732.pdf.
+
+\endpreamble
+\let\MetaPrefix\DoubleperCent
+
+\generate{%
+ \usedir{tex/latex/disser}%
+ \file{gost732.cls}{\from{gost732.dtx}{gost732}}%
+}
+
+\catcode32=13\relax% active space
+\let =\space%
+\Msg{************************************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* file into a directory searched by TeX:}
+\Msg{*}
+\Msg{* gost732.cls}
+\Msg{*}
+\Msg{* To produce the documentation run the file `gost732.dtx'}
+\Msg{* through LaTeX or pdfLaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing!}
+\Msg{*}
+\Msg{************************************************************************}
+
+\endbatchfile
+%</install>
+%<*ignore>
+\fi
+%</ignore>
+%<*driver>
+\ProvidesFile{gost732.drv}[2017/03/03 1.5.0 GOST 7.32-2001 implementation]
+
+\documentclass{ltxdoc}
+\usepackage[a4paper,includeheadfoot,nohead,mag=1000,
+ left=5cm,right=1cm,top=1.5cm,bottom=1.5cm]{geometry}
+\usepackage{ifpdf,indentfirst,color}
+
+\definecolor{darkblue}{rgb}{0,0,.6}
+\ifpdf
+ \usepackage[pdftex,hyperindex,unicode]{hyperref}
+ \usepackage{cmap}
+\else
+ \usepackage[hypertex]{hyperref}
+\fi
+
+\hypersetup{
+ pdftitle = {Documented source code of gost732 class},
+ pdfauthor = {Stanislav Kruchinin},
+ pdfsubject = {disser},
+ pdfstartview = {FitH},
+ pdfborder = {0 0 0},
+ bookmarksopen = true,
+ bookmarksnumbered = true,
+ bookmarksopenlevel = 2,
+ colorlinks = true, linkcolor = darkblue,
+ citecolor = darkblue, filecolor = darkblue,
+ menucolor = darkblue, urlcolor = darkblue
+}
+
+\IfFileExists{url.sty}{\RequirePackage{url}}{\newcommand\url{\texttt}}
+
+\usepackage[T2A]{fontenc}
+\usepackage[cp1251]{inputenc}
+\usepackage[english,russian]{babel}
+
+\MakeShortVerb{\|}
+
+\def\file#1{\texttt{#1}}
+\def\pkg#1{\textsf{#1}}
+\def\cmd#1{\texttt{#1}}
+
+\setlength\hfuzz{20pt}
+\hbadness=10000
+
+\GetFileInfo{gost732.drv}
+\begin{document}
+ \sloppy
+ \DocInput{gost732.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \title{\pkg{gost732} --- класс для оформления документов в соответствии
+% с ГОСТ 7.32-2001}
+% \date{Версия \fileversion\\[6pt]\filedate}
+% \author{Станислав Кручинин\\[6pt]
+% \normalsize E-mail:
+% \href{mailto:stanislav.kruchinin@gmail.com}
+% {\texttt{stanislav.kruchinin@gmail.com}}}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+% \section{Исходный текст}\parindent=0pt
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesClass{gost732}[2016/07/03 1.4.0 GOST 7.32-2001 implementation]
+
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{disser}}
+\ProcessOptions\relax
+\LoadClass[a4paper,14pt]{disser}
+
+% \end{macrocode}
+%
+% \subsection{Формат заголовков}
+%
+% \begin{macrocode}
+\renewcommand\tocprethechapter{}
+\renewcommand\tocpostthechapter{\@postskip}
+\renewcommand\chapteralign{\centering}
+\renewcommand\thechapterfont{\Large\bfseries}
+\renewcommand\prethechapter{}
+\renewcommand\postthechapter{\@postskip}
+\renewcommand\afterchapter{\vskip 16\p@}
+
+\renewcommand\postthesection{\@postskip}
+\renewcommand\tocpostthesection{\@postskip}
+\renewcommand\sectionindent{1cm}
+
+\renewcommand\postthesubsection{\@postskip}
+\renewcommand\tocpostthesubsection{\@postskip}
+\renewcommand\subsectionindent{1cm}
+
+\renewcommand\postthesubsubsection{\@postskip}
+\renewcommand\tocpostthesubsubsection{\@postskip}
+\renewcommand\subsubsectionindent{1cm}
+
+\renewcommand\posttheparagraph{\@postskip}
+\renewcommand\tocposttheparagraph{\@postskip}
+
+\renewcommand\postthesubparagraph{\@postskip}
+\renewcommand\tocpostthesubparagraph{\@postskip}
+
+% \end{macrocode}
+% Изменение стандартных заголовков.
+% \begin{macrocode}
+\AtBeginDocument{\addto\captionsrussian{%
+\def\bibname{\cyr\CYRS\CYRP\CYRI\CYRS\CYRO\CYRK\ %
+\CYRI\CYRS\CYRP\CYRO\CYRL\CYRSFTSN\CYRZ\CYRO\CYRV\CYRA\CYRN\CYRN\CYRERY\CYRH\ %
+\CYRI\CYRS\CYRT\CYRO\CYRCH\CYRN\CYRI\CYRK\CYRO\CYRV}
+\def\figurename{\cyr\CYRR\cyri\cyrs\cyru\cyrn\cyro\cyrk}
+\def\appendixname{\cyr\CYRP\CYRR\CYRI\CYRL\CYRO\CYRZH\CYRE\CYRN\CYRI\CYRE}
+\def\contentsname{\cyr\CYRS\CYRO\CYRD\CYRE\CYRR\CYRZH\CYRA\CYRN\CYRI\CYRE}
+\def\listfigurename{\cyr\CYRS\CYRP\CYRI\CYRS\CYRO\CYRK\ %
+\CYRI\CYRL\CYRL\CYRYU\CYRS\CYRT\CYRR\CYRA\CYRC\CYRI\CYRISHRT}
+\def\listtablename{\cyr\CYRS\CYRP\CYRI\CYRS\CYRO\CYRK\ %
+\CYRT\CYRA\CYRB\CYRL\CYRI\CYRC}
+}}
+
+% \end{macrocode}
+% Обозначения и сокращения.
+% \begin{macrocode}
+\renewcommand\defsname{%
+\cyr\CYRO\CYRB\CYRO\CYRZ\CYRN\CYRA\CYRCH\CYRE\CYRN\CYRI\CYRYA\ %
+\CYRI\ \CYRS\CYRO\CYRK\CYRR\CYRA\CYRSHCH\CYRE\CYRN\CYRI\CYRYA
+}
+
+\def\nomname{\defsname}
+
+\renewcommand\defs{%
+ \nchapter{\defsname}
+}
+\renewcommand\bibsection{%
+ \nchapter{\bibname}
+}
+\renewcommand\introname{%
+\cyr\CYRV\CYRV\CYRE\CYRD\CYRE\CYRN\CYRI\CYRE
+}
+\renewcommand\reviewname{%
+\cyr\CYRO\CYRB\CYRZ\CYRO\CYRR\ %
+\CYRL\CYRI\CYRT\CYRE\CYRR\CYRA\CYRT\CYRU\CYRR\CYRERY
+}
+\renewcommand\conclusionname{%
+\cyr\CYRZ\CYRA\CYRK\CYRL\CYRYU\CYRCH\CYRE\CYRN\CYRI\CYRE
+}
+% \end{macrocode}
+% \subsection{Списки}
+% \subsubsection{Нумерованный список}
+%
+% Формат счетчиков.
+% \begin{macrocode}
+\renewcommand\theenumi {\asbuk{enumi}}
+\renewcommand\theenumii {\arabic{enumii}}
+\renewcommand\theenumiii{\roman{enumiii}}
+\renewcommand\theenumiv {\Asbuk{enumiv}}
+
+% \end{macrocode}
+%
+% Формат меток.
+% \begin{macrocode}
+\renewcommand\labelenumi {\theenumi)}
+\renewcommand\labelenumii {\theenumii)}
+\renewcommand\labelenumiii{\theenumiii)}
+\renewcommand\labelenumiv {\theenumiv)}
+
+% \end{macrocode}
+% Ссылочные префиксы.
+% \begin{macrocode}
+\renewcommand\p@enumii {\theenumi}
+\renewcommand\p@enumiii {\theenumi.\theenumii}
+\renewcommand\p@enumiv {\p@enumiii.\theenumiii}
+
+% \end{macrocode}
+%
+% \subsubsection{Маркированный список}
+%
+% Формат меток.
+% \begin{macrocode}
+\renewcommand\labelitemi {\normalfont\bfseries \textendash}
+\renewcommand\labelitemii {\textbullet}
+\renewcommand\labelitemiii{\textasteriskcentered}
+\renewcommand\labelitemiv {\textperiodcentered}
+
+% \end{macrocode}
+%
+% \subsection{Подписи к плавающим объектам}
+% \begin{macrocode}
+\captionsetup{format=plain,justification=centering,labelsep=endash}
+\captionsetup[longtable]{justification=raggedright,singlelinecheck=false}
+\captionsetup[table]{justification=raggedright,singlelinecheck=false}
+
+% \end{macrocode}
+% \subsection{Цитирование}
+% Точка с запятой в качестве разделителя номеров цитируемой литературы.
+% \begin{macrocode}
+\setcitestyle{semicolon}
+
+% \end{macrocode}
+%
+% \subsection{Сноска}
+%
+% \begin{macrocode}
+\renewcommand\postthefootnote{$^)$}
+
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/disser/src/lists.dtx b/macros/latex/contrib/disser/src/lists.dtx
new file mode 100644
index 0000000000..ec84f5ff5d
--- /dev/null
+++ b/macros/latex/contrib/disser/src/lists.dtx
@@ -0,0 +1,108 @@
+
+% \iffalse
+%%% From File: lists.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*lists>
+% \end{macrocode}
+%
+% \subsection{Списки}
+%
+% \DescribeMacro{\leftmargini}\index{Интервалы!\verb*+\leftmargini+}
+% \DescribeMacro{\leftmarginii}\index{Интервалы!\verb*+\leftmarginii+}
+% \DescribeMacro{\leftmarginiii}\index{Интервалы!\verb*+\leftmarginiii+}
+% \DescribeMacro{\leftmarginiv}\index{Интервалы!\verb*+\leftmarginiv+}
+% \DescribeMacro{\leftmarginv}\index{Интервалы!\verb*+\leftmarginv+}
+% \DescribeMacro{\leftmarginvi}\index{Интервалы!\verb*+\leftmarginvi+}
+%
+% Величины отступов от левого поля окружения до поля перечня для элементов
+% указанного уровня вложенности.
+% \paragraph{1}
+% \begin{macrocode}
+\if@twocolumn
+ \setlength\leftmargini {2em}
+\else
+ \setlength\leftmargini {2.5em}
+\fi
+\leftmargin \leftmargini
+% \end{macrocode}
+% \paragraph{2}
+% \begin{macrocode}
+\setlength\leftmarginii {2.2em}
+% \end{macrocode}
+% \paragraph{3}
+% \begin{macrocode}
+\setlength\leftmarginiii {1.87em}
+% \end{macrocode}
+% \paragraph{4}
+% \begin{macrocode}
+\setlength\leftmarginiv {1.7em}
+% \end{macrocode}
+% \paragraph{5 и 6}
+% \begin{macrocode}
+\if@twocolumn
+ \setlength\leftmarginv {.5em}
+ \setlength\leftmarginvi {.5em}
+\else
+ \setlength\leftmarginv {1em}
+ \setlength\leftmarginvi {1em}
+\fi
+% \end{macrocode}
+% Пробел между концом бокса метки и текстом первого элемента
+% \begin{macrocode}
+\setlength\labelsep{.5em}
+% \end{macrocode}
+% Номинальная ширина бокса, содержащего метку.
+% \begin{macrocode}
+\setlength\labelwidth{\leftmargini}
+\addtolength\labelwidth{-\labelsep}
+\@beginparpenalty -\@lowpenalty
+\@endparpenalty -\@lowpenalty
+\@itempenalty -\@lowpenalty
+
+% \end{macrocode}
+%
+% \subsubsection{Нумерованный список}
+%
+% Формат счетчиков.
+% \begin{macrocode}
+\renewcommand\theenumi {\arabic{enumi}}
+\renewcommand\theenumii {\asbuk{enumii}}
+\renewcommand\theenumiii{\roman{enumiii}}
+\renewcommand\theenumiv {\Asbuk{enumiv}}
+% \end{macrocode}
+%
+% \DescribeMacro{\labelenumi}\index{Макросы!\verb*+\labelenumi+}
+% \DescribeMacro{\labelenumii}\index{Макросы!\verb*+\labelenumii+}
+% \DescribeMacro{\labelenumiii}\index{Макросы!\verb*+\labelenumiii+}
+% \DescribeMacro{\labelenumiv}\index{Макросы!\verb*+\labelenumiv+}
+% Формат меток.
+% \begin{macrocode}
+\newcommand\labelenumi {\theenumi.}
+\newcommand\labelenumii {\theenumii.}
+\newcommand\labelenumiii{\theenumiii.}
+\newcommand\labelenumiv {\theenumiv.}
+% \end{macrocode}
+% Ссылочные префиксы.
+% \begin{macrocode}
+\renewcommand\p@enumii {\theenumi}
+\renewcommand\p@enumiii {\theenumi.\theenumii}
+\renewcommand\p@enumiv {\p@enumiii.\theenumiii}
+% \end{macrocode}
+%
+% \subsubsection{Маркированный список}
+%
+% \DescribeMacro{\labelitemi}\index{Макросы!\verb*+\labelitemi+}
+% \DescribeMacro{\labelitemii}\index{Макросы!\verb*+\labelitemii+}
+% \DescribeMacro{\labelitemiii}\index{Макросы!\verb*+\labelitemiii+}
+% \DescribeMacro{\labelitemiv}\index{Макросы!\verb*+\labelitemiv+}
+% Формат меток.
+% \begin{macrocode}
+\newcommand\labelitemi {\textbullet}
+\newcommand\labelitemii {\normalfont\bfseries \textendash}
+\newcommand\labelitemiii{\textasteriskcentered}
+\newcommand\labelitemiv {\textperiodcentered}
+%</lists>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/manual.tex b/macros/latex/contrib/disser/src/manual.tex
new file mode 100644
index 0000000000..4ec792172b
--- /dev/null
+++ b/macros/latex/contrib/disser/src/manual.tex
@@ -0,0 +1,500 @@
+\documentclass[a4paper,10pt]{article}
+\usepackage[a4paper,includehead,includefoot,mag=1000,
+ left=3cm,right=2cm,top=1cm,bottom=2cm]{geometry}
+\usepackage{doc,ifpdf,indentfirst,ltxtable,color}
+\definecolor{darkblue}{rgb}{0,0,.6}
+
+\ifpdf
+ \usepackage[pdftex,hyperindex,unicode]{hyperref}
+ \usepackage{cmap}
+\else
+ \usepackage[hypertex]{hyperref}
+\fi
+
+\hypersetup{
+ pdftitle = {User manual for disser package},
+ pdfauthor = {Stanislav Kruchinin},
+ pdfsubject = {disser},
+ pdfstartview = {FitH},
+ pdfborder = {0 0 0},
+ bookmarksopen = true,
+ bookmarksnumbered = true,
+ bookmarksopenlevel = 2,
+ colorlinks = true, linkcolor = darkblue,
+ citecolor = darkblue, filecolor = darkblue,
+ menucolor = darkblue, urlcolor = darkblue
+}
+
+\usepackage[T2A]{fontenc}
+\usepackage[cp1251]{inputenc}
+\usepackage[english,russian]{babel}
+
+\MakeShortVerb{\|}
+
+\def\file#1{\texttt{#1}}
+\def\pkg#1{\textsf{#1}}
+\def\cmd#1{\texttt{#1}}
+
+\def\deflabel#1{\ttfamily #1\hfill}
+\newenvironment{deflist}[1]{%
+ \begin{list}{}{%
+ \settowidth\labelwidth{\ttfamily #1}%
+ \setlength\leftmargin\labelwidth
+ \addtolength\leftmargin\labelsep
+ \let\makelabel\deflabel}
+}{\end{list}}
+
+\def\fileversion{1.5.0}
+\sloppy
+
+\begin{document}
+\title{Пакет \pkg{disser}: руководство пользователя}
+\date{Версия \fileversion}
+\author{Станислав Кручинин\\[6pt]
+\normalsize E-mail:
+\href{mailto:stanislav.kruchinin@gmail.com}
+{\texttt{stanislav.kruchinin@gmail.com}}}
+
+\maketitle
+
+\begin{abstract}\noindent
+Данный документ содержит руководство по использованию пакета \pkg{disser}.
+Инструкции по установке и обновлению смотрите в файлах \file{README} и \file{README.ru}.
+Описание исходных текстов содержится в файлах \href{file:disser.pdf}{\file{disser.pdf}}, \href{file:gost732.pdf}{\file{gost732.pdf}}.
+\end{abstract}
+
+\tableofcontents
+
+\section{Введение}
+
+Пакет \pkg{disser} предназначен для верстки диссертаций и авторефератов в соответствии с требованиями ГОСТ~7.0.11--2011 и ВАК.
+В состав пакета входят классы \file{disser.cls} и \file{gost732.cls}, а также скрипты для сборки пакета и документов (\file{Makefile}, \file{nomake.cmd}, файлы с расширениями \file{mk} и \file{cmd} в каталоге \file{include}).
+Поскольку дипломы и диссертации имеют фиксированную структуру, в пакет также включены их шаблоны (каталог \file{templates}), которые рекомендуется использовать для создания своих документов.
+
+Одной из основных целей создания пакета~\pkg{disser} являлось устранение общего недостатка стандартных классов: отсутствия возможности настройки формата элементов титульного листа, заголовков и записей в автоматически генерируемых списках.
+Для достижения этой цели была переопределена значительная часть команд, входящих в ядро \LaTeX{}, и введен ряд новых переменных, которые описаны в комментариях к исходным текстам.
+Это позволило значительно упростить разработку пользовательских классов на базе~\pkg{disser}, которые удовлетворяют специфическим требованиями учебных заведений и диссертационных советов.
+Примером реализации данного подхода является~\pkg{gost732}, предназначенный для верстки отчетов о НИР в соответствии с ГОСТ~7.32-2001.
+
+\section{Соответствие стандартам}
+
+Пакет позволяет создавать документы, удовлетворяющие следующим стандартам:
+\begin{itemize}
+\item \href{http://protect.gost.ru/document.aspx?control=8&id=171831}{ГОСТ Р 7.0.11--2011 <<Диссертация и автореферат диссертации. Структура и правила оформления>>};
+\item \href{http://protect.gost.ru/document.aspx?control=7&id=130946}{ГОСТ 7.32--2001 <<Отчет о научно-исследовательской работе. Структура и правила оформления>>};
+\item \href{http://protect.gost.ru/document.aspx?control=7&id=128845}{ГОСТ Р 7.0.4--2006 <<Издания. Выходные сведения. Общие требования и правила оформления>>};
+\item \href{http://protect.gost.ru/document.aspx?control=7&id=173511}{ГОСТ Р 7.0.5--2008 <<Библиографическая ссылка. Общие требования и правила составления>>}.
+\end{itemize}
+
+\section{Опции класса}\label{s:opts}
+
+\textbf{Примечание:} полужирным выделены опции и значения, используемые по умолчанию.
+
+\extrarowheight=3pt
+\tabcolsep=6pt
+\arraycolsep=0pt
+\newcolumntype{L}{>{\raggedright}p{4cm}}
+\begin{longtable}{L|p{10.5cm}}
+\hline\hline
+\multicolumn{2}{c}{\textbf{Стандартные опции}}\\
+\hline
+ 8pt, 9pt, 10pt, 11pt, 12pt, \textbf{14pt}, 16pt, 18pt, 20pt &
+ Размер шрифта основного текста.
+\\\hline
+ \textbf{a4paper}, a5paper, b5paper &
+ Размеры листов.
+\\\hline
+ landscape &
+ Альбомная ориентация.
+\\\hline
+ \textbf{oneside}, twoside &
+ Односторонняя или двухсторонняя печать.
+\\\hline
+ draft, \textbf{final} &
+ Выводить (draft) или нет (final) пометки, фиксирующие переполнение горизонтального блока для данной строки.
+\\\hline
+ fleqn &
+ Выключные формулы будут выравнены по левому краю, а не по центру.
+\\\hline
+ leqno &
+ Номера будут размещены слева, а не справа от формул.
+\\\hline
+ \textbf{openany}, openright &
+ Главы всегда будут начинаться только с нечетных страниц (т.\,е. справа, если смотреть на разворот) или c любых.
+\\\hline
+ \textbf{onecolumn}, twocolumn &
+ Верстка в один или в два столбца.
+\\\hline
+ openbib &
+ Блоки текста в списке литературы будут печататься на новых строках и с отступом.
+\\\hline
+ \textbf{titlepage}, notitlepage &
+ Печатать титульный лист или нет.
+\\\hline
+\multicolumn{2}{c}{\textbf{Специфические настройки класса}}
+\\\hline
+ autoref, bachelor, specialist, master, \textbf{candidate}, doctor &
+ Тип документа: автореферат, бакалаврский диплом, диплом специалиста, магистерская, кандидатская или докторская диссертация.
+\\\hline
+ classified &
+ Включает вывод грифа секретности на титульном листе.
+\\\hline
+ colorlinks &
+ Включает цветные гиперссылки. Цвета определяются соответствующими параметрами пакета \pkg{hyperref}.
+\\\hline
+ facsimile &
+ Включает отображение подписей диссертанта и ученого секретаря на титульных листах автореферата и диссертации (только для кандидатских и докторских).
+ По умолчанию включена только в шаблоне автореферата.
+\\\hline
+ fixint &
+ Включает замену стандартных знаков интегралов на прямые (из шрифта \pkg{euler}).
+\\\hline
+ substylefile = filename.rtx &
+ Имя файла с описанием стиля документа (оформление титульного листа, нумерация формул, элементов списков и т.\,д.).
+ Опция предназначена для подключения собственных стилей документов, отличающихся от стандартных: \file{autoref.rtx},
+ \file{bachelor.rtx}, \file{master.rtx}, \file{candidate.rtx}, \file{doctor.rtx}.
+ Если данной опции не присвоено значение, то по умолчанию подключается файл, имя которого совпадает с названием типа документа.
+\\\hline
+\multicolumn{2}{c}{\textbf{Опции для подключения и настройки сторонних пакетов}}
+\\\hline
+ href &
+ Подключение пакета \pkg{hyperref} для создания гиперссылок.
+\\\hline
+ subf &
+ Подключение пакета \pkg{subcaption} для вложенной нумерации рисунков.
+\\\hline\hline
+\end{longtable}
+
+\section{Шаблоны документов}
+
+Возможности пакета демонстрируются на примере шаблонов дипломов и диссертаций.
+В каталоге \file{templates} содержатся документы в кодировке CP-1251, для верстки библиографии используются \BibTeX{}8 со стилем \pkg{gost2008}, пакеты \pkg{natbib} и \pkg{multibib}.
+В каталоге \file{templates-utf8} содержатся документы в кодировке UTF-8, для верстки библиографии используются Biber и пакет Bib\LaTeX{} со стилем \pkg{biblatex-gost}.
+
+\section{Система сборки документов}
+
+Для автоматизации сборки и установки в состав пакета входят две системы скриптов: файлы \file{Makefile}, совместимые с GNU Make, и файлы \file{nomake.cmd}, написанные на языке командного интерпретатора \file{cmd.exe} (Windows 2000 и выше).
+Скрипты поддерживают одинаковый набор целей (targets).
+Использование в Unix-подобных окружениях:
+\begin{verbatim}
+make <target1> <target2> ...
+\end{verbatim}
+В Windows:
+\begin{verbatim}
+nomake <target1> <target2> ...
+\end{verbatim}
+
+Далее приведены описания целей в зависимости от каталога, в котором производится сборка.
+
+\def\longestlabel{pdftotiffg44}
+
+\subsection{Каталог \file{disser}}
+
+\begin{deflist}{\longestlabel}
+\item[all]
+ Сборка классов и шаблонов.
+\item[clean]
+ Цель \cmd{clean} в каталогах \file{src} и \file{templates}.
+\item[doc]
+ Сборка DVI- и PDF-версий документации.
+\item[help]
+ Справка по целям сборки.
+\item[install]
+ Копирование пакета, документации и шаблонов в дерево каталогов \TeX{}.
+ Соответствует цели \cmd{install} в каталогах \file{src} и \file{templates}.
+\item[package]
+ Сборка пакета.
+ Соответствует цели \cmd{package} в каталоге \file{src}.
+ Цель по умолчанию.
+\item[reinstall]
+ Переустановка пакета.
+ Соответствует цели \cmd{reinstall} в каталогах \file{src} и \file{templates}.
+\item[srcdist]
+ Создание архива исходных текстов пакета с помощью команды \cmd{hg archive}.
+\item[tds]
+ Создание архива скомпилированных файлов пакета и шаблонов.
+\item[templates]
+ Сборка всех шаблонов.
+ Соответствует цели по умолчанию в каталоге \file{templates}.
+\item[uninstall]
+ Удаление пакета из каталога \TeX{}.
+ Соответствует целям \cmd{uninstall} в каталогах \file{src} и \file{templates}.
+\end{deflist}
+
+\subsection{Подкаталог \texttt{src}}
+
+\begin{deflist}{\longestlabel}
+\item[all]
+ Сборка пакета и PDF-версии документации.
+ Цель по умолчанию.
+\item[clean]
+ Удаление файлов, указанных в переменной |CLFILES|.
+\item[doc]
+ Сборка DVI- и PDF-версий документации.
+\item[dvi]
+ Сборка DVI-версии документации.
+\item[help]
+ Справка по целям сборки.
+\item[install]
+ Копирование пакета в дерево каталогов \TeX{}.
+\item[package]
+ Сборка пакета.
+\item[pdf]
+ Сборка PDF-версии документации.
+\item[reinstall]
+ Переустановка пакета.
+\item[uninstall]
+ Удаление пакета из каталога \TeX{}.
+\end{deflist}
+
+\subsection{Подкаталоги \file{templates} и
+ \file{templates/<тип-диссертации>}}
+
+\begin{deflist}{\longestlabel}
+\item[clean]
+ Удаление файлов, полученных при сборке документа.
+ Список файлов определяется переменной |CLFILES|.
+\item[dvi]
+ Сборка DVI-файла.
+\item[figclean]
+ Эквивалентно цели \cmd{clean} в каталоге \file{fig}.
+\item[help]
+ Справка по целям сборки.
+\item[html]
+ Конвертация DVI в HTML-файл с рисунками.
+ Используемая программа: \href{http://www.latex2html.org/}{\cmd{latex2html}}.
+\item[pdf]
+ Сборка PDF-файла. Цель по умолчанию.
+\item[pdf\_2on1]
+ Сборка PDF-файла с двумя страницами на один лист A4 и сохранением порядка следования страниц.
+\item[pdf\_book]
+ Сборка PDF-файла с двумя страницами на один лист A4 для брошюрования.
+\item[ps]
+ Сборка PostScript-файла.
+\item[ps\_2on1]
+ Сборка PostScript-файла с двумя страницами на один лист A4 и сохранением порядка следования страниц.
+\item[ps\_book]
+ Сборка PostScript-файла с двумя страницами на один лист A4 для брошюрования.
+\item[rtf]
+ Конвертация из DVI в RTF.
+\item[srcdist]
+ Сборка архива из содержимого текущего каталога.
+\end{deflist}
+
+Помимо указанных выше целей, в каталоге \file{templates} доступны следующие:
+\begin{deflist}{\longestlabel}
+\item[install]
+ Копирование шаблонов в дерево каталогов \TeX{}.
+\item[reinstall]
+ Переустановка шаблонов.
+\item[uninstall]
+ Удаление шаблонов.
+\end{deflist}
+
+\begin{flushleft}
+\textbf{Примечания:}
+
+1) Файлы \file{nomake.cmd} в каталогах шаблонов зависят от \file{include/latex.nmk.cmd} и \file{include/latex.fig.nmk.cmd}.
+Файлы \file{Makefile} зависят от \file{include/latex.mk} и \file{include/latex.fig.mk}.
+
+2) \file{Makefile} и \file{nomake.cmd} могут использовать цели из каталога \file{fig}.
+\end{flushleft}
+
+\subsection{Подкаталоги \file{templates/<тип-диссертации>/fig}}
+
+\begin{deflist}{\longestlabel}
+\item[bmtoeps]
+ Конвертация растровых изображений в EPS.
+ Используемая программа: \href{http://code.google.com/p/sam2p/}{\cmd{sam2p}}.
+ Список файлов определяется переменной |BMTOEPSFILES|.
+ По умолчанию обрабатываются все файлы с расширениями \file{jpg}, \file{png}, \file{tif}.
+\item[clean]
+ Удаление файлов.
+ Список файлов определяется переменной |FIGCLFILES|.
+ По умолчанию обрабатываются все файлы с расширениями \file{pdf}, \file{jpg}, \file{png} и \file{tif}.
+\item[epstoeps]
+ Псевдоним для \cmd{optimize}.
+\item[epstopdf]
+ Конвертация EPS в PDF.
+ Используемая программа: \cmd{epstopdf} (входит в состав MiK\TeX{} и \TeX\ Live).
+ Список файлов определяется переменной |E2PFILES|.
+ По умолчанию обрабатываются все файлы с расширением \file{eps}.
+\item[fixbb]
+ Исправление границ видимой области (bounding box) в EPS-файлах.
+ Используемая программа: \href{http://pages.cs.wisc.edu/~ghost/gsview/epstool.htm}{\cmd{epstool}}.
+ Список файлов определяется переменной |FBBFILES|.
+ По умолчанию обрабатываются все файлы с расширением \file{eps}.
+\item[help]
+ Справка по целям сборки. Цель по умолчанию.
+\item[optimize]
+ Оптимизация EPS-файлов и исправление границ видимой области.
+ В результате оптимизации все шрифты переводятся в кривые.
+ Используемые программы: \cmd{eps2eps} из пакета Ghostscript и \cmd{epstool}.
+ Список файлов определяется переменной |OPTFILES|.
+ По умолчанию обрабатываются все файлы с расширением \file{eps}.
+\item[pdftopng256]
+ Конвертация PDF в 256-цветный PNG.
+ Используемая программа: пакет Ghostscript.
+ Список файлов определяется переменной |PDF2PNGFILES|.
+ По умолчанию обрабатываются все файлы с расширением \file{pdf}.
+\item[pdftotiffg4]
+ Конвертация PDF в черно-белый TIFF (алгоритм сжатия CCITT Group 4).
+ Используемая программа: пакет Ghostscript.
+ Список файлов определяется переменной |PDF2TIFFILES|.
+ По умолчанию обрабатываются все файлы с расширением \file{pdf}.
+\end{deflist}
+
+\section{Стили колонтитулов}
+
+Поскольку в российских диссертациях обычно не используются колонтитулы, содержащие название текущей главы документа, то стили, реализованные в данном классе, влияют лишь на положение номера страницы.
+Стиль колонтитулов обычных страниц документа задается в преамбуле командой |\pagestyle{<style>}|, а стиль страниц, с которых начинается новая глава "--- командой |\chapterpagestyle{<style>}|.
+Здесь |<style>| может принимать следующие значения:
+\begin{deflist}{\longestlabel}
+\item[empty] Страница без номера.
+\item[footleft] Номер внизу и слева.
+\item[footcenter] Номер внизу и по середине.
+\item[footright] Номер внизу и справа.
+\item[headleft] Номер вверху и слева.
+\item[headcenter] Номер вверху и по середине.
+\item[headright] Номер вверху и справа.
+\item[plain] Совпадает с |footcenter|.
+\end{deflist}
+
+Для односторонних документов шрифт надписей в верхнем и нижнем колонтитулах можно задать путем переопределения команд |\headfont| и |\footfont|.
+В двухсторонних документах следует использовать команды |\evenheadfont|, |\evenfootfont|, |\oddheadfont|, |\oddfootfont| для четных и нечетных страниц, соответственно.
+
+\textbf{Пример:} номера всех страниц одностороннего документа печатаются в верхнем колонтитуле по центру, шрифтом размера |\small|.
+\begin{verbatim}
+\def\headfont{\small}
+\pagestyle{headcenter}
+\chapterpagestyle{headcenter}
+\end{verbatim}
+
+\section{Оформление библиографии}
+
+Для оформления библиографических ссылок в соответствии с ГОСТ Р 7.0.5-2008 используются стили \file{gost2008.bst} и \file{gost2008s.bst}.
+
+При описании русскоязычных источников следует явным образом присваивать полю |language| значение |russian|.
+Пример:
+\begin{verbatim}
+@BOOK{Anselm_1978,
+ author = {А. И. Ансельм},
+ title = {Введение в теорию полупроводников},
+ publisher = {Наука},
+ address = {Москва},
+ year = {1978},
+ language = {russian},
+}
+\end{verbatim}
+Для указания даты обращения к Интернет-ресурсам следует использовать поле |urldate|. Пример:
+\begin{verbatim}
+@INCOLLECTION{InP,
+ title = {InP Basic Parameters at 300 K},
+ booktitle = {Electronic archive New Semiconductor Materials.
+ Characteristics and Properties},
+ organization = {Ioffe Physico-Technical Institute},
+ address = {St. Petersburg},
+ year = {2001},
+ url = {http://www.ioffe.rssi.ru/SVA/NSM/Semicond/InP/basic.html},
+ urldate = {01.11.2009},
+}
+\end{verbatim}
+
+Для работы с русскоязычными библиографическими ссылками необходимо использовать интерпретатор \cmd{bibtex8}, поддерживающий 8-битные символы.
+В зависимости от кодировки текста в bib-файле, необходимо подключать соответствующий csf-файл с описанием кодовой страницы и порядка сортировки, например, \file{cp1251.csf} из пакета \pkg{gost}.
+
+Последовательность команд, используемая для полной сборки документа с библиографией в кодировке CP-1251, имеет следующий вид:
+\begin{verbatim}
+pdflatex <tex-file>
+bibtex8 -H -c <csf-file> <aux-file>
+pdflatex <tex-file>
+pdflatex <tex-file>
+\end{verbatim}
+Здесь |<tex-file>| "--- файл документа, |<aux-file>| "--- имя aux-файла, который генерируется после первой этапа компиляции (совпадает с именем tex-файла), |<csf-file>| "--- файл описания кодовой страницы и порядка сортировки.
+
+Сборка документов в кодировке UTF-8:
+\begin{verbatim}
+pdflatex <tex-file>
+biber <bcf-file>
+pdflatex <tex-file>
+pdflatex <tex-file>
+\end{verbatim}
+
+\section{Авторефераты кандидатских и докторских диссертаций}
+
+\subsection{Общий текст}
+
+В соответствии с требованиями, раздел <<Общая характеристика работы>> автореферата и глава <<Введение>> диссертации должны совпадать.
+Общие разделы создаются с помощью команды |\mkcommonsect| в файле \file{common.tex}, который подключается из \file{autoref.tex} и \file{thesis.tex}.
+
+Пример:
+\begin{verbatim}
+\mkcommonsect{novelty}{Научная новизна}{%
+Текст раздела
+}
+\end{verbatim}
+Здесь первый аргумент "--- корень имени создаваемых макросов (|\noveltysection| и |\noveltytext|), второй аргумент "--- заголовок раздела (значение |\noveltysection|), третий "--- текст раздела (значение |\noveltytext|).
+
+\subsection{Список работ диссертанта}
+
+В автореферате список работ диссертанта должен быть отделен от списка цитируемой литературы.
+Для этого в документах с однобайтовой кодировкой используется пакет \pkg{multibib}, а для документов в кодировке UTF-8 "--- пакет Bib\LaTeX{}.
+Описание библиографических ссылок на работы диссертанта должно находиться в файле \file{thesis.bib} вместе с остальными ссылками.
+
+Сборка автореферата в кодировке UTF-8 осуществляется стандартным способом.
+Поскольку пакет \pkg{multibib} создает отдельные |aux|-файлы для каждой библиографии, полная сборка автореферата в кодировке CP-1251 выполняется следующей последовательностью команд:
+\begin{verbatim}
+pdflatex autoref
+bibtex8 -H -c cp1251 autoref
+bibtex8 -H -c cp1251 my
+pdflatex autoref
+pdflatex autoref
+\end{verbatim}
+В кодировке UTF-8 сборка документа с двумя библиографиями не отличается от стандартной.
+
+Операция полной сборки документов осуществляется командой:
+\begin{verbatim}
+nomake all
+\end{verbatim}
+в Windows или
+\begin{verbatim}
+make all
+\end{verbatim}
+в Unix-подобных окружениях.
+Сборка только автореферата в Windows:
+\begin{verbatim}
+set target=autoref
+nomake
+\end{verbatim}
+Для возврата к сборке диссертации следует однократно присвоить переменной |TARGET| значение |thesis|:
+\begin{verbatim}
+set target=thesis
+nomake
+\end{verbatim}
+
+Команда для сборки автореферата в Unix-подобных окружениях:
+\begin{verbatim}
+env TARGET=autoref make
+\end{verbatim}
+
+
+\subsection{Подписи диссертанта и ученого секретаря}
+
+Согласно требованиям, автореферат должен быть подписан диссертантом и ученым секретарем.
+Для автоматической вставки графических файлов с подписями в классе предусмотрена опция \cmd{facsimile}.
+Эта опция по умолчанию включена только в шаблонах авторефератов.
+Факсимиле диссертанта находится в файле \file{./fig/facsimile.<type>}, факсимиле ученого секретаря диссертационного совета "--- в файле \file{./fig/sec-facsimile.<type>}.
+Здесь \file{<type>} "--- один из типов графических файлов, поддерживаемых в \LaTeX{} (\file{eps}) или в pdf\LaTeX{} (\file{pdf}, \file{tif}, \file{png}).
+Команда |\facsimile|, включающая файл с подписью диссертанта в документ, определена в файле \file{titledefs.dtx}.
+Команда, включающая файл с подписью ученого секретаря, находится в файле \file{autoref.tex}.
+
+\section{Настройка пакета под нестандартные требования диссертационных советов}
+
+Код, определяющий вид титульного листа, нумерацию объектов и другие параметры, находится в файлах, имена которых совпадают с соответствующими опциями класса (см. раздел~\ref{s:opts}):
+\file{autoref.dtx}, \file{bachelor.dtx}, \file{specialist.dtx}, \file{master.dtx}, \file{candidate.dtx}, \file{doctor.dtx}.
+После сборки класса из исходных текстов из них получаются файлы с расширением |rtx|.
+
+Для внесения изменений в файлы пакета с расширениями |bst|, |cls| и |rtx| следует создавать их копии в каталоге с Вашим документом.
+При сборке документа \LaTeX{} ищет подключаемые файлы в каталоге компилируемого |tex|-файла, поэтому будет использована локальная копия файлов с вашими изменениями.
+
+\end{document}
diff --git a/macros/latex/contrib/disser/src/master.dtx b/macros/latex/contrib/disser/src/master.dtx
new file mode 100644
index 0000000000..48844d2cc7
--- /dev/null
+++ b/macros/latex/contrib/disser/src/master.dtx
@@ -0,0 +1,149 @@
+% \begin{macrocode}
+
+%<master>\ProvidesFile{master.rtx}
+
+%<*master>
+% \end{macrocode}
+% \subsubsection{Стиль работы магистера}
+%
+% Нумерация.
+% \begin{macrocode}
+\newcommand\master@the{\default@the}
+\master@the
+
+% \end{macrocode}
+% Титульный лист.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+\if@titlepage\renewcommand\maketitle[1][]{
+% \end{macrocode}
+% Переопределения некоторых полей титульного листа для англоязычной версии.
+% \begin{macrocode}
+\ifthenelse{\equal{#1}{en}}{\@titlepage@entrue}{\@titlepage@enfalse}
+\if@titlepage@en
+ \def\appos{Head of Department}
+ \def\approved{``Approved for defence''}
+ \def\revname{Reviewer}
+ \def\revsndname{\revname}
+ \def\revlabel{\revname}
+ \def\revsndlabel{\revsndname}
+ \def\saname{Scientific Supervisor}
+ \def\sasndname{\saname}
+ \def\salabel{\saname}
+ \def\sasndlabel{\saname}
+ \def\topicname{Topic}
+ \def\coursename{Speciality}
+ \def\studentname{Student}
+ \def\studentlabel{\studentname\hspace{6cm}}
+ \def\masterprogname{Master's Program}
+\fi
+
+% \end{macrocode}
+% Вертикальные интервалы между элементами титульного листа.
+% \DescribeMacro{\firstskip}\index{Интервалы!\verb*+\firstskip+}
+% \DescribeMacro{\secondskip}\index{Интервалы!\verb*+\secondskip+}
+% \DescribeMacro{\thirdskip}\index{Интервалы!\verb*+\thirdskip+}
+% \DescribeMacro{\fourthskip}\index{Интервалы!\verb*+\fourthskip+}
+% \DescribeMacro{\fifthskip}\index{Интервалы!\verb*+\fifthskip+}
+% \begin{macrocode}
+\ifundeflength\firstskip{1ex}
+\ifundeflength\secondskip{1ex}
+\ifundeflength\thirdskip{1ex}
+\ifundeflength\fourthskip{-1cm}
+\ifundeflength\fifthskip{0ex}
+\ifundeflength\sixthskip{1.5ex}
+
+% \end{macrocode}
+% Горизонтальный отступ перед чертой в текстовым поле для имени, ученой
+% степени и звания научного руководителя и консультанта.
+% \DescribeMacro{\fieldhshift}\index{Интервалы!\verb*+\fieldhshift+}
+% \begin{macrocode}
+\setlength\fieldhshift{8.5cm}
+
+% \end{macrocode}
+% Шрифты элементов титульного листа.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topiclabelfont}\index{Макросы!\verb*+\topiclabelfont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \begin{macrocode}
+\def\titlefont{\Large\bfseries}
+\def\topiclabelfont{\large}
+\def\topicfont{\large\bfseries}
+
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\vspace*{-2cm}
+% \end{macrocode}
+% \paragraph{Название организации}
+% \begin{macrocode}
+\begin{center}
+ {\instfont\@institution}
+\end{center}
+
+% \end{macrocode}
+% Диссертация допущена к защите
+% \begin{macrocode}
+\vskip\firstskip
+{\@approved}
+\vskip\secondskip
+% \end{macrocode}
+% Заголовок
+% \begin{macrocode}
+\begin{center}
+ {\titlefont\@title}
+ \vskip\thirdskip
+% \end{macrocode}
+% Тема
+% \begin{macrocode}
+ {\topiclabelfont\topiclabel\ }
+ {\topicfont\@topic}
+ \vskip\fourthskip\normalfont
+\end{center}
+
+\begin{tabbing}
+ \phantom{\masterproglabel}\=\\
+% \end{macrocode}
+% Направление
+% \begin{macrocode}
+ \courselabel\>\ \@coursenum\ --\ \@course\\
+% \end{macrocode}
+% Магистерская программа: номер -- название.
+% \begin{macrocode}
+ \masterproglabel\>\ \@masterprognum\ --\ \@masterprog
+\end{tabbing}
+\vskip\fifthskip
+\begin{tabbing}
+% \end{macrocode}
+%
+% Выполнил студент гр. номер...
+% \begin{macrocode}
+ \studentlabel\=\makebox[\fieldhshift][l]{\hrulefill\ \@author}\\[\sixthskip]
+% \end{macrocode}
+% Научный руководитель.
+% \begin{macrocode}
+ \ifx\@sa\empty\else\diplomafield{sa}\\[\sixthskip]\fi
+ \ifx\@sasnd\empty\else\diplomafield{sasnd}\\[\sixthskip]\fi
+% \end{macrocode}
+%
+% Рецензент
+% \begin{macrocode}
+ \ifx\@rev\empty\else\diplomafield{rev}\\[\sixthskip]\fi
+ \ifx\@revsnd\empty\else\diplomafield{revsnd}\\[\sixthskip]\fi
+% \end{macrocode}
+%
+% Консультант
+% \begin{macrocode}
+ \ifx\@con\empty\else\diplomafield{con}\\[\sixthskip]\fi
+ \ifx\@consnd\empty\else\diplomafield{consnd}\fi
+\end{tabbing}
+% \end{macrocode}
+% \paragraph{Город и год}
+% \begin{macrocode}
+\vfill
+\begin{center}
+ {\@city\cdsep\@date}
+\end{center}
+\normalfont\clearpage
+}\fi
+%</master>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/nomake.cmd b/macros/latex/contrib/disser/src/nomake.cmd
new file mode 100644
index 0000000000..113291765b
--- /dev/null
+++ b/macros/latex/contrib/disser/src/nomake.cmd
@@ -0,0 +1,130 @@
+@echo off
+
+rem nomake script for disser package
+rem Author: Stanislav Kruchinin <stanislav.kruchinin@gmail.com>
+
+if "%CMDEXTVERSION%"=="" (
+ echo This script requires command interpreter from Windows 2000 or above.
+ goto :eof
+)
+
+setlocal enabledelayedexpansion
+
+set target=disser
+set subclass=gost732
+set manual=manual
+
+set clsfiles=*.cls *.rtx
+set docfiles=%target%.pdf %subclass%.pdf %bst%.pdf %manual%.pdf
+set textfiles=..\README ..\README.ru ..\ChangeLog
+set srcfiles=*.dtx %target%.ins dtx.ist %manual%.tex Makefile nomake.cmd
+
+if "!texmf!"=="" set texmf=%allusersprofile%\Application Data\MiKTeX\2.9
+if "!destdir!"=="" set destdir=!texmf!
+if "!clsdir!"=="" set clsdir=!destdir!\tex\latex\%target%
+if "!docdir!"=="" set docdir=!destdir!\doc\latex\%target%
+if "!srcdir!"=="" set srcdir=!destdir!\source\latex\%target%
+
+if "!clext!"=="" set clext=*.aux *.toc *.idx *.ind *.ilg *.log *.out *.lof ^
+*.lot *.lol *.bbl *.blg *.bak *.dvi *.ps *.pdf *.synctex *.synctex.gz
+if "!clfiles!"=="" set clfiles=!clext! %clsfiles%
+
+if "!latex!"=="" set latex=latex
+if "!pdflatex!"=="" set pdflatex=pdflatex
+if "!mi!"=="" set mi=makeindex
+
+if "!latexflags!"=="" set latexflags=--src-specials
+if "!pdflatexflags!"=="" set pdflatexflags=--shell-escape --synctex=1
+if "!miflags!"=="" set miflags=-r -s dtx.ist
+
+
+if "%1"=="" (
+ call :all
+) else (
+ for %%f in (%*) do call :%%f
+)
+
+exit /b
+
+:all
+ call :package
+ call :doc
+goto :eof
+
+:clean
+ del !clfiles!
+goto :eof
+
+:doc
+ call :pdf
+goto :eof
+
+:dvi
+ !latex! !latexflags! %target%.dtx
+ !mi! !miflags! %target%
+ !latex! !latexflags! %target%.dtx
+ !latex! !latexflags! %target%.dtx
+
+ !latex! !latexflags! %subclass%.dtx
+ !latex! !latexflags! %subclass%.dtx
+
+ !latex! !latexflags! %bst%.dtx
+ !mi! !miflags! %bst%
+ !latex! !latexflags! %bst%.dtx
+ !latex! !latexflags! %bst%.dtx
+
+ !latex! !latexflags! %manual%.tex
+ !latex! !latexflags! %manual%.tex
+goto :eof
+
+:help
+ echo all ^(default^) build package and documentation
+ echo clean remove output files
+ echo doc alias for pdf target
+ echo dvi build documentation in DVI format
+ echo help show description of targets
+ echo install install package and documentation
+ echo package build package
+ echo pdf build documentation in PDF format
+ echo reinstall reinstall package and documentation
+ echo uninstall uninstall package and documentation
+goto :eof
+
+:install
+ if not exist %target%.cls call :all
+ if not exist "!clsdir!" mkdir "!clsdir!"
+ if not exist "!docdir!" mkdir "!docdir!"
+ if not exist "!srcdir!" mkdir "!srcdir!"
+ for %%f in (%clsfiles%) do xcopy /y /i /f %%f "!clsdir!"
+ for %%f in (%docfiles%) do xcopy /y /i /f %%f "!docdir!"
+ for %%f in (%textfiles%) do xcopy /y /i /f %%f "!docdir!"
+ for %%f in (%srcfiles%) do xcopy /y /i /f %%f "!srcdir!"
+goto :eof
+
+:package
+ %latex% %target%.ins
+goto :eof
+
+:pdf
+ !pdflatex! !pdflatexflags! %target%.dtx
+ !mi! !miflags! %target%
+ !pdflatex! !pdflatexflags! %target%.dtx
+ !pdflatex! !pdflatexflags! %target%.dtx
+
+ !pdflatex! !pdflatexflags! %subclass%.dtx
+ !pdflatex! !pdflatexflags! %subclass%.dtx
+
+ !pdflatex! !pdflatexflags! %manual%.tex
+ !pdflatex! !pdflatexflags! %manual%.tex
+goto :eof
+
+:reinstall
+ call :uninstall
+ call :install
+goto :eof
+
+:uninstall
+ rmdir /s /q "!clsdir!"
+ rmdir /s /q "!docdir!"
+ rmdir /s /q "!srcdir!"
+goto :eof
diff --git a/macros/latex/contrib/disser/src/page.dtx b/macros/latex/contrib/disser/src/page.dtx
new file mode 100644
index 0000000000..6cae9cb4de
--- /dev/null
+++ b/macros/latex/contrib/disser/src/page.dtx
@@ -0,0 +1,210 @@
+
+% \iffalse
+%%% From File: page.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*page>
+% \end{macrocode}
+%
+% \subsection{Формат страниц}
+%
+% \subsubsection{Шрифт колонтитулов}
+% \paragraph{Для двухсторонней печати}\hfil\\[6pt]
+% Верхний, на четных страницах.
+% \DescribeMacro{\evenheadfont}\index{Макросы!\verb*+\evenheadfont+}
+% \begin{macrocode}
+\newcommand\evenheadfont{\reset@font}
+% \end{macrocode}
+% Нижний на четных страницах.
+% \DescribeMacro{\evenfootfont}\index{Макросы!\verb*+\evenfootfont+}
+% \begin{macrocode}
+\newcommand\evenfootfont{\reset@font}
+% \end{macrocode}
+% Верхний на нечетных страницах.
+% \DescribeMacro{\oddheadfont}\index{Макросы!\verb*+\oddheadfont+}
+% \begin{macrocode}
+\newcommand\oddheadfont{\reset@font}
+% \end{macrocode}
+% Нижний на нечетных страницах.
+% \DescribeMacro{\oddfootfont}\index{Макросы!\verb*+\oddfootfont+}
+% \begin{macrocode}
+\newcommand\oddfootfont{\reset@font}
+% \end{macrocode}
+% \paragraph{Для односторонней печати}\hfil\\[6pt]
+% Верхний.
+% \DescribeMacro{\headfont}\index{Макросы!\verb*+\headfont+}
+% \begin{macrocode}
+\newcommand\headfont{\reset@font}
+% \end{macrocode}
+% Нижний.
+% \DescribeMacro{\footfont}\index{Макросы!\verb*+\footfont+}
+% \begin{macrocode}
+\newcommand\footfont{\reset@font}
+% \end{macrocode}
+%
+% \subsubsection{Определения стилей колонтитулов}
+%
+% В диссертациях на русском языке не используются колонтитулы с заголовком текущей главы,
+% поэтому все представленные стили влияют только на положение номера страницы.
+%
+% \paragraph{empty}
+% \begin{macrocode}
+\def\ps@empty{
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@oddfoot\@empty
+ \let\@evenhead\@empty
+ \let\@evenfoot\@empty
+}
+
+% \end{macrocode}
+% \paragraph{footcenter}
+% \begin{macrocode}
+\def\ps@footcenter{
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@evenhead\@empty
+ \def\@oddfoot{\footfont\hfil\thepage\hfil}
+ \def\@evenfoot{\footfont\hfil\thepage\hfil}
+}
+
+% \end{macrocode}
+% \paragraph{footleft}
+% \begin{macrocode}
+\if@twoside
+ \def\ps@footleft{
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@evenhead\@empty
+ \def\@oddfoot{\oddfootfont\hfil\thepage}
+ \def\@evenfoot{\evenfootfont\thepage\hfil}
+ }
+\else
+ \def\ps@footleft{
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@evenhead\@empty
+ \def\@oddfoot{\footfont\thepage\hfil}
+ \def\@evenfoot{\footfont\thepage\hfil}
+ }
+\fi
+
+% \end{macrocode}
+% \paragraph{footright}
+% \begin{macrocode}
+\if@twoside
+ \def\ps@footright{
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@evenhead\@empty
+ \def\@oddfoot{\oddfootfont\thepage\hfil}
+ \def\@evenfoot{\evenfootfont\hfil\thepage}
+ }
+\else
+ \def\ps@footright{
+ \let\@mkboth\@gobbletwo
+ \let\@oddhead\@empty
+ \let\@evenhead\@empty
+ \def\@oddfoot{\footfont\hfil\thepage}
+ \def\@evenfoot{\footfont\hfil\thepage}
+ }
+\fi
+
+% \end{macrocode}
+% \paragraph{headcenter}
+% \begin{macrocode}
+\def\ps@headcenter{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\headfont\hfil\thepage\hfil}
+ \def\@evenhead{\headfont\hfil\thepage\hfil}
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+}
+
+% \end{macrocode}
+% \paragraph{headright}
+% \begin{macrocode}
+\if@twoside
+ \def\ps@headright{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\oddheadfont\thepage\hfil}
+ \def\@evenhead{\evenheadfont\hfil\thepage}
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ }
+\else
+ \def\ps@headright{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\headfont\hfil\thepage}
+ \def\@oddhead{\headfont\hfil\thepage}
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ }
+\fi
+
+% \end{macrocode}
+% \paragraph{headleft}
+% \begin{macrocode}
+\if@twoside
+ \def\ps@headleft{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\oddheadfont\hfil\thepage}
+ \def\@evenhead{\evenheadfont\thepage\hfil}
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ }
+\else
+ \def\ps@headleft{
+ \let\@mkboth\@gobbletwo
+ \def\@oddhead{\headfont\thepage\hfil}
+ \def\@evenhead{\headfont\thepage\hfil}
+ \let\@oddfoot\@empty
+ \let\@evenfoot\@empty
+ }
+\fi
+
+% \end{macrocode}
+% \paragraph{plain}\hfil\\[6pt]
+% \begin{macrocode}
+\let\ps@plain=\ps@footcenter
+
+% \end{macrocode}
+% \subsubsection{Стили колонтитулов по умолчанию}
+% Стиль колонтитулов обычных страниц.
+% \begin{macrocode}
+\pagestyle{headcenter}
+
+% \end{macrocode}
+% Команда, определяющая стиль страницы, с которой начинается глава.
+% \DescribeMacro{\chapterpagestyle}\index{Макросы!\verb*+\chapterpagestyle+}
+% \begin{macrocode}
+\def\chapterpagestyle#1{\gdef\@chapterpagestyle{#1}}
+
+% \end{macrocode}
+% Стиль колонтитулов страниц, с которых начинается глава.
+% \begin{macrocode}
+\chapterpagestyle{headcenter}
+% \end{macrocode}
+% Стиль нумерации страниц.
+% \begin{macrocode}
+\pagenumbering{arabic}
+% \end{macrocode}
+% Для односторонних документов разрешается делать страницы с разной высотой
+% текста.
+% \begin{macrocode}
+\if@twoside\else\raggedbottom\fi
+% \end{macrocode}
+% Для двухколоночных документов:
+% |\flushbottom| запрещает делать страницы с разной высотой текста,
+% |\sloppy| включает менее жесткие ограничения на разрывы строк.
+% \begin{macrocode}
+\if@twocolumn
+ \twocolumn\sloppy\flushbottom
+\else
+ \onecolumn
+\fi
+
+%</page>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/part.dtx b/macros/latex/contrib/disser/src/part.dtx
new file mode 100644
index 0000000000..8904b2a14a
--- /dev/null
+++ b/macros/latex/contrib/disser/src/part.dtx
@@ -0,0 +1,205 @@
+
+% \iffalse
+%%% From File: part.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*part>
+% \end{macrocode}
+% \subsection{Часть}
+%
+% \subsubsection{Параметры формата записи в оглавлении}
+%
+% \DescribeMacro{\tocprethepart}\index{Макросы!\verb*+\tocprethepart+}
+% Префикс номера.
+% \begin{macrocode}
+\providecommand\tocprethepart{\partname~}
+% \end{macrocode}
+% \DescribeMacro{\tocpostthepart}\index{Макросы!\verb*+\tocpostthepart+}
+% Постфикс номера.
+% \begin{macrocode}
+\providecommand\tocpostthepart{.\@postskip}
+% \end{macrocode}
+% \DescribeMacro{\tocpartfill}\index{Макросы!\verb*+\tocpartfill+}
+% Заполнитель между названием и номером страницы. Для части по умолчанию
+% отсутствует. Чтобы заполнить какими-либо символами, нужно присвоить
+% |\tocpartfill| значение |\tocfill{символ}|. Для примера см. далее
+% определение |\tocsectionfill|.
+% \begin{macrocode}
+\providecommand\tocpartfill{}
+% \end{macrocode}
+% \DescribeMacro{\tocpartfont}\index{Макросы!\verb*+\tocpartfont+}
+% Шрифт заголовка записи.
+% \begin{macrocode}
+\providecommand\tocpartfont{\bfseries}
+% \end{macrocode}
+% \DescribeMacro{\tocpartfillfont}\index{Макросы!\verb*+\tocpartfillfont+}
+% Шрифт заполнителя в оглавлении.
+% \begin{macrocode}
+\providecommand\tocpartfillfont{\normalfont}
+% \end{macrocode}
+% \DescribeMacro{\tocpartnumfont}\index{Макросы!\verb*+\tocpartnumfont+}
+% Шрифт номера в оглавлении.
+% \begin{macrocode}
+\providecommand\tocpartnumfont{\normalfont}
+
+% \end{macrocode}
+%
+% \subsubsection{Параметры формата заголовка в тексте}
+%
+% Параметры номера и названия: выравнивание, шрифт, отступы, текст до и после.
+% \DescribeMacro{\thepartalign}\index{Макросы!\verb*+\thepartalign+}
+% \DescribeMacro{\thepartfont}\index{Макросы!\verb*+\thepartfont+}
+% \DescribeMacro{\prethepart}\index{Макросы!\verb*+\prethepart+}
+% \DescribeMacro{\postthepart}\index{Макросы!\verb*+\postthepart+}
+% \DescribeMacro{\partalign}\index{Макросы!\verb*+\partalign+}
+% \DescribeMacro{\partfont}\index{Макросы!\verb*+\partfont+}
+% \DescribeMacro{\beforepart}\index{Макросы!\verb*+\beforepart+}
+% \DescribeMacro{\afterpart}\index{Макросы!\verb*+\afterpart+}
+% \begin{macrocode}
+\providecommand\thepartalign{\centering}
+\providecommand\thepartfont{\huge}
+\providecommand\prethepart{\tocprethepart}
+\providecommand\postthepart{\par\vskip 20\p@}
+
+\providecommand\partalign{\centering}
+\providecommand\partfont{\huge\bfseries}
+\providecommand\beforepart{}
+\providecommand\afterpart{\par}
+
+% \end{macrocode}
+% \DescribeMacro{\partpagestyle}\index{Макросы!\verb*+\partpagestyle+}
+% Стиль страницы, на которой расположен заголовок части.
+% \begin{macrocode}
+\def\partpagestyle#1{\gdef\@partpagestyle{#1}}
+\partpagestyle{empty}
+% \end{macrocode}
+%
+% \subsubsection{Низкоуровневые команды}
+%
+% Описание структуры заголовков.
+% \begin{itemize}
+% \item в тексте,
+% \DescribeMacro{\@seccntformat}\index{Макросы!\verb*+"\"@seccntformat+}
+% \begin{macrocode}
+\def\@seccntformat#1{%
+ \csname prethe#1\endcsname%
+ \csname the#1\endcsname%
+ \csname postthe#1\endcsname%
+}
+
+% \end{macrocode}
+% \item в Содержании.
+% \DescribeMacro{\@tocseccntformat}\index{Макросы!\verb*+"\"@tocseccntformat+}
+% \begin{macrocode}
+\def\@tocseccntformat#1{%
+ \csname tocprethe#1\endcsname%
+ \csname tocthe#1\endcsname%
+ \csname tocpostthe#1\endcsname%
+}
+
+% \end{macrocode}
+% \end{itemize}
+% \DescribeMacro{\part}\index{Макросы!\verb*+"\part+}
+% Интерфейс.
+% \begin{macrocode}
+\newcommand\part{
+ \if@openright
+ \cleardoublepage
+ \else
+ \clearpage
+ \fi
+ \thispagestyle{\@partpagestyle}%
+ \if@twocolumn
+ \onecolumn
+ \@tempswatrue
+ \else
+ \@tempswafalse
+ \fi
+ \null\vfil\secdef\@part\@spart
+}
+% \end{macrocode}
+%
+% \DescribeMacro{\@part}\index{Макросы!\verb+"\"@part+}
+% Команда, формирующая нумеруемый заголовок части |\part|.
+% \begin{macrocode}
+\def\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+% \end{macrocode}
+% Команда |\def\\{ }| используется для корректного отображения
+% заголовков с принудительными разрывами строк.
+% \begin{macrocode}
+ {\def\\{ }\addcontentsline{toc}{part}{\@tocseccntformat{part} #1}}
+ \else
+ {\def\\{ }\addcontentsline{toc}{part}{#1}}
+ \fi
+ \markboth{}{}%
+ {%
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+% \end{macrocode}
+% Постоянная часть заголовка и номер.
+% \begin{macrocode}
+ {\thepartfont\partalign\@seccntformat{part}}
+ \fi%
+% \end{macrocode}
+% Название.
+% \begin{macrocode}
+ {\partfont\partalign\beforepart #2\afterpart}%
+ }
+ \@endpart%
+}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\@spart}\index{Макросы!\verb+"\"@spart+}
+% Команда, формирующая ненумеруемый заголовок части |\part*|.
+% \begin{macrocode}
+\def\@spart#1{%
+ \partalign{\interlinepenalty \@M%
+ \partfont\beforepart #1\afterpart}%
+ \@endpart
+}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\@endpart}\index{Макросы!\verb+"\"@endpart+}
+% Завершение страницы с заголовком части.
+% \begin{macrocode}
+\def\@endpart{
+ \vfil\newpage
+ \if@twoside
+ \null
+ \thispagestyle{\partpagestyle}%
+ \newpage
+ \fi
+ \if@tempswa\twocolumn\fi
+}
+
+% \end{macrocode}
+% \DescribeMacro{\l@part}
+% Низкоуровневая команда, создающая запись в Содержании.
+% \begin{macrocode}
+\newcommand*\l@part[2]{%
+ \ifnum \c@tocdepth >-2\relax
+ \addpenalty{-\@highpenalty}%
+ \addvspace{2.25em \@plus\p@}%
+ \begingroup
+ \setlength\@tempdima{3em}%
+ \parindent \z@ \rightskip \@pnumwidth
+ \parfillskip -\@pnumwidth
+ {\leavevmode \tocpartfont #1\nobreak
+ \tocpartfillfont\tocpartfill\hfill
+ \hb@xt@\@pnumwidth{\hss\tocpartnumfont #2}}
+ \par\nobreak
+ \global\@nobreaktrue
+ \everypar{\global\@nobreakfalse\everypar{}}%
+ \endgroup
+ \fi
+}
+
+%</part>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/sections.dtx b/macros/latex/contrib/disser/src/sections.dtx
new file mode 100644
index 0000000000..81ef04661b
--- /dev/null
+++ b/macros/latex/contrib/disser/src/sections.dtx
@@ -0,0 +1,415 @@
+
+% \iffalse
+%%% From File: sections.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*sections>
+% \end{macrocode}
+% \subsection{Секции и параграфы}
+%
+% \subsubsection{Section}
+%
+% \paragraph{Параметры формата записи в оглавлении}
+%
+% \DescribeMacro{\tocprethesection}\index{Макросы!\verb*+\tocprethesection+}
+% \DescribeMacro{\tocpostthesection}\index{Макросы!\verb*+\tocpostthesection+}
+% \DescribeMacro{\tocsectionfill}\index{Макросы!\verb*+\tocsectionfill+}
+% \DescribeMacro{\tocsectionfont}\index{Макросы!\verb*+\tocsectionfont+}
+% \DescribeMacro{\tocsectionfillfont}\index{Макросы!\verb*+\tocsectionfillfont+}
+% \DescribeMacro{\tocsectionnumfont}\index{Макросы!\verb*+\tocsectionnumfont+}
+% \begin{macrocode}
+\providecommand\tocprethesection{}
+\providecommand\tocpostthesection{.\@postskip}
+\providecommand\tocsectionfill{\tocfill{.}}
+
+\providecommand\tocsectionfont{\normalfont}
+\providecommand\tocsectionfillfont{}
+\providecommand\tocsectionnumfont{}
+% \end{macrocode}
+% \DescribeMacro{\tocsectionindent}\index{Макросы!\verb*+\tocsectionindent+}
+% Величина отступа записи в оглавлении.
+% \begin{macrocode}
+\providecommand\tocsectionindent{1.5em}
+% \end{macrocode}
+% \DescribeMacro{\tocsectionnameindent}\index{Макросы!\verb*+\tocsectionnameindent+}
+% Пробел после номера.
+% \begin{macrocode}
+\providecommand\tocsectionnameindent{2.6em}
+
+% \end{macrocode}
+% \paragraph{Параметры формата в тексте}
+%
+% \DescribeMacro{\sectionfont}\index{Макросы!\verb*+\sectionfont+}
+% \DescribeMacro{\prethesection}\index{Макросы!\verb*+\prethesection+}
+% \DescribeMacro{\postthesection}\index{Макросы!\verb*+\postthesection+}
+% \begin{macrocode}
+\providecommand\sectionfont{\normalfont\large\bfseries}
+
+\providecommand\prethesection{}
+\providecommand\postthesection{.~}
+
+% \end{macrocode}
+% \DescribeMacro{\sectionindent}\index{Макросы!\verb*+\sectionindent+}
+% Величина отступа заголовка секции на странице.
+% \begin{macrocode}
+\providecommand\sectionindent{\z@}
+% \end{macrocode}
+% \DescribeMacro{\beforesection}\index{Макросы!\verb*+\beforesection+}
+% Величина вертикального отступа перед заголовком секции.
+% \begin{macrocode}
+\providecommand\beforesection{-3.5ex \@plus -1ex \@minus -.2ex}
+% \end{macrocode}
+% \DescribeMacro{\aftersection}\index{Макросы!\verb*+\aftersection+}
+% Величина вертикального отступа после заголовка секции.
+% \begin{macrocode}
+\providecommand\aftersection{2.3ex \@plus.2ex}
+% \end{macrocode}
+% \DescribeMacro{\sectionalign}\index{Макросы!\verb*+\sectionalign+}
+% Выравнивание заголовка.
+% \begin{macrocode}
+\providecommand\sectionalign{\raggedright}
+
+% \end{macrocode}
+% \subsubsection{Subsection}
+% \paragraph{Параметры формата записи в оглавлении}
+%
+% \DescribeMacro{\tocprethesubsection}\index{Макросы!\verb*+\tocprethesubsection+}
+% \DescribeMacro{\tocpostthesubsection}\index{Макросы!\verb*+\tocpostthesubsection+}
+% \DescribeMacro{\tocsubsectionfill}\index{Макросы!\verb*+\tocsubsectionfill+}
+% \DescribeMacro{\tocsubsectionfont}\index{Макросы!\verb*+\tocsubsectionfont+}
+% \DescribeMacro{\tocsubsectionfillfont}\index{Макросы!\verb*+\tocsubsectionfillfont+}
+% \DescribeMacro{\tocsubsectionnumfont}\index{Макросы!\verb*+\tocsubsectionnumfont+}
+% \DescribeMacro{\tocsubsectionindent}\index{Макросы!\verb*+\tocsubsectionindent+}
+% \DescribeMacro{\tocsubsectionnameindent}\index{Макросы!\verb*+\tocsubsectionnameindent+}
+% \begin{macrocode}
+\providecommand\tocprethesubsection{}
+\providecommand\tocpostthesubsection{.\@postskip}
+\providecommand\tocsubsectionfill{\tocfill{.}}
+
+\providecommand\tocsubsectionfont{\normalfont}
+\providecommand\tocsubsectionfillfont{}
+\providecommand\tocsubsectionnumfont{}
+
+\providecommand\tocsubsectionindent{4.1em}
+\providecommand\tocsubsectionnameindent{3.5em}
+
+% \end{macrocode}
+% \paragraph{Параметры формата в тексте}
+%
+% \DescribeMacro{\subsectionfont}\index{Макросы!\verb*+\subsectionfont+}
+% \DescribeMacro{\prethesubsection}\index{Макросы!\verb*+\prethesubsection+}
+% \DescribeMacro{\postthesubsection}\index{Макросы!\verb*+\postthesubsection+}
+% \DescribeMacro{\subsectionindent}\index{Макросы!\verb*+\subsectionindent+}
+% \DescribeMacro{\beforesubsection}\index{Макросы!\verb*+\beforesubsection+}
+% \DescribeMacro{\aftersubsection}\index{Макросы!\verb*+\aftersubsection+}
+% \DescribeMacro{\subsectionalign}\index{Макросы!\verb*+\subsectionalign+}
+% \begin{macrocode}
+\providecommand\subsectionfont{\normalfont\normalsize\bfseries}
+
+\providecommand\prethesubsection{}
+\providecommand\postthesubsection{.~}
+
+\providecommand\subsectionindent{\z@}
+\providecommand\beforesubsection{-3.25ex\@plus -1ex \@minus -.2ex}
+\providecommand\aftersubsection{1.5ex \@plus .2ex}
+\providecommand\subsectionalign{\raggedright}
+
+% \end{macrocode}
+% \subsubsection{Subsubsection}
+% \paragraph{Параметры формата записи в оглавлении}
+%
+% \DescribeMacro{\tocprethesubsubsection}\index{Макросы!\verb*+\tocprethesubsubsection+}
+% \DescribeMacro{\tocpostthesubsubsection}\index{Макросы!\verb*+\tocpostthesubsubsection+}
+% \DescribeMacro{\tocsubsubsectionfill}\index{Макросы!\verb*+\tocsubsubsectionfill+}
+%
+% \DescribeMacro{\tocsubsubsectionfont}\index{Макросы!\verb*+\tocsubsubsectionfont+}
+% \DescribeMacro{\tocsubsubsectionfillfont}\index{Макросы!\verb*+\tocsubsubsectionfillfont+}
+% \DescribeMacro{\tocsubsubsectionnumfont}\index{Макросы!\verb*+\tocsubsubsectionnumfont+}
+%
+% \DescribeMacro{\tocsubsubsectionindent}\index{Макросы!\verb*+\tocsubsubsectionindent+}
+% \DescribeMacro{\tocsubsubsectionnameindent}\index{Макросы!\verb*+\tocsubsubsectionnameindent+}
+% \begin{macrocode}
+\providecommand\tocprethesubsubsection{}
+\providecommand\tocpostthesubsubsection{.\@postskip}
+\providecommand\tocsubsubsectionfill{\tocfill{.}}
+
+\providecommand\tocsubsubsectionfont{\normalfont}
+\providecommand\tocsubsubsectionfillfont{}
+\providecommand\tocsubsubsectionnumfont{}
+
+\providecommand\tocsubsubsectionindent{7.6em}
+\providecommand\tocsubsubsectionnameindent{4.7em}
+
+% \end{macrocode}
+% \paragraph{Параметры формата в тексте}
+%
+% \DescribeMacro{\subsubsectionfont}\index{Макросы!\verb*+\subsubsectionfont+}
+% \DescribeMacro{\prethesubsubsection}\index{Макросы!\verb*+\prethesubsubsection+}
+% \DescribeMacro{\postthesubsubsection}\index{Макросы!\verb*+\postthesubsubsection+}
+% \DescribeMacro{\subsubsectionindent}\index{Макросы!\verb*+\subsubsectionindent+}
+% \DescribeMacro{\beforesubsubsection}\index{Макросы!\verb*+\beforesubsubsection+}
+% \DescribeMacro{\aftersubsubsection}\index{Макросы!\verb*+\aftersubsubsection+}
+% \DescribeMacro{\subsubsectionalign}\index{Макросы!\verb*+\subsubsectionalign+}
+% \begin{macrocode}
+\providecommand\subsubsectionfont{\normalfont\normalsize\bfseries}
+
+\providecommand\prethesubsubsection{}
+\providecommand\postthesubsubsection{.~}
+
+\providecommand\subsubsectionindent{\z@}
+\providecommand\beforesubsubsection{-3.25ex\@plus -1ex \@minus -.2ex}
+\providecommand\aftersubsubsection{1.5ex \@plus .2ex}
+\providecommand\subsubsectionalign{\raggedright}
+
+% \end{macrocode}
+% \subsubsection{Paragraph}
+% \paragraph{Параметры формата записи в оглавлении}
+%
+% \DescribeMacro{\tocpretheparagraph}\index{Макросы!\verb*+\tocpretheparagraph+}
+% \DescribeMacro{\tocposttheparagraph}\index{Макросы!\verb*+\tocposttheparagraph+}
+% \DescribeMacro{\tocparagraphfill}\index{Макросы!\verb*+\tocparagraphfill+}
+%
+% \begin{macrocode}
+\providecommand\tocpretheparagraph{}
+\providecommand\tocposttheparagraph{.\@postskip}
+\providecommand\tocparagraphfill{\tocfill{.}}
+
+% \end{macrocode}
+% \DescribeMacro{\tocparagraphfont}\index{Макросы!\verb*+\tocparagraphfont+}
+% \DescribeMacro{\tocparagraphfillfont}\index{Макросы!\verb*+\tocparagraphfillfont+}
+% \DescribeMacro{\tocparagraphnumfont}\index{Макросы!\verb*+\tocparagraphnumfont+}
+% \begin{macrocode}
+\providecommand\tocparagraphfont{\normalfont}
+\providecommand\tocparagraphfillfont{}
+\providecommand\tocparagraphnumfont{}
+
+% \end{macrocode}
+% \DescribeMacro{\tocparagraphindent}\index{Макросы!\verb*+\tocparagraphindent+}
+% \DescribeMacro{\tocparagraphnameindent}\index{Макросы!\verb*+\tocparagraphnameindent+}
+% \begin{macrocode}
+\providecommand\tocparagraphindent{10em}
+\providecommand\tocparagraphnameindent{5em}
+
+% \end{macrocode}
+% \paragraph{Параметры формата в тексте}
+%
+% \DescribeMacro{\paragraphfont}\index{Макросы!\verb*+\paragraphfont+}
+%
+% \DescribeMacro{\pretheparagraph}\index{Макросы!\verb*+\pretheparagraph+}
+% \DescribeMacro{\posttheparagraph}\index{Макросы!\verb*+\posttheparagraph+}
+%
+% \DescribeMacro{\paragraphindent}\index{Макросы!\verb*+\paragraphindent+}
+% \DescribeMacro{\beforeparagraph}\index{Макросы!\verb*+\beforeparagraph+}
+% \DescribeMacro{\afterparagraph}\index{Макросы!\verb*+\afterparagraph+}
+% \DescribeMacro{\paragraphalign}\index{Макросы!\verb*+\paragraphalign+}
+% \begin{macrocode}
+\providecommand\paragraphfont{\normalfont\normalsize\bfseries}
+
+\providecommand\pretheparagraph{}
+\providecommand\posttheparagraph{.~}
+
+\providecommand\paragraphindent{\z@}
+\providecommand\beforeparagraph{3.25ex \@plus1ex \@minus.2ex}
+\providecommand\afterparagraph{-1em}
+\providecommand\paragraphalign{}
+
+% \end{macrocode}
+% \subsubsection{Subparagraph}
+% \paragraph{Параметры формата записи в оглавлении}
+%
+% \DescribeMacro{\tocprethesubparagraph}\index{Макросы!\verb*+\tocprethesubparagraph+}
+% \DescribeMacro{\tocpostthesubparagraph}\index{Макросы!\verb*+\tocpostthesubparagraph+}
+% \DescribeMacro{\tocsubparagraphfill}\index{Макросы!\verb*+\tocsubparagraphfill+}
+% \begin{macrocode}
+\providecommand\tocprethesubparagraph{}
+\providecommand\tocpostthesubparagraph{.\@postskip}
+\providecommand\tocsubparagraphfill{\tocfill{.}}
+
+% \end{macrocode}
+% \DescribeMacro{\tocsubparagraphfont}\index{Макросы!\verb*+\tocsubparagraphfont+}
+% \DescribeMacro{\tocsubparagraphfillfont}\index{Макросы!\verb*+\tocsubparagraphfillfont+}
+% \DescribeMacro{\tocsubparagraphnumfont}\index{Макросы!\verb*+\tocsubparagraphnumfont+}
+% \begin{macrocode}
+\providecommand\tocsubparagraphfont{\normalfont}
+\providecommand\tocsubparagraphfillfont{}
+\providecommand\tocsubparagraphnumfont{}
+
+% \end{macrocode}
+% \DescribeMacro{\tocsubparagraphindent}\index{Макросы!\verb*+\tocsubparagraphindent+}
+% \DescribeMacro{\tocsubparagraphnameindent}\index{Макросы!\verb*+\tocsubparagraphnameindent+}
+% \begin{macrocode}
+\providecommand\tocsubparagraphindent{12em}
+\providecommand\tocsubparagraphnameindent{6em}
+
+% \end{macrocode}
+% \paragraph{Параметры формата в тексте}
+%
+% \DescribeMacro{\subparagraphfont}\index{Макросы!\verb*+\subparagraphfont+}
+%
+% \DescribeMacro{\prethesubparagraph}\index{Макросы!\verb*+\prethesubparagraph+}
+% \DescribeMacro{\postthesubparagraph}\index{Макросы!\verb*+\postthesubparagraph+}
+%
+% \DescribeMacro{\subparagraphindent}\index{Макросы!\verb*+\subparagraphindent+}
+% \DescribeMacro{\beforesubparagraph}\index{Макросы!\verb*+\beforesubparagraph+}
+% \DescribeMacro{\aftersubparagraph}\index{Макросы!\verb*+\aftersubparagraph+}
+% \DescribeMacro{\subparagraphalign}\index{Макросы!\verb*+\subparagraphalign+}
+% \begin{macrocode}
+\providecommand\subparagraphfont{\normalfont\normalsize\bfseries}
+
+\providecommand\prethesubparagraph{}
+\providecommand\postthesubparagraph{.~}
+
+\providecommand\subparagraphindent{\parindent}
+\providecommand\subparagraphalign{\raggedright}
+\providecommand\beforesubparagraph{3.25ex \@plus1ex \@minus .2ex}
+\providecommand\aftersubparagraph{-1em}
+
+% \end{macrocode}
+% \subsubsection{Низкоуровневые команды}
+%
+% \DescribeMacro{\@startsection}\index{Макросы!\verb*+"\"@startsection+}
+% Команда, создающая заголовки секций.
+% \begin{macrocode}
+\def\@startsection#1#2{%
+ \if@noskipsec \leavevmode \fi
+ \par
+ \@tempskipa \csname before#1\endcsname\relax
+ \@afterindenttrue
+ \ifdim \@tempskipa <\z@
+ \@tempskipa -\@tempskipa \@afterindentfalse
+ \fi
+ \if@nobreak
+ \everypar{}%
+ \else
+ \addpenalty\@secpenalty\addvspace\@tempskipa
+ \fi
+ \@ifstar
+ {\@ssect{\csname #1indent\endcsname}%
+ {\csname before#1\endcsname}{\csname after#1\endcsname}%
+ {\csname #1font\endcsname\csname #1align\endcsname}}%
+ {\@dblarg{\@sect{#1}{#2}{\csname #1indent\endcsname}%
+ {\csname before#1\endcsname}{\csname after#1\endcsname}%
+ {\csname #1font\endcsname\csname #1align\endcsname}}}%
+}
+
+% \end{macrocode}
+% \DescribeMacro{\@ssect}\index{Макросы!\verb*+"\"@ssect+}
+% Для ненумеруемых секций.
+% \begin{macrocode}
+\def\@ssect#1#2#3#4#5{%
+ \@tempskipa #3\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #4{%
+ \@hangfrom{\hskip #1}%
+ \interlinepenalty \@M #5\@@par}%
+ \endgroup
+ \else
+ \def\@svsechd{#4{\hskip #1\relax #5}}%
+ \fi
+ \@xsect{#3}%
+}
+
+% \end{macrocode}
+% \DescribeMacro{\@sect}\index{Макросы!\verb*+"\"@sect+}
+% Для нумеруемых секций.
+% \begin{macrocode}
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \let\@svsec\@empty
+ \else
+ \refstepcounter{#1}%
+ \protected@edef\@svsec{\@seccntformat{#1}\relax}%
+ \fi
+ \@tempskipa #5\relax
+ \ifdim \@tempskipa>\z@
+ \begingroup
+ #6{%
+ \@hangfrom{\hskip #3\relax\@svsec}%
+ \interlinepenalty \@M #8\@@par}%
+ \endgroup
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\@tocseccntformat{#1}}%
+ \fi
+ #7}%
+ \else
+ \def\@svsechd{%
+ #6{\hskip #3\relax
+ \@svsec #8}%
+ \csname #1mark\endcsname{#7}%
+ \addcontentsline{toc}{#1}{%
+ \ifnum #2>\c@secnumdepth \else
+ \protect\numberline{\@tocseccntformat{#1}}%
+ \fi
+ #7}%
+ }%
+ \fi
+ \@xsect{#5}%
+}
+
+% \end{macrocode}
+% \DescribeMacro{\@tocline}\index{Макросы!\verb*+"\"@tocline+}
+% Обобщенная версия стандартной команды, добавляющей запись в оглавление.
+% \begin{macrocode}
+\def\@tocline#1#2#3#4{%
+ \ifnum #2>\c@tocdepth \else
+ \vskip \z@ \@plus.2\p@
+ {\leftskip \csname toc#1indent\endcsname\relax%
+ \rightskip \@tocrmarg \parfillskip -\rightskip
+ \parindent \csname toc#1indent\endcsname\relax%
+ \@afterindenttrue
+ \interlinepenalty\@M
+ \leavevmode
+ \@tempdima \csname toc#1nameindent\endcsname\relax
+ \csname toc#1font\endcsname
+ \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip
+ {#3}\nobreak
+ \csname toc#1fillfont\endcsname \csname toc#1fill\endcsname\hfill
+ \nobreak\hb@xt@\@pnumwidth{\hfil\csname toc#1numfont\endcsname #4}%
+ \par%
+ }%
+ \fi
+}
+
+% \end{macrocode}
+% Команды, создающие заголовки секций в тексте и записи в оглавлении.
+% \DescribeMacro{\section}\index{Макросы!\verb*+\section+}
+% \DescribeMacro{\l@section}\index{Макросы!\verb*+"\l"@section+}
+% \begin{macrocode}
+\newcommand\section{\@startsection{section}{1}}
+\newcommand*\l@section{\@tocline{section}{1}}
+
+% \end{macrocode}
+% \DescribeMacro{\subsection}\index{Макросы!\verb*+\subsection+}
+% \DescribeMacro{\l@subsection}\index{Макросы!\verb*+"\l"@subsection+}
+% \begin{macrocode}
+\newcommand\subsection{\@startsection{subsection}{2}}
+\newcommand*\l@subsection{\@tocline{subsection}{2}}
+
+% \end{macrocode}
+% \DescribeMacro{\subsubsection}\index{Макросы!\verb*+\subsubsection+}
+% \DescribeMacro{\l@subsubsection}\index{Макросы!\verb*+"\l"@subsubsection+}
+% \begin{macrocode}
+\newcommand\subsubsection{\@startsection{subsubsection}{3}}
+\newcommand*\l@subsubsection{\@tocline{subsubsection}{3}}
+
+% \end{macrocode}
+% \DescribeMacro{\paragraph}\index{Макросы!\verb*+\paragraph+}
+% \DescribeMacro{\l@paragraph}\index{Макросы!\verb*+"\l"@paragraph+}
+% \begin{macrocode}
+\newcommand\paragraph{\@startsection{paragraph}{4}}
+\newcommand*\l@paragraph{\@tocline{paragraph}{4}}
+
+% \end{macrocode}
+% \DescribeMacro{\subparagraph}\index{Макросы!\verb*+\subparagraph+}
+% \DescribeMacro{\l@subparagraph}\index{Макросы!\verb*+"\l"@subparagraph+}
+% \begin{macrocode}
+\newcommand\subparagraph{\@startsection{subparagraph}{5}}
+\newcommand*\l@subparagraph{\@tocline{subparagraph}{5}}
+
+%</sections>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/specialist.dtx b/macros/latex/contrib/disser/src/specialist.dtx
new file mode 100644
index 0000000000..6b22accf63
--- /dev/null
+++ b/macros/latex/contrib/disser/src/specialist.dtx
@@ -0,0 +1,152 @@
+% \begin{macrocode}
+
+%<specialist>\ProvidesFile{specialist.rtx}
+
+%<*specialist>
+% \end{macrocode}
+% \subsubsection{Стиль работы специалиста}
+%
+% Нумерация.
+% \begin{macrocode}
+\newcommand\specialist@the{\default@the}
+\specialist@the
+
+\def\diplomafield#1{%
+ \csname #1label\endcsname\\%
+ \csname @#1status\endcsname\ \csname @#1\endcsname
+}
+
+% \end{macrocode}
+% Титульный лист.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+\if@titlepage\renewcommand\maketitle[1][]{
+% \end{macrocode}
+% Переопределения некоторых полей титульного листа для англоязычной версии.
+% \begin{macrocode}
+\ifthenelse{\equal{#1}{en}}{\@titlepage@entrue}{\@titlepage@enfalse}
+\if@titlepage@en
+ \def\appos{Head of Department}
+ \def\approved{``Approved for defence''}
+ \def\revname{Reviewer}
+ \def\revsndname{\revname}
+ \def\revlabel{\revname}
+ \def\revsndlabel{\revsndname}
+ \def\saname{Scientific Supervisor}
+ \def\sasndname{\saname}
+ \def\salabel{\saname}
+ \def\sasndlabel{\saname}
+\else
+ \def\appos{\CYRZ\cyra\cyrv\cyre\cyrd\cyru\cyryu\cyrshch\cyri\cyrishrt\ %
+ \cyrk\cyra\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt}
+ \def\approved{<<\CYRD\cyro\cyrp\cyru\cyrs\cyrt\cyri\cyrt\cyrsftsn\ %
+ \cyrk\ \cyrz\cyra\cyrshch\cyri\cyrt\cyre>>}
+\fi
+
+% \end{macrocode}
+% Вертикальные интервалы между элементами титульного листа.
+% \DescribeMacro{\firstskip}\index{Интервалы!\verb*+\firstskip+}
+% \DescribeMacro{\secondskip}\index{Интервалы!\verb*+\secondskip+}
+% \DescribeMacro{\thirdskip}\index{Интервалы!\verb*+\thirdskip+}
+% \DescribeMacro{\fourthskip}\index{Интервалы!\verb*+\fourthskip+}
+% \DescribeMacro{\fifthskip}\index{Интервалы!\verb*+\fifthskip+}
+% \begin{macrocode}
+\ifundeflength\firstskip{1.5cm}
+\ifundeflength\secondskip{1.5cm}
+\ifundeflength\thirdskip{3ex}
+\ifundeflength\fourthskip{1ex}
+\ifundeflength\fifthskip{1ex}
+\ifundeflength\sixthskip{2cm}
+\ifundeflength\seventhskip{1ex}
+
+% \end{macrocode}
+% Горизонтальный отступ перед чертой в текстовым поле для имени, ученой
+% степени и звания научного руководителя и консультанта.
+% \DescribeMacro{\fieldhshift}\index{Интервалы!\verb*+\fieldhshift+}
+% \begin{macrocode}
+\setlength\fieldhshift{8.5cm}
+
+% \end{macrocode}
+% Шрифты элементов титульного листа.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topiclabelfont}\index{Макросы!\verb*+\topiclabelfont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \begin{macrocode}
+\def\titlefont{\Large\bfseries}
+\def\topiclabelfont{\large}
+\def\topicfont{\large\bfseries}
+
+% \end{macrocode}
+% Работа
+% \DescribeMacro{\workname}\index{Макросы!\verb*+\topicfont+}
+% \begin{macrocode}
+\def\workname{\CYRR\cyra\cyrb\cyro\cyrt\cyra}
+
+\thispagestyle{empty}
+\enlargethispage{1cm}
+\vspace*{-2cm}
+% \end{macrocode}
+% \paragraph{Название организации}
+% \begin{macrocode}
+\begin{center}
+ {\instfont\@institution}
+\end{center}
+
+\def\@approved{
+\hfill
+\begin{minipage}{.5\linewidth}
+ {\approved}\hrulefill\\[9pt]%
+ \appos\\%
+ \@apname%
+\end{minipage}
+}
+
+% \end{macrocode}
+% Допустить к защите
+% \begin{macrocode}
+\vskip\firstskip
+{\@approved}
+\vskip\secondskip
+% \end{macrocode}
+% Заголовок, автор, тема
+% \begin{macrocode}
+\begin{center}
+ {\titlefont\@title}
+ \vskip\thirdskip
+ {\@group}
+ \vskip\fourthskip
+ {\@author}
+ \vskip\fifthskip
+ {\topicfont\@topic}
+\end{center}
+\normalfont
+% \end{macrocode}
+% Руководитель, рецензент
+% \begin{macrocode}
+\vskip\sixthskip
+\hfill
+\begin{minipage}{.5\linewidth}
+ \ifx\@sa\empty\else
+ \vskip\seventhskip\diplomafield{sa}
+ \fi
+ \ifx\@sasnd\empty\else
+ \vskip\seventhskip\diplomafield{sasnd}
+ \fi
+ \ifx\@rev\empty\else
+ \vskip\seventhskip\diplomafield{rev}
+ \fi
+ \ifx\@revsnd\empty\else
+ \vskip\seventhskip\diplomafield{revsnd}
+ \fi
+\end{minipage}
+% \end{macrocode}
+% \paragraph{Город и год}
+% \begin{macrocode}
+\vfill
+\begin{center}
+ {\@city\cdsep\@date}
+\end{center}
+\normalfont\clearpage
+}\fi
+%</specialist>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/titledefs.dtx b/macros/latex/contrib/disser/src/titledefs.dtx
new file mode 100644
index 0000000000..ea307de6ea
--- /dev/null
+++ b/macros/latex/contrib/disser/src/titledefs.dtx
@@ -0,0 +1,514 @@
+% \begin{macrocode}
+
+%<titledefs>\ProvidesFile{titledefs.rtx}
+
+%<*titledefs>
+% \end{macrocode}
+%
+% \subsection{Постоянные части заголовков, титульного листа и текста}
+%
+% \DescribeMacro{\abstractname}\index{Макросы!\verb+\abstractname+}
+% Аннотация
+% \begin{macrocode}
+\def\abstractname{\cyr\CYRA\cyrn\cyrn\cyro\cyrt\cyra\cyrc\cyri\cyrya}
+% \end{macrocode}
+% \DescribeMacro{\titlepagename}\index{Макросы!\verb+\titlepagename+}
+% Титульный лист
+% \begin{macrocode}
+\def\titlepagename{%
+\cyr\CYRT\cyri\cyrt\cyru\cyrl\cyrsftsn\cyrn\cyrery\cyrishrt\ %
+\cyrl\cyri\cyrs\cyrt}
+% \end{macrocode}
+% \DescribeMacro{\keywordsname}\index{Макросы!\verb+\keywordsname+}
+% \DescribeMacro{\keywordslabel}\index{Макросы!\verb+\keywordslabel+}
+% Ключевые слова
+% \begin{macrocode}
+\def\keywordsname{\cyr\CYRK\cyrk\cyryu\cyrch\cyre\cyrv\cyrery\cyre\ %
+\cyrs\cyrl\cyro\cyrv\cyra}
+\def\keywordslabel{\keywordsname:}
+% \end{macrocode}
+% \DescribeMacro{\workname}\index{Макросы!\verb+\workname+}
+% Диссертация
+% \begin{macrocode}
+\def\workname{\cyr\CYRD\cyri\cyrs\cyrs\cyre\cyrr\cyrt\cyra\cyrc\cyri\cyrya}
+% \end{macrocode}
+% \DescribeMacro{\approved}\index{Макросы!\verb+\approved+}
+% Диссертация допущена к защите (запись о допуске)
+% \begin{macrocode}
+\def\approved{\workname\ \cyrd\cyro\cyrp\cyru\cyrshch\cyre\cyrn\cyra\ %
+\cyrk\ \cyrz\cyra\cyrshch\cyri\cyrt\cyre}
+% \end{macrocode}
+% \DescribeMacro{\appos}\index{Макросы!\verb+\appos+}
+% Должность лица, допускающего к защите
+% \begin{macrocode}
+\def\appos{\cyr\cyrz\cyra\cyrv.\ \cyrk\cyra\cyrf\cyre\cyrd\cyrr\cyro\cyrishrt}
+% \end{macrocode}
+% \DescribeMacro{\groupname}\index{Макросы!\verb+\groupname+}
+% гр. (группа)
+% \begin{macrocode}
+\def\groupname{\cyr\cyrg\cyrr.}
+% \end{macrocode}
+% \DescribeMacro{\topicname}\index{Макросы!\verb+\topicname+}
+% \DescribeMacro{\topiclabel}\index{Макросы!\verb+\topiclabel+}
+% Тема
+% \begin{macrocode}
+\def\topicname{\cyr\CYRT\cyre\cyrm\cyra}
+\def\topiclabel{\topicname:\ }
+% \end{macrocode}
+% \DescribeMacro{\coursename}\index{Макросы!\verb+\coursename+}
+% \DescribeMacro{\courselabel}\index{Макросы!\verb+\courselabel+}
+% Направление
+% \begin{macrocode}
+\def\coursename{\cyr\CYRN\cyra\cyrp\cyrr\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyre}
+\def\courselabel{\coursename:}
+% \end{macrocode}
+% \DescribeMacro{\specname}\index{Макросы!\verb+\specname+}
+% \DescribeMacro{\speclabel}\index{Макросы!\verb+\speclabel+}
+% Специальность
+% \begin{macrocode}
+\def\specname{%
+\cyr\CYRS\cyrp\cyre\cyrc\cyri\cyra\cyrl\cyrsftsn\cyrn\cyro\cyrs\cyrt\cyrsftsn}
+\def\speclabel{\specname:}
+% \end{macrocode}
+% \DescribeMacro{\masterprogname}\index{Макросы!\verb+\masterprogname+}
+% \DescribeMacro{\masterprogsep}\index{Макросы!\verb+\masterprogsep+}
+% \DescribeMacro{\masterproglabel}\index{Макросы!\verb+\masterproglabel+}
+% Магистерская программа
+% \begin{macrocode}
+\def\masterprogname{%
+\cyr\CYRM\cyra\cyrg\cyri\cyrs\cyrt\cyre\cyrr\cyrs\cyrk\cyra\cyrya\ %
+\cyrp\cyrr\cyro\cyrg\cyrr\cyra\cyrm\cyrm\cyra}
+\def\masterproglabel{\masterprogname:}
+% \end{macrocode}
+% \DescribeMacro{\studentname}\index{Макросы!\verb+\studentname+}
+% \DescribeMacro{\studentlabel}\index{Макросы!\verb+\studentlabel+}
+% Выполнил студент
+% \begin{macrocode}
+\def\studentname{\cyr\CYRV\cyrery\cyrp\cyro\cyrl\cyrn\cyri\cyrl\ %
+\cyrs\cyrt\cyru\cyrd\cyre\cyrn\cyrt}
+\def\studentlabel{\studentname\ \groupname\ \@group\hspace{1.5cm}}
+% \end{macrocode}
+% \DescribeMacro{\saname}\index{Макросы!\verb+\saname+}
+% \DescribeMacro{\salabel}\index{Макросы!\verb+\salabel+}
+% Научный руководитель (sa -- сокр. от scientific adviser)
+% \begin{macrocode}
+\def\saname{\cyr\CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ %
+\cyrr\cyru\cyrk\cyro\cyrv\cyro\cyrd\cyri\cyrt\cyre\cyrl\cyrsftsn}
+\def\sasndname{\saname}
+\def\salabel{\saname}
+\def\sasndlabel{\sasndname}
+% \end{macrocode}
+% \DescribeMacro{\scname}\index{Макросы!\verb+\scname+}
+% \DescribeMacro{\sclabel}\index{Макросы!\verb+\sclabel+}
+% Научный консультант (для докторских диссертаций)
+% \begin{macrocode}
+\def\sconname{\cyr\CYRN\cyra\cyru\cyrch\cyrn\cyrery\cyrishrt\ %
+\cyrk\cyro\cyrn\cyrs\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrn\cyrt}
+\def\sconsndname{\sconname}
+\def\sconlabel{\sconname}
+\def\sconsndlabel{\sconsndname}
+% \end{macrocode}
+% \DescribeMacro{\revname}\index{Макросы!\verb+\revname+}
+% \DescribeMacro{\revlabel}\index{Макросы!\verb+\revlabel+}
+% Рецензент
+% \begin{macrocode}
+\def\revname{\cyr\CYRR\cyre\cyrc\cyre\cyrn\cyrz\cyre\cyrn\cyrt}
+\def\revsndname{\revname}
+\def\revlabel{\revname}
+\def\revsndlabel{\revsndname}
+% \end{macrocode}
+% \DescribeMacro{\conname}\index{Макросы!\verb+\conname+}
+% \DescribeMacro{\conlabel}\index{Макросы!\verb+\conlabel+}
+% Консультант (для магистерских дипломов)
+% \begin{macrocode}
+\def\conname{\cyr\CYRK\cyro\cyrn\cyrs\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrn\cyrt}
+\def\consndname{\conname}
+\def\conlabel{\conname\ \cyrp\cyro\ \@conspec}
+\def\consndlabel{\consndname\ \cyrp\cyro\ \@consndspec}
+% \end{macrocode}
+% \DescribeMacro{\asmanuscript}\index{Макросы!\verb+\asmanuscript+}
+% На правах рукописи
+% \begin{macrocode}
+\def\asmanuscript{\cyr\CYRN\cyra\ \cyrp\cyrr\cyra\cyrv\cyra\cyrh\ %
+\cyrr\cyru\cyrk\cyro\cyrp\cyri\cyrs\cyri}
+% \end{macrocode}
+% \DescribeMacro{\libcatname}\index{Макросы!\verb+\libcatname+}
+% УДК
+% \begin{macrocode}
+\def\libcatname{\cyr\CYRU\CYRD\CYRK}
+% \end{macrocode}
+% \DescribeMacro{\consultname}\index{Макросы!\verb+\consultname+}
+% Консультанты
+% \begin{macrocode}
+\def\consultname{%
+\cyr\CYRK\cyro\cyrn\cyrs\cyru\cyrl\cyrsftsn\cyrt\cyra\cyrn\cyrt\cyrery:}
+% \end{macrocode}
+%
+% \subsection{Интерфейс для определения элементов титульного листа}
+%
+% \DescribeMacro{\institution}\index{Макросы!\verb*+\institution+}
+% Организация
+% \begin{macrocode}
+\def\institution#1{\gdef\@institution{#1}}\institution{}
+% \end{macrocode}
+%
+% \DescribeMacro{\spec}\index{Макросы!\verb*+\spec+}
+% \DescribeMacro{\specsnd}\index{Макросы!\verb*+\specsnd+}
+% Название специальности
+% \begin{macrocode}
+\def\spec#1{\gdef\@spec{#1}}\spec{}
+\def\specsnd#1{\gdef\@specsnd{#1}}\specsnd{}
+
+% \end{macrocode}
+% \DescribeMacro{\specnum}\index{Макросы!\verb*+\specnum+}
+% \DescribeMacro{\specsndnum}\index{Макросы!\verb*+\specsndnum+}
+% Номер специальности
+% \begin{macrocode}
+\def\specnum#1{\gdef\@specnum{#1}}\specnum{}
+\def\specsndnum#1{\gdef\@specsndnum{#1}}\specsndnum{}
+
+% \end{macrocode}
+% \DescribeMacro{\course}\index{Макросы!\verb*+\course+}
+% Название направления
+% \begin{macrocode}
+\def\course#1{\gdef\@course{#1}}\course{}
+% \end{macrocode}
+% \DescribeMacro{\coursenum}\index{Макросы!\verb*+\coursenum+}
+% Номер направления
+% \begin{macrocode}
+\def\coursenum#1{\gdef\@coursenum{#1}}\coursenum{}
+% \end{macrocode}
+% \DescribeMacro{\keywords}\index{Макросы!\verb*+\keywords+}
+% Ключевые слова
+% \begin{macrocode}
+\def\keywords#1{\gdef\@keywords{#1}}\keywords{}
+% \end{macrocode}
+% \DescribeMacro{\title}\index{Макросы!\verb*+\title+}
+% Заголовок
+% \begin{macrocode}
+\def\title#1{\gdef\@title{#1}}\title{}
+% \end{macrocode}
+% \DescribeMacro{\topic}\index{Макросы!\verb*+\topic+}
+% Тема
+% \begin{macrocode}
+\def\topic#1{\gdef\@topic{#1}}\topic{}
+% \end{macrocode}
+% \DescribeMacro{\author}\index{Макросы!\verb*+\author+}
+% Автор
+% \begin{macrocode}
+\def\author#1{\gdef\@author{#1}}\author{}
+% \end{macrocode}
+% \DescribeMacro{\city}\index{Макросы!\verb*+\city+}
+% Город
+% \begin{macrocode}
+\def\city#1{\gdef\@city{#1}}\city{}
+% \end{macrocode}
+% \DescribeMacro{\faculty}\index{Макросы!\verb*+\faculty+}
+% Факультет
+% \begin{macrocode}
+\def\faculty#1{\gdef\@faculty{#1}}\faculty{}
+% \end{macrocode}
+% \DescribeMacro{\department}\index{Макросы!\verb*+\department+}
+% кафедра
+% \begin{macrocode}
+\def\department#1{\gdef\@department{#1}}\department{}
+% \end{macrocode}
+% \DescribeMacro{\apname}\index{Макросы!\verb*+\apname+}
+% ФИО лица, допускающего к защите (зав. кафедрой)
+% \begin{macrocode}
+\def\apname#1{\gdef\@apname{#1}}\apname{}
+% \end{macrocode}
+% \DescribeMacro{\libcatnum}\index{Макросы!\verb*+\libcatnum+}
+% Номер УДК
+% \begin{macrocode}
+\def\libcatnum#1{\gdef\@libcatnum{#1}}\libcatnum{}
+% \end{macrocode}
+% \DescribeMacro{\group}\index{Макросы!\verb*+\group+}
+% Академическая группа
+% \begin{macrocode}
+\def\group#1{\gdef\@group{#1}}\group{}
+% \end{macrocode}
+% \DescribeMacro{\masterprognum}\index{Макросы!\verb*+\masterprognum+}
+% Номер магистерской программы
+% \begin{macrocode}
+\def\masterprognum#1{\gdef\@masterprognum{#1}}\masterprognum{}
+% \end{macrocode}
+% \DescribeMacro{\masterprog}\index{Макросы!\verb*+\masterprog+}
+% Название магистерской программы
+% \begin{macrocode}
+\def\masterprog#1{\gdef\@masterprog{#1}}\masterprog{}
+% \end{macrocode}
+% Значение |\date| по умолчанию
+% \begin{macrocode}
+\date{\number\year}
+
+% \end{macrocode}
+% \DescribeMacro{\yearname}\index{Макросы!\verb*+\yearname+}
+% Сокращение года <<г.>>
+% \begin{macrocode}
+\def\yearname{\cyr\cyrg.}
+% \end{macrocode}
+% \DescribeMacro{\commonsect}\index{Макросы!\verb*+\commonsect+}
+% \DescribeMacro{\postcommonsect}\index{Макросы!\verb*+\postcommonsect+}
+% Формат заголовков общего текста <<Введения>> и автореферата.
+% \begin{macrocode}
+\let\commonsect=\textbf
+\def\postcommonsect{\ }
+% \end{macrocode}
+%
+% \subsubsection{Научные руководители}
+% \DescribeMacro{\sa}\index{Макросы!\verb*+\sa+}
+% \DescribeMacro{\sasnd}\index{Макросы!\verb*+\sasnd+}
+% ФИО
+% \begin{macrocode}
+\def\sa#1{\gdef\@sa{#1}}\sa{}
+\def\sasnd#1{\gdef\@sasnd{#1}}\sasnd{}
+
+% \end{macrocode}
+% \DescribeMacro{\sastatus}\index{Макросы!\verb*+\sastatus+}
+% \DescribeMacro{\sasndstatus}\index{Макросы!\verb*+\sasndstatus+}
+% Учёное звание
+% \begin{macrocode}
+\def\sastatus#1{\gdef\@sastatus{#1}}\sastatus{}
+\def\sasndstatus#1{\gdef\@sasndstatus{#1}}\sasndstatus{}
+
+% \end{macrocode}
+%
+% \subsubsection{Научные консультанты (для докторских диссертаций)}
+% \DescribeMacro{\scon}\index{Макросы!\verb*+\scon+}
+% \DescribeMacro{\sconsnd}\index{Макросы!\verb*+\sconsnd+}
+% ФИО
+% \begin{macrocode}
+\def\scon#1{\gdef\@scon{#1}}\scon{}
+\def\sconsnd#1{\gdef\@sconsnd{#1}}\sconsnd{}
+% \end{macrocode}
+% \DescribeMacro{\sconstatus}\index{Макросы!\verb*+\sconstatus+}
+% \DescribeMacro{\sconsndstatus}\index{Макросы!\verb*+\sconsndstatus+}
+% Учёное звание
+% \begin{macrocode}
+\def\sconstatus#1{\gdef\@sconstatus{#1}}\sconstatus{}
+\def\sconsndstatus#1{\gdef\@sconsndstatus{#1}}\sconsndstatus{}
+
+% \end{macrocode}
+%
+% \subsubsection{Рецензенты}
+% \DescribeMacro{\rev}\index{Макросы!\verb*+\rev+}
+% \DescribeMacro{\revsnd}\index{Макросы!\verb*+\revsnd+}
+% ФИО
+% \begin{macrocode}
+\def\rev#1{\gdef\@rev{#1}}\rev{}
+\def\revsnd#1{\gdef\@revsnd{#1}}\revsnd{}
+% \end{macrocode}
+% \DescribeMacro{\revstatus}\index{Макросы!\verb*+\revstatus+}
+% \DescribeMacro{\revsndstatus}\index{Макросы!\verb*+\revsndstatus+}
+% Учёное звание
+% \begin{macrocode}
+\def\revstatus#1{\gdef\@revstatus{#1}}\revstatus{}
+\def\revsndstatus#1{\gdef\@revsndstatus{#1}}\revsndstatus{}
+
+% \end{macrocode}
+%
+% \subsubsection{Консультанты (для магистерских дипломов)}
+% \DescribeMacro{\con}\index{Макросы!\verb*+\con+}
+% ФИО
+% \begin{macrocode}
+\def\con#1{\gdef\@con{#1}}\con{}
+\def\consnd#1{\gdef\@consnd{#1}}\consnd{}
+% \end{macrocode}
+% \DescribeMacro{\conspec}\index{Макросы!\verb*+\conspec+}
+% \DescribeMacro{\consndspec}\index{Макросы!\verb*+\consndspec+}
+% Специальность
+% \begin{macrocode}
+\def\conspec#1{\gdef\@conspec{#1}}\conspec{}
+\def\consndspec#1{\gdef\@consndspec{#1}}\consndspec{}
+% \end{macrocode}
+% \DescribeMacro{\constatus}\index{Макросы!\verb*+\constatus+}
+% \DescribeMacro{\consndstatus}\index{Макросы!\verb*+\consndstatus+}
+% Учёное звание и степень
+% \begin{macrocode}
+\def\constatus#1{\gdef\@constatus{#1}}\constatus{}
+\def\consndstatus#1{\gdef\@consndstatus{#1}}\consndstatus{}
+
+% \end{macrocode}
+%
+% \subsubsection{Названия стандартных ненумеруемых глав}
+% \begin{itemize}
+% \item Содержание
+% \DescribeMacro{\contentsname}\index{Макросы!\verb*+\contentsname+}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \addto\captionsrussian{%
+ \def\contentsname{\cyr\CYRO\cyrg\cyrl\cyra\cyrv\cyrl\cyre\cyrn\cyri\cyre}
+ }
+}
+
+% \end{macrocode}
+% \item Введение
+% \DescribeMacro{\introname}\index{Макросы!\verb*+\introname+}
+% \DescribeMacro{\intro}\index{Макросы!\verb*+\intro+}
+% \begin{macrocode}
+\providecommand*\introname{\cyr\CYRV\cyrv\cyre\cyrd\cyre\cyrn\cyri\cyre}
+\providecommand*\intro{\nchapter{\introname}}
+
+% \end{macrocode}
+% \item Обзор литературы
+% \DescribeMacro{\reviewname}\index{Макросы!\verb*+\reviewname+}
+% \begin{macrocode}
+\providecommand*\reviewname{\cyr\CYRO\cyrb\cyrz\cyro\cyrr\ %
+\cyrl\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyrery}
+\providecommand*\review{\nchapter{\reviewname}}
+
+% \end{macrocode}
+% \item Заключение
+% \DescribeMacro{\conclusionname}\index{Макросы!\verb*+\conclusionname+}
+% \DescribeMacro{\conclusion}\index{Макросы!\verb*+\conclusion+}
+% \begin{macrocode}
+\providecommand*\conclusionname{%
+\cyr\CYRZ\cyra\cyrk\cyrl\cyryu\cyrch\cyre\cyrn\cyri\cyre
+}
+\providecommand*\conclusion{\nchapter{\conclusionname}}
+
+% \end{macrocode}
+% \item Список сокращений и условных обозначений
+% \DescribeMacro{\defsname}\index{Макросы!\verb*+\defsname+}
+% \DescribeMacro{\defs}\index{Макросы!\verb*+\defs+}
+% \begin{macrocode}
+\providecommand*\defsname{%
+{\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk\ %
+\cyrs\cyro\cyrk\cyrr\cyra\cyrshch\cyre\cyrn\cyri\cyrishrt\ \cyri\ %
+\cyru\cyrs\cyrl\cyro\cyrv\cyrn\cyrery\cyrh\ %
+\cyro\cyrb\cyro\cyrz\cyrn\cyra\cyrch\cyre\cyrn\cyri\cyrishrt}
+}
+\providecommand*\defs{\nchapter{\defsname}}
+
+\AtBeginDocument{%
+ \addto\captionsrussian{\def\nomname{\defsname}}
+}
+
+% \end{macrocode}
+% \item Словарь терминов
+% \DescribeMacro{\dictname}\index{Макросы!\verb*+\dictname+}
+% \DescribeMacro{\dict}\index{Макросы!\verb*+\dict+}
+% \begin{macrocode}
+\providecommand*\dictname{%
+{\cyr\CYRS\cyrl\cyro\cyrv\cyra\cyrr\cyrsftsn\ %
+\cyrt\cyre\cyrr\cyrm\cyri\cyrn\cyro\cyrv}
+}
+\providecommand*\dict{\nchapter{\dictname}}
+
+% \end{macrocode}
+% \item Список литературы
+% \DescribeMacro{\contentsname}\index{Макросы!\verb*+\contentsname+}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \addto\captionsrussian{%
+ \def\bibname{\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk\ %
+ \cyrl\cyri\cyrt\cyre\cyrr\cyra\cyrt\cyru\cyrr\cyrery}
+ }
+}
+
+% \end{macrocode}
+% \item Список иллюстративного материала
+% \DescribeMacro{\listfigurename}\index{Макросы!\verb*+\listfigurename+}
+% \begin{macrocode}
+\AtBeginDocument{%
+ \addto\captionsrussian{%
+ \def\listfigurename{\cyr\CYRS\cyrp\cyri\cyrs\cyro\cyrk\ %
+ \cyri\cyrl\cyrl\cyryu\cyrs\cyrt\cyrr\cyra\cyrt\cyri\cyrv\cyrn\cyro%
+ \cyrg\cyro\ %
+ \cyrm\cyra\cyrt\cyre\cyrr\cyri\cyra\cyrl\cyra}
+ }
+}
+
+% \end{macrocode}
+% \end{itemize}
+%
+% \subsubsection{Элементы титульного листа}
+% \DescribeMacro{\fieldhshift}\index{Интервалы!\verb*+\fieldhshift+}
+% \begin{macrocode}
+\Dis@deflength\fieldhshift{8cm}
+
+% \end{macrocode}
+% \DescribeMacro{\namefield}\index{Макросы!\verb*+\namefield+}
+% Формат поля для подписи, имени, ученого звания и степени научных
+% руководителей, рецензентов и консультанта для бакалаврского и магистерского
+% дипломов.
+% \begin{macrocode}
+\providecommand\diplomafield[1]{%
+ \csname #1label\endcsname,\\%
+ \csname @#1status\endcsname\>
+ \makebox[\fieldhshift][l]{\hrulefill\ \csname @#1\endcsname}
+}
+% \end{macrocode}
+% Аналогичное поле для кандидатской и докторской диссертации.
+% \begin{macrocode}
+\providecommand\disserfield[1]{%
+ \begin{tabbing}
+ \hspace{\fieldhshift}\={\csname #1label\endcsname}\\
+ \>\csname @#1status\endcsname\\
+ \>\csname @#1\endcsname
+ \end{tabbing}
+}
+
+% \end{macrocode}
+%
+% \DescribeMacro{\@approved}\index{Макросы!\verb+"\"@approved+}
+% Диссертация допущена к защите
+% \begin{macrocode}
+\providecommand\@approved{
+ \begin{tabbing}
+ \hspace{8cm}\={\approved}\\
+ \>\appos\\[9pt]
+ \>\makebox[8.5cm][r]{\hrulefill\ \@apname}\\[9pt]
+ \>\makebox[1.5cm][r]{<<\hrulefill>>}
+ \makebox[7cm][r]{\hrulefill\ \@date\,\yearname}
+ \end{tabbing}
+}
+
+% \end{macrocode}
+% \DescribeMacro{\datefield}\index{Макросы!\verb*+\datefield+}
+% Поле для записи даты. Для отображения произвольного года нужно
+% присвоить значение необязательному аргументу.
+% \begin{macrocode}
+\providecommand\datefield[1][\number\year]{<<\rule[0pt]{1cm}{.5pt}>>\ %
+\rule[0pt]{3cm}{0.5pt}\ #1~\yearname}
+
+% \end{macrocode}
+% \DescribeMacro{\mkcommonsect}\index{Макросы!\verb*+\mkcommonsect+}
+% Генератор команд для общего текста диссертации и автореферата.
+% \begin{macrocode}
+\providecommand\mkcommonsect[3]{%
+ \@namedef{#1head}{#2}
+ \@namedef{#1section}{\commonsect{\expandafter\csname #1head\endcsname}%
+ \postcommonsect}
+ \@namedef{#1text}{#3}
+}
+\let\mkintrosect=\mkcommonsect
+
+% \end{macrocode}
+% \DescribeMacro{\copynum}\index{Макросы!\verb*+\copynum+}
+% \DescribeMacro{\classlabel}\index{Макросы!\verb*+\classlabel+}
+% \DescribeMacro{\classify}\index{Макросы!\verb*+\classify+}
+% Номер копии и гриф секретности.
+% \begin{macrocode}
+\def\copynum#1{\gdef\@copynum{#1}}
+\copynum{1}
+\def\classlabel#1{\gdef\@classlabel{#1}}
+\classlabel{\cyr\CYRS\cyre\cyrk\cyrr\cyre\cyrt\cyrn\cyro}
+
+\def\classify{
+ \begin{flushright}
+ \@classlabel\\
+ {\cyr\CYREREV\cyrk\cyrz.~\textnumero\,\@copynum}
+ \end{flushright}
+ \vspace{2ex}
+}
+
+% \end{macrocode}
+% \DescribeMacro{\facsimile}\index{Макросы!\verb*+\facsimile+}
+% Команда для включения графического файла с подписью диссертанта.
+% \begin{macrocode}
+\providecommand\facsimile{\vskip 6pt\includegraphics[width=3cm]{facsimile}}
+
+%</titledefs>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/titlepage.dtx b/macros/latex/contrib/disser/src/titlepage.dtx
new file mode 100644
index 0000000000..db1dc886b8
--- /dev/null
+++ b/macros/latex/contrib/disser/src/titlepage.dtx
@@ -0,0 +1,74 @@
+% \begin{macrocode}
+
+%<*titlepage>
+% \end{macrocode}
+%
+% \subsection{Титульный лист}
+%
+% Подключение констант и команд, используемых для верстки титульного листа.
+% \begin{macrocode}
+\input{titledefs.rtx}
+
+\if@titlepage
+% \end{macrocode}
+% Параметры частей титульного листа по умолчанию.
+% \DescribeMacro{\titlefont}\index{Макросы!\verb*+\titlefont+}
+% \DescribeMacro{\topiclabelfont}\index{Макросы!\verb*+\topiclabelfont+}
+% \DescribeMacro{\topicfont}\index{Макросы!\verb*+\topicfont+}
+% \DescribeMacro{\instfont}\index{Макросы!\verb*+\instfont+}
+% \begin{macrocode}
+ \newcommand\titlefont{\Large\bfseries}
+ \newcommand\topiclabelfont{\large}
+ \newcommand\topicfont{\large\bfseries}
+ \newcommand\instfont{\normalfont}
+% \end{macrocode}
+% Разделитель между названием города и годом.
+% \DescribeMacro{\cdsep}\index{Макросы!\verb*+\cdsep+}
+% \begin{macrocode}
+ \newcommand\cdsep{~-- }
+
+ \newcommand\maketitle{}
+ \setcounter{footnote}{0}
+\else
+% \end{macrocode}
+% Заголовок без отдельного титульного листа.
+% \DescribeMacro{\maketitle}\index{Макросы!\verb*+\maketitle+}
+% \begin{macrocode}
+ \newcommand\maketitle{%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@maketitle\relax
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ }
+% \end{macrocode}
+% \DescribeMacro{\@maketitle}\index{Макросы!\verb+"\"@maketitle+}
+% Команда для форматирования заголовка документа без отдельного
+% титульного листа (см. описание опции \cmd{notitlepage}).
+% \begin{macrocode}
+ \def\@maketitle{%
+ \newpage
+ \null
+ \vskip 2em%
+ \begin{center}%
+ \let\footnotesize\small
+ \let\footnote\thanks
+ {\titlefont\@title\par}%
+ \vskip 1.5em%
+ {\large\lineskip .5em%
+ \begin{tabular}[t]{c}%
+ \@author
+ \end{tabular}\par}%
+ \vskip 1em%
+ {\large \@date}%
+ \end{center}%
+ \par\vskip 1.5em%
+ }
+\fi % \if@titlepage
+%</titlepage>
+% \end{macrocode}
diff --git a/macros/latex/contrib/disser/src/toc.dtx b/macros/latex/contrib/disser/src/toc.dtx
new file mode 100644
index 0000000000..faa87c5f01
--- /dev/null
+++ b/macros/latex/contrib/disser/src/toc.dtx
@@ -0,0 +1,180 @@
+
+% \iffalse
+%%% From File: toc.dtx
+% \fi
+%
+% \begin{macrocode}
+
+%<*toc>
+% \end{macrocode}
+%
+% \subsection{Автоматически генерируемые списки (оглавление, предметный
+% указатель и т.\,д.)}
+%
+% \subsubsection{Общие параметры}
+%
+% Горизонтальный пробел между постоянной и переменной частями заголовков.
+% \DescribeMacro{\@postskip}\index{Макросы!\verb+"\"@postskip+}
+% \begin{macrocode}
+\def\@postskip{\texorpdfstring{\hskip1em}{ }}
+% \end{macrocode}
+% Длина пробела между заполнителем строки и номером страницы.
+% \DescribeMacro{\@pnumwidth}\index{Макросы!\verb+"\"@pnumwidth+}
+% \begin{macrocode}
+\newcommand\@pnumwidth{1.55em}
+% \end{macrocode}
+% Правая граница текста.
+% \DescribeMacro{\@tocrmarg}\index{Макросы!\verb+"\"@tocrmarg+}
+% \begin{macrocode}
+\newcommand\@tocrmarg{2.55em}
+% \end{macrocode}
+% Расстояние между символами (точками) в заполнителе между названием и номером
+% (в единицах mu = 1/18 em, em --- длина буквы |M| текущего шрифта).
+% \DescribeMacro{\@dotsep}\index{Макросы!\verb+"\"@dotsep+}
+% \begin{macrocode}
+\newcommand\@dotsep{4.5}
+% \end{macrocode}
+% Команда для заполнения промежутка между названием и номером страницы.
+% \DescribeMacro{\tocfill}\index{Макросы!\verb*+\tocfill+}
+% \begin{macrocode}
+\def\tocfill#1{%
+ \leaders\hbox{$\m@th\mkern\@dotsep mu\hbox{#1}\mkern\@dotsep mu$}%
+}
+
+% \end{macrocode}
+% \subsubsection{Оглавление}
+%
+% Команда, создающая заголовок в тексте.
+% \DescribeMacro{\tocsection}\index{Макросы!\verb*+\tocsection+}
+% \begin{macrocode}
+\newcommand\tocsection{\chapter*{\contentsname}}
+
+% \end{macrocode}
+% \DescribeMacro{\tableofcontents}\index{Макросы!\verb*+\tableofcontents+}
+% \begin{macrocode}
+\newcommand\tableofcontents{%
+ \if@twocolumn%
+ \@restonecoltrue\onecolumn%
+ \else\@restonecolfalse\fi%
+ \tocsection%
+ \@mkboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}%
+ \@starttoc{toc}%
+ \if@restonecol\twocolumn\fi
+ \clearpage
+}
+% \end{macrocode}
+%
+% \subsubsection{Список иллюстраций}
+%
+% Команда, создающая заголовок в тексте.
+% \DescribeMacro{\lofsection}\index{Макросы!\verb*+\lofsection+}
+% \begin{macrocode}
+\newcommand\lofsection{\nchapter{\listfigurename}}
+
+% \end{macrocode}
+% \DescribeMacro{\listoffigures}\index{Макросы!\verb*+\listoffigures+}
+% \begin{macrocode}
+\newcommand\listoffigures{%
+ \if@twocolumn\@restonecoltrue\onecolumn%
+ \else\@restonecolfalse\fi%
+ \lofsection%
+ \@mkboth{\MakeUppercase\listfigurename}{\MakeUppercase\listfigurename}%
+ \@starttoc{lof}%
+ \if@restonecol\twocolumn\fi
+}
+
+% \end{macrocode}
+% Формат элемента списка иллюстраций.
+% \begin{macrocode}
+\newcommand*\l@figure{\@dottedtocline{1}{1.5em}{2.3em}}
+
+% \end{macrocode}
+%
+% \subsubsection{Список таблиц}
+%
+% Команда, создающая заголовок в тексте.
+% \DescribeMacro{\lotsection}\index{Макросы!\verb*+\lotsection+}
+% \begin{macrocode}
+\newcommand\lotsection{\nchapter{\listtablename}}
+
+% \end{macrocode}
+% \DescribeMacro{\listoftables}\index{Макросы!\verb*+\listoftables+}
+% \begin{macrocode}
+\newcommand\listoftables{%
+ \if@twocolumn\@restonecoltrue\onecolumn%
+ \else\@restonecolfalse\fi%
+ \lotsection%
+ \@mkboth{\MakeUppercase\listtablename}{\MakeUppercase\listtablename}%
+ \@starttoc{lot}%
+ \if@restonecol\twocolumn\fi
+}
+
+% \end{macrocode}
+% Формат элемента списка таблиц.
+% \begin{macrocode}
+\let\l@table\l@figure
+
+% \end{macrocode}
+%
+% \subsubsection{Библиография}
+%
+% Окружение и заголовок будут переопределены в пакете \pkg{natbib} и далее
+% в файле \file{custom.dtx}.
+% \DescribeEnv{thebibliography}\index{Окружения!\verb*+thebibliography+}
+% \begin{macrocode}
+\newenvironment{thebibliography}[1]{}{}
+
+% \end{macrocode}
+% Величина отступа для элементов списка литературы.
+% \DescribeMacro{\bibindent}\index{Интервалы!\verb*+\bibindent+}
+% \begin{macrocode}
+\newdimen\bibindent
+\setlength\bibindent{1.5em}
+% \end{macrocode}
+% Горизонтальный пробел между различными частями элемента библиографии.
+% \DescribeMacro{\newblock}\index{Макросы!\verb*+\newblock+}
+% \begin{macrocode}
+\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}
+\let\@openbib@code\@empty
+
+% \end{macrocode}
+%
+% \subsubsection{Предметный указатель}
+%
+% Команда, создающая заголовок в тексте.
+% \DescribeMacro{\indexsection}\index{Макросы!\verb*+\indexsection+}
+% \begin{macrocode}
+\providecommand\indexsection{\twocolumn[\@makeschapterhead{\indexname}]}
+
+% \end{macrocode}
+%
+% \DescribeEnv{theindex}\index{Окружения!\verb*+theindex+}
+% \begin{macrocode}
+\newenvironment{theindex}{%
+ \if@twocolumn\@restonecolfalse%
+ \else\@restonecoltrue\fi%
+ \columnseprule \z@
+ \columnsep 35\p@
+ \indexsection%
+ \@mkboth{\MakeUppercase\indexname}{\MakeUppercase\indexname}%
+ \thispagestyle{plain}
+ \parindent\z@
+ \parskip\z@ \@plus .3\p@\relax
+ \let\item\@idxitem%
+}{\if@restonecol\onecolumn\else\clearpage\fi}
+% \end{macrocode}
+% Формат элементов.
+% \DescribeMacro{\@idxitem}\index{Макросы!\verb+"\"@idxitem+}
+% \DescribeMacro{\subitem}\index{Макросы!\verb*+\subitem+}
+% \DescribeMacro{\subsubitem}\index{Макросы!\verb*+\subsubitem+}
+% \begin{macrocode}
+\newcommand\@idxitem{\par\hangindent 40\p@}
+\newcommand\subitem{\@idxitem \hspace*{20\p@}}
+\newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
+% \end{macrocode}
+% Вертикальный пробел между элементами предметного указателя.
+% \DescribeMacro{\indexspace}\index{Макросы!\verb*+\indexspace+}
+% \begin{macrocode}
+\newcommand\indexspace{\par \vskip 10\p@ \@plus5\p@ \@minus3\p@\relax}
+%</toc>
+% \end{macrocode}