% Стилевой файл для оформления статей 
% в серию "Вычислительная математика информатика"
% научного журнала "Вестник Южно-Уральского государственного университета"
% E-mail для вопросов и предложений: vestnikvmi@gmail.com

% TODO: подписи к таблице (выравнивание влево в одну строку)

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{cmi}
\LoadClass[twoside, 11pt, a4paper]{article}

% --- кодировка и язык ---
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}
\usepackage[unicode=true,linktocpage=true]{hyperref}
%\usepackage[none]{hyphenat}
%\usepackage{textcomp}
\usepackage{mmap} % Включает CMap-таблицу в русскоязычный PDF, чтобы функции поиска и копирования работали правильно
\usepackage{array}
\usepackage{ragged2e}

% --- размеры шрифтов ---
\renewcommand{\large}{\fontsize{16pt}{19.6pt}\selectfont}{\bf} % заголовок статьи, заголовок 1
\renewcommand{\large}{\fontsize{12pt}{16.8pt}\selectfont} % авторы, заголовок 2, заголовок 3
\renewcommand{\footnotesize}{\fontsize{9pt}{12.6pt}\selectfont} % аннотация, сноски
\renewcommand{\normalsize}{\fontsize{11pt}{15.4pt}\selectfont} % основной текст, подписи к рисункам и таблицам, список литературы, сведения о грантах
\renewcommand{\small}{\fontsize{10pt}{14pt}\selectfont} % код

% --- подсчёт количества разных сущностей ---
\usepackage{totcount}
\regtotcounter{table}
\regtotcounter{figure}

% --- картинки ---
\usepackage{graphicx, epstopdf}
\graphicspath{{pic/}}

% --- красная строка в первом абзаце раздела ---
\usepackage{indentfirst}

\usepackage{enumitem, changepage, fancyvrb}

% --- пробелы между ссылками на литературу ---
\usepackage[space]{cite}

\usepackage{amsfonts, amsmath, amssymb, amsthm}
%\usepackage{showframe} % показывать все поля для отладки стилей

% --- acknowledgements ---
\newcommand\ack[1]{
	\vspace{1em}
	{\it
		#1
		
	}
}

\newcommand\openaccess{%
	\ack{This paper is distributed under the terms of the Creative Commons
		Attribution-Non Commercial 4.0 License which permits non-commercial
		use, reproduction and distribution of the work without further
		permission provided the original work is properly cited.}%
}

% --- нумерованный список с уменьшенными интервалами ---
\let\oldenumerate\enumerate
\let\endoldenumerate\endenumerate
\def\enumerate{% FIXME: add support of optional arguments
	\oldenumerate[topsep=0pt, itemsep=0pt, parsep=0pt, widest=9, leftmargin=7mm]
}
\def\enumerateparen{% FIXME: delete this one if the trick with enumerate works
	\oldenumerate[topsep=0pt, itemsep=0pt, parsep=0pt, label=\arabic*), widest=9, leftmargin=7mm]
}
\let\endenumerateparen\endoldenumerate

% --- горизонтальная линия, которая не рисуется в начале и конце страницы
\newcommand\rulesep{%
	\par%
	\leaders\vrule width \textwidth\vskip 0.4pt%
	\nointerlineskip
}

%Текущий год
\newcommand{\lasttwoofyear}[1]{% #1 is the offset
	\expandafter\getlasttwo\number\numexpr\year+(#1)\relax\relax
}
\def\getlasttwo#1#2#3#4\relax{#3#4}

% --- doi ---
\newcommand{\@doi}{}
\newcommand{\@novolume}{X}
\newcommand{\@noissue}{Y}
\newcommand{\@nonum}{Z}
\newcommand{\@nopages}{Z1--Z2}

\newcommand{\doi}{%
	\ifdefined\@volume 
		\@doi{DOI:~10.14529/cmse\lasttwoofyear{0}0\@volume0\@num}\unskip 
	\else
		\@doi{DOI:~10.14529/cmse\lasttwoofyear{0}0\@novolume0\@nonum}\unskip 
	\fi
}


\newcommand{\volume}{
	\ifdefined\@volume
		\unskip \@volume
	\else
		\unskip \@novolume
	\fi
}


\newcommand{\issue}{
	\ifdefined\@issue
		\unskip \@issue
	\else
		 \unskip \@noissue
	\fi
}


\newcommand{\pages}{
	\ifdefined\@pages
		\unskip \@pages
	\else
		\unskip \@nopages
	\fi
}

% --- классификация статьи ---
\let\@classification\@empty
\def\classify#1{
	{\noindent\large\bfseries#1\hfill{}\doi\par}
	\vspace{6pt}
}

\def\title#1{
	\begingroup
	\def\thefootnote{\fnsymbol{footnote}} % Установка вида сноски для благодарностей
	{\Large\bf\centering#1\par}
	\endgroup
	\setcounter{footnote}{0} % Сброс счетчика после печати благодарностей
	\vspace{10pt}
}

% Формат списка авторов
\def\authors#1{
	{\emph\large\bf\centering\copyright~\the\year~#1\par}
	\vspace{2pt}
}

\def\authorsen#1{
	{\emph\large\bf\centering\copyright~\the\year~#1\par}
	\vspace{2pt}
}

% Формат списка организаций
\def\organizations#1{
	{\normalsize\centering\it#1\par}
}

% Формат списка e-mail адресов
\def\emails#1{
	{\normalsize\centering\it E-mail:~#1\par}
}

% Формат даты поступления в редакцию
\def\redactiondate#1{
	{\normalsize\centering Поступила~в~редакцию:~#1\par}
	\vspace{16pt}
}

\def\redactiondateen#1{
	{\normalsize\centering Received:~#1\par}
	\vspace{16pt}
}

%Формат образца цитирования
\newcommand\forcitation[1]{
	{\noindent\large\bf ОБРАЗЕЦ~ЦИТИРОВАНИЯ \par}
	{#1~// Вестник ЮУрГУ. Серия: Вычислительная математика и информатика. \the\year. Т.~\volume, №~\issue. С.~\pages. \doi.}
}

\newcommand\forcitationen[1]{
	{\noindent\large\bf FOR~CITATION \par}
	%{#1. \emph{Bulletin of the South Ural State University. Series: Computational Mathematics and Software Engineering.} \the\year. Vol.~\volume, no.~\issue. P.~\pages. (in Russian) \doi.}
	{#1. Bulletin of the South Ural State University. Series: Computational Mathematics and Software Engineering. \the\year. Vol.~\volume, no.~\issue. P.~\pages. (in Russian) \doi.}
}

\newcommand\forcitationenglishdoc[1]{
	{\noindent\large\bf FOR~CITATION \par}
	{#1. \emph{Bulletin of the South Ural State University. Series: Computational Mathematics and Software Engineering.} \the\year. vol.~\volume, no.~\issue. pp.~\pages. \doi.}
}

% верхние и нижние индексы в текстовом режиме
\newcommand{\superscript}[1]{{\footnotesize\raisebox{0.5em}{#1}}}

% --- формат номера раздела ---
\renewcommand{\@seccntformat}[1]{\csname the#1\endcsname.\hspace{0.7em}}

% --- запрет висячих строк ---
\widowpenalty=10000 % внизу абзацев
\clubpenalty=10000 % вверху абзацев

\usepackage{ifthen,latexsym}

\normalsize
\usepackage[margin=2.5cm]{geometry}

% --- маркированный список с уменьшенными интервалами ---
\let\olditemize\itemize
\let\endolditemize\enditemize
\def\itemize{
	\olditemize[topsep=0pt, itemsep=0pt, parsep=0pt]
}

% --- параметры абзаца ---
\parindent=7mm
\parskip=0mm
\leftskip=0mm
\rightskip=0mm

% --- вертикальные отступы в строчных и выносных формулах
\abovedisplayskip=12pt plus 3pt minus 3pt
\belowdisplayskip=12pt plus 3pt minus 3pt
\abovedisplayshortskip=0pt plus 3pt
\belowdisplayshortskip=6pt plus 3pt

\pagestyle{empty}

% --- параметры плавающих объектов
\setcounter{totalnumber}{4}
\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\renewcommand{\textfraction}{0.01}
\renewcommand{\topfraction}{0.99}
\renewcommand{\bottomfraction}{0.99}

\newcommand{\sectspacm}{\hspace*{-\medskipamount}}
\newcommand{\sectspacp}{\hspace*{\medskipamount}}

\renewcommand{\section}{%
	\@startsection{section}{1}{0mm}{0.5\baselineskip}{0.5\baselineskip}{\normalfont\raggedright\Large\bf}%
}

\renewcommand{\subsection}{%
	\@startsection{subsection}{2}{0mm}{0.5\baselineskip}{0.5\baselineskip}{\normalfont\raggedright\large\bf}%
}

\renewcommand{\subsubsection}{%
	\@startsection{subsubsection}{3}{0mm}{-\baselineskip}{0.5\baselineskip}{\normalfont\raggedright\large\it}%
}

% --- теорема ---
\newcounter{theocounter}
\newenvironment{theorem}{%
	\refstepcounter{theocounter}\par\addvspace{3mm}\noindent%
	{\bf Теорема \thetheocounter.\ }%
}{%
	\par\addvspace{3mm}%
}

% --- теорема без номера ---
\newenvironment{theorem*}{%
	\refstepcounter{theocounter}\par\addvspace{3mm}\noindent%
	{\bf Теорема.\ }\begin{it}%
	}{%
	\end{it}\par\addvspace{3mm}
}

% --- лемма ---
\newcounter{lemcounter}
\newenvironment{lemma}{%
	\refstepcounter{lemcounter}\par\addvspace{3mm}\noindent
	{\bf Лемма \thelemcounter.\ }%
}{%
	\par\addvspace{3mm}%
}

% --- замечание ---
\newcounter{remcounter}
\newenvironment{remark}{%
	\refstepcounter{remcounter}\par\addvspace{3mm}\noindent
	{\bf Замечание \theremcounter.\ }%
}{%
	\par\addvspace{3mm}%
}

% --- определение ---
\newcounter{defcounter}
\newenvironment{definition}{%
	\refstepcounter{defcounter}\par\addvspace{3mm}\noindent
	{\bf Определение \thedefcounter.\ }%
}{%
	\par\addvspace{3mm}%
}

% --- пример ---
\newcounter{examcounter}
\newenvironment{example}{%
	\refstepcounter{examcounter}\par\addvspace{3mm}\noindent
	{\bf Пример \theexamcounter.\ }%
}{%
	\par\addvspace{3mm}%
}

% --- предложение ---
\newcounter{propcounter}
\newenvironment{proposition}{%
	\refstepcounter{propcounter}\par\addvspace{3mm}\noindent
	{\bf Утверждение \thepropcounter.\ }%
}{%
	\par\addvspace{3mm}%
}

% --- следствие ---
\newcounter{corcounter}
\newenvironment{corollary}{%
	\refstepcounter{corcounter}\par\addvspace{3mm}\noindent%
	{\bf Следствие \thecorcounter.\ }%
}{%
	\par\addvspace{3mm}%
}

\newcommand{\R}{\mathbb{R}}
\newcommand{\N}{\mathbb{N}}
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\CP}{\mathbb{C}}
\newcommand\Paragraph{\textsection}

\newcommand{\keywords}[1]{%
	{\footnotesize\it Ключевые слова:~#1}%
	\vspace{6pt}
}
\newcommand{\keywordsen}[1]{%
	{\footnotesize\it Keywords:~#1}%
	\vspace{6pt}
}

\renewenvironment{abstract}{%
	\footnotesize%
	\setlength{\parindent}{2em}%
}

\renewcommand\newblock{\hskip .11em plus .33em minus .07em}
\sloppy
\sfcode`\.=1000\relax

% Отступ сверху и снизу от плавающих объектов
\setlength{\intextsep}{1em}
\usepackage{floatrow}
\floatsetup[table]{capposition=top}

\usepackage[labelfont=bf]{caption}
\captionsetup[table]{labelsep = period, singlelinecheck=off}
\captionsetup[figure]{labelsep=period, 
	justification=centering, singlelinecheck=off}

% --- подпись к рисункам и таблицам ---
%\abovecaptionskip=0pt
%\belowcaptionskip=0pt
%\newlength{\@tblwid}
%\setlength{\@tblwid}{10cm}
%\renewcommand{\@makecaption}[2]{%
%	\def\@tabenvname{table}%
%	\ifx\@currenvir\@tabenvname%
%	% we're in a table environment
%	\vspace{\abovecaptionskip}%
%		\centering\parbox{\@tblwid}{%
%			{\flushleft\textbf{#1.} #2\par\vspace{2mm}}%
%		}
%	\vspace{\belowcaptionskip}%
%	\else%
%	% we're in a figure environment
%	\vspace{\abovecaptionskip}%
%	\sbox{\@tempboxa}{{#1. #2}}%
%	\ifdim \wd\@tempboxa >\hsize%
%	{\textbf{\small\ifthenelse{\totvalue{figure} > 1}{#1.}{\figurename}} #2}%
%	\else%
%	\global\@minipagefalse%
%	\hbox to \hsize {\textbf{\small\hfil\ifthenelse{\totvalue{figure} > 1}{#1.}{\figurename}} #2 \hfil}%
%	\fi%
%	\vspace{\belowcaptionskip}%
%	\fi%
%}

% --- таблица ---
%\newcommand{\tabref}[1]{табл.~\ref{#1}} % быстрая ссылка на таблицу
%\newsavebox{\@tblbox}
%\newcommand{\tab}[3]{% label, caption, data
%	\begin{table}[h]%
%		\sbox{\@tblbox}{#3}% сохранить таблицу в бокс
%		\settowidth{\@tblwid}{\usebox{\@tblbox}}% измерить ширину полученного бокса
%		\caption{#2}%
%		\label{#1}%
%		\centering%
%		\usebox{\@tblbox}% собственно напечатать таблицу
%	\end{table}%
%}

% --- рисунок ---
%\newcommand{\figref}[1]{рис.~\ref{#1}} % быстрая ссылка на рисунок
%\newcommand{\fig}[3]{% params, label, caption
%	\begin{figure}[h]%
%		\centering%
%		\includegraphics[#1]{#2}%
%		\caption{#3}%
%		\label{#2}%
%	\end{figure}%
%}

% --- исходный код ---
\newcommand{\code}[4][\linewidth]{% width, params, label, caption
	\begin{figure}[h]%
		\centering%
		\topsep=0pt%
		\partopsep=0pt%
		\begin{minipage}{#1}
			{
				\small\VerbatimInput[#2]{#3}
				
			}%
		\end{minipage}
		\vskip 3pt
		\caption{#4}%
		\label{#3}%
	\end{figure}%
}

% --- исходный код без номера ---
\newcommand{\codenonum}[3]{% params, label, caption
	\begin{figure}[h]%
		\centering%
		\topsep=0pt%
		\partopsep=0pt%
		\begin{minipage}{\linewidth}
			{
				\small\VerbatimInput[#1]{#2}
				
			}%
		\end{minipage}
		\vskip 3pt
		#3%
		\label{#2}%
	\end{figure}%
}

% --- неплавающий рисунок
\newcommand{\fignofloat}[3]{% params, label, caption
	\center%
	\includegraphics[#1]{#2}%
	\caption{#3}%
	\label{#2}%
}

\newcommand{\MakeUppercaseWithNewline}[1]{%
	\begingroup
	\let\SavedOrgNewline\\%
	\DeclareRobustCommand{\\}{\SavedOrgNewline}%
	\MakeTextUppercase{#1}%
	\endgroup
}

\renewcommand\@makefntext[1]{%
	\noindent\@makefnmark #1%
}

% vim: syntax=tex

% список литературы
\newenvironment{biblio}[1][9]{% \begin{biblio}[maxval] ...
	\renewcommand{\refname}{Литература}%
	\begin{thebibliography}{#1}%
		\itemsep 0pt%
	}{%
	\end{thebibliography}%
	\vspace{11pt}
}

\newenvironment{biblio_lat}[1][9]{% 
	\renewcommand{\refname}{References}%
	\begin{thebibliography}{#1}%
		\itemsep 0pt%
	}{%
	\end{thebibliography}%
}

\renewcommand{\@biblabel}[1]{#1.} % Формат списка литературы