\ProvidesPackage{labcorr}

\def\@versiondate{23 вересня 2007}
\renewcommand{\thesection}{\arabic{section}}
\renewcommand{\thefigure}{\arabic{figure}}
\expandafter\ifx\csname uacorr.sty\endcsname\relax
        \expandafter\def\csname uacorr.sty\endcsname{}
\else\endinput\fi
\def\@versiondate{6 июля 1994}

% Для начала вычистим ставшие ненужными макросы
\message{Correcting math definitions,}
\let\labelenumiii\relax  % ??? Зачем это?
\let\theenumiii\relax    % и это??
%
% Теперь подправим названия тригонометрических и прочих функций
% Это - для совместимости с NFSS
\expandafter\ifx\csname selectfont\endcsname\relax
% Для старой FSS:
\def \tg {\mathop{\rm tg}\nolimits}
\def \ctg {\mathop{\rm ctg}\nolimits}
\def \cosec {\mathop{\rm cosec}\nolimits}
\def \arctg {\mathop{\rm arctg}\nolimits}
\def \arcctg {\mathop{\rm arcctg}\nolimits}
\def \sh {\mathop{\rm sh}\nolimits}
\def \ch {\mathop{\rm ch}\nolimits}
\def \th {\mathop{\rm th}\nolimits}
\def \cth {\mathop{\rm cth}\nolimits}
\else % для NFSS:
\def \tg {\mathop{\operator@font tg}\nolimits}
\def \ctg {\mathop{\operator@font ctg}\nolimits}
\def \cosec {\mathop{\operator@font cosec}\nolimits}
\def \arctg {\mathop{\operator@font arctg}\nolimits}
\def \arcctg {\mathop{\operator@font arcctg}\nolimits}
\def \sh {\mathop{\operator@font sh}\nolimits}
\def \ch {\mathop{\operator@font ch}\nolimits}
\def \th {\mathop{\operator@font th}\nolimits}
\def \cth {\mathop{\operator@font cth}\nolimits}
\fi
\let\eps\varepsilon
\let\vphi\varphi
% Определим основной стиль
%
\@ifundefined{chapter}{\def\@mainstyle{A}}{% это не статья
\@ifundefined{abstractname}{\def\@mainstyle{B}}% это не report
{\def\@mainstyle{R}}}
%
% Теперь подправим заголовки
\def\chaptername\relax
\message{heading names,}
\def\contentsname{Зміст}
%\def\chaptername{{\cyr\CYRP\cyri\cyrz\cyrd\cyria\cyrl}}
\def\listfigurename{Список рисунків}
\def\listtablename{Список таблиць}
\def\refname{Література}
\def\bibname{Література}
\def\indexname{Предметний покажчик}
\def\tablename{{Таблиця}}
\def\abstractname{Анотація}
\def\partname{}     % Надеюсь, это не займет слишком много
\def\mychaptername{Лабораторна робота №}
% Определим команду для диакритического знака,
% как над \aa
\message{accents,}
\def\oo#1{{\accent23 #1}}
%
% Теперь займемся секциями и главами.
% Пусть первый абзац после начала главы будет с отступом.
%
\message{headings,}
\def\chapter{ % Для экономии бумаги - вместо \cleardoublepage
   \global\@topnum\z@
   \@afterindenttrue % Здесь изменение (было \@afterindentfalse)
   \secdef\@chapter\@schapter}
%
% Пусть и первый абзац после начала секции, подсекции и подподсекции
% будет с отступом, но при этом мы сохраним возможность
% возврата к стандарту: для этого надо в трех слеующих \def'ах
% поменять на минус знак четвертого аргумента команды \@startsection
% (например, {-3.5ex plus-1ex minus-.2ex} для \section ).
%
% Приятно отметить, что эти определения НЕ ЗАВИСЯТ от стиля и кегля,
% даром что спрятаны в art12.sty и тому подобных мрачных местах!
%

\def\section{\@startsection {section}{1}{\z@}
{3.5ex plus1ex minus .2ex} 	%величина вертикального відступу перед заголовком
{2.3ex plus.2ex}						%величина вертикального відступу після заголовком
{\reset@font\normalfont\bf}}

\def\subsection{\@startsection{subsection}{2}{\z@}
{3.25ex plus1ex minus.2ex} 	%величина вертикального відступу перед заголовком
{1.5ex plus.2ex} 						%величина вертикального відступу після заголовком
{\reset@font\large\bf}}

\def\subsubsection{\@startsection{subsubsection}{3}{\z@}
{3.25ex plus 1ex minus.2ex} %величина вертикального відступу перед заголовком
{1.5ex plus.2ex} 						%величина вертикального відступу після заголовком
{\reset@font\normalsize\bf}}
%
% С секциями, кроме абзацного отступа в первом абзаце,
% устроим еще так, чтобы в заголовках после номера ставилась точка.
% Например: 4.3. Кое-что о слонах
%
% Чтобы сохранить возможность возврата к стандарту,
% введем команды \aftersectionseparator и т.п. (см. ниже)
% и определим их точкой. Чтобы вернуться к сандарту, надо переопределить
% их на \relax или {}
% Можно определить их и еще как-нибудь, если такое взбредет в голову.
%
% Заметим, что, если просто сказать что-нибудь наподобие
%  \def\thesection{\arabic{chapter}.\arabic{section}.} ,
% то возникнут проблемы с \label и \ref .
%
\def\@aftersepkern{\kern-.5em}
\def\postchapter{.}
\def\postsection{.\@aftersepkern}
\def\postsubsection{.\@aftersepkern}
\def\postsubsubsection{.\@aftersepkern}
\def\postparagraph{.\@aftersepkern}
\def\postsubparagraph{.\@aftersepkern}
\def\presection{}
\def\presubsection{}
\def\presubsubsection{}
\def\preparagraph{}
\def\presubparagraph{}
%
%  Приступим к постановке точек после номеров...
%
\def\@sect#1#2#3#4#5#6[#7]#8{\ifnum #2>\c@secnumdepth
     \let\@svsec\@empty\else
     \refstepcounter{#1}\edef\@svsec{%
     \csname pre#1\endcsname % Добавил строку
     \csname the#1\endcsname
     \csname post#1\endcsname % Добавил строку
\hskip 1em}\fi
     \@tempskipa #5\relax
      \ifdim \@tempskipa>\z@
        \begingroup #6\relax
          \@hangfrom{\hskip #3\relax\@svsec
                   }{\interlinepenalty \@M \ignorespaces#8\par}%
% Вставил в предыдущей строке \ignorespaces
% Здесь и далее такие добавки - против лишних пробелов, появляющихся,
% если аргумент sectioning-команды начинается с пробела.
        \endgroup
       \csname #1mark\endcsname{\protect\ignorespaces #7}\addcontentsline
% Добавил два token'а перед #7
         {toc}{#1}{\ifnum #2>\c@secnumdepth \else
                      \protect\numberline{\csname the#1\endcsname
                     \csname post#1\endcsname % Добавил строку
}\fi
\protect\ignorespaces #7}\else
% Добавил два token'а перед #7
        \def\@svsechd{#6\hskip #3\relax  %% \relax added 2 May 90
                   \@svsec #8\csname #1mark\endcsname
                      {\protect\ignorespaces #7}\addcontentsline
% Добавил два token'а перед #7
                           {toc}{#1}{\ifnum #2>\c@secnumdepth \else
                             \protect\numberline{\csname the#1\endcsname
                          \csname post#1\endcsname % Добавил строку
}\fi
\protect\ignorespaces #7}}\fi
% Добавил два token'а перед #7
     \@xsect{#5}}
\def\@ssect#1#2#3#4#5{\@tempskipa #3\relax
   \ifdim \@tempskipa>\z@
     \begingroup #4\@hangfrom{\hskip #1}{\interlinepenalty \@M
\ignorespaces #5\par}\endgroup % добавил \ignorespaces перед #5
   \else \def\@svsechd{#4\hskip #1\relax
\ignorespaces #5}\fi % добавил \ignorespaces перед #5
    \@xsect{#3}}
% После номеров глав тоже пусть стоят точки:
% Задається формат стилю глави
\def\@makechapterhead#1{%
{
    \ifnum \c@secnumdepth >\m@ne
     \centerline{\it \mychaptername \thechapter \postchapter} 
     % добавлено \postchapter %Друкується слово Лабораторна робота № з форматом
    \par
    \vskip 1\p@ \fi
    \bf
    \ignorespaces \begin{center} #1 \end{center} % добавил \ignorespaces
}}%
\def\@makeschapterhead#1{%
  \vspace*{5\p@}%
  {\parindent \z@ \raggedright
    \Huge \bf
    \ignorespaces #1\par % добавил \ignorespaces
    \nobreak
    \vskip 5\p@
  }}
%
% Сделаем так, чтоб в оглавлении точки шли и после номеров глав...
%
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
        \refstepcounter{chapter}%
        \typeout{\mychaptername \space\thechapter.}%
        \addcontentsline{toc}{chapter}{\protect
        \numberline{\thechapter
              \postchapter % Добавил строку
}%
\protect\ignorespaces #1}\else % Добавил два token'а перед #1
      \addcontentsline{toc}{chapter}{\protect\ignorespaces#1}\fi
% В предыдущей строчке вставлено два token'а перед #1
   \chaptermark{\protect\ignorespaces #1}%
   \addtocontents{lof}%
       {\protect\addvspace{10\p@}} % Adds between-chapter space
   \addtocontents{lot}%
       {\protect\addvspace{10\p@}} % to lists of figs & tables.
   \if@twocolumn                   % Tests for two-column mode.
           \@topnewpage[\@makechapterhead{#2}]%
     \else \@makechapterhead{#2}%
           \@afterheading          % Routine called after chapter and
     \fi}                          % section heading.
%
% Теперь подправим подписи к рисункам и таблицам
%
\message{captions,}
\long\def\@makecaption#1#2{% Стиль підпису рисунку
  \vskip 10\p@
  \small\it\setbox\@tempboxa\hbox {#1. #2}% Заменили двоеточие на точку...
  \ifdim \wd\@tempboxa >\hsize
      \unhbox\@tempboxa\par
    \else
      \centerline{\box\@tempboxa}\fi}
\long\def\@caption#1[#2]#3{\par\addcontentsline{\csname
  ext@#1\endcsname}{#1}{\protect\numberline{\csname
  the#1\endcsname.}{\ignorespaces #2}}\begingroup
    \@parboxrestore
    \normalsize
    \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
  \endgroup}
%% Мы опять определим \afterthmseparator и инициализируем
% его точкой. Для возврата к стандарту - переопределить
% его на \relax
%
%
% Следующая проблема - поставить точки после номеров "теорем".
% Мы опять определим \afterthmseparator и инициализируем
% его точкой. Для возврата к стандарту - переопределить
% его на \relax
%
\message{theorems,}
\def\afterthmseparator{.}
\def\@begintheorem#1#2{\trivlist \item[\hskip \labelsep{\bf
#1\ #2\unskip\afterthmseparator}]\it} % вставил 2 token'а после #2
\def\@opargbegintheorem#1#2#3{\trivlist
      \item[\hskip \labelsep{\bf
#1\ #2\ (#3)\afterthmseparator}]\it} % вставил token после (#3)
%
% Поправим колонтитулы (та же точка после номера).
\message{running heads,}
\if A\@mainstyle % стиль - article (вставлено ".\@aftersepkern" после номера)
  \if@twoside
   \def\ps@headings{\let\@mkboth\markboth
    \def\@oddfoot{}\def\@evenfoot{}%       No feet.
    \def\@evenhead{\rm \thepage\hfil \sl \leftmark}%        Left heading.
    \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Right heading.
    \def\sectionmark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\z@
      \thesection\postsection \hskip 1em\relax \fi ##1}}{}}%
    \def\subsectionmark##1{\markright {\ifnum \c@secnumdepth >\@ne
            \thesubsection\postsubsection \hskip 1em\relax \fi ##1}}}
  \else
   \def\ps@headings{\let\@mkboth\markboth
    \def\@oddfoot{}\def\@evenfoot{}%     No feet.
    \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Heading.
    \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
      \thesection\postsection \hskip 1em\relax \fi ##1}}}}
  \fi
\else\if R\@mainstyle % стиль=report. Два пробела после точки заменены на один.
  \if@twoside
  \def\ps@headings{\let\@mkboth\markboth
   \def\@oddfoot{}\def\@evenfoot{}%       No feet.
   \def\@evenhead{\rm \thepage\hfil \sl \leftmark}%        Left heading.
   \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Right heading.
   \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne
        \@chapapp\ \thechapter. \fi ##1}}{}}%
   \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
     \thesection. \fi ##1}}}}
  \else
  \def\ps@headings{\let\@mkboth\markboth
  \def\@oddfoot{}\def\@evenfoot{}%     No feet.
  \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Heading.
  \def\chaptermark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\m@ne
    \@chapapp\ \thechapter. \fi ##1}}}}
  \fi
\else % стиль=book (два пробела после точки заменены на один)
\def\ps@headings{\let\@mkboth\markboth
 \def\@oddfoot{}\def\@evenfoot{}%       No feet.
 \def\@evenhead{\rm \thepage\hfil \sl \leftmark}%        Left heading.
 \def\@oddhead{{\sl \rightmark}\hfil \rm\thepage}% Right heading.
 \def\chaptermark##1{\markboth {\uppercase{\ifnum \c@secnumdepth >\m@ne
      \@chapapp\ \thechapter. \fi ##1}}{}}%
 \def\sectionmark##1{\markright {\uppercase{\ifnum \c@secnumdepth >\z@
   \thesection. \fi ##1}}}}
\fi\fi
%
% Подправим команду \appendix : нумерация русскими буквами,
% а не латинскими.
\message{appendix,}
\if A\@mainstyle
\def\appendix{\par
  \setcounter{section}{0}%
  \setcounter{subsection}{0}%
  \def\thesection{\Ralph{section}}}
\else
\def\appendix{\par
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \def\@chapapp{\appendixname}%
  \def\thechapter{\Ralph{chapter}}}
\fi

% Подправим еще одну feature: \cleardoublepage выдает на
% пустой странице колонтитул, оставшийся от предыдущего раздела.
% Сделаем так, чтобы этого не было...
\message{\string\output,}
\def\cleardoublepage{\clearpage\if@twoside \ifodd\c@page\else
   {\null\ps@empty % добавил \ps@empty (и заодно заменил \hbox{} на \null )
\newpage}\if@twocolumn\hbox{}\newpage\fi\fi\fi}

%
% Подправим \enddocument: будем подсчитывать общее количество
% страниц и выдавать сообщение "labels may have changed" по-русски
%
\message{\string\enddocument,}
\def\@refswarning{\@@warning{%
Чтобы получить корректные ссылки, запустите LaTeX еще раз-другой}}
\let\@@global\global
\@definecounter{totalpages}
\c@totalpages\m@ne
\newif\if@pagecntsw % true, если надо подсчитывать количество страниц
\def\countpages{\global\@pagecntswtrue}
\def\dontcountpages{\global\@pagecntswfalse}
\dontcountpages
\def\enddocument{\@checkend{document}\clearpage
\begingroup
 \if@filesw
   \advance\c@page\m@ne % \c@page==(total number of pages)
   \immediate\write\@mainaux
   {\string\@@global\string\c@totalpages\number\c@page\relax}%
 \fi
 \if@filesw \immediate\closeout\@mainaux
   \def\global\@namedef##1##2{}\def\newlabel{\@testdef r}%
   \def\@@global\c@totalpages##1\relax{%
     \@tempcnta\z@
     \if@pagecntsw
       \ifnum
         \c@totalpages=##1\else\@tempcnta\@ne
       \fi
     \fi
   }% end of \def\@@global
   \def\bibcite{\@testdef b}\@tempswafalse \makeatletter\input \jobname.aux
    \if@tempswa
      \@refswarning
      \else
       \ifodd\@tempcnta\@refswarning\fi
    \fi
 \fi
\endgroup\deadcycles\z@\@@end}
%
% Теперь подкорректируем размеры страницы по высоте
% (в соответствии с рекомендациями А.Шеня)
%
\message{page size,}
\def\@margcorrx{-30}\def\@heightcorrx{60}% для 10 пунктов
\def\@margcorrxi{-34}\def\@heightcorrxi{68}% для 11 пунктов
\def\@margcorrxii{-30}\def\@heightcorrxii{60}% для 12 пунктов
\@tempcnta\@ptsize\advance\@tempcnta10%
%    Значение \@tempcnta равно кеглю
\advance\topmargin\@nameuse{@margcorr\romannumeral\@tempcnta}\p@
\advance\textheight\@nameuse{@heightcorr\romannumeral\@tempcnta}\p@
%
%
% Определим команды \ralph и \Ralph, аналогичные \alph и \Alph,
% но с русскими буквами. Естественно, \"е, й, ъ, ы, ь пропускаются.
\message{counters,}
\def\prefix#1#2{\@ifundefined{c@#1}{\@nocnterr}%
{\expandafter\def\csname p@#1\endcsname{#2}}}
\def\ralph#1{\@ralph{\@nameuse {c@#1}}}
\def\@ralph#1{\ifcase #1\or а\or б\or в\or г\or д\or е\or є\or ж\or з\or і\or ї\or
и\else\@iralph{#1}\fi
}
\def\@iralph#1{\ifcase #1\or\or\or\or\or\or\or\or\or\or
     к\or л\or м\or н\or о\or п\or р\or с\or т\or у\or
     ф\or х\or ц\or ч\or ш\or щ\or э\or ю \or я\else\@ctrerr
     \fi}
\def\Ralph#1{\@Ralph{\@nameuse {c@#1}}}
\def\@Ralph#1{\ifcase #1%
     \or А\or Б\or В\or Г\or Д\or Е\or Є\or Ж\or З\or І\or Ї\or
     И\else\@iRalph{#1}\fi}
\def\@iRalph#1{\ifcase #1%
     \or\or\or\or\or\or\or\or\or\or К\or Л\or М\or
     Н\or О\or П\or Р\or С\or Т\or У\or Ф\or Х\or Ц\or
     Ч\or Ш\or Щ\or Э\or Ю \or Я\else\@ctrerr
     \fi}
\message{lists,}
% Теперь "русифицируем" окружение enumerate:
\def\labelenumi{\theenumi.}      % чтобы после номера шла скобка;
\def\theenumii{\ralph{enumii}}   % чтобы на втором уровне шли русские,
\def\labelenumii{\theenumii.}    % а не латинские буквы
\def\p@enumii{\theenumi}         % а это для \ref
\def\labelenumiii{{\bf--}}       % а на третьем уровне пусть будут лишь тире,
\let\theenumiii\relax            % и отдельных ссылок на него не будет
\def\p@enumiii{\theenumi\theenumii}
%
% И еще запретим вкладывать четыре enumerate друг в друга ...
%
\def\enumerate{\ifnum \@enumdepth >2% было 3, а не 2
\@toodeep\else
      \advance\@enumdepth \@ne
      \edef\@enumctr{enum\romannumeral\the\@enumdepth}\list
      {\csname label\@enumctr\endcsname}{\usecounter
        {\@enumctr}\def\makelabel##1{\hss\llap{##1}}}\fi}
%
% Теперь определим окружение rlist
% для создания списков, в которых
% \item'ы нумеруются русскими буквами
% (строчными для rlist, прописными для rlist[u])
%
\@definecounter{rlistctr}
\newif\if@rlistsnested\@rlistsnestedfalse % последняя команда вроде бы
% избыточна, но Lamport в аналогичных ситуациях так делает
\def\rlist{\@ifnextchar[{\@rlist}{\@rlist[l]}}
\def\@rlist[#1]{\if u#1\def\@tempa{R}\else\def\@tempa{r}\fi
                \if@rlistsnested\@toodeep\else
                \@rlistsnestedtrue
                \edef\therlistctr{\expandafter\noexpand\csname
                                @\@tempa alph\endcsname\noexpand\c@rlistctr}%
                \list{\labelrlist}{\usecounter
                   {rlistctr}}\fi}
\let\endrlist\endlist
\def\labelrlist{\therlistctr)}
%
% А теперь определим кавычки-"лапки"
%
\message{quotes,}
%
% !!!! Отсюда и до второго вхождения !!!! все сперто из german.sty
\def\set@low@box#1{\setbox\tw@\hbox{,}\setbox\z@\hbox{#1}\dimen\z@\ht\z@
     \advance\dimen\z@ -\ht\tw@
     \setbox\z@\hbox{\lower\dimen\z@ \box\z@}\ht\z@\ht\tw@ \dp\z@\dp\tw@ }
%    (this lowers the german left quotes to the same level as the comma.)
\def\@glqq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
     \let\@SF\empty \fi \leavevmode
     \set@low@box{''}\box\z@\kern-.04em\@allowhyphens\@SF\relax}}
\def\glqq{\protect\@glqq}
\def\@grqq{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
     \let\@SF\empty \fi \kern-.07em``\kern.07em\@SF\relax}
\def\grqq{\protect\@grqq}
\def\@glq{{\ifhmode \edef\@SF{\spacefactor\the\spacefactor}\else
     \let\@SF\empty \fi \leavevmode
     \set@low@box{'}\box\z@\kern-.04em\@allowhyphens\@SF\relax}}
\def\glq{\protect\@glq}
\def\@grq{\kern-.07em`\kern.07em}
\def\grq{\protect\@grq}
% !!!!
%
% А теперь определим кавычки-"елочки" и знак номера.
% Это совсем просто после того, как в шрифты добавлены
% соответствующие символы.
%
% Три следующих обозначения --- на случай,
% если русские буквы не так и не станут буквами...
\expandafter\ifx\csname flqq\endcsname\relax\chardef\flqq=192 \fi
\expandafter\ifx\csname frqq\endcsname\relax\chardef\frqq=193 \fi
\expandafter\ifx\csname No\endcsname\relax\chardef\No=194 \fi
% А это -- нормальные обозначения:
\expandafter\ifx\csname documentclass\endcsname\relax
\expandafter\ifx\csname лк\endcsname\relax\chardef\лк=192 \fi
\expandafter\ifx\csname пк\endcsname\relax\chardef\пк=193 \fi
\expandafter\ifx\csname номер\endcsname\relax\chardef\номер=194 \fi
\fi
%
% По пожеланиям трудящихся:
\expandafter\ifx\csname documentclass\endcsname\relax
\def\сегодня{\number\day\space
                \ifcase\month\or
                 січня\or лютого\or березня\or квітня\or травня\or
                 червня\or липня\or серпня\or вересня\or жовтня\or
                 листопада\or грудня\fi\space\number\year}
\fi
\endinput