%\iffalse
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%% disser -- LaTeX document class for dissertations.
%%
%% Copyright (c) 2004-2007 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.dtx}
%<*driver>
\documentclass{ltxdoc}
\usepackage[a4paper, includehead, includefoot, mag=1000,
            left=4cm, right=1.5cm, top=1cm, bottom=2cm]{geometry}
\usepackage[T2A]{fontenc}
\usepackage[cp1251]{inputenc}
\usepackage[english,russian]{babel}

\usepackage[unicode,
    pdftitle = {Documented source code of the disser package},
    pdfauthor = {Stanislav Kruchinin},
    pdfsubject = {disser},
    pdfstartview = {FitH},
    pdfborder          = {0 0 0},
    bookmarksopen      = true,
    bookmarksnumbered  = true,
    bookmarksopenlevel = 2
  ]{hyperref}
\usepackage{cmap}

\let\package\textsf
\IfFileExists{pscyr.sty}{%
  \usepackage{pscyr}
  \renewcommand\ttdefault{cmtt}
  \renewcommand\rmdefault{ftm}
}{}
\usepackage{doc}
\IfFileExists{url.sty}{\RequirePackage{url}}{\newcommand\url{\texttt}}

\hypersetup{
  colorlinks = true,
  colorlinks = true,
  linkcolor  = black, citecolor=blue,
  filecolor  = blue, menucolor=blue,
  pagecolor  = blue, urlcolor=blue
}

%\OnlyDescription                  % uncomment to suppress code line listing
\RecordChanges                    % uncomment for a change history
%\CodelineIndex\EnableCrossrefs    % uncomment for command index

\MakeShortVerb{\|}
\parindent=0pt

\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{titlepage.dtx}
  \DocInput{bachelor.dtx}
  \DocInput{master.dtx}
  \DocInput{candidate.dtx}
  \DocInput{doctor.dtx}
  \DocInput{autoref.dtx}
  \DocInput{toc.dtx}
  \DocInput{custom.dtx}
  \DocInput{gost732.dtx}
  \PrintChanges
\end{document}
%</driver>
% \fi
%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%  \def\fileversion{1.0.3}
%
%  \title{|disser| "--- класс \LaTeX{} для оформления диссертаций}
%  \author{Станислав Кручинин\\[6pt]
%  \normalsize E-mail:
%  \href{mailto:stas@crypt.org.ru}{\texttt{stas@crypt.org.ru}}}
%  \date{Версия \fileversion}
%
%  \maketitle
%
%  \begin{abstract}\noindent
%  Данный документ содержит описание исходных текстов.
%  Инструкции по установке смотрите в файлах |README| и |README.ru|.
%  \end{abstract}
%
%  \tableofcontents
%
%  \section{Введение}
%
%  Класс |disser| был создан в результате объединения множества дополнений и
%  исправлений для |extreport|, написанных автором при оформлении
%  бакалаврской и магистерской работ по физике. Основной целью являлось
%  устранение одного из главных недостатков стандартных классов ---
%  отсутствия возможности прямого изменения формата элементов титульного
%  листа, заголовков и записей в автоматически генерируемых списках
%  (содержание, список иллюстраций, список таблиц). Предполагается, что
%  пользователи будут активно изменять текст в соответствии со своими
%  требованиями, поэтому он разбит на несколько файлов и снабжен подробными
%  комментариями.
%
%  \section{Исходный текст}
%
%    \begin{macrocode}

%<disser>\NeedsTeXFormat{LaTeX2e}
%<disser>\ProvidesClass{disser}[2007/06/15 Document class for dissertations.]
%<disser>\ProvidesPackage{disser}

%<bachelor>\ProvidesFile{bachelor.rtx}
%<master>\ProvidesFile{master.rtx}
%<candidate>\ProvidesFile{candidate.rtx}
%<doctor>\ProvidesFile{doctor.rtx}
%<autoref>\ProvidesFile{autoref.rtx}
%<titledefs>\ProvidesFile{titledefs.rtx}

%<*disser>
%    \end{macrocode}
% Расширение включаемых файлов.
%    \begin{macrocode}
\def\substyle@ext{.rtx}
%    \end{macrocode}
% Определение условий.
% \begin{itemize}
% \item |true|, если включена опция, оставляющая одну колонку при
% двухколонном наборе.
%    \begin{macrocode}
\newif\if@restonecol
%    \end{macrocode}
% \item |true|, если разрешена титульная страница.
%    \begin{macrocode}
\newif\if@titlepage\@titlepagetrue
%    \end{macrocode}
% \item Соответствующие типы диссертаций.
%    \begin{macrocode}
\newif\if@bachelor\@bachelorfalse
\newif\if@master\@masterfalse
\newif\if@candidate\@candidatefalse
\newif\if@doctor\@doctorfalse
\newif\if@autoref\@autoreffalse
%    \end{macrocode}
% \item |true|, если главы начинаются только с нечетных страниц.
%    \begin{macrocode}
\newif\if@openright
%    \end{macrocode}
% \item |true|, если подключается |hyperref|.
%    \begin{macrocode}
\newif\ifhref\hreffalse
%    \end{macrocode}
% \item |true|, если файл обрабатывается pdf\LaTeX{}.
%    \begin{macrocode}
\newif\ifpdf
  \ifx\pdfoutput\undefined
  \else
    \ifx\pdfoutput\relax
    \else
      \ifcase\pdfoutput
      \else
        \pdftrue
      \fi
    \fi
  \fi

\newif\ifsubf\subffalse

%    \end{macrocode}
% \end{itemize}
% \subsection{Опции класса}
%
% Размер листов.
%    \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{17pt}{\renewcommand\@ptsize{17}}
\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}
% Использовать в тексте и формулах шрифт Times вместо Computer Modern Roman.
%    \begin{macrocode}
\DeclareOption{times}{
  \AtEndOfPackage{%
    \usepackage{pscyr}
%    \end{macrocode}
% Пакет |txfonts| необходимо подключать \textbf{после} |pscyr| для
% корректного определения символов, составленных из двух других (таких как
% $\hbar$ и $\neq$).
%    \begin{macrocode}
    \usepackage{txfonts}
%    \end{macrocode}
% Установка Times как шрифта по умолчанию.
%    \begin{macrocode}
    \renewcommand{\rmdefault}{ftm}
  }
}
%    \end{macrocode}
% Если указана эта опция, то блоки текста в списке литературы будут печататься на новых строках и с отступом.
%    \begin{macrocode}
\DeclareOption{openbib}{%
  \AtEndOfPackage{%
    \renewcommand\@openbib@code{%
      \advance\leftmargin\bibindent
      \itemindent -\bibindent
      \listparindent \itemindent
      \parsep \z@
    }%
    \renewcommand\newblock{\par}
  }%
}
%    \end{macrocode}
% Включение пакета |hyperref| и необходимых настроек.
%    \begin{macrocode}
\DeclareOption{href}{\hreftrue}

%    \end{macrocode}
% Включение пакета |subfigure| и необходимых настроек.
%    \begin{macrocode}
\DeclareOption{subf}{\subftrue}

%    \end{macrocode}
% Тип диссертации.
%    \begin{macrocode}
\DeclareOption{bachelor}{%
  \@bachelortrue\@masterfalse\@candidatefalse\@doctorfalse\@autoreffalse
}
\DeclareOption{master}{%
  \@bachelorfalse\@mastertrue\@candidatefalse\@doctorfalse\@autoreffalse
}
\DeclareOption{candidate}{%
  \@bachelorfalse\@masterfalse\@candidatetrue\@doctorfalse\@autoreffalse
}
\DeclareOption{doctor}{%
  \@bachelorfalse\@masterfalse\@candidatefalse\@doctortrue\@autoreffalse
}
\DeclareOption{autoref}{%
  \@bachelorfalse\@masterfalse\@candidatefalse\@doctorfalse\@autoreftrue
}
%    \end{macrocode}
% Команды изменения регистра.
% \DescribeMacro{\MakeTextUppercase}
%    \begin{macrocode}
\DeclareRobustCommand\MakeTextUppercase{%
  \@uclcnotmath{\def\i{I}\def\j{J}}{##1##2}\uppercase}

\protected@edef\MakeTextUppercase#1{\MakeTextUppercase{#1}}

%    \end{macrocode}
% \DescribeMacro{\MakeTextLowercase}
%    \begin{macrocode}
\DeclareRobustCommand\MakeTextLowercase{%
  \@uclcnotmath{}{##2##1}\lowercase}

\protected@edef\MakeTextLowercase#1{\MakeTextLowercase{#1}}

%    \end{macrocode}
% Выполнение опций по умолчанию.
%    \begin{macrocode}
\ExecuteOptions{a4paper,14pt,oneside,titlepage,onecolumn,final,openany}
%    \end{macrocode}
% Выполнение пользовательских опций.
%    \begin{macrocode}
\ProcessOptions
%    \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}
%
% \subsection{Параметры текста}
%
% Вертикальный интервал между строками. Упоминаемый здесь и далее макрос |\p@|
% определяет единицу длины. По умолчанию она равна английскому пункту (pt).
% \DescribeMacro{\lineskip}
% \DescribeMacro{\normallineskip}
%    \begin{macrocode}
\setlength\lineskip{1\p@}
\setlength\normallineskip{1\p@}
%    \end{macrocode}
%
% \DescribeMacro{\singlespacing}
% \DescribeMacro{\onehalfspacing}
% \DescribeMacro{\doublespacing}
% Команды задания величины межстрочного интервала.
%    \begin{macrocode}
\newcommand\singlespacing {\renewcommand\baselinestretch{1}}
\newcommand\onehalfspacing{\renewcommand\baselinestretch{1.5}}
\newcommand\doublespacing {\renewcommand\baselinestretch{2}}
%    \end{macrocode}
% Установка межстрочного интервала по умолчанию.
%    \begin{macrocode}
\onehalfspacing\normalsize
%    \end{macrocode}
% Интервал между абзацами (добавляется к межстрочному).
% \DescribeMacro{\parskip}
%    \begin{macrocode}
\setlength\parskip{0\p@ \@plus \p@}
%    \end{macrocode}
%
% \subsection{Параметры размещения плавающих объектов на странице}
% \subsubsection{Количество объектов}
%   \begin{itemize}
%   \item Максимальное количество плавающих объектов, размещаемое вверху
% страницы (при двухколонном наборе --- вверху колонки).
%    \begin{macrocode}
\setcounter{topnumber}{2}
%    \end{macrocode}
%   \item Максимальное количество плавающих объектов, размещаемое внизу
% страницы (при двухколонном наборе --- внизу колонки).
%    \begin{macrocode}
\setcounter{bottomnumber}{1}
%    \end{macrocode}
%   \item Максимальное количество плавающих объектов, размещаемое
%   на странице (при двухколонном наборе --- в колонке).
%    \begin{macrocode}
\setcounter{totalnumber}{3}
%    \end{macrocode}
%   \item При наборе в две колонки: максимальное количество плавающих
%   объектов шириной во всю страницу, которое разрешается разместить вверху
%   страницы
%    \begin{macrocode}
\setcounter{dbltopnumber}{2}
%    \end{macrocode}
%   \end{itemize}
%
% \subsubsection{Величина места, занимаемого плавающими объектами}
%   \begin{itemize}
%   \item Максимальная доля страницы по высоте, которую могут занимать
%   плавающие объекты, размещаемые вверху страницы.
%   \DescribeMacro{\topfraction}
%    \begin{macrocode}
\renewcommand\topfraction{.7}
%    \end{macrocode}
%   \item Максимальная доля страницы по высоте, которую могут занимать
%   плавающие объекты, размещаемые внизу страницы.
%   \DescribeMacro{\bottomfraction}
%    \begin{macrocode}
\renewcommand\bottomfraction{.3}
%    \end{macrocode}
%   \item Минимальная доля страницы, которую должен занимать текст, а не
%   плавающие объекты на обычной странице (к страницам, создаваемым
%   \LaTeX{}'ом
%   специально для размещения плавающих объектов при обработке
%   необязательного аргумента |p|, это не относится).
%   \DescribeMacro{\bottomfraction}
%    \begin{macrocode}
\renewcommand\textfraction{.2}
%    \end{macrocode}
%   \item Параметр, аналогичный предыдущему, относящийся к страницам для
%   плавающих объектов.
%   \DescribeMacro{\floatpagefraction}
%    \begin{macrocode}
\renewcommand\floatpagefraction{.5}
%    \end{macrocode}
%   \item Тоже, что |\topfraction|, применительно к иллюстрациям (таблицам)
%   шириной в целую страницу при двухколонном наборе.
%   \DescribeMacro{\dbltopfraction}
%    \begin{macrocode}
\renewcommand\dbltopfraction{.7}
%    \end{macrocode}
%   \item Тоже, что |\floatpagefraction|, применительно к иллюстрациям
%   (таблицам) шириной в целую страницу при двухколонном наборе.
%   \DescribeMacro{\dblfloatpagefraction}
%    \begin{macrocode}
\renewcommand\dblfloatpagefraction{.5}
%    \end{macrocode}
%   \end{itemize}
% Максимальный уровень вложенности заголовков, помещаемых в Содержание
% (по умолчанию вносятся только |\part|, |\chapter| и |\section|).
% \DescribeMacro{tocdepth}
%    \begin{macrocode}
\setcounter{tocdepth}{1}
%    \end{macrocode}
% Максимальный уровень вложенности нумеруемых секций
% (по умолчанию нумеруются |\part|, |\chapter|, |\section| и |\subsection|).
% \DescribeMacro{secnumdepth}
%    \begin{macrocode}
\setcounter{secnumdepth}{2}
%    \end{macrocode}
% Описание структуры постоянных частей заголовков
% \begin{itemize}
% \item в тексте,
% \DescribeMacro{\@seccntformat}
%    \begin{macrocode}
\def\@seccntformat#1{%
  \csname prethe#1\endcsname%
  \csname the#1\endcsname%
  \csname postthe#1\endcsname%
}
%    \end{macrocode}
% \item в Содержании.
% \DescribeMacro{\@tocseccntformat}
%    \begin{macrocode}
\def\@tocseccntformat#1{%
  \csname tocprethe#1\endcsname%
  \csname tocthe#1\endcsname%
  \csname tocpostthe#1\endcsname%
}

%    \end{macrocode}
% \end{itemize}
% Характерные величины штрафов. Штраф --- мера <<красоты>> разбиения
% абзаца на строки. Чем больше величина, тем менее красиво.
%    \begin{macrocode}
\@lowpenalty   51
\@medpenalty  151
\@highpenalty 301
%</disser>
%    \end{macrocode}
