forked from mstyura/bsuir-diploma-latex
-
Notifications
You must be signed in to change notification settings - Fork 1
/
preamble.tex
472 lines (352 loc) · 20.5 KB
/
preamble.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
% !TeX spellcheck = russian-aot-ieyo
% Зачем: Определяет класс документа (То, как будет выглядеть документ)
% Примечание: параметр draft помечает строки, вышедшие за границы страницы, прямоугольником, в фильной версии его нужно удалить.
\documentclass[a4paper,14pt,russian,oneside,final]{extreport}
%\documentclass[a4paper,14pt,russian,oneside,final]{report}
% Для мультиязыковой поддержки
\usepackage{polyglossia}
% Установка язков
\setdefaultlanguage{russian}
\setmainlanguage{russian}
\setotherlanguage{english}
% Лигатуры нужны для правильного отображения тире, кавычек и прочего
\setmainfont[Ligatures=TeX]{Times New Roman}
\setmonofont[Ligatures=TeX]{Courier New}
% Необходимо для киррилических шрифтов
\newfontfamily{\cyrillicfont}[Ligatures=TeX]{Times New Roman}
\newfontfamily{\cyrillicfonttt}[Ligatures=TeX]{Courier New}
%% Зачем: Чтобы можно было использовать русские буквы в формулах, но в случае использования предупреждать об этом.
%\usepackage[warn]{mathtext}
% Зачем: Учет особенностей различных языков.
\usepackage{babel}
% Зачем: Длинна, пимерно соответвующая 5 символам
% Почему: Требования содержат странное требование про отсупы в 5 символов (для немоноширинного шрифта :| )
\newlength{\fivecharsapprox}
\setlength{\fivecharsapprox}{6ex}
% Зачем: Добавляет отступы для абзацев.
% Почему: Пункт 2.1.3 Требований по оформлению пояснительной записки.
\usepackage{indentfirst}
\setlength{\parindent}{\fivecharsapprox} % Примерно соответсвует 5 символам.
% Зачем: Настраивает отступы от границ страницы.
% Почему: Пункт 2.1.2 Требований по оформлению пояснительной записки.
\usepackage[left=3cm,top=2.0cm,right=1.5cm,bottom=2.7cm]{geometry}
% Зачем: Настраивает межстрочный интервал, для размещения 40 +/- 3 строки текста на странице.
% Почему: Пункт 2.1.1 Требований по оформлению пояснительной записки.
\usepackage[nodisplayskipstretch]{setspace}
\setstretch{1.0}
%\onehalfspacing
% Зачем: Отключает использование изменяемых межсловных пробелов.
% Почему: Так не принято делать в текстах на русском языке.
\frenchspacing
% Зачем: Сброс счетчика сносок для каждой страницы
% Примечание: в "Требованиях по оформлению пояснительной записки" не указано, как нужно делать, но в других БГУИРовских докуметах рекомендуется нумерация отдельная для каждой страницы
\usepackage{perpage}
\MakePerPage{footnote}
% Зачем: Добавляет скобку 1) к номеру сноски
% Почему: Пункты 2.9.2 и 2.9.1 Требований по оформлению пояснительной записки.
\makeatletter
\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark)}}}
\makeatother
% Зачем: Расположение сносок внизу страницы
% Почему: Пункт 2.9.2 Требований по оформлению пояснительной записки.
\usepackage[bottom]{footmisc}
% Зачем: Переопределяем стандартную нумерацию, т.к. в отчете будут только section и т.д. в терминологии TeX
\makeatletter
\renewcommand{\thesection}{\arabic{section}}
\makeatother
% Зачем: Пункты (в терминологии требований) в терминологии TeX subsubsection должны нумероваться
% Почему: Пункт 2.2.3 Требований по оформлению пояснительной записки.
\setcounter{secnumdepth}{3}
% Зачем: Настраивает отступ между таблицей с содержанимем и словом СОДЕРЖАНИЕ
% Почему: Пункт 2.2.7 Требований по оформлению пояснительной записки.
\usepackage{tocloft}
\setlength{\cftbeforetoctitleskip}{-1em}
\setlength{\cftaftertoctitleskip}{1em}
% Зачем: Определяет отступы слева для записей в таблице содержания.
% Почему: Пункт 2.2.7 Требований по оформлению пояснительной записки.
\makeatletter
\renewcommand{\l@section}{\@dottedtocline{1}{0.5em}{1.2em}}
\newcommand{\l@appendix}{\@dottedtocline{2}{0.5em}{1.2em}}
\renewcommand{\l@subsection}{\@dottedtocline{2}{1.7em}{2.0em}}
\makeatother
% Зачем: Работа с колонтитулами
\usepackage{fancyhdr} % пакет для установки колонтитулов
\pagestyle{fancy} % смена стиля оформления страниц
% Зачем: Нумерация страниц располагается справа снизу страницы
% Почему: Пункт 2.2.8 Требований по оформлению пояснительной записки.
\fancyhf{} % очистка текущих значений
\fancyfoot[R]{\thepage} % установка верхнего колонтитула
\renewcommand{\footrulewidth}{0pt} % убрать разделительную линию внизу страницы
\renewcommand{\headrulewidth}{0pt} % убрать разделительную линию вверху страницы
\fancypagestyle{plain}{
\fancyhf{}
\rfoot{\thepage}}
% Зачем: Задает стиль заголовков раздела жирным шрифтом, прописными буквами, без точки в конце
% Почему: Пункты 2.1.1, 2.2.5, 2.2.6 и ПРИЛОЖЕНИЕ Л Требований по оформлению пояснительной записки.
\makeatletter
\renewcommand\section{%
\clearpage\@startsection {section}{1}%
{\fivecharsapprox}%
{-1em \@plus -1ex \@minus -.2ex}%
{1em \@plus .2ex}%
{\raggedright\hyphenpenalty=10000\normalfont\normalsize\MakeUppercase}}
\makeatother
% Зачем: Задает стиль заголовков подразделов
% Почему: Пункты 2.1.1, 2.2.5 и ПРИЛОЖЕНИЕ Л Требований по оформлению пояснительной записки.
\makeatletter
\renewcommand\subsection{%
\@startsection{subsection}{2}%
{\fivecharsapprox}%
{-1em \@plus -1ex \@minus -.2ex}%
{1em \@plus .2ex}%
{\raggedright\hyphenpenalty=10000\normalfont\normalsize}}
\makeatother
% Зачем: Задает стиль заголовков пунктов
% Почему: Пункты 2.1.1, 2.2.5 и ПРИЛОЖЕНИЕ Л Требований по оформлению пояснительной записки.
\makeatletter
\renewcommand\subsubsection{
\@startsection{subsubsection}{3}%
{\fivecharsapprox}%
{-1em \@plus -1ex \@minus -.2ex}%
{1em \@plus .2ex}%
%{\z@}%
{\raggedright\hyphenpenalty=10000\normalfont\normalsize}}
\makeatother
% Зачем: для оформления введения и заключения, они должны быть выровнены по центру.
% Почему: Пункты 1.1.15 и 1.1.11 Требований по оформлению пояснительной записки.
\makeatletter
\newcommand\sectioncentered{%
\clearpage\@startsection {section}{1}%
{\z@}%
{-1em \@plus -1ex \@minus -.2ex}%
{1em \@plus .2ex}%
{\centering\hyphenpenalty=10000\normalfont\normalsize\MakeUppercase}%
}
\makeatother
% Приложения к записке
\makeatletter
\newcommand\sectionadd{%
\clearpage\@startsection {subsection}{1}%
{\z@}%
{-1em \@plus -1ex \@minus -.2ex}%
{1sp \@plus .1em}%
{\centering\hyphenpenalty=10000\normalfont\normalsize}%
}
\makeatother
% Зачем: Задает стиль библиографии
% Почему: Пункт 2.8.6 Требований по оформлению пояснительной записки.
\bibliographystyle{styles/ugost2003}
% Зачем: Пакет для вставки картинок
% Примечание: Объяснение, зачем final - http://tex.stackexchange.com/questions/11004/why-does-the-image-not-appear
\usepackage[final]{graphicx}
\DeclareGraphicsExtensions{.pdf,.png,.jpg,.eps}
% Зачем: Директория в которой будет происходить поиск картинок
\graphicspath{{figures/}}
% Зачем: Добавление подписей к рисункам
\usepackage[nooneline]{caption}
\usepackage{subcaption}
% Зачем: чтобы работала \No в новых латехах
\DeclareRobustCommand{\No}{\ifmmode{\nfss@text{\textnumero}}\else\textnumero\fi}
% Зачем: поворот ячеек таблиц на 90 градусов
\usepackage{rotating}
\DeclareRobustCommand{\povernut}[1]{\begin{sideways}{#1}\end{sideways}}
% Зачем: когда в формулах много кириллических символов команда \text{} занимает много места
\DeclareRobustCommand{\x}[1]{\text{#1}}
% Зачем: Задание подписей, разделителя и нумерации частей рисунков
% Почему: Пункт 2.5.5 Требований по оформлению пояснительной записки.
\DeclareCaptionLabelFormat{stbfigure}{Рисунок #2}
\DeclareCaptionLabelFormat{stbtable}{Таблица #2}
\DeclareCaptionLabelSeparator{stb}{~--~}
\captionsetup{labelsep=stb}
\captionsetup[figure]{labelformat=stbfigure,justification=centering}
\captionsetup[table]{labelformat=stbtable,justification=raggedright,format=hang,aboveskip=0pt}
\renewcommand{\thesubfigure}{\asbuk{subfigure}}
% Зачем: Окружения для оформления формул
% Почему: Пункт 2.4.7 требований по оформлению пояснительной записки и специфические требования различных кафедр
% Пример использования смотри в course_content.tex, строка 5
\usepackage{calc}
\newlength{\lengthWordWhere}
\settowidth{\lengthWordWhere}{где}
\newenvironment{explanationx}
{%
%%% Следующие строки определяют специфические требования разных редакций стандартов. Раскоменнтируйте нужную строку
%% стандартный абзац, СТП-01 2010
%\begin{itemize}[leftmargin=0cm, itemindent=\parindent + \lengthWordWhere + \labelsep, labelsep=\labelsep]
%% без отступа, СТП-01 2013
\begin{itemize}[leftmargin=0cm, itemindent=\lengthWordWhere + \labelsep , labelsep=\labelsep]%
\renewcommand\labelitemi{}%
}
{%
%\\[\parsep]
\end{itemize}
}
% Старое окружение для "где". Сохранено для совместимости
\usepackage{tabularx}
\newenvironment{explanation}
{
%%% Следующие строки определяют специфические требования разных редакций стандартов. Раскоменнтируйте нужные 2 строки
%% стандартный абзац, СТП-01 2010
%\par
%\tabularx{\textwidth-\fivecharsapprox}{@{}ll@{ --- } X }
%% без отступа, СТП-01 2013
\noindent
\tabularx{\textwidth}{@{}ll@{ --- } X }
}
{
\\[\parsep]
\endtabularx
}
% Зачем: Удобная вёрстка многострочных формул, масштабирующийся текст в формулах, формулы в рамках и др
\usepackage{amsmath}
% Зачем: Поддержка ажурного и готического шрифтов
\usepackage{amsfonts}
% Зачем: amsfonts + несколько сотен дополнительных математических символов
\usepackage{amssymb}
% Зачем: Окружения «теорема», «лемма»
\usepackage{amsthm}
% Зачем: Производить арифметические операции во время компиляции TeX файла
\usepackage{calc}
% Зачем: Производить арифметические операции во время компиляции TeX файла
\usepackage{fp}
% Зачем: Пакет для работы с перечислениями
\usepackage{enumitem}
\makeatletter
\AddEnumerateCounter{\asbuk}{\@asbuk}{щ)}
\makeatother
% Зачем: Устанавливает символ начала простого перечисления
% Почему: Пункт 2.3.5 Требований по оформлению пояснительной записки.
\setlist{nolistsep}
% Зачем: Устанавливает символ начала именованного перечисления
% Почему: Пункт 2.3.8 Требований по оформлению пояснительной записки.
\renewcommand{\labelenumi}{\asbuk{enumi})}
\renewcommand{\labelenumii}{\arabic{enumii})}
% Зачем: Устанавливает отступ от границы документа до символа списка, чтобы этот отступ равнялся отступу параграфа
% Почему: Пункт 2.3.5 Требований по оформлению пояснительной записки.
\setlist[itemize,0]{itemindent=\parindent + 2.2ex,leftmargin=0ex,label=--}
\setlist[enumerate,1]{itemindent=\parindent + 2.7ex,leftmargin=0ex}
\setlist[enumerate,2]{itemindent=\parindent + \parindent - 2.7ex}
% Зачем: Включение номера раздела в номер формулы. Нумерация формул внутри раздела.
\AtBeginDocument{\numberwithin{equation}{section}}
% Зачем: Включение номера раздела в номер таблицы. Нумерация таблиц внутри раздела.
\AtBeginDocument{\numberwithin{table}{section}}
% Зачем: Включение номера раздела в номер рисунка. Нумерация рисунков внутри раздела.
\AtBeginDocument{\numberwithin{figure}{section}}
% Зачем: Дополнительные возможности в форматировании таблиц
\usepackage{makecell}
\usepackage{multirow}
\usepackage{array}
% Зачем: "Умная" запятая в математических формулах. В дробных числах не добавляет пробел
% Почему: В требованиях не нашел, но в русском языке для дробных чисел используется {,} а не {.}
\usepackage{icomma}
% Зачем: макрос для печати римских чисел
\makeatletter
\newcommand{\rmnum}[1]{\romannumeral #1}
\newcommand{\Rmnum}[1]{\expandafter\@slowromancap\romannumeral #1@}
\makeatother
% Зачем: Управление выводом чисел.
\usepackage{sistyle}
\SIdecimalsign{,}
% Зачем: inline-коментирование содержимого.
\newcommand{\ignore}[2]{\hspace{0in}#2}
% Зачем: Возможность коментировать большие участки документа
\usepackage{verbatim}
\usepackage{xcolor}
% Зачем: Оформление листингов кода
% Примечание: final нужен для переопределения режима draft, в котором листинги не выводятся в документ.
\usepackage[final]{listings}
\usepackage[normalem]{ulem}
\usepackage[final,hidelinks,unicode]{hyperref}
% Моноширинный шрифт выглядит визуально больше, чем пропорциональный шрифт, если их размеры одинаковы. Искусственно уменьшаем размер ссылок.
\renewcommand{\UrlFont}{\normalfont\normalsize}
\usepackage[square,numbers,sort&compress]{natbib}
\setlength{\bibsep}{0em}
% Магия для подсчета разнообразных объектов в документе
\usepackage{lastpage}
\usepackage{totcount}
\regtotcounter{section}
\usepackage{etoolbox}
\newcounter{totfigures}
\newcounter{tottables}
\newcounter{totreferences}
\newcounter{totequation}
\providecommand\totfig{}
\providecommand\tottab{}
\providecommand\totref{}
\providecommand\toteq{}
\makeatletter
\AtEndDocument{%
\addtocounter{totfigures}{\value{figure}}%
\addtocounter{tottables}{\value{table}}%
\addtocounter{totequation}{\value{equation}}
\immediate\write\@mainaux{%
\string\gdef\string\totfig{\number\value{totfigures}}%
\string\gdef\string\tottab{\number\value{tottables}}%
\string\gdef\string\totref{\number\value{totreferences}}%
\string\gdef\string\toteq{\number\value{totequation}}%
}%
}
\makeatother
\pretocmd{\section}{\addtocounter{totfigures}{\value{figure}}\setcounter{figure}{0}}{}{}
\pretocmd{\section}{\addtocounter{tottables}{\value{table}}\setcounter{table}{0}}{}{}
\pretocmd{\section}{\addtocounter{totequation}{\value{equation}}\setcounter{equation}{0}}{}{}
\pretocmd{\bibitem}{\addtocounter{totreferences}{1}}{}{}
% Для оформления таблиц не влязящих на 1 страницу
\usepackage{longtable}
% Для включения pdf документов в результирующий файл
\usepackage{pdfpages}
% Для использования знака градуса и других знаков
% http://ctan.org/pkg/gensymb
\usepackage{gensymb}
% Зачем: преобразовывать текст в верхний регистр командой MakeTextUppercase
\usepackage{textcase}
% Зачем: Переносы в словах с тире.
% Тире в словае заменяем на \hyph: аппаратно\hyphпрограммный.
% https://stackoverflow.com/questions/2193307/how-to-get-latex-to-hyphenate-a-word-that-contains-a-dash#
\def\hyph{-\penalty0\hskip0pt\relax}
% Добавляем абзацный отступ для библиографии
% https://github.com/mstyura/bsuir-diploma-latex/issues/19
\setlength\bibindent{-1.0900cm}
\makeatletter
\renewcommand\NAT@bibsetnum[1]{\settowidth\labelwidth{\@biblabel{#1}}%
\setlength{\leftmargin}{\bibindent}\addtolength{\leftmargin}{\dimexpr\labelwidth+\labelsep\relax}%
\setlength{\itemindent}{-\bibindent+\fivecharsapprox-0.240cm}%
\setlength{\listparindent}{\itemindent}
\setlength{\itemsep}{\bibsep}\setlength{\parsep}{\z@}%
\ifNAT@openbib
\addtolength{\leftmargin}{\bibindent}%
\setlength{\itemindent}{-\bibindent}%
\setlength{\listparindent}{\itemindent}%
\setlength{\parsep}{10pt}%
\fi
}
% Нумерованный список с арабскими цифрами на всех уровнях нумерации
\newlist{legal}{enumerate}{10}
\setlist[legal]{font=\bfseries}
\newlist{enum}{enumerate}{10}
\setlist[enum]{label*=\arabic*.,font=\normalfont}
\setlist[enum,1]{itemindent=\parindent + 2.7ex,leftmargin=0ex}
\setlist[enum,2]{itemindent=\parindent + \parindent - 2.7ex}
\lstdefinestyle{qtstyle}{
xleftmargin=1.25cm,
basicstyle=\fontencoding{T1}\small\ttfamily,
breaklines=true,
tabsize=4
}
% Удаляет точки после нумерации section и прочих
\AtBeginDocument{%
\def\postsection{\@aftersepkern}%
\def\postsubsection{\@aftersepkern}%
\def\postsubsubsection{\@aftersepkern}%
\def\postparagraph{\@aftersepkern}%
\def\postsubparagraph{\@aftersepkern}%
}
\usepackage{minted}
\setminted[c++]{fontfamily=tt,fontsize=\small,xleftmargin=1.25cm,breaklines=true,tabsize=4}
\setminted[JSON]{fontfamily=tt,fontsize=\small,xleftmargin=1.25cm,breaklines=true,tabsize=2}
\usemintedstyle{bw}
\setlength{\belowcaptionskip}{-10pt}
%\setlength{\textfloatsep}{0.1cm}
%\setlength{\intextsep}{6pt}
%\makeatletter
%\preto{\@tabular}{\parskip=0pt}
%\makeatother