Guest User

matmex-diploma-custom.cls

a guest
Apr 25th, 2020
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.23 KB | None | 0 0
  1. \NeedsTeXFormat{LaTeX2e}
  2. % modified by @m0rphed
  3. \ProvidesClass{matmex-diploma-custom}[2015/05/28 MatMex LaTeX diploma class]
  4. \def\my@fontsize{12pt}\def\my@baseclass{article}\def\my@title12pt{}\def\my@body14pt{}
  5.  
  6. % Если используется опция 14pt то нужно несколько хаков
  7. \DeclareOption{14pt}{
  8. \def\ignore#1{}
  9. % во-первых, класс наследуется от extarticle
  10. \def\my@fontsize{14pt}
  11. \def\my@baseclass{extarticle}
  12.  
  13. % во-вторых, титульный лист должен набираться так, как будто
  14. % используется шрифт 12pt - иначе он выглядит совсем конским
  15. % Для этого мы явно загружаем size12.clo, но так как он на такое не рассчитан,
  16. % и использует \newcommand для определения всяких \small и \Large
  17. % то у нас \newcommand временно превращается в \renewcommand
  18. \let\orignewcommand\newcommand
  19. \let\origNeedsTeXFormat\NeedsTeXFormat
  20. \def\my@title12pt{
  21. \let\newcommand\renewcommand
  22. \makeatletter
  23. \input{size12.clo}
  24. \makeatother
  25. \let\newcommand\orignewcommand
  26. }
  27. % в-третьих, после того как титульный лист сгенерирован, нужно снова вернуться
  28. % к базовому шрифту 14pt. Применяется такой же хак: загрузи size14.clo
  29. % временно переопределив \newcommand => \renewcommand
  30. \def\my@body14pt{
  31. % отдельное внимание подавлению команды \NeedsTeXFormat, которая требует
  32. % чтобы код size14.clo выполнялся в преамбуле (а тут он уже внутри документа)
  33. \let\NeedsTeXFormat\ignore
  34. \let\newcommand\renewcommand
  35. \makeatletter
  36. \input{size14.clo}%
  37. \makeatother
  38. \let\newcommand\orignewcommand
  39. \let\NeedsTeXFormat\origNeedsTeXFormat
  40. }
  41. }
  42. \ProcessOptions\relax
  43. \LoadClass[a4paper,\my@fontsize]{\my@baseclass}
  44.  
  45. % Поля настраиваются командами \newgeometry во время и после генерации титульных
  46. % страниц и
  47. \usepackage[a4paper]{geometry}
  48.  
  49. \usepackage{fancyhdr}
  50. \usepackage{ifthen}
  51. %% Мы используем компилятор XeLaTex, который дружит с Unicode и True Type/Open Type
  52. %% шрифтами. Для русификации достаточно подключить пакет fontspec и
  53. %% выбрать Unicode шрифт в котором есть кириллические глифы. Ниже
  54. %% основным шрифтом выбирается Unicode версия шрифта Computer Modern с заcечками
  55. \usepackage{fontspec}
  56. \usepackage{microtype}
  57. \setmainfont[Mapping=tex-text]{CMU Serif}
  58. \setmonofont[Mapping=tex-text]{CMU Typewriter Text}
  59.  
  60. %% В XeLaTex заменой известного пакета babel является пакет polyglossia.
  61. %% Теперь у нас будут переносы слов
  62. \usepackage{polyglossia}
  63. \setdefaultlanguage{russian}
  64.  
  65. %% Отступ в первом абзаце
  66. \usepackage{indentfirst}
  67. %% Гиперссылки
  68. \usepackage[colorlinks=true,urlcolor=black,linkcolor=black,filecolor=black,citecolor=black]{hyperref}
  69.  
  70. %% Включение графических файлов
  71. %% We don't need to load graphicx since it will be loaded by xunicode (which is loaded by fontspec)
  72. %% (WARNING): For some reason XeLaTeX won't load images until `graphicx` is loaded manualy
  73. \usepackage{graphicx}
  74. \usepackage[titletoc]{appendix}
  75.  
  76. %% Эта команда добавляет отчеркнутое место для подписи после имени
  77. %% Аргументы: имя и пояснение под чертой (например, слово "подпись")
  78. \def\sigspace{\\[3em]}
  79. \newcommand\sigplace[2]{
  80. #1\\[1.2em]
  81. \underline{\hspace{3cm}}\\[-0.2em]
  82. {\footnotesize #2}
  83. \def\sigspace{\\[1em]%
  84. \def\sigspace{\\[3em]}}
  85. }
  86.  
  87. %% Параметры заполнения титульного листа
  88. \usepackage{xkeyval}
  89.  
  90. %% Русскоязычный вариант
  91. \define@key[ru]{mytitle}{university}{\def\my@title@university@ru{#1}}
  92. \define@key[ru]{mytitle}{faculty}{\def\my@title@faculty@ru{#1}}
  93. \define@key[ru]{mytitle}{chair}{\def\my@title@chair@ru{#1}}
  94. \define@key[ru]{mytitle}{title}{\def\my@title@title@ru{#1}}
  95. \define@key[ru]{mytitle}{position}{\def\my@title@position@ru{#1}}
  96. \define@key[ru]{mytitle}{group}{\def\my@title@group@ru{#1}}
  97. \define@key[ru]{mytitle}{author}{\def\my@title@author@ru{#1}}
  98. \define@key[ru]{mytitle}{supervisor}{\def\my@title@supervisor@ru{#1}}
  99. \define@key[ru]{mytitle}{supervisorPosition}{\def\my@title@supervisorPosition@ru{#1}}
  100. \define@key[ru]{mytitle}{reviewer}{\def\my@title@reviewer@ru{#1}}
  101. \define@key[ru]{mytitle}{reviewerPosition}{\def\my@title@reviewerPosition@ru{#1}}
  102. \define@key[ru]{mytitle}{chairHead}{\def\my@title@chairHead@ru{#1}}
  103. \define@key[ru]{mytitle}{chairHeadPosition}{\def\my@title@chairHeadPosition@ru{#1}}
  104. \define@key[ru]{mytitle}{year}{\def\my@title@year@ru{#1}}
  105. \define@key[ru]{mytitle}{city}{\def\my@title@city@ru{#1}}
  106. \define@choicekey*[ru]{mytitle}{type}{diploma,coursework,master,bachelor}{\def\my@title@type@ru{#1}}
  107.  
  108. %% Англоязычный вариант
  109. \define@key[en]{mytitle}{university}{\def\my@title@university@en{#1}}
  110. \define@key[en]{mytitle}{faculty}{\def\my@title@faculty@en{#1}}
  111. \define@key[en]{mytitle}{chair}{\def\my@title@chair@en{#1}}
  112. \define@key[en]{mytitle}{title}{\def\my@title@title@en{#1}}
  113. \define@key[en]{mytitle}{position}{\def\my@title@position@en{#1}}
  114. \define@key[en]{mytitle}{group}{\def\my@title@group@en{#1}}
  115. \define@key[en]{mytitle}{author}{\def\my@title@author@en{#1}}
  116. \define@key[en]{mytitle}{supervisor}{\def\my@title@supervisor@en{#1}}
  117. \define@key[en]{mytitle}{supervisorPosition}{\def\my@title@supervisorPosition@en{#1}}
  118. \define@key[en]{mytitle}{reviewer}{\def\my@title@reviewer@en{#1}}
  119. \define@key[en]{mytitle}{reviewerPosition}{\def\my@title@reviewerPosition@en{#1}}
  120. \define@key[en]{mytitle}{chairHead}{\def\my@title@chairHead@en{#1}}
  121. \define@key[en]{mytitle}{chairHeadPosition}{\def\my@title@chairHeadPosition@en{#1}}
  122. \define@key[en]{mytitle}{year}{\def\my@title@year@en{#1}}
  123. \define@key[en]{mytitle}{city}{\def\my@title@city@en{#1}}
  124. \define@choicekey*[en]{mytitle}{type}{diploma,coursework,master,bachelor}{\def\my@title@type@en{#1}}
  125.  
  126. \newcommand\filltitle[2]{
  127. %% Значения по умолчанию для обоих языков
  128. \ifthenelse{\equal{#1}{ru}}
  129. {
  130. \presetkeys[#1]{mytitle}{
  131. university = {Санкт-Петербургский государственный университет},
  132. faculty = {},
  133. city = {Санкт-Петербург},
  134. year = {\the\year},
  135. type = {diploma}
  136. }{}
  137. }
  138. {}
  139. \ifthenelse{\equal{#1}{en}}
  140. {
  141. \presetkeys[#1]{mytitle}{
  142. university = {SAINT-PETERSBURG STATE UNIVERSITY},
  143. faculty = {},
  144. city = {Saint-Petersburg},
  145. year = {\the\year},
  146. type = {diploma}
  147. }{}
  148. }
  149. {}
  150. \setkeys[#1]{mytitle}{#2}
  151. }
  152.  
  153. %% Титульная страница на русском языке
  154. \newcommand\maketitleru{
  155. \fancypagestyle{titleru}{
  156. \fancyhf{} % clear all header and footer fields
  157. \renewcommand{\headrulewidth}{0pt} % remove head ruler
  158. %% В верхнем колонтитуле будет университет и кафедра
  159. \chead{\large
  160. \my@title@university@ru \\
  161. \ifthenelse{\equal{\my@title@faculty@ru}{}}{}{\my@title@faculty@ru \\}
  162. \vskip 1em
  163. {\large \my@title@chair@ru \\}
  164. }
  165. %% В нижнем колонтитуле город и год
  166. \cfoot{\large\parbox[b]{\textwidth}{\centering \my@title@city@ru\\ \my@title@year@ru}}
  167. }
  168.  
  169. \title{\my@title@title@ru}
  170. \begin{titlepage}
  171. \newgeometry{top=20mm,bottom=20mm,left=20mm,right=15mm,nohead,includeheadfoot}
  172. \thispagestyle{titleru}
  173. \begin{center}
  174. \vspace*{0.25\textheight}
  175. {\Large\my@title@author@ru}
  176.  
  177. \vskip 2em
  178. {\Huge \@title\\}
  179.  
  180. \vskip 1em
  181. {\large
  182. \ifthenelse{\equal{\my@title@type@ru}{coursework}}
  183. {Учебная практика}
  184. {\ifthenelse{\equal{\my@title@type@ru}{diploma}}
  185. {Дипломная работа}
  186. {\ifthenelse{\equal{\my@title@type@ru}{master}}
  187. {Магистерская диссертация}
  188. {\ifthenelse{\equal{\my@title@type@ru}{bachelor}}
  189. {Бакалаврская работа}
  190. }}}
  191. \\}
  192. \vskip 2em
  193. \ifthenelse{\equal{\my@title@type@ru}{coursework}}
  194. {\normalsize \raggedleft
  195. Научный руководитель:\\
  196. \my@title@supervisorPosition@ru\ \my@title@supervisor@ru
  197. }
  198. {\normalsize \raggedleft
  199. \vskip 5em
  200. Научный руководитель:\\
  201. \my@title@supervisorPosition@ru\ \my@title@supervisor@ru\sigspace
  202. Рецензент:\\
  203. \my@title@reviewerPosition@ru\ \my@title@reviewer@ru
  204. }
  205. \end{center}
  206. \end{titlepage}
  207. }
  208.  
  209. %% Титульная страница на английском языке
  210. \newcommand\maketitleen{
  211. \fancypagestyle{titleen}{
  212. \fancyhf{} % clear all header and footer fields
  213. \renewcommand{\headrulewidth}{0pt} % remove head ruler
  214. %% В верхнем колонтитуле будет университет и кафедра
  215. \chead{\large
  216. \my@title@university@en \\
  217. \ifthenelse{\equal{\my@title@faculty@en}{}}{}{\my@title@faculty@en \\}
  218. \vskip 1em
  219. {\large \my@title@chair@en \\}
  220. }
  221. %% В нижнем колонтитуле город и год
  222. \cfoot{\large\parbox[b]{\textwidth}{\centering \my@title@city@en\\ \my@title@year@en}}
  223. }
  224. \title{\my@title@title@en}
  225. \begin{titlepage}%
  226. \newgeometry{top=20mm,bottom=20mm,left=20mm,right=15mm,nohead,includeheadfoot}
  227. \thispagestyle{titleen}
  228. \begin{center}
  229. \vspace*{0.25\textheight}
  230. {\Large\my@title@author@en\\}
  231.  
  232. \vskip 2em
  233. {\Huge \@title \\}
  234.  
  235. \vskip 1em
  236. {\large
  237. \ifthenelse{\equal{\my@title@type@en}{coursework}}
  238. {Course Work}
  239. {\ifthenelse{\equal{\my@title@type@en}{diploma}}
  240. {Graduation Thesis}
  241. {\ifthenelse{\equal{\my@title@type@en}{master}}
  242. {Master's Thesis}
  243. {\ifthenelse{\equal{\my@title@type@en}{bachelor}}
  244. {Bachelor's Thesis}
  245. }}}
  246. \\}
  247. \vskip 2em
  248. \ifthenelse{\equal{\my@title@type@en}{coursework}}
  249. {\normalsize \raggedleft
  250. Scientific supervisor:\\
  251. \my@title@supervisorPosition@en\ \my@title@supervisor@en
  252. }
  253. {\normalsize \raggedleft
  254. \vskip 5em
  255. Scientific supervisor:\\
  256. \my@title@supervisorPosition@en\ \my@title@supervisor@en\sigspace
  257.  
  258. Reviewer:\\
  259. \my@title@reviewerPosition@en\ \my@title@reviewer@en
  260. }
  261. \end{center}
  262. \end{titlepage}
  263. }
  264.  
  265. %% Титульный лист генерируется, если для соответствующего языка
  266. %% определен аргумент title
  267. %% Счетчик страниц автоматически увеличивается при генерации титульнго листа
  268. \renewcommand\maketitle{
  269. %% На титульной странице все кроме полей соответствует \documentclass[12pt]{article}
  270. \my@title12pt
  271.  
  272. \newcounter{titlepages}
  273. \setcounter{titlepages}{1}
  274. \begin{spacing}{1.0}
  275. \ifthenelse{\isundefined{\my@title@title@ru}}{}{
  276. % fancyhdr set height of the top/bottom headers automatically
  277. % so set them to zero to be sure that he does it
  278. \setlength{\headheight}{0pt}
  279. \setlength{\footskip}{0pt}
  280. \maketitleru\addtocounter{titlepages}{1}
  281. }
  282. \ifthenelse{\isundefined{\my@title@title@en}}{}{
  283. % fancyhdr already set height of the top/bottom headers on the previous page (titleru)
  284. % but on this page the headers' height might be different
  285. % so set them to zero again in order to make fancyhdr to do it
  286. \setlength{\headheight}{0pt}
  287. \setlength{\footskip}{0pt}
  288. \maketitleen\addtocounter{titlepages}{1}
  289. }
  290. \end{spacing}
  291. \setcounter{page}{\value{titlepages}}
  292. % restore preamble's geometry
  293. \my@body14pt
  294. \newgeometry{a4paper,top=20mm,bottom=20mm,left=30mm,right=15mm,nohead,includeheadfoot}
  295. }
  296.  
  297. %% Каждая глава начинается с новой страницы, введение и заключение не
  298. %% нумеруются, но в оглавление входят. А само оглавление в оглавление не входит
  299. \let\old@section\section
  300. \def\section{\@ifstar\@section\@@section}
  301. \def\@section#1{\newpage\old@section*{#1}%
  302. \ifthenelse{\equal{#1}{\contentsname}}%
  303. {}%
  304. {\addcontentsline{toc}{section}{#1}}%
  305. }
  306. \def\@@section#1{\newpage\old@section{#1}}
  307.  
  308. %% Полуторный интервал
  309. \usepackage[nodisplayskipstretch]{setspace}
  310. \onehalfspacing
  311.  
  312. %% Переименование "содержания" в "оглавление"
  313. \gappto\captionsrussian{\renewcommand{\contentsname}{Оглавление}}
  314.  
  315. \let\savenumberline\numberline
  316. \def\numberline#1{\savenumberline{#1.}}
Advertisement
Add Comment
Please, Sign In to add comment