PREAMBLE = r"""\documentclass[a4paper, 14pt]{extarticle} \usepackage{geometry} \geometry{a4paper,tmargin=2cm,bmargin=2cm,lmargin=3cm,rmargin=1.5cm} \usepackage{fontspec} \setmainfont{Times New Roman} \setsansfont{Liberation Sans} \setmonofont{Liberation Mono} \usepackage[english, main=russian]{babel} \usepackage{textcomp} \usepackage{indentfirst} \setlength{\parindent}{1.25cm} \usepackage{setspace} \onehalfspacing \usepackage{graphicx} \graphicspath{ {./} {./images/} } \usepackage{float} \usepackage[section]{placeins} \usepackage{wrapfig} \sloppy \setlength{\emergencystretch}{2em} \clubpenalty=10000 \widowpenalty=10000 \usepackage{enumitem} \setlist[enumerate,1]{label=\arabic*., leftmargin=1.25cm, itemsep=0pt, parsep=0pt} \setlist[itemize]{label={---}, leftmargin=1.25cm, itemsep=0pt, parsep=0pt} \usepackage{caption} \usepackage{hyperref} \hypersetup {unicode=true} \DeclareCaptionLabelSeparator*{emdash}{~--- } \captionsetup[figure]{labelsep=emdash,font=onehalfspacing,position=bottom,name=Рисунок} \captionsetup[table]{labelsep=emdash,font=onehalfspacing,position=top,name=Таблица,singlelinecheck=false,justification=raggedright} \usepackage{listings} \usepackage{xcolor} % Палитра подсветки. Тона различаются не только цветом, но и светлотой, % поэтому листинг остаётся читаемым и на чёрно-белой печати. \definecolor{lstkeyword}{RGB}{0,0,139} \definecolor{lstcomment}{RGB}{110,110,110} \definecolor{lststring}{RGB}{139,0,0} \definecolor{lstlineno}{RGB}{130,130,130} % Встроенный диалект C++ в listings старше стандарта: auto, nullptr, override % и прочее он не знает. Расширяем его, а не подменяем, чтобы сохранить разбор % строк, комментариев и препроцессора. \lstdefinelanguage[modern]{C++}[ISO]{C++}{% morekeywords={% auto,nullptr,constexpr,consteval,constinit,noexcept,override,final,% decltype,static_assert,thread_local,alignas,alignof,concept,requires,% co_await,co_yield,co_return,import,module,% Q_OBJECT,Q_SLOTS,Q_SIGNALS,Q_PROPERTY,signals,slots,emit% }% } \lstset{ basicstyle=\ttfamily\small\setstretch{1.0}, keywordstyle=\bfseries\color{lstkeyword}, % Начертание прямое: курсива кириллицы в моноширинном шрифте нет, и % комментарий распадался бы на прямые русские и курсивные латинские слова. commentstyle=\color{lstcomment}, stringstyle=\color{lststring}, numberstyle=\scriptsize\color{lstlineno}, identifierstyle=, breakatwhitespace=false, breaklines=true, captionpos=t, inputencoding=utf8, frame=single, keepspaces=true, numbers=left, numbersep=7pt, aboveskip=0.7\baselineskip, belowskip=0.4\baselineskip, postbreak=\mbox{\textcolor{lstlineno}{$\hookrightarrow$}\space}, xleftmargin=25pt, xrightmargin=25pt, showspaces=false, showstringspaces=false, showtabs=false, stepnumber=1, tabsize=2, } \renewcommand{\lstlistingname}{Листинг} \captionsetup[lstlisting]{labelsep=emdash,font=onehalfspacing,position=top,singlelinecheck=false,justification=raggedright} \usepackage{amsthm,amsfonts,amsmath,amssymb,amscd} \usepackage{mathtools} \usepackage{unicode-math} \setmathfont{TeX Gyre Termes Math} \usepackage[perpage]{footmisc} \usepackage{tabularx} \usepackage{titlesec} \renewcommand{\thesection}{\arabic{section}} \renewcommand{\thesubsection}{\thesection.\arabic{subsection}} \renewcommand{\thesubsubsection}{\thesubsection.\arabic{subsubsection}} \titleformat{\section}{\fontsize{14pt}{18pt}\selectfont\bfseries}{}{0em}{\thesection. } \titleformat{\subsection}{\fontsize{14pt}{18pt}\selectfont\bfseries}{}{0em}{\thesubsection. } \titleformat{\subsubsection}{\fontsize{14pt}{18pt}\selectfont\bfseries}{}{0em}{\thesubsubsection. } \titlespacing*{\section}{1.25cm}{1ex plus 0.3ex minus 0.2ex}{0.6ex plus 0.2ex minus 0.1ex} \titlespacing*{\subsection}{1.25cm}{1ex plus 0.3ex minus 0.2ex}{0.6ex plus 0.2ex minus 0.1ex} \titlespacing*{\subsubsection}{1.25cm}{1ex plus 0.3ex minus 0.2ex}{0.6ex plus 0.2ex minus 0.1ex} \usepackage{tocloft} \addto\captionsrussian{% \renewcommand{\contentsname}{СОДЕРЖАНИЕ}% } \renewcommand{\cfttoctitlefont}{\hfill\fontsize{14pt}{18pt}\selectfont\bfseries} \renewcommand{\cftaftertoctitle}{\hfill\null} \setlength{\cftbeforesecskip}{0pt} \renewcommand{\cftsecaftersnum}{.} \renewcommand{\cftsubsecaftersnum}{.} \renewcommand{\cftsubsubsecaftersnum}{.} \renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}} \renewcommand{\cftdotsep}{1} \cftsetpnumwidth{0.7em} \cftsetrmarg{1em} \renewcommand{\cftsecfont}{\mdseries} \renewcommand{\cftsecpagefont}{\mdseries} \renewcommand{\cftsubsecfont}{\mdseries} \renewcommand{\cftsubsubsecfont}{\mdseries} % Ширина поля номера в оглавлении измеряется по шрифту, а не задаётся % константой: при фиксированных 1.5em номер 2.10. не помещается и печатается % поверх названия главы, а у остальных пропадает пробел после точки. \setlength{\cftsecindent}{0em} \setlength{\cftsubsecindent}{0em} \setlength{\cftsubsubsecindent}{0em} \settowidth{\cftsecnumwidth}{\cftsecfont 9.\enspace} \settowidth{\cftsubsecnumwidth}{\cftsubsecfont 9.99.\enspace} \settowidth{\cftsubsubsecnumwidth}{\cftsubsubsecfont 9.99.99.\enspace} \newcommand{\sigline}[3][4cm]{% \begin{tabular}[t]{@{}c@{}}% \makebox[#1][c]{\strut #2} \\[-1em]% \rule{#1}{0.4pt} \\[-1em]% {\scriptsize #3}% \end{tabular}% } % Ширины шапки титульного листа. Колонка эмблемы задаётся явно, ширина % текстовой части — остаток от текстового поля за вычетом рамки и отбивок, % поэтому шапка не может вылезти за рамку при смене полей страницы. \newlength{\ptpemblemwidth} \newlength{\ptpheadwidth} \newlength{\ptpheadpad} \setlength{\ptpemblemwidth}{0.14\textwidth} \setlength{\ptpheadpad}{4pt} \setlength{\ptpheadwidth}{% \dimexpr\textwidth-\ptpemblemwidth-4\ptpheadpad-3\arrayrulewidth\relax} \newcommand{\ptpfieldw}[4][4.5cm]{% \par\noindent \makebox[#1][l]{#2}% \begin{tabular}[t]{@{}c@{}}% \makebox[#4][c]{#3} \\[-1.05em]% \rule{#4}{0.4pt}% \end{tabular}\par} \newcommand{\ptpfield}[3][4.5cm]{% \ptpfieldw[#1]{#2}{#3}{\dimexpr\textwidth-#1\relax}} \newcommand{\ptpfieldnote}[4][4.5cm]{% \ptpfield[#1]{#2}{#3}% \par\vspace{-0.45em}% % \noindent обязателен: иначе к строке подписи прибавляется абзацный отступ, % и она ровно на \parindent выходит за правое поле. \noindent\hspace*{#1}% \makebox[\dimexpr\textwidth-#1\relax][c]{\footnotesize\itshape #4}\par} \newcommand{\ptpfieldpar}[3][4.5cm]{% \par\noindent \makebox[#1][l]{#2}% \begin{tabular}[t]{@{}c@{}}% \parbox{\dimexpr\textwidth-#1\relax}{\centering #3} \\[-0.55em]% \rule{\dimexpr\textwidth-#1\relax}{0.4pt}% \end{tabular}\par} % Блок подписи: метка слева, две подписи прижаты к правому полю. % Через tabularx с колонкой X это не работало — при длинной метке % («Руководитель практики от кафедры») колонка схлопывалась, и подписи % уезжали за правое поле. Здесь ширина подписей фиксирована, а \hfill % забирает остаток, поэтому правые края блоков всегда совпадают. \newcommand{\ptpsig}[3]{% \par\noindent #1\hfill \sigline[3.8cm]{}{\itshape подпись, дата}% \hspace{0.5cm}% \sigline[3.8cm]{#2}{\itshape #3}\par} \begin{document}""" END_DOCUMENT = r"\end{document}" + "\n"