Created
October 14, 2022 07:47
-
-
Save maxlapshin/f57742e78efedffd1e9c4258cdd7089b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\documentclass[a4paper,11pt]{article} | |
\usepackage[T2A]{fontenc} | |
\usepackage[utf8]{inputenc} | |
\usepackage{cmap} % для кодировки шрифтов в pdf | |
$if(listings)$ | |
\usepackage{listings} | |
\newcommand{\passthrough}[1]{#1} | |
$endif$ | |
\providecommand{\tightlist}{% | |
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} | |
\usepackage{epstopdf} | |
\usepackage{moresize} | |
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}} % для заголовка | |
\usepackage[paper=A4,pagesize]{typearea} % для приложения в А3 | |
\usepackage[left=1.6in,top=1.3in,right=1.2in,bottom=2in, nohead]{geometry} | |
\setlength{\parindent}{0cm} % убать остступы в начале параграфа | |
\setlength{\parskip}{5pt} % расстояние между параграфами | |
\usepackage{booktabs} | |
\renewcommand{\baselinestretch}{1.2} % интерлиньяж | |
\pagenumbering{arabic} | |
\usepackage{longtable} % таблицы | |
\usepackage{lastpage} | |
\usepackage{csquotes} % кавычки | |
\usepackage{color, framed} % линии на полях | |
\usepackage[usenames,dvipsnames]{xcolor} | |
\usepackage[bottom,hang,flushmargin]{footmisc} % сноски | |
\interfootnotelinepenalty=100000 | |
% \renewcommand*\footnoterule{} | |
\setlength{\skip\footins}{1.2cm} | |
\setlength{\footnotesep}{0.5cm} | |
\usepackage{ulem} | |
\usepackage[colorlinks=true, linkcolor=blue, linktoc=all, anchorcolor=black, urlcolor=cyan, pdfborder={0 0 1}, pdfborderstyle={/S/U/W 1}, linkbordercolor=black, urlbordercolor=cyan, unicode=true, linkbordercolor={1 0 0}]{hyperref} % ссылки | |
%\usepackage{fancyvrb} | |
%\usepackage{spverbatim} % потому что листингс не работает с кириллицей (ну и ладно) | |
\colorlet{punct}{red!60!black} | |
\definecolor{background}{HTML}{d6d6d6} | |
\definecolor{delim}{RGB}{20,105,176} | |
\definecolor{gray}{RGB}{247,247,247} | |
\definecolor{default}{RGB}{0,0,0} | |
\definecolor{darkblue}{rgb}{0.0,0.0,0.6} | |
\definecolor{cyan}{rgb}{0.0,0.6,0.6} | |
\colorlet{numb}{magenta!60!black} | |
\usepackage{zref-base} | |
\usepackage{listings} | |
%Не выводить номер строки в однострочных листингах | |
\makeatletter | |
\newcounter{mylstlisting} | |
\newcounter{mylstlines} | |
\lst@AddToHook{PreSet}{% | |
\stepcounter{mylstlisting}% | |
\ifnum\mylstlines=1\relax | |
\lstset{numbers=none} | |
\else | |
\lstset{numbers=left} | |
\fi | |
\setcounter{mylstlines}{0}% | |
} | |
\lst@AddToHook{EveryPar}{% | |
\stepcounter{mylstlines}% | |
} | |
\lst@AddToHook{ExitVars}{% | |
\begingroup | |
\zref@wrapper@immediate{% | |
\zref@setcurrent{default}{\the\value{mylstlines}}% | |
\zref@labelbyprops{mylstlines\the\value{mylstlisting}}{default}% | |
}% | |
\endgroup | |
} | |
% \mylstlines print number of lines inside listing caption | |
\newcommand*{\mylstlines}{% | |
\zref@extractdefault{mylstlines\the\value{mylstlisting}}{default}{0}% | |
} | |
\makeatother | |
\newcommand\JSONnumbervaluestyle{\color{OrangeRed}} | |
\newcommand\JSONstringvaluestyle{\color{OrangeRed}} | |
% switch used as state variable | |
\newif\ifcolonfoundonthisline | |
\makeatletter | |
\lstdefinelanguage{XML} | |
{ | |
basicstyle=\ttfamily\footnotesize, | |
morestring=[b]", | |
moredelim=[s][\color{OrangeRed}]{<}{\ }, | |
moredelim=[s][\color{OrangeRed}]{</}{>}, | |
moredelim=[l][\color{OrangeRed}]{/>}, | |
moredelim=[l][\color{OrangeRed}]{>}, | |
morecomment=[s]{<?}{?>}, | |
morecomment=[s]{<!--}{-->}, | |
commentstyle=\color{gray}, | |
stringstyle=\color{RoyalBlue}, | |
identifierstyle=\color{RoyalBlue}, | |
escapebegin=\begin{russiantext}, | |
escapeend=\end{russiantext}, | |
} | |
\newenvironment{russiantext}{\color{OrangeRed}}{\ignorespacesafterend} | |
\lstdefinelanguage{json}{ | |
numbers=left, | |
numberstyle=\tiny, | |
stepnumber=1, | |
numbersep=4pt, | |
showstringspaces=false, | |
breaklines=true, | |
escapeinside=ææ, | |
} | |
\lstdefinestyle{json} | |
{ | |
%basicstyle=\color{maroon}, | |
showstringspaces = false, | |
%keywords = {false,true}, | |
alsoletter = 0123456789., | |
morestring = [s]{"}{"}, | |
stringstyle = \ifcolonfoundonthisline\JSONstringvaluestyle\else\color{RoyalBlue}\fi, | |
MoreSelectCharTable =% | |
\lst@DefSaveDef{`:}\colon@json{\processColon@json}, | |
basicstyle = \ttfamily, | |
keywordstyle = \ttfamily\bfseries, | |
numbers=left, | |
numberstyle=\tiny, | |
stepnumber=1, | |
numbersep=4pt, | |
showstringspaces=false, | |
breaklines=true, | |
escapeinside=@@, | |
escapebegin=\begin{russiantext}, | |
escapeend=\end{russiantext}, | |
} | |
\lstset{ | |
upquote=true, | |
language=json, | |
aboveskip=10pt, | |
belowskip=5pt, | |
extendedchars=true, | |
basicstyle=\normalsize\ttfamily, | |
breaklines=true, | |
showtabs=false, | |
backgroundcolor=\color{gray}, | |
breakindent=0pt, | |
keepspaces=true, | |
%костыль для кириллицы | |
literate={а}{{\selectfont\char224}}1 | |
{б}{{\selectfont\char225}}1 | |
{в}{{\selectfont\char226}}1 | |
{г}{{\selectfont\char227}}1 | |
{д}{{\selectfont\char228}}1 | |
{е}{{\selectfont\char229}}1 | |
{ё}{{\"e}}1 | |
{ж}{{\selectfont\char230}}1 | |
{з}{{\selectfont\char231}}1 | |
{и}{{\selectfont\char232}}1 | |
{й}{{\selectfont\char233}}1 | |
{к}{{\selectfont\char234}}1 | |
{л}{{\selectfont\char235}}1 | |
{м}{{\selectfont\char236}}1 | |
{н}{{\selectfont\char237}}1 | |
{о}{{\selectfont\char238}}1 | |
{п}{{\selectfont\char239}}1 | |
{р}{{\selectfont\char240}}1 | |
{с}{{\selectfont\char241}}1 | |
{т}{{\selectfont\char242}}1 | |
{у}{{\selectfont\char243}}1 | |
{ф}{{\selectfont\char244}}1 | |
{х}{{\selectfont\char245}}1 | |
{ц}{{\selectfont\char246}}1 | |
{ч}{{\selectfont\char247}}1 | |
{ш}{{\selectfont\char248}}1 | |
{щ}{{\selectfont\char249}}1 | |
{ъ}{{\selectfont\char250}}1 | |
{ы}{{\selectfont\char251}}1 | |
{ь}{{\selectfont\char252}}1 | |
{э}{{\selectfont\char253}}1 | |
{ю}{{\selectfont\char254}}1 | |
{я}{{\selectfont\char255}}1 | |
{А}{{\selectfont\char192}}1 | |
{Б}{{\selectfont\char193}}1 | |
{В}{{\selectfont\char194}}1 | |
{Г}{{\selectfont\char195}}1 | |
{Д}{{\selectfont\char196}}1 | |
{Е}{{\selectfont\char197}}1 | |
{Ё}{{\"E}}1 | |
{Ж}{{\selectfont\char198}}1 | |
{З}{{\selectfont\char199}}1 | |
{И}{{\selectfont\char200}}1 | |
{Й}{{\selectfont\char201}}1 | |
{К}{{\selectfont\char202}}1 | |
{Л}{{\selectfont\char203}}1 | |
{М}{{\selectfont\char204}}1 | |
{Н}{{\selectfont\char205}}1 | |
{О}{{\selectfont\char206}}1 | |
{П}{{\selectfont\char207}}1 | |
{Р}{{\selectfont\char208}}1 | |
{С}{{\selectfont\char209}}1 | |
{Т}{{\selectfont\char210}}1 | |
{У}{{\selectfont\char211}}1 | |
{Ф}{{\selectfont\char212}}1 | |
{Х}{{\selectfont\char213}}1 | |
{Ц}{{\selectfont\char214}}1 | |
{Ч}{{\selectfont\char215}}1 | |
{Ш}{{\selectfont\char216}}1 | |
{Щ}{{\selectfont\char217}}1 | |
{Ъ}{{\selectfont\char218}}1 | |
{Ы}{{\selectfont\char219}}1 | |
{Ь}{{\selectfont\char220}}1 | |
{Э}{{\selectfont\char221}}1 | |
{Ю}{{\selectfont\char222}}1 | |
{Я}{{\selectfont\char223}}1 | |
} | |
% flip the switch if a colon is found in Pmode | |
\newcommand\processColon@json{% | |
\colon@json% | |
\ifnum\lst@mode=\lst@Pmode% | |
\global\colonfoundonthislinetrue% | |
\fi | |
} | |
\lst@AddToHook{Output}{% | |
\ifcolonfoundonthisline% | |
\ifnum\lst@mode=\lst@Pmode% | |
\def\lst@thestyle{\JSONnumbervaluestyle}% | |
\fi | |
\fi | |
%override by keyword style if a keyword is detected! | |
\lsthk@DetectKeywords% | |
} | |
% reset the switch at the end of line | |
\lst@AddToHook{EOL}% | |
{\global\colonfoundonthislinefalse} | |
\makeatother | |
% \lstdefinelanguage{XML} | |
% { | |
% morestring=[b]", | |
% morestring=[s]{>}{<}, | |
% morecomment=[s]{<?}{?>}, | |
% stringstyle=\color{black}, | |
% showstringspaces=false, | |
% identifierstyle=\color{OrangeRed}, | |
% keywordstyle=\color{RoyalBlue}, | |
% morekeywords={xmlns,",type}% list your attributes here | |
% } | |
% \makeatletter | |
% \def\verbatim{\small\@verbatim \frenchspacing\@vobeyspaces \@xverbatim} | |
% \makeatother | |
% \makeatletter | |
% \def\@xobeysp{\mbox{}\space} | |
% \def\verbatim@font{\normalfont\ttfamily\raggedright} | |
% \makeatother | |
\usepackage{enumitem} % убираем пустую строку перед списком | |
\setitemize{noitemsep,topsep=-4.5pt,parsep=4.5pt,partopsep=2pt,leftmargin=*} | |
\setenumerate{noitemsep,topsep=-4.5pt,parsep=4.5pt,partopsep=2pt,leftmargin=*} | |
\usepackage{textcomp} % меняем буллиты | |
\renewcommand{\labelitemi}{\textemdash} | |
\renewcommand{\labelitemii}{\textemdash} | |
\renewcommand{\labelitemiii}{\textemdash} | |
\renewcommand{\labelitemiv}{\textemdash} | |
\renewcommand\labelenumi{\theenumi)} | |
\renewcommand\labelenumii{\theenumi.\arabic{enumii})} | |
\renewcommand\labelenumiii{\theenumi.\arabic{enumii}.\arabic{enumiii})} | |
%\usepackage[skip=-5pt,margin=-30pt,format=hang,indention=-5.5cm,labelfont={small,bf,sc},textfont=small,justification=justified,singlelinecheck=false]{caption} | |
\usepackage[labelsep=period, justification=raggedleft, labelfont={small,bf,sc},textfont=small,singlelinecheck=false, skip=15pt]{caption} | |
\usepackage{graphicx} % вернул в ширину текста | |
\makeatletter | |
\def\maxwidth{\ifdim\Gin@nat@width>1\linewidth | |
1\linewidth | |
\else\Gin@nat@width\fi} | |
\makeatother | |
\let\oldincludegraphics\includegraphics % TODO: убрать хак с \, внести его сюда | |
\renewcommand\includegraphics[2][]{% | |
\vspace{8mm} | |
\centerline{ | |
\oldincludegraphics[width=\maxwidth]{#2} | |
%\centering | |
} | |
%\vspace{-8mm} | |
} | |
%\let\oldincludegraphics\includegraphics | |
%\renewcommand\includegraphics[2][]{% | |
% \oldincludegraphics[width=1.2\linewidth]{#2} | |
% \centering | |
%} | |
\usepackage{tocstyle}% добавляем расстояние между номером и названием в оглавлении | |
\usetocstyle{allwithdot} | |
\settocstylefeature[1]{entryhook}{\bfseries} | |
\usepackage{amsthm,amsfonts,amsmath,amssymb,amscd} % математика от AMS | |
\usepackage[warn]{mathtext} | |
$if(russian)$ | |
\usepackage[main=russian, english]{babel} | |
$endif$ | |
$if(english)$ | |
\usepackage[main=english,russian]{babel} | |
$endif$ | |
\let\zz\[\let\zzz\] % лечит баг amsthm | |
\usepackage[cm-default]{fontspec} % задаем шрифт документа | |
\setromanfont{PT Sans} | |
\setmonofont[Mapping=]{PT Mono} | |
\newfontfamily\monospace[Mapping=]{PT Mono} | |
\defaultfontfeatures{Ligatures=TeX} | |
\newfontfamily\headingfont[]{PT Sans} | |
\newfontfamily\headingfontlight[]{PT Sans} | |
\newfontfamily\symbolsfont[]{DejaVu Sans} | |
\usepackage[Latin, Cyrillics, Symbols]{ucharclasses} | |
\setTransitionsForSymbols{\begingroup\symbolsfont}{\endgroup} | |
\let\[\zz\let\]\zzz | |
\makeatletter | |
\def\Sbox#1#2{% | |
\setbox\z@\vbox{\hsize\maxdimen% | |
#2\par | |
\global\setbox#1\box\voidb@x | |
\loop | |
\setbox\z@\lastbox | |
\global\setbox#1\hbox{% | |
\ifvoid#1\else\unhbox#1\hfill\break\fi | |
\unhbox\z@ | |
\unskip\unskip\unpenalty}% | |
\unskip\unskip\unpenalty | |
\ifnum\lastnodetype=\@ne | |
\repeat | |
}} | |
% | |
\def\ttlh@runin#1#2#3#4#5#6#7#8{% | |
\global\@noskipsectrue | |
\gdef\ttl@makeline##1{##1}% | |
\ttl@changecentercr | |
#1{\ifhmode\ttl@hmode@error\fi | |
\Sbox%\global\sbox | |
\ttl@box{% | |
\ttl@calc\hspace{#6}% | |
\ifttl@label{\strut#2}\ttl@calc\hspace{#3}\fi | |
#4{#8}#5\unskip}}% | |
\gdef\@svsechd{\unhbox\ttl@box}} | |
\makeatother | |
\usepackage[explicit]{titlesec} % выравниваем названия глав и разделов | |
\titleformat{name=\chapter,numberless}[display] | |
{\normalfont\Huge\headingfont}% format | |
{\llap{% label | |
\chaptertitlename\thechapter\hskip 9pt}#1}% | |
{0pt}% horizontal sep | |
{}% before | |
\titleformat{\section} | |
{\fontsize{28}{24}\headingfont}%format | |
{\makebox[0pt][r]{% | |
\headingfontlight\thesection\hskip 9pt}}% | |
{0pt} | |
{\makebox[\dimexpr\linewidth][l]{% | |
\parbox[t]{\dimexpr\textwidth+\marginparwidth+\marginparsep\relax} | |
{\raggedright #1}}} | |
\titleformat{\subsection}% | |
{\fontsize{20}{20}\headingfont}%format | |
{\makebox[0pt][r]{% | |
\headingfontlight\thesubsection\hskip 9pt}}% | |
{0pt} | |
{\makebox[\dimexpr\linewidth][l]{% | |
\parbox[t]{\dimexpr\textwidth+\marginparwidth+\marginparsep\relax} | |
{\raggedright #1}}} | |
\titleformat{\subsubsection}% | |
{\fontsize{16}{16}\headingfont}%format | |
{\makebox[0pt][r]{% | |
\headingfontlight\thesubsubsection\hskip 9pt}}% | |
{0pt} | |
{\makebox[\dimexpr\linewidth][l]{% | |
\parbox[t]{\dimexpr\textwidth+\marginparwidth+\marginparsep\relax} | |
{\raggedright #1}}} | |
\titleformat{\paragraph}% | |
{\fontsize{14}{14}\headingfont}%format | |
{\makebox[0pt][r]{% | |
\headingfontlight\theparagraph\hskip 9pt}}% | |
{0pt} | |
{\makebox[\dimexpr\linewidth][l]{% | |
\parbox[t]{\dimexpr\textwidth+\marginparwidth+\marginparsep\relax} | |
{\raggedright #1}}} | |
\titleformat{\subparagraph}% | |
{\headingfont}%format | |
{\makebox[0pt][r]{% | |
\headingfontlight\thesubparagraph\hskip 9pt}}% | |
{0pt} | |
{\makebox[\dimexpr\linewidth][l]{% | |
\parbox[t]{\dimexpr\textwidth+\marginparwidth+\marginparsep\relax} | |
{\raggedright #1}}} | |
% \titleformat{\subparagraph}% | |
% {\headingfontlight}%format | |
% {\makebox[0pt][r]{% | |
% \headingfontlight\thesubparagraph\hskip 9pt}}% | |
% {0pt} | |
% {\makebox[\dimexpr\linewidth][l]{% | |
% \parbox[t]{\dimexpr\textwidth+\marginparwidth+\marginparsep\relax} | |
% {\raggedright\underline{\textbf{#1}}} | |
$if(russian)$ | |
\renewcommand{\thesection}{\arabic{section}.} % хак, добавляющий точки к заголовкам | |
\renewcommand{\thesubsection}{\thesection\arabic{subsection}.} | |
\renewcommand{\thesubsubsection}{\thesubsection | |
\arabic{subsubsection}.} | |
\renewcommand{\theparagraph}{\thesubsubsection\arabic{paragraph}.} | |
\renewcommand{\thesubparagraph}{\theparagraph\arabic{subparagraph}.} | |
$endif$ | |
\titlespacing*{\chapter}{0pt}{2pt}{0.5em} % отступы заголовков | |
\titlespacing*{\section}{0pt}{2em}{1em} | |
\titlespacing*{\subsection}{0pt}{1em}{0.1em} | |
\titlespacing*{\subsubsection}{0pt}{1em}{0.1em} | |
\titlespacing*{\paragraph}{0pt}{1em}{0em} | |
\titlespacing*{\subparagraph}{0pt}{1em}{0em} | |
\let\stdsection\section | |
\renewcommand\section{\newpage\stdsection} % главы с новой страницы | |
% \let\stdsubsection\subsection | |
% \renewcommand\subsection{\newpage\stdsubsection} % разделы с новой страницы | |
%\usepackage[final]{microtype} % не работает с xelatex | |
$if(date)$ | |
$if(english)$ | |
\usepackage[mmddyyyy]{datetime} | |
$endif$ | |
$if(russian)$ | |
\usepackage[ddmmyyyy]{datetime} | |
$endif$ | |
%\renewcommand{\dateseparator}{.} | |
\renewcommand{\dateseparator}{-} % TODO: для auto отдельно | |
$endif$ | |
\usepackage{fancyhdr} % колонтитулы | |
\fancyhf{} | |
\pagestyle{fancy} | |
\fancypagestyle{plain}{% | |
\fancyfoot[R]{\footnotesize \thepage} | |
\fancyfoot[L]{\footnotesize \nouppercase{\textit{\rightorleftmark\phantom{.}\textbar\phantom{.}$version$.\today}}}} | |
\fancyfoot[R]{\footnotesize \thepage} | |
\fancyfoot[L]{\footnotesize \nouppercase{\textit{\rightorleftmark\phantom{.}\textbar\phantom{.}$version$.\today}}} | |
\renewcommand{\headrulewidth}{0pt} | |
\renewcommand{\footrulewidth}{0pt} | |
\setlength{\footskip}{80.99991pt} | |
%\renewcommand{\subsubsectionmark}[1]{\markright{\thesubsubsection\ #1}} | |
\fancypagestyle{titlefooter}{% | |
\fancyhf{} | |
$if(russian)$ | |
$if(restream)$ | |
\fancyfoot[L]{\textsc{\fontsize{12}{15}\headingfontlight\nohyphens{\pageref{LastPage} страниц, АО «Рестрим» | |
$if(date)$ | |
\\[0.1cm] Версия документа $version$-\today | |
$else$ | |
, $year$ год | |
$endif$ | |
}}} | |
$endif$ | |
$endif$ | |
} | |
\makeatletter | |
\newcommand{\rightorleftmark}{% | |
\begingroup\protected@edef\x{\rightmark}% | |
\ifx\x\@empty | |
\endgroup\leftmark | |
\else | |
\endgroup\rightmark | |
\fi} | |
\makeatother | |
\setcounter{secnumdepth}{0} % уровень заголовков | |
\setcounter{tocdepth}{5} % вывод заголовков всех уровней в оглавление | |
\usepackage{newunicodechar} | |
\newunicodechar{©}{\copyright} | |
\newunicodechar{™}{\texttrademark} | |
\newunicodechar{®}{\textregistered} | |
\newunicodechar{«}{\guillemotleft} | |
\newunicodechar{»}{\guillemotright} | |
\usepackage[protrusion=true]{microtype} % остальные свойства не поддерживаются в XeLaTeX | |
\usepackage{hyphenat} | |
\usepackage{float} % чтобы таблицы были на месте | |
\restylefloat{table} | |
\let\origfigure=\figure % переопределение float-параметра изображений | |
\let\endorigfigure=\endfigure | |
\renewenvironment{figure}[1][]{% | |
\origfigure[H] | |
}{% | |
\endorigfigure | |
} | |
\lstset{defaultdialect=[5.2]Lua} | |
\usepackage{longtable} | |
\usepackage{changepage} | |
\providecommand{\tightlist}{% | |
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} | |
\usepackage{etoolbox} | |
\AtBeginEnvironment{longtable}{\small} %все таблицы меньшим шрифтом | |
\usepackage{afterpage} | |
\usepackage{mdframed} | |
\usepackage{rotating} | |
\usepackage{adjustbox} | |
\mdfdefinestyle{redbar}{% | |
linewidth=1pt, | |
topline=false, | |
rightline=false, | |
bottomline=false, | |
linecolor=red, | |
% innertopmargin=1.2\baselineskip, | |
% skipabove={\dimexpr0.5\baselineskip+\topskip\relax}, | |
% needspace=2\baselineskip, | |
leftmargin=-1em | |
rightmargin=1em | |
} | |
\usepackage{ragged2e} | |
%orphan control | |
\widowpenalty10000 | |
\clubpenalty10000 | |
\begin{document} | |
\righthyphenmin=2 | |
\lefthyphenmin=2 | |
\sloppy % плохо для типографики | |
\begin{titlepage} | |
\includegraphics[scale=0.15]{$logo$} | |
\vspace*{\fill} | |
\vspace{-5cm} | |
$if(subtitle)$ | |
\textsc{\fontsize{28}{30}\headingfont\RaggedRight\nohyphens{$title$}}\\[0.5cm] | |
$endif$ | |
\fontsize{22}{30}\headingfontlight\RaggedRight\nohyphens{$subtitle$}\\ | |
\vfill | |
\thispagestyle{titlefooter} | |
\end{titlepage} | |
$if(toc)$ | |
\tableofcontents | |
\newpage | |
$endif$ | |
$body$ | |
$if(tof)$ | |
\newpage | |
\listoffigures | |
$endif$ | |
\end{document} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment