-
Notifications
You must be signed in to change notification settings - Fork 0
/
disstyles.tex
251 lines (223 loc) · 13 KB
/
disstyles.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
%%% Изображения %%%
\graphicspath{{images/}{Dissertation/images/}} % Пути к изображениям
%%% Макет страницы %%%
% Выставляем значения полей (ГОСТ 7.0.11-2011, 5.3.7)
\geometry{a4paper,top=2cm,bottom=2cm,left=2.5cm,right=1cm,nofoot,nomarginpar} %,showframe
\setlength{\topskip}{0pt} %размер дополнительного верхнего поля
\setlength{\footskip}{12.3pt} % снимет warning, согласно https://tex.stackexchange.com/a/334346
%%% Интервалы %%%
%% По ГОСТ Р 7.0.11-2011, пункту 5.3.6 требуется полуторный интервал
%% Реализация средствами класса (на основе setspace) ближе к типографской классике.
%% И правит сразу и в таблицах (если со звёздочкой)
%\DoubleSpacing* % Двойной интервал
\OnehalfSpacing* % Полуторный интервал
%\setSpacing{1.42} % Полуторный интервал, подобный Ворду (возможно, стоит включать вместе с предыдущей строкой)
%%% Выравнивание и переносы %%%
%% http://tex.stackexchange.com/questions/241343/what-is-the-meaning-of-fussy-sloppy-emergencystretch-tolerance-hbadness
%% http://www.latex-community.org/forum/viewtopic.php?p=70342#p70342
\tolerance 1414
\hbadness 1414
\emergencystretch 1.5em % В случае проблем регулировать в первую очередь
\hfuzz 0.3pt
\vfuzz \hfuzz
%\raggedbottom
%\sloppy % Избавляемся от переполнений
\clubpenalty=10000 % Запрещаем разрыв страницы после первой строки абзаца
\widowpenalty=10000 % Запрещаем разрыв страницы после последней строки абзаца
%%% Блок управления параметрами для выравнивания заголовков в тексте %%%
\newlength{\otstuplen}
\setlength{\otstuplen}{\theotstup\parindent}
\ifnumequal{\value{headingalign}}{0}{% выравнивание заголовков в тексте
\newcommand{\hdngalign}{\centering} % по центру
\newcommand{\hdngaligni}{}% по центру
\setlength{\otstuplen}{0pt}
}{%
\newcommand{\hdngalign}{} % по левому краю
\newcommand{\hdngaligni}{\hspace{\otstuplen}} % по левому краю
} % В обоих случаях вроде бы без переноса, как и надо (ГОСТ Р 7.0.11-2011, 5.3.5)
%%% Оглавление %%%
\renewcommand{\cftchapterdotsep}{\cftdotsep} % отбивка точками до номера страницы начала главы/раздела
%% Переносить слова в заголовке не допускается (ГОСТ Р 7.0.11-2011, 5.3.5). Заголовки в оглавлении должны точно повторять заголовки в тексте (ГОСТ Р 7.0.11-2011, 5.2.3). Прямого указания на запрет переносов в оглавлении нет, но по той же логике невнесения искажений в смысл, лучше в оглавлении не переносить:
\setrmarg{2.55em plus1fil} %To have the (sectional) titles in the ToC, etc., typeset ragged right with no hyphenation
\renewcommand{\cftchapterpagefont}{\normalfont} % нежирные номера страниц у глав в оглавлении
\renewcommand{\cftchapterleader}{\cftdotfill{\cftchapterdotsep}}% нежирные точки до номеров страниц у глав в оглавлении
%\renewcommand{\cftchapterfont}{} % нежирные названия глав в оглавлении
\ifnumgreater{\value{headingdelim}}{0}{%
\renewcommand\cftchapteraftersnum{.\space} % добавляет точку с пробелом после номера раздела в оглавлении
}{}
\ifnumgreater{\value{headingdelim}}{1}{%
\renewcommand\cftsectionaftersnum{.\space} % добавляет точку с пробелом после номера подраздела в оглавлении
\renewcommand\cftsubsectionaftersnum{.\space} % добавляет точку с пробелом после номера подподраздела в оглавлении
\renewcommand\cftsubsubsectionaftersnum{.\space} % добавляет точку с пробелом после номера подподподраздела в оглавлении
\AtBeginDocument{% без этого polyglossia сама всё переопределяет
\setsecnumformat{\csname the#1\endcsname.\space}
}
}{%
\AtBeginDocument{% без этого polyglossia сама всё переопределяет
\setsecnumformat{\csname the#1\endcsname\quad}
}
}
\renewcommand*{\cftappendixname}{\appendixname\space} % Слово Приложение в оглавлении
%%% Колонтитулы %%%
% Порядковый номер страницы печатают на середине верхнего поля страницы (ГОСТ Р 7.0.11-2011, 5.3.8)
\makeevenhead{plain}{}{\thepage}{}
\makeoddhead{plain}{}{\thepage}{}
\makeevenfoot{plain}{}{}{}
\makeoddfoot{plain}{}{}{}
\pagestyle{plain}
%%% добавить Стр. над номерами страниц в оглавлении
%%% http://tex.stackexchange.com/a/306950
\newif\ifendTOC
\newcommand*{\tocheader}{
\ifnumequal{\value{pgnum}}{1}{%
\ifendTOC\else\hbox to \linewidth%
{\noindent{}~\hfill{Стр.}}\par%
\ifnumless{\value{page}}{3}{}{%
\vspace{0.5\onelineskip}
}
\afterpage{\tocheader}
\fi%
}{}%
}%
%%% Оформление заголовков глав, разделов, подразделов %%%
%% Работа должна быть выполнена ... размером шрифта 12-14 пунктов (ГОСТ Р 7.0.11-2011, 5.3.8). То есть не должно быть надписей шрифтом более 14. Так и поставим.
%% Эти установки будут давать одинаковый результат независимо от выбора базовым шрифтом 12 пт или 14 пт
\newcommand{\basegostsectionfont}{\fontsize{14pt}{16pt}\selectfont\bfseries}
\makechapterstyle{thesisgost}{%
\chapterstyle{default}
\setlength{\beforechapskip}{0pt}
\setlength{\midchapskip}{0pt}
\setlength{\afterchapskip}{\theintvl\curtextsize}
\renewcommand*{\chapnamefont}{\basegostsectionfont}
\renewcommand*{\chapnumfont}{\basegostsectionfont}
\renewcommand*{\chaptitlefont}{\basegostsectionfont}
\renewcommand*{\chapterheadstart}{}
\ifnumgreater{\value{headingdelim}}{0}{%
\renewcommand*{\afterchapternum}{.\space} % добавляет точку с пробелом после номера раздела
}{%
\renewcommand*{\afterchapternum}{\quad} % добавляет \quad после номера раздела
}
\renewcommand*{\printchapternum}{\hdngaligni\hdngalign\chapnumfont \thechapter}
\renewcommand*{\printchaptername}{}
\renewcommand*{\printchapternonum}{\hdngaligni\hdngalign}
}
\makeatletter
\makechapterstyle{thesisgostchapname}{%
\chapterstyle{thesisgost}
\renewcommand*{\printchapternum}{\chapnumfont \thechapter}
\renewcommand*{\printchaptername}{\hdngaligni\hdngalign\chapnamefont \@chapapp} %
}
\makeatother
\chapterstyle{thesisgost}
\setsecheadstyle{\basegostsectionfont\hdngalign}
\setsecindent{\otstuplen}
\setsubsecheadstyle{\basegostsectionfont\hdngalign}
\setsubsecindent{\otstuplen}
\setsubsubsecheadstyle{\basegostsectionfont\hdngalign}
\setsubsubsecindent{\otstuplen}
\sethangfrom{\noindent #1} %все заголовки подразделов центрируются с учетом номера, как block
\ifnumequal{\value{chapstyle}}{1}{%
\chapterstyle{thesisgostchapname}
\renewcommand*{\cftchaptername}{\chaptername\space} % будет вписано слово Глава перед каждым номером раздела в оглавлении
}{}%
%%% Интервалы между заголовками
\setbeforesecskip{\theintvl\curtextsize}% Заголовки отделяют от текста сверху и снизу тремя интервалами (ГОСТ Р 7.0.11-2011, 5.3.5).
\setaftersecskip{\theintvl\curtextsize}
\setbeforesubsecskip{\theintvl\curtextsize}
\setaftersubsecskip{\theintvl\curtextsize}
\setbeforesubsubsecskip{\theintvl\curtextsize}
\setaftersubsubsecskip{\theintvl\curtextsize}
%%% Блок дополнительного управления размерами заголовков
\ifnumequal{\value{headingsize}}{1}{% Пропорциональные заголовки и базовый шрифт 14 пт
\renewcommand{\basegostsectionfont}{\large\bfseries}
\renewcommand*{\chapnamefont}{\Large\bfseries}
\renewcommand*{\chapnumfont}{\Large\bfseries}
\renewcommand*{\chaptitlefont}{\Large\bfseries}
}{}
%%% Счётчики %%%
%% Упрощённые настройки шаблона диссертации: нумерация формул, таблиц, рисунков
\ifnumequal{\value{contnumeq}}{1}{%
\counterwithout{equation}{chapter} % Убираем связанность номера формулы с номером главы/раздела
}{}
\ifnumequal{\value{contnumfig}}{1}{%
\counterwithout{figure}{chapter} % Убираем связанность номера рисунка с номером главы/раздела
}{}
\ifnumequal{\value{contnumtab}}{1}{%
\counterwithout{table}{chapter} % Убираем связанность номера таблицы с номером главы/раздела
}{}
%%http://www.linux.org.ru/forum/general/6993203#comment-6994589 (используется totcount)
\makeatletter
\def\formbytotal#1#2#3#4#5{%
\newcount\@c
\@c\totvalue{#1}\relax
\newcount\@last
\newcount\@pnul
\@last\@c\relax
\divide\@last 10
\@pnul\@last\relax
\divide\@pnul 10
\multiply\@pnul-10
\advance\@pnul\@last
\multiply\@last-10
\advance\@last\@c
\total{#1}~#2%
\ifnum\@pnul=1#5\else%
\ifcase\@last#5\or#3\or#4\or#4\or#4\else#5\fi
\fi
}
\makeatother
\AtBeginDocument{
%% регистрируем счётчики в системе totcounter
\regtotcounter{totalcount@figure}
\regtotcounter{totalcount@table} % Если иным способом поставить в преамбуле то ошибка в числе таблиц
\regtotcounter{TotPages} % Если иным способом поставить в преамбуле то ошибка в числе страниц
}
%%% Правильная нумерация приложений %%%
%% По ГОСТ 2.105, п. 4.3.8 Приложения обозначают заглавными буквами русского алфавита,
%% начиная с А, за исключением букв Ё, З, Й, О, Ч, Ь, Ы, Ъ.
%% Здесь также переделаны все нумерации русскими буквами.
\ifxetexorluatex
\makeatletter
\def\russian@Alph#1{\ifcase#1\or
А\or Б\or В\or Г\or Д\or Е\or Ж\or
И\or К\or Л\or М\or Н\or
П\or Р\or С\or Т\or У\or Ф\or Х\or
Ц\or Ш\or Щ\or Э\or Ю\or Я\else\xpg@ill@value{#1}{russian@Alph}\fi}
\def\russian@alph#1{\ifcase#1\or
а\or б\or в\or г\or д\or е\or ж\or
и\or к\or л\or м\or н\or
п\or р\or с\or т\or у\or ф\or х\or
ц\or ш\or щ\or э\or ю\or я\else\xpg@ill@value{#1}{russian@alph}\fi}
\makeatother
\else
\makeatletter
\if@uni@ode
\def\russian@Alph#1{\ifcase#1\or
А\or Б\or В\or Г\or Д\or Е\or Ж\or
И\or К\or Л\or М\or Н\or
П\or Р\or С\or Т\or У\or Ф\or Х\or
Ц\or Ш\or Щ\or Э\or Ю\or Я\else\@ctrerr\fi}
\else
\def\russian@Alph#1{\ifcase#1\or
\CYRA\or\CYRB\or\CYRV\or\CYRG\or\CYRD\or\CYRE\or\CYRZH\or
\CYRI\or\CYRK\or\CYRL\or\CYRM\or\CYRN\or
\CYRP\or\CYRR\or\CYRS\or\CYRT\or\CYRU\or\CYRF\or\CYRH\or
\CYRC\or\CYRSH\or\CYRSHCH\or\CYREREV\or\CYRYU\or
\CYRYA\else\@ctrerr\fi}
\fi
\if@uni@ode
\def\russian@alph#1{\ifcase#1\or
а\or б\or в\or г\or д\or е\or ж\or
и\or к\or л\or м\or н\or
п\or р\or с\or т\or у\or ф\or х\or
ц\or ш\or щ\or э\or ю\or я\else\@ctrerr\fi}
\else
\def\russian@alph#1{\ifcase#1\or
\cyra\or\cyrb\or\cyrv\or\cyrg\or\cyrd\or\cyre\or\cyrzh\or
\cyri\or\cyrk\or\cyrl\or\cyrm\or\cyrn\or
\cyrp\or\cyrr\or\cyrs\or\cyrt\or\cyru\or\cyrf\or\cyrh\or
\cyrc\or\cyrsh\or\cyrshch\or\cyrerev\or\cyryu\or
\cyrya\else\@ctrerr\fi}
\fi
\makeatother
\fi