%%%%% Проверка версии компилятора
\usepackage{ifxetex}

%%%%% Функции для работы с размерностями и счётчиками
\usepackage{calc}

%%%%% Параметры страницы
\usepackage{geometry}

%%%%% Межстрочный интервал
\usepackage{setspace}

%%%%% \onehalfspacing работает только для шрифтов 10pt, 11pt, 12pt
%%%%% Указываем явное значение
\setstretch{1.25}

%%%%% Отступ первой строки в параграфе
\setlength{\parindent}{12.5mm}
\usepackage{indentfirst}

%%%%% Правила для висячих строк
\usepackage[defaultlines=3,all]{nowidow}

%%%%% Защита от строк на полях (добавление 3 виртуальных пустых символов)
\setlength{\emergencystretch}{3em}

%%%%% Оптимизация расстановки переносов и длины последней строки абзаца
\IfFileExists{impnattypo.sty}{\usepackage[hyphenation, lastparline]{impnattypo}}{}

%%%%% Поддержка переносоустойчивых подчёркиваний и зачёркиваний
\usepackage{soulutf8}

%%%%% Запятая в десятичных дробях
\usepackage{icomma}

%%%%% Работа с цветом
\usepackage[dvipsnames,svgnames*,x11names*]{xcolor}

%%%%% Оформление блоков исходных текстов (обязательно перед локализацией)
\usepackage{fancyvrb}
\ifxetex
  % Break long lines of code
  \usepackage{fvextra}
  \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,commandchars=\\\{\}}
\fi
\VerbatimFootnotes % allows verbatim text in footnotes
\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
\usepackage{listings}
\providecommand{\passthrough}[1]{#1}
\lstset{defaultdialect=[5.3]Lua}
\lstset{defaultdialect=[x86masm]Assembler}


%%%%% Словари и сокращения
\usepackage{nomencl}
\usepackage[
  xindy={language={russian},glsnumbers=false},
  toc,
  acronym,
  nopostdot,
  nogroupskip,
  nonumberlist]{glossaries}
\usepackage[automake=true]{glossaries-extra}

%\pdfstringdefDisableCommands{%
%  \let\gls\@firstofone
%}

\newcounter{fontsnotfound}
\newcommand{\iffontsexist}[3]{
  \setcounter{fontsnotfound}{0}
  \expandafter\forcsvlist\expandafter\checkfont\expandafter{#1}
  \ifnum\value{fontsnotfound}=0
    #2
  \else
    #3
  \fi
}


%%%%% Математика
\usepackage{amsthm,amsmath,amscd}   % Математические дополнения от AMS
\usepackage{amsfonts,amssymb}       % Математические дополнения от AMS
\usepackage{mathtools}              % Добавляет окружение multlined
\usepackage{xfrac}                  % Красивые дроби
\usepackage{array}                  % Окружение с выравниванием


%%%%% Шрифты
\ifxetex
  \usepackage[no-math]{fontspec}
  \usepackage[warnings-off={mathtools-colon,mathtools-overbracket}]{unicode-math}
  \defaultfontfeatures{Scale=MatchLowercase,Mapping=tex-text}
  \defaultfontfeatures[\rmfamily]{Scale=1}
  \setsansfont[Mapping=tex-text]{Arial}
  \setromanfont[Mapping=tex-text]{XITS}
  \setmainfont[Ligatures=TeX]{Times New Roman}
  \newfontfamily\cyrillicfont{Times New Roman}[Script=Cyrillic]
  \setmonofont[Scale=0.8,Mapping=tex-text]{Pragmata Pro Mono}
  \newfontfamily\listingsfont{Pragmata Pro Mono Bold}
  \newfontfamily\listingsfontinline{Pragmata Pro Mono Bold}
  \DeclareSymbolFont{letters}{\encodingdefault}{\rmdefault}{m}{it}
\else
\fi


%%%%% Размерности SI (обязательно после fontspec, amsmath, unicode-math)
\usepackage{siunitx}
\sisetup{
  exponent-product      = \ensuremath { \cdot },
  inter-unit-product    = \ensuremath { \cdot },
  output-decimal-marker = { , },
  list-separator        = {;\,},
  list-final-separator  = {;\,},
  list-pair-separator   = {;\,},
  range-phrase          = {\text{...}},
  quotient-mode        = fraction, % красивые дроби могут не соответствовать ГОСТ
  fraction-function    = \sfrac,
  separate-uncertainty
}
\usepackage{physics}
\usepackage{eqexpl}
\eqexplSetIntro{где}


%%%%% Локализация
\ifxetex
  \usepackage{textcase}
  \usepackage{xltxtra}
  \usepackage{xunicode}
  \usepackage{polyglossia}
  \usepackage{xecyr}
  \setmainlanguage{russian}
  \let\cyr\relax
  \setotherlanguage{english}
  \setkeys{russian}{babelshorthands=true,indentfirst=true}
  \setmathfont{XITS Math}
  \defaultfontfeatures{Scale=MatchLowercase}
  \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
  \IfFileExists{microtype.sty}{ % use microtype if available
    \usepackage{microtype}
    \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
  }{}
\else
  \usepackage{cmap}
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage[russian]{babel}
\fi

%%%%% При переносе оставлять минимум 3 символа на первой строке и 3 на второй
\renewcommand\russianhyphenmins{33}

%%%%% Использовать для кавычек-ёлочек данные символы
\usepackage{csquotes}
\renewcommand{\flqq}{«}
\renewcommand{\frqq}{»}


%%%%% Оформление URL, разрешение переносов
\usepackage[hyphens]{xurl}
%%%%% Использование того же шрифта, что и в окружающем тексте
\urlstyle{same}

\usepackage[
  unicode=true,
  bookmarks=true,
  bookmarksnumbered=false,
  bookmarksopen=false,
  colorlinks=true,        % ссылки отображаются цветным текстом
  linkcolor={Maroon},     % цвет ссылок типа ref, eqref и подобных
  filecolor={Maroon},     %
  citecolor={Blue},       % цвет ссылок-цитат
  urlcolor={Blue},        % цвет гиперссылок
  linktocpage=true,       % ссылки с номера страницы в оглавлении, списке таблиц и списке рисунков
  pdfborder={0 0 0},
  pdfborderstyle={},
  pdfpagelabels=false,    % set PDF page labels (true|false)
  pdflang={ru}
]{hyperref}
\usepackage{booktabs}


\makeatletter
\AtBeginDocument{
\hypersetup{
  breaklinks=false,
%  linktoc=all,                % both the section and page part are links
  plainpages=false,           % Forces page anchors to be named by the Arabic form  of the page number, rather than the formatted form
%  hidelinks,                  % Hide links (removing color and border)
  pdftitle={\@title},    % Заголовок
  pdfauthor={\@author},  % Автор
%  pdfsubject={\thesisSpecialtyNumber\ \thesisSpecialtyTitle},      % Тема
%  pdfcreator={Создатель},     % Создатель, Приложение
%  pdfproducer={Производитель},% Производитель, Производитель PDF
  pdfkeywords={},    % Ключевые слова
}
}
\makeatother

%%%%% Добавление модификатора H для размещения объектов
\usepackage{float}

%%%%% Команда \FloatBarrier
\usepackage{placeins}

%%%%% Настройка таблиц
\usepackage{xltabular}
\usepackage{ltcaption}
\usepackage{multirow}
\usepackage{makecell}
\newcommand{\HY}{\hyphenpenalty=25\exhyphenpenalty=25}
\newcolumntype{Z}{>{\HY\raggedright\arraybackslash\hspace{0pt}}X}
\newcolumntype{M}{>{\HY\RaggedRight\arraybackslash\hspace{0pt}}c}
\newcolumntype{L}{>{\HY\RaggedRight\arraybackslash\hspace{0pt}}l}

%%%%% Заголовок на последней странице таблицы (обязательно после hyperref)
\usepackage{fr-longtable}

%%%%% Автоматический подгон ширины подписи таблицы
\usepackage{threeparttable}

% Redefines (sub)paragraphs to behave more like sections
\ifx\paragraph\undefined\else
  \let\oldparagraph\paragraph
  \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
\fi
\ifx\subparagraph\undefined\else
  \let\oldsubparagraph\subparagraph
  \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
\fi

%%%%% Подключение изображений (желательно после локализации)
\usepackage{graphicx}
\usepackage[encoding,filenameencoding=utf8,extendedchars]{grffile}

\makeatletter
\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
\makeatother
% Scale images if necessary, so that they will not overflow the page
% margins by default, and it is still possible to overwrite the defaults
% using explicit options in \includegraphics[width, height, ...]{}
\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}

%%%%% Расположение по умолчанию
\makeatletter
\def\fps@figure{Htbp}
\makeatother

\providecommand{\tabularnewline}{\\}
\providecommand{\strong}[1]{\textbf{#1}}
\providecommand{\No}{\textnumero}

%%%%% Компактный список
\providecommand{\tightlist}{%
  \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
\setcounter{secnumdepth}{-\maxdimen} % remove section numbering

%%%%% Маркеры для списка
\AtBeginDocument{
  \def\labelitemi{\textendash}
  \def\labelitemii{\(\bullet\)}
}
