├── .gitignore ├── LICENSE ├── README.md └── itmo-student-thesis ├── README.md ├── bachelor-thesis.tex ├── itmo-student-thesis.cls ├── master-thesis-en.tex ├── master-thesis.tex └── r.sh /.gitignore: -------------------------------------------------------------------------------- 1 | ## Core latex/pdflatex auxiliary files: 2 | *.aux 3 | *.lof 4 | *.log 5 | *.lot 6 | *.fls 7 | *.out 8 | *.toc 9 | 10 | ## Intermediate documents: 11 | *.dvi 12 | *-converted-to.* 13 | # these rules might exclude image files for figures etc. 14 | # *.ps 15 | # *.eps 16 | # *.pdf 17 | 18 | ## Bibliography auxiliary files (bibtex/biblatex/biber): 19 | *.bbl 20 | *.bcf 21 | *.blg 22 | *-blx.aux 23 | *-blx.bib 24 | *.brf 25 | *.run.xml 26 | 27 | ## Build tool auxiliary files: 28 | *.fdb_latexmk 29 | *.synctex 30 | *.synctex.gz 31 | *.synctex.gz(busy) 32 | *.pdfsync 33 | 34 | ## Auxiliary and intermediate files from other packages: 35 | 36 | # algorithms 37 | *.alg 38 | *.loa 39 | 40 | # achemso 41 | acs-*.bib 42 | 43 | # amsthm 44 | *.thm 45 | 46 | # beamer 47 | *.nav 48 | *.snm 49 | *.vrb 50 | 51 | #(e)ledmac/(e)ledpar 52 | *.end 53 | *.[1-9] 54 | *.[1-9][0-9] 55 | *.[1-9][0-9][0-9] 56 | *.[1-9]R 57 | *.[1-9][0-9]R 58 | *.[1-9][0-9][0-9]R 59 | *.eledsec[1-9] 60 | *.eledsec[1-9]R 61 | *.eledsec[1-9][0-9] 62 | *.eledsec[1-9][0-9]R 63 | *.eledsec[1-9][0-9][0-9] 64 | *.eledsec[1-9][0-9][0-9]R 65 | 66 | # glossaries 67 | *.acn 68 | *.acr 69 | *.glg 70 | *.glo 71 | *.gls 72 | 73 | # gnuplottex 74 | *-gnuplottex-* 75 | 76 | # hyperref 77 | *.brf 78 | 79 | # knitr 80 | *-concordance.tex 81 | *.tikz 82 | *-tikzDictionary 83 | 84 | # listings 85 | *.lol 86 | 87 | # makeidx 88 | *.idx 89 | *.ilg 90 | *.ind 91 | *.ist 92 | 93 | # minitoc 94 | *.maf 95 | *.mtc 96 | *.mtc0 97 | 98 | # minted 99 | _minted* 100 | *.pyg 101 | 102 | # morewrites 103 | *.mw 104 | 105 | # nomencl 106 | *.nlo 107 | 108 | # sagetex 109 | *.sagetex.sage 110 | *.sagetex.py 111 | *.sagetex.scmd 112 | 113 | # sympy 114 | *.sout 115 | *.sympy 116 | sympy-plots-for-*.tex/ 117 | 118 | # todonotes 119 | *.tdo 120 | 121 | # xindy 122 | *.xdy 123 | 124 | # WinEdt 125 | *.bak 126 | *.sav 127 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # latex-styles 2 | LaTeX styles for different purposes. Currently the following styles are available: 3 | 4 | ## itmo-student-thesis.cls 5 | 6 | A class for bachelor's and master's theses for students of ITMO University. 7 | -------------------------------------------------------------------------------- /itmo-student-thesis/README.md: -------------------------------------------------------------------------------- 1 | # itmo-student-thesis.cls 2 | 3 | Данный стилевой файл для LaTeX предлагается для использования на кафедре "Компьютерные технологии" [Университета ИТМО](http://www.ifmo.ru) 4 | для оформления пояснительных записок к бакалаврским работам и магистерским диссертациям. 5 | 6 | Преимущества: 7 | * довольно хорошо соответствует ГОСТ Р 7.0.1-2011 (на диссертации), в том числе в части списка литературы; 8 | * существует в виде одного cls-файла, который надо включать через `\documentclass`; 9 | * генерирует титульные страницы и даже задания с аннотациями. 10 | 11 | Недостатки: 12 | * использует довольно свежие возможности LaTeX (например, библиография делается связкой `biblatex`/`biber`), поэтому может не заработать на, скажем, MikTeX версии 2005 года; 13 | * включает довольно много пакетов, что может сковывать руки тем, кто использует альтернативы; 14 | * все еще оформлен не по правилам оформления пакетов для LaTeX --- в частности, сообщения об ошибках не оптимизировались вообще. 15 | 16 | ## Опции пакета 17 | * `specification` --- если эта опция присутствует, будет генерироваться задание. Если задание у Вас уже готово и подписано, а копировать его содержимое 18 | в LaTeX-команды лениво, опцию указывать не нужно, и тогда стилевик не будет жаловаться на отсутствие соответствующих команд. 19 | * `annotation` --- если эта опция присутствует, будет генерироваться аннотация. Если аннотация у Вас уже готова и подписана, а копировать ее содержимое 20 | в LaTeX-команды лениво, опцию указывать не нужно, и тогда стилевик не будет жаловаться на отсутствие соответствующих команд. 21 | * `times` --- если эта опция присутствует, считается, что текст собирается с помощью `xelatex`, который конфигурируется на использование 22 | системного шрифта Times New Roman для набора основного текста, системного шрифта Arial для текста без засечек, системного шрифта 23 | Courier New для моноширинного текста. 24 | * `languages={...}` --- определяет перечень языков, которыми можно пользоваться в тексте. Аргумент непосредственно передается команде `\usepackage[...]{babel}`. 25 | Последний из языков задает язык основного текста (в том числе язык для названий разделов, рисунков, подписей и т.д.). 26 | Если не указывать, будет использоваться значение `{english,russian}`. 27 | 28 | ## Опции пакета, актуальные для англоязычных дипломов 29 | 30 | * `titlepage-extra-ru` --- если эта опция присутствует, будет сгенерирована дополнительная титульная страница на русском языке. 31 | * `specification-extra-ru` --- если эта опция присутствует, будет сгенерировано дополнительное задание на русском языке. 32 | * `annotation-extra-ru` --- если эта опция присутствует, будет сгенерирована дополнительная аннотация на русском языке. 33 | 34 | ## Команды разметки страниц, глав и разделов 35 | * `\appendix` --- переключает нумерацию глав на "ПРИЛОЖЕНИЕ XX", где XX --- номер приложения русскими буквами / "APPENDIX XX", где XX --- номер приложения латинскими буквами. 36 | * `\chapterconclusion` --- создает ненумерованный раздел "Выводы по главе XX" / "Conclusions on Chapter XX", где XX --- номер текущей главы. 37 | * `\initializefrontsections` --- ничего не делает, существует для совместимости со старым стилевым пакетом. 38 | * `\maketitle{...}` --- создает титульную страницу (и задание с аннотацией, если указано в опциях) для бакалаврской работы (первый аргумент --- Бакалавр) 39 | или магистерской диссертации (первый аргумент --- Магистр). 40 | * `\startappendices` --- то же самое, что `\appendix`, существует для совместимости со старым стилевым пакетом. 41 | * `\startconclusionpage` --- создает ненумерованную главу "ЗАКЛЮЧЕНИЕ" / "CONCLUSION". 42 | * `\startprefacepage` --- создает ненумерованную главу "ВВЕДЕНИЕ" / "INTRODUCTION". 43 | * `\startthechapters` --- ничего не делает, существует для совместимости со старым стилевым пакетом. 44 | * `\printmainbibliography` --- создает список использованных источников (с корректным заголовком и добавлением его в оглавление). 45 | * `\printannobibliography` --- создает список публикаций без заголовка и с уменьшенным шрифтом, что используется в аннотации при указании своих публикаций. 46 | 47 | ## Команды определения общих данных 48 | * `\author{...}{...}` --- устанавливает фамилию, имя, отчество (первый аргумент) и фамилию и.о. (второй аргумент) автора работы. 49 | * `\publishyear{...}` --- устанавливает год выполнения работы. 50 | * `\studygroup{...}` --- устанавливает учебную группу. 51 | * `\supervisor{...}{...}{...}{...}` --- устанавливает фамилию, имя, отчество (первый аргумент), фамилию и.о. (второй аргумент), 52 | звание-степень (третий аргумент) и место работы (четвертый аргумент) научного руководителя. 53 | * `\title{...}` --- устанавливает название работы. 54 | * `\addconsultant{...}{...}` --- добавляет консультанта: фамилию и.о. (первый аргумент), степень-звание (второй аргумент). 55 | * `\startdate{день}{месяц}{год}` --- устанавливает дату начала работы (поля "Дата выдачи задания" и "Задание принял к исполнению"). Можно не устанавливать. 56 | * `\finishdate{день}{месяц}{год}` --- устанавливает дату окончания работы (поле "Срок сдачи студентом законченной работы"). Можно не устанавливать. 57 | * `\defencedate{день}{месяц}{год}` --- устанавливает дату защиты. Можно не устанавливать. 58 | * `\secretary{...}` --- устанавливает фамилию и.о. секретаря ГЭК. 59 | 60 | ## Команды переопределения данных по умолчанию 61 | * `\degreehost` --- переопределяет место выполнения работы. 62 | * `\chairhead{...}{...}` --- переопределяет фамилию и.о. (первый аргумент) и степень-звание (второй аргумент) заведующего кафедрой. 63 | * `\city{...}` --- переопределяет город выполнения работы. 64 | * `\faculty{...}` --- переопределяет название факультета. 65 | * `\specialty{...}` --- переопределяет название специальности. 66 | * `\specialization{...}` --- переопределяет поле "Направленность (профиль), специализация". 67 | * `\university{...}` --- переопределяет шапку документов, соответствующую полному названию университета. 68 | 69 | ## Команды определения данных задания 70 | * `\technicalspec{...}` --- определяет поле "Техническое задание и исходные данные к работе". 71 | * `\plannedcontents{...}` --- определяет поле "Содержание выпускной квалификационной работы". 72 | * `\plannedgraphics{...}` --- переопределяет поле "Перечень графического материала". 73 | * `\plannedsources{...}` --- определяет поле "Исходные материалы и пособия". 74 | 75 | ## Команды определения данных аннотации 76 | * `\researchaim{...}` --- определяет поле "Цель исследования". 77 | * `\researchtargets{...}` --- определяет поле "Задачи, решаемые в ВКР". 78 | * `\researchsummary{...}` --- определяет поле "Краткая характеристика полученных результатов". 79 | * `\researchfunding{...}` --- определяет поле "Гранты, полученные при выполнении работы". 80 | * `\researchpublications{...}` --- определяет поле "Наличие публикаций и выступлений на конференциях". 81 | * `\addadvancedsoftware{...}{...}` --- добавляет запись в поле "Использование современных пакетов", первый аргумент --- название пакета, второй --- в каких разделах работы используется. 82 | 83 | ## Команды определения данных про число публикаций в аннотации 84 | 85 | Версии стилевика, начиная с 1.2, умеют считать эти категории самостоятельно. 86 | Чтобы оно заработало, Вам необходимо обозначить то, что является обзором, с помощью следующих команд: 87 | 88 | * `\startrelatedwork` --- место начало обзора. 89 | * `\finishrelatedwork` --- место окончания обзора. 90 | 91 | Также не забывайте указывать в Ваших базах библиографии год выхода (поле `year`) и язык публикации (поле `langid`). 92 | Однако если по какой-либо причине все считается неадекватно, поля можно переопределить: 93 | 94 | * `\renewcommand{\relatedworksourcecount}{...}` --- переопределяет число публикаций, используемых в обзоре. 95 | * `\renewcommand{\russiansourcesfiveyears}{...}` --- переопределяет число отечественных источников за последние пять лет. 96 | * `\renewcommand{\russiansourcestenyears}{...}` --- переопределяет число отечественных источников возрастом от пяти до 10 лет. 97 | * `\renewcommand{\russiansourcesveryold}{...}` --- переопределяет число отечественных источников старше 10 лет. 98 | * `\renewcommand{\foreignsourcesfiveyears}{...}` --- переопределяет число зарубежных источников за последние пять лет. 99 | * `\renewcommand{\foreignsourcestenyears}{...}` --- переопределяет число зарубежных источников возрастом от пяти до 10 лет. 100 | * `\renewcommand{\foreignsourcesveryold}{...}` --- переопределяет число зарубежных источников старше 10 лет. 101 | * `\renewcommand{\internetsources}{...}` --- переопределяет поле "Использование информационных ресурсов Internet". 102 | 103 | 104 | ## Известные баги 105 | 106 | Здесь пусто, вообще ничего нет. 107 | 108 | ## Часто задаваемые вопросы 109 | * *Правда ли, что официальное название Университета ИТМО начинается с маленькой буквы? (федеральное...)* Да, правда. Текущие [реквизиты ИТМО](http://www.ifmo.ru/file/stat/26/obschiye_rekvizity.doc), 110 | действующие с июня 2014 года, предписывают начинать с маленькой буквы, и предыдущая их ревизия делала то же самое. 111 | * *У меня ничто не собирается при использовании пакета `hyperref`, про `\ClassError` какой-то ругается, что делать?* Передайте этому пакету опцию `implicit=false`, например, вот так: 112 | `\usepackage[unicode=true,implicit=false]{hyperref}`. В данном стилевике ощутимо переделаны некоторые команды, типа `\title` и `\author`, и `hyperref` на этом спотыкается. 113 | * *Я хочу использовать `xelatex` без опции `times`, но русские буквы не отображаются.* Можно не ставить опцию `times`, а вместо нее в преамбуле диплома написать вот что: 114 | ``` 115 | \usepackage{fontspec} 116 | \defaultfontfeatures{Ligatures={TeX},Renderer=Basic} 117 | \setmainfont{<Ваш шрифт для основного текста>} 118 | \setsansfont{<Ваш шрифт без засечек>} 119 | \setmonofont{<Ваш шрифт для листингов>} 120 | ``` 121 | * *Я хочу использовать опцию `times`, но шрифты не находятся.* В некоторых, особо извращенных случаях, шрифты называются не так. Как найти правильные названия, лучше искать в интернете, 122 | а подставить их в стилевик можно, как в ответе выше. 123 | 124 | 125 | ## Описание изменений в версиях 126 | Версия | Изменения 127 | -------|---------- 128 | 1.4.5 | Актуализирована специализация. 129 | 1.4.4 | Изменен способ записи названия университета, который приводил к зависанию на TeXLive 2022. 130 | 1.4.3 | Некорректный `\onehalfspace` заменен на корректный `\onehalfspacing`. Это исправляет некоторые warning-и. 131 | 1.4.2 | Обновлены различные строковые значения для соответствия шаблонам 2020 года. 132 | 1.4.1 | Теперь дата защиты действительно проставляется на обороте титульного листа. 133 | 1.4 | Реализована поддержка англоязычных дипломов с англо- и русскоязычными сопроводительными документами. 134 | 1.3.b6 | Теперь в опциях пакета можно сказать, например, `languages={russian,english}`, и эти аргументы будут переданы бабелю. Последний из языков определяют язык локалезависимых строк. 135 | 1.3.b5 | Все локалезависимые строки из тела текста бабелефицированы. Теперь если в бабеле выбран английский язык, все нужные строки делаются английскими. 136 | 1.3.b4 | Убрал ненужную в случае `xelatex` инициализацию `inputenс` и `fontenc`, убрал один ненужный счетчик, оптимизировал комментарии. 137 | 1.3.rc2.1 | Окончательно убраны команды вида `\chair` и `\thechair`, команды вида `\thechairhead` переименованы в команды вида `\theprogramhead`. 138 | 1.3.rc2 | Шаблон переведен с использования `tabu` на `tabularx`, что исправило сборку под TeXLive 2018. 139 | 1.3.rc1 | Реализован `\addadvancedsoftware` для "пакетов программ и технологий". Шрифты в разделах аннотации сделаны нежирными. Кажется, этим уже можно пользоваться в 2019 году. 140 | 1.3.b3 | Удалена команда `\addstage` и все с ней связанное. Шапка сделана максимально идентичной шапке из новых шаблонов. 141 | 1.3.b2 | Титульный лист, задание и аннотация почти приведены к новым шаблонам. Содержательно недоделаны `\advancedtechnologyusage` и отдельные шрифтовые детали. 142 | 1.3.b1 | Окончательно удален `pscyr`. 143 | 1.2 | Реализован подсчет ссылок различных типов. 144 | 1.1.2.b5 | Пакет `lastpage` больше не используется, ибо незачем. 145 | 1.1.2.b4 | При использовании опции `times` теперь стилевик выполняет команды, необходимые конфигурации для `xelatex`/`lualatex`. Старая реализация этой опции теперь включается опцией `pscyr`. 146 | 1.1.2.b3 | Исправлена специализация бакалавров. 147 | 1.1.2.b2 | Изменено название работы (пояснительная записка к ...). 148 | 1.1.2.b1 | Добавлена команда \secretary, для указания секретаря ГЭК. 149 | 1.1.2 | Согласно изменениям в регламентах, на обратную сторону титульного листа добавлено поле с датой принятия работы. Уменьшен шрифт на соответствующей странице. \unknowndate теперь занимает ощутимо меньше места. 150 | 1.1.1 | Теперь работает с biblatex-3.4 и идущим с ним в комплекте biblatex-gost. 151 | 1.1.0.b12 | Специальность у бакалавров исправлена на 01.03.02. 152 | 1.1.0.b11 | Добавлена поддержка указания дат выдачи задания (\startdate{день}{месяц}{год}), срока сдачи работы (\finishdate{...}{...}{...}), даты защиты (\defencedate{...}{...}{...}). Если не указывать, будет генерироваться обычное место для заполнения даты. 153 | 1.1.0.b10 | "Пояснительная записка магистерской диссертации" превращена в "магистерскую диссертацию". Выключено предупреждение при отсутствии консультантов. Изменено направление подготовки (специальность) по умолчанию (добавлен номер 01.04.02). Добавлены направленности (профили) по умолчанию, соответствующие реальной ситуации на кафедре КТ, разные для магистров и бакалавров. В задании поле "Студенту" переименовано в "Студент". Немного изменена верстка формальных страниц. 154 | 1.1.0.b9 | По многочисленным просьбам трудящихся и не очень, магистерская диссертация снова называется магистерской диссертацией. 155 | 1.1.0.b8 | Тире в страничных интервалах в библиографии --- теперь endash (Issue [#11](https://github.com/mbuzdalov/latex-styles/issues/11)). 156 | 1.1.0.b7 | Нумерация страниц --- сверху по центру (Issue [#12](https://github.com/mbuzdalov/latex-styles/issues/12)). 157 | 1.1.0.b6 | Выключены переносы в оглавлении (Issue [#5](https://github.com/mbuzdalov/latex-styles/issues/5)). 158 | 1.1.0.b5 | Теперь генерируются и задания тоже (Issue [#7](https://github.com/mbuzdalov/latex-styles/issues/7)). В связи с полной сменой шаблонов сгорела необходимость в правильных подчеркиваниях (Issue [#1](https://github.com/mbuzdalov/latex-styles/issues/1)). Пока не считаются источники по категориям (Issue [#10](https://github.com/mbuzdalov/latex-styles/issues/10)). 159 | 1.1.0.b4 | Удалена опция `page4`, так как теперь содержательная часть всегда должна начинаться с четвертой страницы. 160 | 1.1.0.b3 | Исправлена фиксированная ширина слова ПРИЛОЖЕНИЕ в оглавлении (Issue [#2](https://github.com/mbuzdalov/latex-styles/issues/2)). Также в качестве набора шрифтов по умолчанию теперь используется Paratype. 161 | 1.1.0.b2 | Исправлена нумерация флоатов в приложениях (Issue [#6](https://github.com/mbuzdalov/latex-styles/issues/6)). 162 | 1.1.0.b1 | Исправлена нумерация списков и приложений (Issue [#8](https://github.com/mbuzdalov/latex-styles/issues/8)). 163 | 1.0.4 | Новая команда `\chapterconclusion` создает ненумерованный раздел "Выводы по главе XX", где XX --- номер текущей главы. 164 | 1.0.3 | Добавлена опция `page4` про нумерацию страниц. 165 | 1.0.2 | Нумерация листингов теперь не перезапускается в каждой главе (так как счетчик `lstlisting` определяется только после `\begin{document}`, ему не получалось убрать перезапуски в преамбуле). 166 | 1.0.1 | Исправлено название университета по умолчанию (больше нет слова "профессионального"). 167 | 1.0.0 | Исходная версия (не была обозначена). 168 | 169 | ## Обратная связь 170 | Все вопросы, пожелания, замечания, исправления пишите почтой (которую здесь не указываю) или средствами GitHub. 171 | -------------------------------------------------------------------------------- /itmo-student-thesis/bachelor-thesis.tex: -------------------------------------------------------------------------------- 1 | \documentclass[times,specification,annotation]{itmo-student-thesis} 2 | 3 | %% Опции пакета: 4 | %% - specification - если есть, генерируется задание, иначе не генерируется 5 | %% - annotation - если есть, генерируется аннотация, иначе не генерируется 6 | %% - times - делает все шрифтом Times New Roman, собирается с помощью xelatex 7 | %% - languages={...} - устанавливает перечень используемых языков. По умолчанию это {english,russian}. 8 | %% Последний из языков определяет текст основного документа. 9 | 10 | %% Делает запятую в формулах более интеллектуальной, например: 11 | %% $1,5x$ будет читаться как полтора икса, а не один запятая пять иксов. 12 | %% Однако если написать $1, 5x$, то все будет как прежде. 13 | \usepackage{icomma} 14 | 15 | %% Один из пакетов, позволяющий делать таблицы на всю ширину текста. 16 | \usepackage{tabularx} 17 | 18 | %% Данные пакеты необязательны к использованию в бакалаврских/магистерских 19 | %% Они нужны для иллюстративных целей 20 | %% Начало 21 | \usepackage{tikz} 22 | \usetikzlibrary{arrows} 23 | \usepackage{filecontents} 24 | \begin{filecontents}{bachelor-thesis.bib} 25 | @online{ doerr-doerr-lambda-lambda-self-adjustment-arxiv, 26 | year = {2015}, 27 | title = {Optimal Parameter Choices Through Self-Adjustment: Applying the 1/5-th Rule in 28 | Discrete Settings}, 29 | author = {Benjamin Doerr and Carola Doerr}, 30 | url = {http://arxiv.org/abs/1504.03212}, 31 | year = {2015}, 32 | langid = {english} 33 | } 34 | 35 | @inproceedings{ example-english, 36 | year = {2015}, 37 | booktitle = {Proceedings of IEEE Congress on Evolutionary Computation}, 38 | author = {Maxim Buzdalov and Anatoly Shalyto}, 39 | title = {Hard Test Generation for Augmenting Path Maximum Flow 40 | Algorithms using Genetic Algorithms: Revisited}, 41 | pages = {2121-2128}, 42 | langid = {english} 43 | } 44 | 45 | @article{ example-russian, 46 | author = {Максим Викторович Буздалов}, 47 | title = {Генерация тестов для олимпиадных задач по программированию 48 | с использованием генетических алгоритмов}, 49 | journal = {Научно-технический вестник {СПбГУ} {ИТМО}}, 50 | number = {2(72)}, 51 | year = {2011}, 52 | pages = {72-77}, 53 | langid = {russian} 54 | } 55 | 56 | @article{ unrestricted-jump-evco, 57 | author = {Maxim Buzdalov and Benjamin Doerr and Mikhail Kever}, 58 | title = {The Unrestricted Black-Box Complexity of Jump Functions}, 59 | journal = {Evolutionary Computation}, 60 | year = {2016}, 61 | note = {Accepted for publication}, 62 | langid = {english} 63 | } 64 | 65 | @book{ bellman, 66 | author = {R. E. Bellman}, 67 | title = {Dynamic Programming}, 68 | address = {Princeton, NJ}, 69 | publisher = {Princeton University Press}, 70 | numpages = {342}, 71 | pagetotal = {342}, 72 | year = {1957}, 73 | langid = {english} 74 | } 75 | \end{filecontents} 76 | %% Конец 77 | 78 | %% Указываем файл с библиографией. 79 | \addbibresource{bachelor-thesis.bib} 80 | 81 | \begin{document} 82 | 83 | \studygroup{M3439} 84 | \title{Пример оформления ВКР бакалавра} 85 | \author{Буздалов Максим Викторович}{Буздалов М.В.} 86 | \supervisor{Шалыто Анатолий Абрамович}{Шалыто А.А.}{проф., д.т.н.}{главный научный сотрудник Университета ИТМО} 87 | \publishyear{2019} 88 | %% Дата выдачи задания. Можно не указывать, тогда надо будет заполнить от руки. 89 | \startdate{01}{сентября}{2018} 90 | %% Срок сдачи студентом работы. Можно не указывать, тогда надо будет заполнить от руки. 91 | \finishdate{31}{мая}{2019} 92 | %% Дата защиты. Можно не указывать, тогда надо будет заполнить от руки. 93 | \defencedate{15}{июня}{2019} 94 | 95 | \addconsultant{Белашенков Н.Р.}{канд. физ.-мат. наук, без звания} 96 | \addconsultant{Беззубик В.В.}{без степени, без звания} 97 | 98 | \secretary{Павлова О.Н.} 99 | 100 | %% Задание 101 | %%% Техническое задание и исходные данные к работе 102 | \technicalspec{Требуется разработать стилевой файл для системы \LaTeX, позволяющий оформлять бакалаврские работы и магистерские диссертации 103 | на кафедре компьютерных технологий Университета ИТМО. Стилевой файл должен генерировать титульную страницу пояснительной записки, 104 | задание, аннотацию и содержательную часть пояснительной записк. Первые три документа должны максимально близко соответствовать шаблонам документов, 105 | принятым в настоящий момент на кафедре, в то время как содержательная часть должна максимально близко соответствовать ГОСТ~7.0.11-2011 106 | на диссертацию.} 107 | 108 | %%% Содержание выпускной квалификационной работы (перечень подлежащих разработке вопросов) 109 | \plannedcontents{Пояснительная записка должна демонстрировать использование наиболее типичных конструкций, возникающих при составлении 110 | пояснительной записки (перечисления, рисунки, таблицы, листинги, псевдокод), при этом должна быть составлена так, что демонстрируется 111 | корректность работы стилевого файла. В частности, записка должна содержать не менее двух приложений (для демонстрации нумерации рисунков и таблиц 112 | по приложениям согласно ГОСТ) и не менее десяти элементов нумерованного перечисления первого уровня вложенности (для демонстрации корректности 113 | используемого при нумерации набора русских букв).} 114 | 115 | %%% Исходные материалы и пособия 116 | \plannedsources{\begin{enumerate} 117 | \item ГОСТ~7.0.11-2011 <<Диссертация и автореферат диссертации>>; 118 | \item С.М. Львовский. Набор и верстка в системе \LaTeX; 119 | \item предыдущий комплект стилевых файлов, использовавшийся на кафедре компьютерных технологий. 120 | \end{enumerate}} 121 | 122 | %%% Цель исследования 123 | \researchaim{Разработка удобного стилевого файла \LaTeX 124 | для бакалавров и магистров кафедры компьютерных технологий.} 125 | 126 | %%% Задачи, решаемые в ВКР 127 | \researchtargets{\begin{enumerate} 128 | \item обеспечение соответствия титульной страницы, задания и аннотации шаблонам, принятым в настоящее время на кафедре; 129 | \item обеспечение соответствия содержательной части пояснительной записки требованиям ГОСТ~7.0.11-2011 <<Диссертация и автореферат диссертации>>; 130 | \item обеспечение относительного удобства в использовании~--- указание данных об авторе и научном руководителе один раз и в одном месте, автоматический подсчет числа тех или иных источников. 131 | \end{enumerate}} 132 | 133 | %%% Использование современных пакетов компьютерных программ и технологий 134 | \addadvancedsoftware{Пакет \texttt{tabularx} для чуть более продвинутых таблиц}{\ref{sec:tables}, Приложения~\ref{sec:app:1}, \ref{sec:app:2}} 135 | \addadvancedsoftware{Пакет \texttt{biblatex} и программное средство \texttt{biber}}{Список использованных источников} 136 | 137 | %%% Краткая характеристика полученных результатов 138 | \researchsummary{Получился, надо сказать, практически неплохой стилевик. В 2015--2018 годах 139 | его уже использовали некоторые бакалавры и магистры. Надеюсь на продолжение.} 140 | 141 | %%% Гранты, полученные при выполнении работы 142 | \researchfunding{Автор разрабатывал этот стилевик исключительно за свой счет и на 143 | добровольных началах. Однако значительная его часть была бы невозможна, если бы 144 | автор не написал в свое время кандидатскую диссертацию в \LaTeX, 145 | а также не отвечал за формирование кучи научно-технических отчетов по гранту, 146 | известному как <<5-в-100>>, что происходило при государственной финансовой поддержке 147 | ведущих университетов Российской Федерации (субсидия 074-U01).} 148 | 149 | %%% Наличие публикаций и выступлений на конференциях по теме выпускной работы 150 | \researchpublications{По теме этой работы я (к счастью!) ничего не публиковал. 151 | \begin{refsection} 152 | Однако покажу, как можно ссылаться на свои публикации из списка литературы: 153 | \nocite{example-english, example-russian} 154 | \printannobibliography 155 | \end{refsection} 156 | } 157 | 158 | %% Эта команда генерирует титульный лист и аннотацию. 159 | \maketitle{Бакалавр} 160 | 161 | %% Оглавление 162 | \tableofcontents 163 | 164 | %% Макрос для введения. Совместим со старым стилевиком. 165 | \startprefacepage 166 | 167 | В данном разделе размещается введение. 168 | 169 | %% Начало содержательной части. 170 | \chapter{Первая глава} 171 | 172 | %% Так помечается начало обзора. 173 | \startrelatedwork 174 | Пример ссылок в рамках обзора: \cite{example-english, example-russian, unrestricted-jump-evco, doerr-doerr-lambda-lambda-self-adjustment-arxiv}. 175 | %% Так помечается конец обзора. 176 | \finishrelatedwork 177 | Вне обзора:~\cite{bellman}. 178 | 179 | \section{Таблицы}\label{sec:tables} 180 | 181 | В качестве примера таблицы приведена таблица~\ref{tab1}. 182 | 183 | \begin{table}[!h] 184 | \caption{Таблица умножения (фрагмент)}\label{tab1} 185 | \centering 186 | \begin{tabular}{|*{18}{c|}}\hline 187 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 188 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 189 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 190 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 191 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 192 | \end{tabular} 193 | \end{table} 194 | 195 | Есть еще такое окружение \texttt{tabularx}, его можно аккуратно растянуть на всю страницу. 196 | Приведем пример (таблица~\ref{tab2}). 197 | 198 | \begin{table}[!h] 199 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab2} 200 | \centering 201 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 202 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 203 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 204 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 205 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 206 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 207 | \end{tabularx} 208 | \end{table} 209 | 210 | \section{Рисунки} 211 | 212 | Пример рисунка (c помощью \texttt{TikZ}) приведен на рисунке~\ref{fig1}. Под \texttt{pdflatex} можно также 213 | использовать \texttt{*.jpg}, \texttt{*.png} и даже \texttt{*.pdf}, под \texttt{latex} можно использовать 214 | Metapost. Последний можно использовать и под \texttt{pdflatex}, для чего в стилевике продекларированы 215 | номера картинок от~1 до~20. 216 | 217 | \begin{figure}[!h] 218 | \caption{Пример рисунка}\label{fig1} 219 | \centering 220 | \begin{tikzpicture}[scale=0.7] 221 | \draw[thick,->] (0,0)--(3.5,0); 222 | \draw[thick,->] (0,0)--(0,3.5); 223 | \draw[very thick, red] (0,0)--(3,3); 224 | \draw[dashed] (3,0)--(3,3); 225 | \draw[dashed] (1.5,0)--(1.5,1.5); 226 | \end{tikzpicture} 227 | \end{figure} 228 | 229 | \section{Листинги} 230 | 231 | В работах студентов кафедры <<Компьютерные технологии>> часто встречаются листинги. Листинги бывают 232 | двух основных видов~--- исходный код и псевдокод. Первый оформляется с помощью окружения \texttt{lstlisting} 233 | из пакета \texttt{listings}, который уже включается в стилевике и немного настроен. Пример Hello World на Java 234 | приведен на листинге~\ref{lst1}. Пример большого листинга~--- в приложении (листинг~\ref{lstX}). 235 | 236 | \begin{lstlisting}[float=!h,caption={Пример исходного кода на Java},label={lst1}] 237 | public class HelloWorld { 238 | public static void main(String[] args) { 239 | System.out.println("Hello, world!"); 240 | } 241 | } 242 | \end{lstlisting} 243 | 244 | Псевдокод можно оформлять с помощью разных пакетов. В данном стилевике включается пакет \texttt{algorithmicx}. 245 | Сам по себе он не генерирует флоатов, поэтому для них используется пакет \texttt{algorithm}. 246 | Пример их совместного использования приведен на листинге~\ref{lst2}. 247 | 248 | \begin{algorithm}[!h] 249 | \caption{Пример псевдокода}\label{lst2} 250 | \begin{algorithmic} 251 | \Function{IsPrime}{$N$} 252 | \For{$t \gets [2; \lfloor\sqrt{N}\rfloor]$} 253 | \If{$N \bmod t = 0$} 254 | \State\Return \textsc{false} 255 | \EndIf 256 | \EndFor 257 | \State\Return \textsc{true} 258 | \EndFunction 259 | \end{algorithmic} 260 | \end{algorithm} 261 | 262 | Наконец, листинги из \texttt{listings} тоже можно подвешивать с помощью \texttt{algorithm}, 263 | пример на листинге~\ref{lst3}. 264 | 265 | \begin{algorithm}[!h] 266 | \caption{Исходный код и флоат \texttt{algorithm}}\label{lst3} 267 | \begin{lstlisting} 268 | public class HelloWorld { 269 | public static void main(String[] args) { 270 | System.out.println("Hello, world!"); 271 | } 272 | } 273 | \end{lstlisting} 274 | \end{algorithm} 275 | 276 | \chapter{Проверка сквозной нумерации} 277 | 278 | Листинг~\ref{lst4} должен иметь номер 4. 279 | 280 | \begin{algorithm}[!h] 281 | \caption{Исходный код и флоат \texttt{algorithm}}\label{lst4} 282 | \begin{lstlisting} 283 | public class HelloWorld { 284 | public static void main(String[] args) { 285 | System.out.println("Hello, world!"); 286 | } 287 | } 288 | \end{lstlisting} 289 | \end{algorithm} 290 | 291 | Рисунок~\ref{fig2} должен иметь номер 2. 292 | 293 | \begin{figure}[!h] 294 | \caption{Пример рисунка}\label{fig2} 295 | \centering 296 | \begin{tikzpicture}[scale=0.7] 297 | \draw[thick,->] (0,0)--(3.5,0); 298 | \draw[thick,->] (0,0)--(0,3.5); 299 | \draw[very thick, red] (0,0)--(3,3); 300 | \draw[dashed] (3,0)--(3,3); 301 | \draw[dashed] (1.5,0)--(1.5,1.5); 302 | \end{tikzpicture} 303 | \end{figure} 304 | 305 | Таблица~\ref{tab3} должна иметь номер 3. 306 | 307 | \begin{table}[!h] 308 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab3} 309 | \centering 310 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 311 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 312 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 313 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 314 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 315 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 316 | \end{tabularx} 317 | \end{table} 318 | 319 | \chapterconclusion 320 | 321 | В конце каждой главы желательно делать выводы. Вывод по данной главе~--- нумерация работает корректно, ура! 322 | 323 | %% Макрос для заключения. Совместим со старым стилевиком. 324 | \startconclusionpage 325 | 326 | В данном разделе размещается заключение. 327 | 328 | \printmainbibliography 329 | 330 | %% После этой команды chapter будет генерировать приложения, нумерованные русскими буквами. 331 | %% \startappendices из старого стилевика будет делать то же самое 332 | \appendix 333 | 334 | \chapter{Пример приложения}\label{sec:app:1} 335 | 336 | В приложениях рисунки, таблицы и другие подобные элементы нумеруются по приложениям с соответствующим префиксом. Проверим это. 337 | 338 | Листинг~\ref{lst4:apx} должен иметь номер А.1. 339 | 340 | \begin{algorithm}[!h] 341 | \caption{Исходный код и флоат \texttt{algorithm}}\label{lst4:apx} 342 | \begin{lstlisting} 343 | public class HelloWorld { 344 | public static void main(String[] args) { 345 | System.out.println("Hello, world!"); 346 | } 347 | } 348 | \end{lstlisting} 349 | \end{algorithm} 350 | 351 | Рисунок~\ref{fig2:apx} должен иметь номер A.1. 352 | 353 | \begin{figure}[!h] 354 | \caption{Пример рисунка}\label{fig2:apx} 355 | \centering 356 | \begin{tikzpicture}[scale=0.7] 357 | \draw[thick,->] (0,0)--(3.5,0); 358 | \draw[thick,->] (0,0)--(0,3.5); 359 | \draw[very thick, red] (0,0)--(3,3); 360 | \draw[dashed] (3,0)--(3,3); 361 | \draw[dashed] (1.5,0)--(1.5,1.5); 362 | \end{tikzpicture} 363 | \end{figure} 364 | 365 | Таблица~\ref{tab3:apx} должна иметь номер A.1. 366 | 367 | \begin{table}[!h] 368 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab3:apx} 369 | \centering 370 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 371 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 372 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 373 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 374 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 375 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 376 | \end{tabularx} 377 | \end{table} 378 | 379 | Заодно проверим нумерованные и ненумерованные перечисления. Ненумерованные: 380 | \begin{itemize} 381 | \item пункт А; 382 | \item пункт Б; 383 | \item пункт В. 384 | \end{itemize} 385 | 386 | Нумерованные списки нескольких уровней: 387 | \begin{enumerate} 388 | \item первый элемент; 389 | \item второй элемент с подэлементами: 390 | \begin{enumerate} 391 | \item первый подэлемент; 392 | \item второй подэлемент; 393 | \item третий подэлемент. 394 | \end{enumerate} 395 | \item третий элемент; 396 | \item четвертый элемент; 397 | \item пятый элемент; 398 | \item шестой элемент; 399 | \item седьмой элемент; 400 | \item восьмой элемент; 401 | \item девятый элемент; 402 | \item десятый элемент. 403 | \end{enumerate} 404 | 405 | \chapter{Еще один пример приложения с неимоверно длиннющим названием для тестирования переносов}\label{sec:app:2} 406 | 407 | Проверим на примере таблиц, что нумерация в приложениях~--- по приложениям. 408 | Таблица~\ref{tab3:apx2} должна иметь номер Б.1. 409 | 410 | \begin{table}[!h] 411 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab3:apx2} 412 | \centering 413 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 414 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 415 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 416 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 417 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 418 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 419 | \end{tabularx} 420 | \end{table} 421 | 422 | \chapter{Пример огромного листинга} 423 | 424 | \begin{lstlisting}[caption={Пример большого листинга},label={lstX}] 425 | import java.util.*; 426 | 427 | public class Example { 428 | static int[] restoreOutgoing(int[] g, int[] outgoing, 429 | int vertex, int mask) { 430 | int[] rv = new int[1 + Integer.bitCount(mask)]; 431 | int n = g.length; 432 | int current = rv.length - 1; 433 | while (true) { 434 | rv[current] = vertex; 435 | if (current == 0) { 436 | if (vertex != 0) { 437 | throw new AssertionError(); 438 | } 439 | return rv; 440 | } 441 | mask ^= 1 << (vertex - 1); 442 | int prevMask = outgoing[mask] & g[vertex]; 443 | if (prevMask == 0) { 444 | throw new AssertionError(); 445 | } 446 | vertex = Integer.numberOfTrailingZeros(prevMask); 447 | --current; 448 | } 449 | } 450 | 451 | static int[] restoreIncoming(int[] g, int[] incoming, 452 | int vertex, int mask) { 453 | int[] rv = new int[1 + Integer.bitCount(mask)]; 454 | int n = g.length; 455 | int current = 0; 456 | while (true) { 457 | rv[current] = vertex; 458 | if (current == rv.length - 1) { 459 | if (vertex != 0) { 460 | throw new AssertionError(); 461 | } 462 | return rv; 463 | } 464 | mask ^= 1 << (vertex - 1); 465 | int nextMask = incoming[mask] & g[vertex]; 466 | if (nextMask == 0) { 467 | throw new AssertionError(); 468 | } 469 | vertex = Integer.numberOfTrailingZeros(nextMask); 470 | ++current; 471 | } 472 | } 473 | } 474 | \end{lstlisting} 475 | 476 | \end{document} 477 | -------------------------------------------------------------------------------- /itmo-student-thesis/itmo-student-thesis.cls: -------------------------------------------------------------------------------- 1 | \NeedsTeXFormat{LaTeX2e} 2 | \ProvidesClass{itmo-student-thesis}[2023/04/16 v1.4.5] 3 | \RequirePackage{xkvltxp} 4 | \LoadClass[14pt,a4paper]{extreport} 5 | 6 | %% Обработка опций пакета 7 | 8 | \newif\if@shouldusexelatex 9 | \newif\if@shouldmakespecification 10 | \newif\if@shouldmakeannotation 11 | \newif\if@shouldmaketitlepage@ru 12 | \newif\if@shouldmakespecification@ru 13 | \newif\if@shouldmakeannotation@ru 14 | 15 | \newcommand{\@babeloptions}{english,russian} 16 | 17 | \RequirePackage{xkeyval} 18 | 19 | \DeclareOptionX{times}{\@shouldusexelatextrue} 20 | \DeclareOptionX{specification}{\@shouldmakespecificationtrue} 21 | \DeclareOptionX{annotation}{\@shouldmakeannotationtrue} 22 | \DeclareOptionX{specification-extra-ru}{\@shouldmakespecification@rutrue} 23 | \DeclareOptionX{annotation-extra-ru}{\@shouldmakeannotation@rutrue} 24 | \DeclareOptionX{titlepage-extra-ru}{\@shouldmaketitlepage@rutrue} 25 | \DeclareOptionX{languages}{\renewcommand{\@babeloptions}{#1}} 26 | 27 | \ProcessOptionsX\relax 28 | 29 | \if@shouldusexelatex 30 | \RequirePackage{fontspec} 31 | \defaultfontfeatures{Ligatures={TeX},Renderer=Basic} 32 | \setmainfont[Ligatures={TeX,Historic}]{Times New Roman} 33 | \setsansfont{Arial} 34 | \setmonofont{Courier New} 35 | \else 36 | \RequirePackage{paratype} 37 | \fi 38 | 39 | %% Конфигурируем babel 40 | 41 | \RequirePackage[\@babeloptions]{babel} 42 | \RequirePackage{csquotes} 43 | \RequirePackage{iflang} 44 | 45 | %% Формируем отступы 46 | 47 | \RequirePackage[top=2cm, bottom=2cm, left=2.7cm, right=1.5cm]{geometry} 48 | 49 | %% Эти пакеты слишком часто используются, чтобы их не включать 50 | 51 | \RequirePackage{amsmath} 52 | \RequirePackage{amssymb} 53 | \RequirePackage{amsthm} 54 | \RequirePackage{amsfonts} 55 | \RequirePackage{amsxtra} 56 | 57 | %% Поддержка цветов и чего-то еще графического, в том числе в таблицах. 58 | 59 | \RequirePackage{graphicx} 60 | \RequirePackage{xcolor} 61 | \RequirePackage{colortbl} 62 | 63 | %% Этот пакет используется для некоторых таблиц и других визуальных элементов. 64 | 65 | \RequirePackage{tabularx} 66 | 67 | %% Расположение номеров страниц - как и в диссертации. 68 | 69 | \RequirePackage{fancyhdr} 70 | 71 | %% Делаем правильные подписи в правильных местах. 72 | 73 | \RequirePackage{caption} 74 | \RequirePackage{floatrow} 75 | 76 | %% Тем, кому нужны листинги, должны использовать \begin{algorithm}\end{algorithm} 77 | %% в качестве флоатов. 78 | 79 | \RequirePackage{algorithm} 80 | \floatname{algorithm}{\@listingname} 81 | 82 | %% Не знаю, надо оно здесь или нет, но пусть будет. 83 | 84 | \RequirePackage{algorithmicx} 85 | \RequirePackage{algpseudocode} 86 | 87 | %% Перечисления по умолчанию слишком разрежены. 88 | 89 | \RequirePackage{enumitem} 90 | \setlist{nosep} 91 | 92 | %% Полуторный межстрочный интервал 93 | \RequirePackage{setspace} 94 | \onehalfspacing 95 | 96 | %% Абзацный отступ по ГОСТу - пять букв. Это примерно столько. 97 | 98 | \setlength{\parindent}{1.25cm} 99 | 100 | %% Не используем буллеты. 101 | 102 | \renewcommand\labelitemi{---} 103 | 104 | %% На первом уровне нумерованных списков ставим русские буквы, на втором - цифры. 105 | 106 | %%% asbuk работал бы неплохо, но он включает в нумерацию букву "з", которую ГОСТ не разрешает. И, может быть, что-то еще. 107 | 108 | \def\asbukx#1{\expandafter\@asbukx\csname c@#1\endcsname} 109 | \def\@asbukx#1{\ifcase#1\or a\or б\or в\or г\or д\or е\or ж\or и\or к\or л\or м\or н\or п\or р\or с\or т\or у\or ф\or х\or ц\or ш\or щ\or э\or ю\or я\fi} 110 | 111 | \def\Asbukx#1{\expandafter\@Asbukx\csname c@#1\endcsname} 112 | \def\@Asbukx#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 Я\fi} 113 | 114 | \AddEnumerateCounter{\Asbukx}{\@Asbukx}{М} 115 | \AddEnumerateCounter{\asbukx}{\@asbukx}{м} 116 | 117 | \renewcommand\labelenumii{\arabic{enumii})} 118 | \renewcommand\theenumii{\arabic{enumii}} 119 | 120 | \newcommand{\@iflfe}[2]{#1} 121 | 122 | \newcommand*{\@tablecontinuation}[1]{Table~#1, continued} 123 | \newcommand*{\@chaptername}{CHAPTER} 124 | \newcommand*{\@introductionname}{INTRODUCTION} 125 | \newcommand*{\@conclusionname}{CONCLUSION} 126 | \newcommand*{\@appendixname}{APPENDIX} 127 | \newcommand*{\@appendixcounter}{\Alph{chapter}} 128 | \newcommand*{\@proofname}{Proof} 129 | \newcommand*{\@referencesname}{REFERENCES} 130 | \newcommand*{\@chapterconclusion}{Conclusions on Chapter} 131 | \newcommand*{\@listingname}{Listing} 132 | 133 | \newcommand*{\@theorem@theorem}{Theorem} 134 | \newcommand*{\@theorem@proposition}{Proposition} 135 | \newcommand*{\@theorem@corollary}{Corollary} 136 | \newcommand*{\@theorem@lemma}{Lemma} 137 | \newcommand*{\@theorem@question}{Question} 138 | \newcommand*{\@theorem@conjecture}{Conjecture} 139 | \newcommand*{\@theorem@assumption}{Assumption} 140 | \newcommand*{\@theorem@definition}{Definition} 141 | \newcommand*{\@theorem@notation}{Notation} 142 | \newcommand*{\@theorem@condition}{Condition} 143 | \newcommand*{\@theorem@example}{Example} 144 | 145 | \addto{\captionsenglish}{% 146 | \renewcommand{\@iflfe}[2]{#1}% 147 | \renewcommand*{\figurename}{Figure}% 148 | \renewcommand*{\contentsname}{Contents}% 149 | \renewcommand*{\labelenumi}{\alph{enumi})}% 150 | \renewcommand*{\theenumi}{\alph{enumi}}% 151 | \renewcommand*{\@tablecontinuation}[1]{Table~#1, continued}% 152 | \renewcommand*{\@chaptername}{CHAPTER}% 153 | \renewcommand*{\@introductionname}{INTRODUCTION}% 154 | \renewcommand*{\@conclusionname}{CONCLUSION}% 155 | \renewcommand*{\@appendixname}{APPENDIX}% 156 | \renewcommand*{\@appendixcounter}{\Alph{chapter}}% 157 | \renewcommand*{\@proofname}{Proof}% 158 | \renewcommand*{\@referencesname}{REFERENCES}% 159 | \renewcommand*{\@chapterconclusion}{Conclusions on Chapter}% 160 | \renewcommand*{\@listingname}{Listing}% 161 | \renewcommand*{\@theorem@theorem}{Theorem}% 162 | \renewcommand*{\@theorem@proposition}{Proposition}% 163 | \renewcommand*{\@theorem@corollary}{Corollary}% 164 | \renewcommand*{\@theorem@lemma}{Lemma}% 165 | \renewcommand*{\@theorem@question}{Question}% 166 | \renewcommand*{\@theorem@conjecture}{Conjecture}% 167 | \renewcommand*{\@theorem@assumption}{Assumption}% 168 | \renewcommand*{\@theorem@definition}{Definition}% 169 | \renewcommand*{\@theorem@notation}{Notation}% 170 | \renewcommand*{\@theorem@condition}{Condition}% 171 | \renewcommand*{\@theorem@example}{Example}% 172 | } 173 | 174 | \addto{\captionsrussian}{% 175 | \renewcommand{\@iflfe}[2]{#2}% 176 | \renewcommand*{\figurename}{Рисунок}% 177 | \renewcommand*{\contentsname}{Содержание}% 178 | \renewcommand*{\labelenumi}{\asbukx{enumi})}% 179 | \renewcommand*{\theenumi}{\asbukx{enumi}}% 180 | \renewcommand*{\@tablecontinuation}[1]{Продолжение таблицы~#1}% 181 | \renewcommand*{\@chaptername}{ГЛАВА}% 182 | \renewcommand*{\@introductionname}{ВВЕДЕНИЕ}% 183 | \renewcommand*{\@conclusionname}{ЗАКЛЮЧЕНИЕ}% 184 | \renewcommand*{\@appendixname}{ПРИЛОЖЕНИЕ}% 185 | \renewcommand*{\@appendixcounter}{\Asbukx{chapter}}% 186 | \renewcommand*{\@proofname}{Доказательство}% 187 | \renewcommand*{\@referencesname}{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ}% 188 | \renewcommand*{\@chapterconclusion}{Выводы по главе}% 189 | \renewcommand*{\@listingname}{Листинг}% 190 | \renewcommand*{\@theorem@theorem}{Теорема}% 191 | \renewcommand*{\@theorem@proposition}{Утверждение}% 192 | \renewcommand*{\@theorem@corollary}{Следствие}% 193 | \renewcommand*{\@theorem@lemma}{Лемма}% 194 | \renewcommand*{\@theorem@question}{Вопрос}% 195 | \renewcommand*{\@theorem@conjecture}{Гипотеза}% 196 | \renewcommand*{\@theorem@assumption}{Предположение}% 197 | \renewcommand*{\@theorem@definition}{Определение}% 198 | \renewcommand*{\@theorem@notation}{Обозначение}% 199 | \renewcommand*{\@theorem@condition}{Условие}% 200 | \renewcommand*{\@theorem@example}{Пример}% 201 | } 202 | 203 | %% Многостраничные таблицы в гостовском формате. Аргументы: 204 | %% 1 - имя, по которому ссылаемся 205 | %% 2 - подпись 206 | %% 3 - строка форматирования столбцов (как в tabular) 207 | %% 4 - заголовки столбцов (первая строчка, которая будет везде повторяться) 208 | %% 5 - число столбцов (не осилил вычислить его из значения 3) 209 | 210 | \newenvironment{nirtable}[5]{ 211 | \begin{longtable}{#3}\caption{#2}\label{#1} 212 | \\\hline #4 \\\hline \endfirsthead 213 | \multicolumn{#5}{r}{\normalsize\@tablecontinuation{\thetable}} \\\hline #4 \endhead 214 | }{\end{longtable}} 215 | 216 | %% Библиография по ГОСТу. Используем только бибер. 217 | 218 | \RequirePackage[ 219 | backend=biber, 220 | bibencoding=utf8, 221 | sorting=nyt, 222 | sortcites=true, 223 | bibstyle=gost-numeric, 224 | citestyle=numeric-comp, 225 | autolang=other 226 | ]{biblatex} 227 | 228 | %% Патчи к стилевику библиографии. 229 | 230 | % biblatex-3.4 и biblatex-gost 231 | % Эти штуки появились недавно, и кажется, что не во всех дистрибутивах они настроены правильно. 232 | % В любом случае, эта функциональность нам не нужна, ее можно заткнуть таким вот образом. 233 | \providecommand{\datecircaprint}{} 234 | \providecommand{\dateeraprintpre}[1]{} 235 | \providecommand{\mkyearzeros}{} 236 | \providecommand{\dateeraprint}[1]{} 237 | \providecommand{\dateuncertainprint}{} 238 | 239 | \renewbibmacro*{//}{\nopunct\printtext{\addspace\mbox{//}\addnbspace}} 240 | \renewcommand*{\newblockpunct}{\textemdash\addnbspace\bibsentence} 241 | \DeclareFieldFormat*{pages}{\mkpageprefix[bookpagination][\mbox]{#1}} 242 | \DeclareFieldFormat*{labelnumberwidth}{#1} 243 | \DefineBibliographyStrings{english}{pages={p\adddot}} 244 | \DefineBibliographyExtras{russian}{\protected\def\bibrangedash{\textendash\penalty\hyphenpenalty}} 245 | 246 | % Это ставит сначала русские, потом иностранные источники 247 | 248 | \DeclareSourcemap{ 249 | \maps[datatype=bibtex]{ 250 | \map{ 251 | \step[fieldsource=langid, match=russian, final] 252 | \step[fieldset=presort, fieldvalue={a}] 253 | } 254 | \map{ 255 | \step[fieldsource=langid, notmatch=russian, final] 256 | \step[fieldset=presort, fieldvalue={z}] 257 | } 258 | } 259 | } 260 | 261 | % Добавляем чей-то драйвер от online, чтобы "электронный ресурс" отражался по ГОСТу. 262 | 263 | \DeclareBibliographyDriver{online}{% 264 | \usebibmacro{bibindex}% 265 | \usebibmacro{begentry}% 266 | \usebibmacro{heading}% 267 | \newunit 268 | \usebibmacro{author/editor}% 269 | \setunit*{\labelnamepunct}% 270 | \usebibmacro{title}% 271 | \addspace\foreignlanguage{russian}{[Электронный ресурс]} 272 | \setunit{\addcolondelim}% 273 | \usebibmacro{translation}% 274 | \def\bbx@gost@respdelim{\setunit{\respdelim}}% ----- Resp starts ----- 275 | \usebibmacro{byauthor}% 276 | \setunit*{\resppunct}% 277 | \iflistundef{organization} 278 | {} 279 | {\setrespdelim% 280 | \printlist{organization}% 281 | \setunit*{\resppunct}}% 282 | \usebibmacro{credits}% 283 | \setunit*{\resppunct}% 284 | \usebibmacro{byeditor}% 285 | \setunit*{\resppunct}% 286 | \usebibmacro{bytranslator+others}% 287 | \newunit\newblock 288 | \printfield{version}% 289 | \newunit\newblock 290 | \printlist[semicolondelim]{specdata}% 291 | \newunit\newblock 292 | \usebibmacro{date}% 293 | \newunit\newblock 294 | \printupdate% 295 | \newunit\newblock 296 | \printfield{systemreq}% 297 | \newunit\newblock 298 | \usebibmacro{doi+eprint+url+note}% 299 | \newunit\newblock 300 | \usebibmacro{addendum+pubstate}% 301 | \setunit{\bibpagerefpunct}\newblock 302 | \usebibmacro{pageref}% 303 | \newunit\newblock 304 | \usebibmacro{related:init}% 305 | \usebibmacro{related}% 306 | \usebibmacro{finentry}} 307 | 308 | %% Счетчики. Для всего, кроме страниц, используем totcount, для страниц используем pageslts. Если надо. 309 | 310 | %\RequirePackage{pageslts} % В текущей версии шаблона нет объема работы. Удивительно, но да. 311 | 312 | \RequirePackage{totcount} 313 | \RequirePackage{longtable} 314 | \regtotcounter[auxfile=\jobname.tct]{figure} 315 | \regtotcounter[auxfile=\jobname.tct]{table} 316 | \regtotcounter[auxfile=\jobname.tct]{algorithm} 317 | \newtotcounter[auxfile=\jobname.tct]{citnum} 318 | \newtotcounter[auxfile=\jobname.tct]{appendix} 319 | \AtEveryBibitem{\clearfield{addendum}} 320 | 321 | %% Большая пачка определений теорем. 322 | 323 | \newtheoremstyle{theoremstyle}{0pt}{0pt}{}{1cm}{\itshape}{.}{.5em}{} 324 | \theoremstyle{theoremstyle} 325 | 326 | \newtheorem{theorem}{\@theorem@theorem} 327 | \newtheorem{prop}[theorem]{\@theorem@proposition} 328 | \newtheorem{corollary}[theorem]{\@theorem@corollary} 329 | \newtheorem{lemma}[theorem]{\@theorem@lemma} 330 | \newtheorem{question}[theorem]{\@theorem@question} 331 | \newtheorem{conjecture}[theorem]{\@theorem@conjecture} 332 | \newtheorem{assumption}[theorem]{\@theorem@assumption} 333 | \newtheorem{definition}[theorem]{\@theorem@definition} 334 | \newtheorem{notation}[theorem]{\@theorem@notation} 335 | \newtheorem{condition}[theorem]{\@theorem@condition} 336 | \newtheorem{example}[theorem]{\@theorem@example} 337 | 338 | \renewcommand{\proof}[1][]{\textit{\@proofname\ifthenelse{\equal{#1}{}}{}{ (#1)}}.~} 339 | 340 | %% Листинги, по умолчанию - Java 341 | 342 | \RequirePackage{listings} 343 | \definecolor{darkblue}{rgb}{0,0,0.5} 344 | \definecolor{darkgreen}{rgb}{0,0.5,0} 345 | 346 | \lstset{ 347 | language=Java, 348 | extendedchars=\true, 349 | tabsize=4, 350 | keywordstyle=\color{darkblue}, 351 | commentstyle=\color{gray}, 352 | stringstyle=\color{darkgreen}, 353 | breaklines=true, 354 | showstringspaces=false, 355 | basicstyle=\small 356 | } 357 | 358 | %% Все флоаты нумеруем глобально. Формулы - тоже. 359 | 360 | \RequirePackage{chngcntr} 361 | \counterwithout{figure}{chapter} 362 | \counterwithout{table}{chapter} 363 | \counterwithout{algorithm}{chapter} 364 | \counterwithout{algorithm}{section} 365 | \counterwithout{algorithm}{subsection} 366 | \counterwithout{equation}{chapter} 367 | 368 | \AtBeginDocument{% 369 | \let\c@lstlisting\c@algorithm 370 | \let\thelstlisting\thealgorithm 371 | \let\ftype@lstlisting\ftype@algorithm % give the floats the same precedence 372 | \counterwithout{lstlisting}{chapter} 373 | \counterwithout{lstlisting}{section} 374 | \counterwithout{lstlisting}{subsection} 375 | } 376 | 377 | 378 | %% "Тонкая" настройка теховских штрафов при формировании абзацев. 379 | 380 | \sloppy 381 | \binoppenalty=10000 382 | \relpenalty=10000 383 | \clubpenalty=10000 384 | \widowpenalty=10000 385 | 386 | %% Подписи к рисункам, таблицам, листингам. 387 | 388 | \floatstyle{plaintop} 389 | \restylefloat{algorithm} 390 | 391 | \floatsetup[figure]{style=plain, capposition=bottom} 392 | \captionsetup[figure]{ 393 | labelsep=endash, 394 | singlelinecheck=false, 395 | labelfont={normalsize,md}, 396 | justification=centering, 397 | position=bottom 398 | } 399 | \floatsetup[table]{style=plain, capposition=top} 400 | \captionsetup[table]{ 401 | labelsep=endash, 402 | singlelinecheck=false, 403 | labelfont={normalsize,md}, 404 | justification=justified, 405 | position=top 406 | } 407 | \floatsetup[algorithm]{style=plain, capposition=top} 408 | \captionsetup[algorithm]{ 409 | labelsep=endash, 410 | singlelinecheck=false, 411 | labelfont={normalsize,md}, 412 | justification=justified, 413 | position=top 414 | } 415 | \floatsetup[lstlisting]{style=plain, capposition=top} 416 | \captionsetup[lstlisting]{ 417 | labelsep=endash, 418 | singlelinecheck=false, 419 | labelfont={normalsize,md}, 420 | justification=justified, 421 | position=top 422 | } 423 | 424 | %% Переопределение библиографии. Может, можно и проще, но сделал так. 425 | 426 | \defbibheading{trueHeading}{% 427 | \chapter*{\@referencesname}% 428 | \addcontentsline{toc}{chapter}{\@referencesname}} 429 | 430 | \newcommand{\printmainbibliography}{ 431 | \printbibliography[heading=trueHeading]% 432 | %%% Считаем, какие границы у пяти- и десятилетней давности 433 | \newcounter{@yearminusfive@src}% 434 | \newcounter{@yearminusten@src}% 435 | \setcounter{@yearminusfive@src}{\theyear}% 436 | \addtocounter{@yearminusfive@src}{-5}% 437 | \def\@yearminusfive{\value{@yearminusfive@src}}% 438 | \setcounter{@yearminusten@src}{\theyear}% 439 | \addtocounter{@yearminusten@src}{-10}% 440 | \def\@yearminusten{\value{@yearminusten@src}}% 441 | %%% Компоненты фильтров 442 | \newcommand{\@iffiveyears}{\iffieldint{year}{\ifnumless{\thefield{year}}{\@yearminusfive}{\skipentry}{}}{\skipentry}}% 443 | \newcommand{\@iftenyears}{\iffieldint{year}{\ifnumless{\thefield{year}}{\@yearminusfive}{\ifnumless{\thefield{year}}{\@yearminusten}{\skipentry}{}}{\skipentry}}{\skipentry}}% 444 | \newcommand{\@ifveryold}{\iffieldint{year}{\ifnumless{\thefield{year}}{\@yearminusten}{}{\skipentry}}{}}% 445 | \newcommand{\@ifrussian}{\iffieldundef{langid}{}{\iffieldequalstr{langid}{russian}{}{\skipentry}}}% 446 | \newcommand{\@ifforeign}{\iffieldundef{langid}{\skipentry}{\iffieldequalstr{langid}{russian}{\skipentry}{}}}% 447 | %%% Сами фильтры 448 | \defbibcheck{bibch@russiansourcesfiveyears}{\@iffiveyears\@ifrussian}% 449 | \defbibcheck{bibch@russiansourcestenyears}{\@iftenyears\@ifrussian}% 450 | \defbibcheck{bibch@russiansourcesveryold}{\@ifveryold\@ifrussian}% 451 | \defbibcheck{bibch@foreignsourcesfiveyears}{\@iffiveyears\@ifforeign}% 452 | \defbibcheck{bibch@foreignsourcestenyears}{\@iftenyears\@ifforeign}% 453 | \defbibcheck{bibch@foreignsourcesveryold}{\@ifveryold\@ifforeign}% 454 | \@countsourceswhere{}{citnum}% 455 | \@countsourceswhere{check=bibch@russiansourcesfiveyears}{c@russiansourcesfiveyears}% 456 | \@countsourceswhere{check=bibch@russiansourcestenyears}{c@russiansourcestenyears}% 457 | \@countsourceswhere{check=bibch@russiansourcesveryold}{c@russiansourcesveryold}% 458 | \@countsourceswhere{check=bibch@foreignsourcesfiveyears}{c@foreignsourcesfiveyears}% 459 | \@countsourceswhere{check=bibch@foreignsourcestenyears}{c@foreignsourcestenyears}% 460 | \@countsourceswhere{check=bibch@foreignsourcesveryold}{c@foreignsourcesveryold}% 461 | \@countsourceswhere{type=online}{c@internetsources}} 462 | 463 | \newcommand{\@killhyperrefissue}{\renewbibmacro{pageref}{}\let\blx@anchor\relax} 464 | 465 | \newcommand{\printannobibliography}{\begingroup\@killhyperrefissue\renewcommand*{\bibfont}{\small}\printbibliography[heading=none]\endgroup} 466 | 467 | %% Подсчет источников различных категорий. Это следующие команды: 468 | %% \relatedworksourcecount - число источников, использованных в обзоре 469 | %% \russiansourcesfiveyears - число отечественных источников за последние 5 лет 470 | %% \russiansourcestenyears - число отечественных источников от 5 (не включительно) до 10 лет 471 | %% \russiansourcesveryold - число отечественных источников старше 10 лет 472 | %% \foreignsourcesfiveyears - число иностранных источников за последние 5 лет 473 | %% \foreignsourcestenyears - число иностранных источников от 5 (не включительно) до 10 лет 474 | %% \foreignsourcesveryold - число иностранных источников старше 10 лет 475 | %% \internetsources - число интернет-источников 476 | 477 | %%% Сначала учимся считать источники вместо того, чтобы их печатать 478 | \newcounter{@bibliocounter} 479 | \defbibenvironment{@fillbibliocounter} 480 | {\renewcommand{\blx@driver}[1]{}} 481 | {} 482 | {\stepcounter{@bibliocounter}} 483 | 484 | %%% Заводим счетчики под это все 485 | \newtotcounter[auxfile=\jobname.tct]{c@relatedworksourcecount} 486 | \newtotcounter[auxfile=\jobname.tct]{c@russiansourcesfiveyears} 487 | \newtotcounter[auxfile=\jobname.tct]{c@russiansourcestenyears} 488 | \newtotcounter[auxfile=\jobname.tct]{c@russiansourcesveryold} 489 | \newtotcounter[auxfile=\jobname.tct]{c@foreignsourcesfiveyears} 490 | \newtotcounter[auxfile=\jobname.tct]{c@foreignsourcestenyears} 491 | \newtotcounter[auxfile=\jobname.tct]{c@foreignsourcesveryold} 492 | \newtotcounter[auxfile=\jobname.tct]{c@internetsources} 493 | 494 | \defbibheading{reallynone}{} 495 | 496 | %%% Считаем в счетчик #2 число ссылок, удовлетворяющих фильтру #1 497 | \newcommand{\@countsourceswhere}[2]{% 498 | \setcounter{@bibliocounter}{0}% 499 | \begingroup\@killhyperrefissue\printbibliography[env=@fillbibliocounter,heading=reallynone,#1]\endgroup% 500 | \setcounter{#2}{\arabic{@bibliocounter}}} 501 | 502 | %%% Определяем команды через значения счетчиков 503 | \newcommand{\relatedworksourcecount}{\total{c@relatedworksourcecount}} 504 | \newcommand{\russiansourcesfiveyears}{\total{c@russiansourcesfiveyears}} 505 | \newcommand{\russiansourcestenyears}{\total{c@russiansourcestenyears}} 506 | \newcommand{\russiansourcesveryold}{\total{c@russiansourcesveryold}} 507 | \newcommand{\foreignsourcesfiveyears}{\total{c@foreignsourcesfiveyears}} 508 | \newcommand{\foreignsourcestenyears}{\total{c@foreignsourcestenyears}} 509 | \newcommand{\foreignsourcesveryold}{\total{c@foreignsourcesveryold}} 510 | \newcommand{\internetsources}{\@iflfe{\ifthenelse{\equal{\totvalue{c@internetsources}}{0}}{none}{yes, \total{c@internetsources} resource(s)}} 511 | {\ifthenelse{\equal{\totvalue{c@internetsources}}{0}}{нет}{да, число ресурсов: \total{c@internetsources}}}} 512 | 513 | %%% Команды для начала и конца секции с обзором 514 | \newcommand{\startrelatedwork}{\newrefsegment} 515 | \newcommand{\finishrelatedwork}{\@countsourceswhere{segment=\arabic{refsegment}}{c@relatedworksourcecount}\endrefsegment} 516 | 517 | %% Делаем русские варианты знаков неравенств. 518 | 519 | \let\le\leqslant 520 | \let\leq\leqslant 521 | \let\ge\geqslant 522 | \let\geq\geqslant 523 | 524 | %% Позволяем многострочным формулам перелезать на следующие страницы. 525 | 526 | \allowdisplaybreaks 527 | 528 | %% Шрифты, размеры, расположения заголовков разделов. 529 | 530 | \RequirePackage{titlesec} 531 | \RequirePackage{titletoc} 532 | 533 | \setcounter{secnumdepth}{3} 534 | \titleformat{\chapter}[block]{\normalsize\bfseries\center}{\@chaptername~\thechapter.~}% 535 | {0pt}{\begin{MakeUppercase}}[\end{MakeUppercase}\thispagestyle{\TheOnlyTruePageStyle}] 536 | \titlespacing{\chapter}{0pt}{-30pt}{0pt} 537 | \titleformat{\section}[block]{\normalsize\bfseries\center}{\thesection.~}{0pt}{} 538 | \titlespacing{\section}{0pt}{0pt}{0pt} 539 | \titleformat{\subsection}[block]{\normalsize\bfseries\center}{\thesubsection.~}{0pt}{} 540 | \titlespacing{\subsection}{0pt}{0pt}{0pt} 541 | \titleformat{\subsubsection}[block]{\normalsize\bfseries\center}{\thesubsubsection.~}{0pt}{} 542 | \titlespacing{\subsubsection}{0pt}{0pt}{0pt} 543 | 544 | %% \appendix начинает приложения, которые должны правильно именоваться. 545 | 546 | \let\oldappendix\appendix 547 | \renewcommand{\appendix}{ 548 | \oldappendix 549 | %% Нумерация в приложениях идет по приложениям 550 | \counterwithin{figure}{chapter} 551 | \counterwithin{table}{chapter} 552 | \counterwithin{algorithm}{chapter} 553 | \counterwithin{lstlisting}{chapter} 554 | %% 555 | \renewcommand{\thechapter}{\@appendixcounter} 556 | \titleformat{\chapter}[block]{\normalsize\bfseries\center\stepcounter{appendix}}% 557 | {\@appendixname~\thechapter.~}{0pt}{\begin{MakeUppercase}}[\end{MakeUppercase}\thispagestyle{\TheOnlyTruePageStyle}] 558 | \titlecontents{chapter} 559 | [\appendixPrefix] 560 | {} 561 | {\contentslabel[\@appendixname~\thecontentslabel.]{\the\appendixPrefix}} 562 | {\hspace*{-\the\appendixPrefix}} 563 | {\titlerule*[0.5pc]{.}\contentspage} 564 | } 565 | 566 | %% Приемлемый внешний вид содержания 567 | 568 | \contentsmargin{1.8em} 569 | \newcommand{\chapterW}{1.2em} 570 | \newcommand{\sectionW}{2.2em} 571 | \newcommand{\subsectionW}{2.6em} 572 | 573 | \newcommand{\banhyphens}{\hyphenpenalty=10000\exhyphenpenalty=10000{}} 574 | 575 | \AtBeginDocument{ 576 | %% Длина "приложения" нормально определяется только теперь 577 | \newlength{\appendixPrefix} 578 | \settowidth{\appendixPrefix}{\@appendixname~M.~} 579 | } 580 | 581 | \newlength{\chapterPrefix} 582 | \addtolength{\chapterPrefix}{\chapterW} 583 | 584 | \newlength{\sectionPrefix} 585 | \addtolength{\sectionPrefix}{\chapterPrefix} 586 | \addtolength{\sectionPrefix}{\sectionW} 587 | 588 | \newlength{\subsectionPrefix} 589 | \addtolength{\subsectionPrefix}{\sectionPrefix} 590 | \addtolength{\subsectionPrefix}{\subsectionW} 591 | 592 | \titlecontents{chapter} 593 | [\chapterPrefix] 594 | {} 595 | {\contentslabel[\thecontentslabel.]{\chapterW}} 596 | {\hspace*{-\chapterW}} 597 | {\titlerule*[0.5pc]{.}\contentspage} 598 | \titlecontents{section} 599 | [\sectionPrefix] 600 | {} 601 | {\contentslabel[\thecontentslabel.]{\sectionW}} 602 | {\hspace*{-\sectionW}} 603 | {\titlerule*[0.5pc]{.}\contentspage} 604 | \titlecontents{subsection} 605 | [\subsectionPrefix] 606 | {} 607 | {\contentslabel[\thecontentslabel.]{\subsectionW}~} 608 | {\hspace*{-\subsectionW}} 609 | {\titlerule*[0.5pc]{.}\contentspage} 610 | 611 | %% Выводы по главе - удобная команда 612 | 613 | \newcommand{\chapterconclusion}{\section*{\@chapterconclusion~\thechapter}\addcontentsline{toc}{section}{\@chapterconclusion~\thechapter}} 614 | 615 | %% Обратная совместимость со старым стилем 616 | 617 | \newcommand{\startthechapters}{} 618 | \newcommand{\startappendices}{\appendix} 619 | \newcommand{\initializefrontsections}{} 620 | 621 | %% ...отдельным пунктом - введение и заключение 622 | 623 | \newcommand{\startprefacepage}{% 624 | \chapter*{\@introductionname}\label{chapter:introduction}% 625 | \addcontentsline{toc}{chapter}{\@introductionname}} 626 | \newcommand{\startconclusionpage}{% 627 | \chapter*{\@conclusionname}\label{chapter:conclusion}% 628 | \addcontentsline{toc}{chapter}{\@conclusionname}} 629 | 630 | %% Титульная страница 631 | 632 | \newcommand{\hfilll}{\hspace{0pt plus 1filll}} 633 | 634 | \RequirePackage[normalem]{ulem} 635 | 636 | \newcommand{\uhspace}[1]{\uline{\hspace{#1}}} 637 | \newcommand{\signatureplace}{\uhspace{7em}} 638 | \newcommand{\datequoteplace}{\@iflfe{``\uhspace{5ex}''}{<<\uhspace{5ex}>>}} 639 | \newcommand{\infiniteuhspace}{\uhspace{0 cm plus 1fill}} 640 | \newcommand{\unknowndate}{\datequoteplace~\uhspace{13ex}~20\uhspace{3ex}\@iflfe{~}{~г.}} 641 | 642 | %% Контентные команды со значениями по умолчанию 643 | 644 | %%% \university 645 | 646 | \newcommand{\theuniversity@ru}{{\small\bfseries Министерство науки и высшего образования Российской Федерации\par 647 | {\scriptsize \MakeUppercase{федеральное государственное автономное образовательное учреждение высшего образования}}\par 648 | \begin{singlespace}\MakeUppercase{<<Национальный исследовательский университет ИТМО>>}\end{singlespace}}} 649 | 650 | \newcommand{\theuniversity@en}{{\small\bfseries Ministry of Science and Higher Education of the Russian Federation\par 651 | \MakeUppercase{ITMO University}}} 652 | 653 | \newcommand{\theuniversity}{\@iflfe{\theuniversity@en}{\theuniversity@ru}} 654 | \newcommand{\university}[1]{\@iflfe{\renewcommand{\theuniversity@en}{#1}}{\renewcommand{\theuniversity@ru}{#1}}} 655 | 656 | %%% \degreehost 657 | 658 | \newcommand{\thedegreehost@ru}{Университет ИТМО} 659 | \newcommand{\thedegreehost@en}{ITMO University} 660 | \newcommand{\thedegreehost}{\@iflfe{\thedegreehost@en}{\thedegreehost@ru}} 661 | \newcommand{\degreehost}[1]{\@iflfe{\renewcommand{\thedegreehost@en}{#1}}{\renewcommand{\thedegreehost@ru}{#1}}} 662 | 663 | %%% \faculty 664 | 665 | \newcommand{\thefaculty@ru}{ИТиП} 666 | \newcommand{\thefaculty@en}{IT\&P} 667 | \newcommand{\thefaculty}{\@iflfe{\thefaculty@en}{\thefaculty@ru}} 668 | \newcommand{\faculty}[1]{\@iflfe{\renewcommand{\thefaculty@en}{#1}}{\renewcommand{\thefaculty@ru}{#1}}} 669 | 670 | %%% \specialty 671 | 672 | \newcommand{\specialty}[1]{\@iflfe{\newcommand{\thespecialty@en}{#1}}{\newcommand{\thespecialty@ru}{#1}}} 673 | \newcommand{\thespecialty}{\@iflfe{\thespecialty@en}{\thespecialty@ru}} 674 | 675 | %%% \specialization 676 | 677 | \newcommand{\specialization}[1]{\@iflfe{\newcommand{\thespecialization@en}{#1}}{\newcommand{\thespecialization@ru}{#1}}} 678 | \newcommand{\thespecialization}{\@iflfe{\thespecialization@en}{\thespecialization@ru}} 679 | 680 | %%% \programhead 681 | 682 | \newcommand{\theprogramhead@ru}{Парфенов В.Г.} 683 | \newcommand{\theprogramhead@en}{Parfenov V.G.} 684 | \newcommand{\theprogramhead}{\@iflfe{\theprogramhead@en}{\theprogramhead@ru}} 685 | 686 | \newcommand{\theprogramheaddegree@ru}{проф., д.т.н.} 687 | \newcommand{\theprogramheaddegree@en}{prof., doct.} 688 | \newcommand{\theprogramheaddegree}{\@iflfe{\theprogramheaddegree@en}{\theprogramheaddegree@ru}} 689 | 690 | \newcommand{\programhead}[2]{\@iflfe{\renewcommand{\theprogramhead@en}{#1}\renewcommand{\theprogramheaddegree@en}{#2}} 691 | {\renewcommand{\theprogramhead@ru}{#1}\renewcommand{\theprogramheaddegree@ru}{#2}}} 692 | 693 | %%% \city 694 | 695 | \newcommand{\thecity@ru}{Санкт-Петербург} 696 | \newcommand{\thecity@en}{Saint Petersburg} 697 | \newcommand{\thecity}{\@iflfe{\thecity@en}{\thecity@ru}} 698 | \newcommand{\city}[1]{\@iflfe{\renewcommand{\thecity@en}{#1}}{\renewcommand{\thecity@ru}{#1}}} 699 | 700 | %%% Перечень графического материала 701 | 702 | \newcommand{\theplannedgraphics@ru}{Графические материалы и чертежи работой не предусмотрены} 703 | \newcommand{\theplannedgraphics@en}{Supplementary materials and blueprints not required} 704 | \newcommand{\theplannedgraphics}{\@iflfe{\theplannedgraphics@en}{\theplannedgraphics@ru}} 705 | \newcommand{\plannedgraphics}[1]{\@iflfe{\renewcommand{\theplannedgraphics@en}{#1}}{\renewcommand{\theplannedgraphics@ru}{#1}}} 706 | 707 | %%% Даты 708 | \newcommand{\@localizeddate@ru}[3]{<<#1>>~#2~#3~г.} 709 | \newcommand{\@localizeddate@en}[3]{``#1''~#2~#3} 710 | \newcommand{\@localizeddate}[3]{\@iflfe{\@localizeddate@en{#1}{#2}{#3}}{\@localizeddate@ru{#1}{#2}{#3}}} 711 | 712 | \newcommand{\thestartdate}{\unknowndate} 713 | \newcommand{\startdate}[3]{\renewcommand{\thestartdate}{\@localizeddate{#1}{#2}{#3}}} 714 | \newcommand{\thefinishdate}{\unknowndate} 715 | \newcommand{\finishdate}[3]{\renewcommand{\thefinishdate}{\@localizeddate{#1}{#2}{#3}}} 716 | \newcommand{\thedefencedate}{\unknowndate} 717 | \newcommand{\defencedate}[3]{\renewcommand{\thedefencedate}{\@localizeddate{#1}{#2}{#3}}} 718 | 719 | %% Контентные команды без значений по умолчанию 720 | 721 | \newcommand{\studygroup}[1]{\newcommand{\thestudygroup}{#1}} 722 | 723 | %%% \title 724 | 725 | \newcommand{\thetitle}{\@iflfe{\thetitle@en}{\thetitle@ru}} 726 | \renewcommand{\title}[1]{\@iflfe{\newcommand{\thetitle@en}{#1}}{\newcommand{\thetitle@ru}{#1}}} 727 | 728 | %%% \author 729 | 730 | \providecommand{\theauthor}{~} % some distributions have it, some not 731 | \renewcommand{\theauthor}{\@iflfe{\theauthor@en}{\theauthor@ru}} 732 | \newcommand{\theauthorshort}{\@iflfe{\theauthorshort@en}{\theauthorshort@ru}} 733 | 734 | \renewcommand{\author}[2]{\@iflfe{\newcommand{\theauthor@en}{#1}\newcommand{\theauthorshort@en}{#2}} 735 | {\newcommand{\theauthor@ru}{#1}\newcommand{\theauthorshort@ru}{#2}}} 736 | 737 | %%% \supervisor 738 | 739 | \newcommand{\thesupervisor}{\@iflfe{\thesupervisor@en}{\thesupervisor@ru}} 740 | \newcommand{\thesupervisorshort}{\@iflfe{\thesupervisorshort@en}{\thesupervisorshort@ru}} 741 | \newcommand{\thesupervisordegree}{\@iflfe{\thesupervisordegree@en}{\thesupervisordegree@ru}} 742 | \newcommand{\thesupervisorwork}{\@iflfe{\thesupervisorwork@en}{\thesupervisorwork@ru}} 743 | 744 | \newcommand{\supervisor}[4]{\@iflfe{\newcommand{\thesupervisor@en}{#1}\newcommand{\thesupervisorshort@en}{#2}\newcommand{\thesupervisordegree@en}{#3}\newcommand{\thesupervisorwork@en}{#4}} 745 | {\newcommand{\thesupervisor@ru}{#1}\newcommand{\thesupervisorshort@ru}{#2}\newcommand{\thesupervisordegree@ru}{#3}\newcommand{\thesupervisorwork@ru}{#4}}} 746 | 747 | %%% \secretary 748 | 749 | \newcommand{\thesecretary}{\@iflfe{\thesecretary@en}{\thesecretary@ru}} 750 | \newcommand{\secretary}[1]{\@iflfe{\newcommand{\thesecretary@en}{#1}}{\newcommand{\thesecretary@ru}{#1}}} 751 | 752 | %%% \publishyear 753 | 754 | \newcommand{\publishyear}[1]{\newcommand{\theyear}{#1}} 755 | 756 | %%% Техническое задание и исходные данные к работе 757 | 758 | \newcommand{\thetechnicalspec}{\@iflfe{\thetechnicalspec@en}{\thetechnicalspec@ru}} 759 | \newcommand{\technicalspec}[1]{\@iflfe{\newcommand{\thetechnicalspec@en}{#1}}{\newcommand{\thetechnicalspec@ru}{#1}}} 760 | 761 | %%% Содержание работы 762 | 763 | \newcommand{\theplannedcontents}{\@iflfe{\theplannedcontents@en}{\theplannedcontents@ru}} 764 | \newcommand{\plannedcontents}[1]{\@iflfe{\newcommand{\theplannedcontents@en}{#1}}{\newcommand{\theplannedcontents@ru}{#1}}} 765 | 766 | %%% Исходные материалы и пособия 767 | 768 | \newcommand{\theplannedsources}{\@iflfe{\theplannedsources@en}{\theplannedsources@ru}} 769 | \newcommand{\plannedsources}[1]{\@iflfe{\newcommand{\theplannedsources@en}{#1}}{\newcommand{\theplannedsources@ru}{#1}}} 770 | 771 | %%% Цель исследования 772 | 773 | \newcommand{\theresearchaim}{\@iflfe{\theresearchaim@en}{\theresearchaim@ru}} 774 | \newcommand{\researchaim}[1]{\@iflfe{\newcommand{\theresearchaim@en}{#1}}{\newcommand{\theresearchaim@ru}{#1}}} 775 | 776 | %%% Задачи, решаемые в ВКР 777 | 778 | \newcommand{\theresearchtargets}{\@iflfe{\theresearchtargets@en}{\theresearchtargets@ru}} 779 | \newcommand{\researchtargets}[1]{\@iflfe{\newcommand{\theresearchtargets@en}{#1}}{\newcommand{\theresearchtargets@ru}{#1}}} 780 | 781 | %%% Краткая характеристика полученных результатов 782 | 783 | \newcommand{\theresearchsummary}{\@iflfe{\theresearchsummary@en}{\theresearchsummary@ru}} 784 | \newcommand{\researchsummary}[1]{\@iflfe{\newcommand{\theresearchsummary@en}{#1}}{\newcommand{\theresearchsummary@ru}{#1}}} 785 | 786 | %%% Гранты, полученные при выполнении работы 787 | 788 | \newcommand{\theresearchfunding}{\@iflfe{\theresearchfunding@en}{\theresearchfunding@ru}} 789 | \newcommand{\researchfunding}[1]{\@iflfe{\newcommand{\theresearchfunding@en}{#1}}{\newcommand{\theresearchfunding@ru}{#1}}} 790 | 791 | %%% Наличие публикаций и выступлений на конференциях 792 | 793 | \newcommand{\theresearchpublications}{\@iflfe{\theresearchpublications@en}{\theresearchpublications@ru}} 794 | \newcommand{\researchpublications}[1]{\@iflfe{\newcommand{\theresearchpublications@en}{#1}}{\newcommand{\theresearchpublications@ru}{#1}}} 795 | 796 | %% Контентные команды пополнения списков 797 | 798 | %%% Добавить консультанта: (Фамилия И.О.) (звание, степень) 799 | \newbool{hasconsultants@en} 800 | \newbool{hasconsultants@ru} 801 | \newcommand{\thelistofconsultants@en}{} 802 | \newcommand{\thelistofconsultants@ru}{} 803 | \newcommand{\addconsultant}[2]{\@iflfe{\booltrue{hasconsultants@en}\appto{\thelistofconsultants@en}{\item #1, #2 \hfill\signatureplace\par\bigskip}} 804 | {\booltrue{hasconsultants@ru}\appto{\thelistofconsultants@ru}{\item #1, #2 \hfill\signatureplace\par\bigskip}}} 805 | \newcommand{\displayconsultants}{\@iflfe{\ifbool{hasconsultants@en}{\noindent Consultant(s): \begin{enumerate}\thelistofconsultants@en\end{enumerate}\par}{}} 806 | {\ifbool{hasconsultants@ru}{\noindent Консультанты: \begin{enumerate}\thelistofconsultants@ru\end{enumerate}\par}{}}} 807 | 808 | %%% Добавить пакет программ: (Название) (Ссылки на разделы) 809 | \newbool{hasadvancedsoftware@en} 810 | \newbool{hasadvancedsoftware@ru} 811 | \newcommand{\thelistofadvancedsoftware@en}{} 812 | \newcommand{\thelistofadvancedsoftware@ru}{} 813 | \newcommand{\addadvancedsoftware}[2]{\@iflfe{\booltrue{hasadvancedsoftware@en}\appto{\thelistofadvancedsoftware@en}{#1 & #2 \\\hline}} 814 | {\booltrue{hasadvancedsoftware@ru}\appto{\thelistofadvancedsoftware@ru}{#1 & #2 \\\hline}}} 815 | 816 | \newcommand{\displayadvancedsoftware@ru}{\ifbool{hasadvancedsoftware@ru} 817 | {\par\vspace{3pt}\noindent\begin{tabularx}{\textwidth}{|X|p{0.25\textwidth}|}\hline 818 | \multicolumn{1}{|c|}{\textbf{Пакеты компьютерных программ и технологий}} & \multicolumn{1}{c|}{\textbf{Раздел работы}} \\\hline 819 | \thelistofadvancedsoftware@ru 820 | \end{tabularx}\par\vspace{6pt}}{нет\par}} 821 | 822 | \newcommand{\displayadvancedsoftware@en}{\ifbool{hasadvancedsoftware@en} 823 | {\par\vspace{3pt}\noindent\begin{tabularx}{\textwidth}{|X|p{0.25\textwidth}|}\hline 824 | \multicolumn{1}{|c|}{\textbf{Software suites and technologies}} & \multicolumn{1}{c|}{\textbf{Thesis section}} \\\hline 825 | \thelistofadvancedsoftware@en 826 | \end{tabularx}\par\vspace{6pt}}{none\par}} 827 | 828 | \newcommand{\displayadvancedsoftware}{\@iflfe{\displayadvancedsoftware@en}{\displayadvancedsoftware@ru}} 829 | 830 | \newcommand{\displaysourcepartition@ru}{\begin{tabularx}{\textwidth}{|*{6}{>{\centering\arraybackslash}X|}}\hline 831 | \multicolumn{3}{|c|}{\textbf{Отечественных}} & \multicolumn{3}{c|}{\textbf{Иностранных}} \\\hline 832 | Последние & От 5 & Более & Последние & От 5 & Более \\ 833 | 5 лет & до 10 лет & 10 лет & 5 лет & до 10 лет & 10 лет \\\hline 834 | \russiansourcesfiveyears & \russiansourcestenyears & \russiansourcesveryold & 835 | \foreignsourcesfiveyears & \foreignsourcestenyears & \foreignsourcesveryold \\\hline 836 | \end{tabularx}} 837 | 838 | \newcommand{\displaysourcepartition@en}{\begin{tabularx}{\textwidth}{|*{6}{>{\centering\arraybackslash}X|}}\hline 839 | \multicolumn{3}{|c|}{\textbf{Russian}} & \multicolumn{3}{c|}{\textbf{Foreign}} \\\hline 840 | In the last & 5 to 10 & More than & In the last & 5 to 10 & More than \\ 841 | 5 years & years & 10 years & 5 years & years & 10 years \\\hline 842 | \russiansourcesfiveyears & \russiansourcestenyears & \russiansourcesveryold & 843 | \foreignsourcesfiveyears & \foreignsourcestenyears & \foreignsourcesveryold \\\hline 844 | \end{tabularx}} 845 | 846 | \newcommand{\displaysourcepartition}{\@iflfe{\displaysourcepartition@en}{\displaysourcepartition@ru}} 847 | 848 | %% Создание титульной страницы, задания и аннотации 849 | 850 | \newcommand{\@strings@ThesisName@en}{Graduation Thesis} 851 | \newcommand{\@strings@ThesisName@ru}{Выпускная квалификационная работа} 852 | \newcommand{\@strings@ThesisName}{\@iflfe{\@strings@ThesisName@en}{\@strings@ThesisName@ru}} 853 | 854 | \newcommand{\@strings@ThesisTitle@en}{Thesis topic} 855 | \newcommand{\@strings@ThesisTitle@ru}{Тема ВКР} 856 | \newcommand{\@strings@ThesisTitle}{\@iflfe{\@strings@ThesisTitle@en}{\@strings@ThesisTitle@ru}} 857 | 858 | \newcommand{\@strings@ThesisTitleLong@en}{Title of the thesis} 859 | \newcommand{\@strings@ThesisTitleLong@ru}{Наименование темы ВКР} 860 | \newcommand{\@strings@ThesisTitleLong}{\@iflfe{\@strings@ThesisTitleLong@en}{\@strings@ThesisTitleLong@ru}} 861 | 862 | \newcommand{\@strings@Author@en}{Author} 863 | \newcommand{\@strings@Author@ru}{Автор} 864 | \newcommand{\@strings@Author}{\@iflfe{\@strings@Author@en}{\@strings@Author@ru}} 865 | 866 | \newcommand{\@strings@SubjectArea@en}{Subject area} 867 | \newcommand{\@strings@SubjectArea@ru}{Направление подготовки} 868 | \newcommand{\@strings@SubjectArea}{\@iflfe{\@strings@SubjectArea@en}{\@strings@SubjectArea@ru}} 869 | 870 | \newcommand{\@strings@ProgramMajor@en}{Major} 871 | \newcommand{\@strings@ProgramMajor@ru}{Направленность (профиль) образовательной программы} 872 | \newcommand{\@strings@ProgramMajor}{\@iflfe{\@strings@ProgramMajor@en}{\@strings@ProgramMajor@ru}} 873 | 874 | \newcommand{\@strings@Specialization@en}{Specialization} 875 | \newcommand{\@strings@Specializationr@ru}{Специализация} 876 | \newcommand{\@strings@Specialization}{\@iflfe{\@strings@Specialization@en}{\@strings@Specialization@ru}} 877 | 878 | \newcommand{\@strings@DegreeLevel@en}{Degree level} 879 | \newcommand{\@strings@DegreeLevel@ru}{Квалификация} 880 | \newcommand{\@strings@DegreeLevel}{\@iflfe{\@strings@DegreeLevel@en}{\@strings@DegreeLevel@ru}} 881 | 882 | \newcommand{\@strings@DegreeName}{\@iflfe{\@strings@DegreeName@en}{\@strings@DegreeName@ru}} 883 | 884 | \newcommand{\@strings@ThesisSupervisor@en}{Thesis supervisor} 885 | \newcommand{\@strings@ThesisSupervisor@ru}{Руководитель} 886 | \newcommand{\@strings@ThesisSupervisor}{\@iflfe{\@strings@ThesisSupervisor@en}{\@strings@ThesisSupervisor@ru}} 887 | 888 | \newcommand{\@strings@ThesisSupervisorLong@en}{Thesis supervisor} 889 | \newcommand{\@strings@ThesisSupervisorLong@ru}{Руководитель ВКР} 890 | \newcommand{\@strings@ThesisSupervisorLong}{\@iflfe{\@strings@ThesisSupervisorLong@en}{\@strings@ThesisSupervisorLong@ru}} 891 | 892 | \newcommand{\@strings@APPROVED@en}{APPROVED} 893 | \newcommand{\@strings@APPROVED@ru}{УТВЕРЖДАЮ} 894 | \newcommand{\@strings@APPROVED}{\@iflfe{\@strings@APPROVED@en}{\@strings@APPROVED@ru}} 895 | 896 | \newcommand{\@strings@ApprovedForDefense@en}{Approved for defense} 897 | \newcommand{\@strings@ApprovedForDefense@ru}{К защите допустить} 898 | \newcommand{\@strings@ApprovedForDefense}{\@iflfe{\@strings@ApprovedForDefense@en}{\@strings@ApprovedForDefense@ru}} 899 | 900 | \newcommand{\@strings@HeadOfProgram@en}{Head of educational program} 901 | \newcommand{\@strings@HeadOfProgram@ru}{Руководитель ОП} 902 | \newcommand{\@strings@HeadOfProgram}{\@iflfe{\@strings@HeadOfProgram@en}{\@strings@HeadOfProgram@ru}} 903 | 904 | \newcommand{\@strings@yearend@en}{} 905 | \newcommand{\@strings@yearend@ru}{~г.} 906 | \newcommand{\@strings@yearend}{\@iflfe{\@strings@yearend@en}{\@strings@yearend@ru}} 907 | 908 | \newcommand{\@strings@Student@en}{Student} 909 | \newcommand{\@strings@Student@ru}{Обучающийся} 910 | \newcommand{\@strings@Student}{\@iflfe{\@strings@Student@en}{\@strings@Student@ru}} 911 | 912 | \newcommand{\@strings@Group@en}{Group} 913 | \newcommand{\@strings@Group@ru}{Группа} 914 | \newcommand{\@strings@Group}{\@iflfe{\@strings@Group@en}{\@strings@Group@ru}} 915 | 916 | \newcommand{\@strings@FacultyOf@en}{Faculty of} 917 | \newcommand{\@strings@FacultyOf@ru}{Факультет} 918 | \newcommand{\@strings@FacultyOf}{\@iflfe{\@strings@FacultyOf@en}{\@strings@FacultyOf@ru}} 919 | 920 | \newcommand{\@strings@SubjectAreaProgramMajor@en}{Subject area, program/major} 921 | \newcommand{\@strings@SubjectAreaProgramMajor@ru}{Направленность (профиль), специализация} 922 | \newcommand{\@strings@SubjectAreaProgramMajor}{\@iflfe{\@strings@SubjectAreaProgramMajor@en}{\@strings@SubjectAreaProgramMajor@ru}} 923 | 924 | \newcommand{\@strings@ThesisReceived@en}{Thesis received} 925 | \newcommand{\@strings@ThesisReceived@ru}{ВКР принята} 926 | \newcommand{\@strings@ThesisReceived}{\@iflfe{\@strings@ThesisReceived@en}{\@strings@ThesisReceived@ru}} 927 | 928 | \newcommand{\@strings@OriginalityOfThesis@en}{Originality of thesis} 929 | \newcommand{\@strings@OriginalityOfThesis@ru}{Оригинальность ВКР} 930 | \newcommand{\@strings@OriginalityOfThesis}{\@iflfe{\@strings@OriginalityOfThesis@en}{\@strings@OriginalityOfThesis@ru}} 931 | 932 | \newcommand{\@strings@ThesisCompletedWithGrade@en}{Thesis completed with grade} 933 | \newcommand{\@strings@ThesisCompletedWithGrade@ru}{ВКР выполнена с оценкой} 934 | \newcommand{\@strings@ThesisCompletedWithGrade}{\@iflfe{\@strings@ThesisCompletedWithGrade@en}{\@strings@ThesisCompletedWithGrade@ru}} 935 | 936 | \newcommand{\@strings@DateOfDefense@en}{Date of defense} 937 | \newcommand{\@strings@DateOfDefense@ru}{Дата защиты} 938 | \newcommand{\@strings@DateOfDefense}{\@iflfe{\@strings@DateOfDefense@en}{\@strings@DateOfDefense@ru}} 939 | 940 | \newcommand{\@strings@SecretaryOfCommission@en}{Secretary of State Exam Commission} 941 | \newcommand{\@strings@SecretaryOfCommission@ru}{Секретарь ГЭК} 942 | \newcommand{\@strings@SecretaryOfCommission}{\@iflfe{\@strings@SecretaryOfCommission@en}{\@strings@SecretaryOfCommission@ru}} 943 | 944 | \newcommand{\@strings@NumberOfPages@en}{Number of pages} 945 | \newcommand{\@strings@NumberOfPages@ru}{Листов хранения} 946 | \newcommand{\@strings@NumberOfPages}{\@iflfe{\@strings@NumberOfPages@en}{\@strings@NumberOfPages@ru}} 947 | 948 | \newcommand{\@strings@NumberOfSupplementary@en}{Number of supplementary materials/Blueprints} 949 | \newcommand{\@strings@NumberOfSupplementary@ru}{Демонстрационных материалов/Чертежей хранения} 950 | \newcommand{\@strings@NumberOfSupplementary}{\@iflfe{\@strings@NumberOfSupplementary@en}{\@strings@NumberOfSupplementary@ru}} 951 | 952 | \newcommand{\@strings@OBJECTIVES@first@en}{OBJECTIVES} 953 | \newcommand{\@strings@OBJECTIVES@first@ru}{ЗАДАНИЕ} 954 | \newcommand{\@strings@OBJECTIVES@first}{\@iflfe{\@strings@OBJECTIVES@first@en}{\@strings@OBJECTIVES@first@ru}} 955 | 956 | \newcommand{\@strings@OBJECTIVES@second@en}{FOR A GRADUATION THESIS} 957 | \newcommand{\@strings@OBJECTIVES@second@ru}{НА ВЫПУСКНУЮ КВАЛИФИКАЦИОННУЮ РАБОТУ} 958 | \newcommand{\@strings@OBJECTIVES@second}{\@iflfe{\@strings@OBJECTIVES@second@en}{\@strings@OBJECTIVES@second@ru}} 959 | 960 | \newcommand{\@strings@DeadlineForSubmission@en}{Deadline for submission of complete thesis} 961 | \newcommand{\@strings@DeadlineForSubmission@ru}{Срок сдачи студентом законченной работы до} 962 | \newcommand{\@strings@DeadlineForSubmission}{\@iflfe{\@strings@DeadlineForSubmission@en}{\@strings@DeadlineForSubmission@ru}} 963 | 964 | \newcommand{\@strings@RequirementsAndPremise@en}{Requirements and premise for the thesis} 965 | \newcommand{\@strings@RequirementsAndPremise@ru}{Техническое задание и исходные данные к работе} 966 | \newcommand{\@strings@RequirementsAndPremise}{\@iflfe{\@strings@RequirementsAndPremise@en}{\@strings@RequirementsAndPremise@ru}} 967 | 968 | \newcommand{\@strings@ContentOfTheThesis@en}{Content of the thesis (list of key issues)} 969 | \newcommand{\@strings@ContentOfTheThesis@ru}{Содержание выпускной квалификационной работы (перечень подлежащих разработке вопросов)} 970 | \newcommand{\@strings@ContentOfTheThesis}{\@iflfe{\@strings@ContentOfTheThesis@en}{\@strings@ContentOfTheThesis@ru}} 971 | 972 | \newcommand{\@strings@ListOfGraphic@en}{List of graphic materials (with a list of required materials)} 973 | \newcommand{\@strings@ListOfGraphic@ru}{Перечень графического материала (с указанием обязательного материала)} 974 | \newcommand{\@strings@ListOfGraphic}{\@iflfe{\@strings@ListOfGraphic@en}{\@strings@ListOfGraphic@ru}} 975 | 976 | \newcommand{\@strings@SourceMaterials@en}{Source materials and publications} 977 | \newcommand{\@strings@SourceMaterials@ru}{Исходные материалы и пособия} 978 | \newcommand{\@strings@SourceMaterials}{\@iflfe{\@strings@SourceMaterials@en}{\@strings@SourceMaterials@ru}} 979 | 980 | \newcommand{\@strings@ObjectivesIssuedOn@en}{Objectives issued on} 981 | \newcommand{\@strings@ObjectivesIssuedOn@ru}{Дата выдачи задания} 982 | \newcommand{\@strings@ObjectivesIssuedOn}{\@iflfe{\@strings@ObjectivesIssuedOn@en}{\@strings@ObjectivesIssuedOn@ru}} 983 | 984 | \newcommand{\@strings@ObjectivesAssumed@en}{Objectives assumed by} 985 | \newcommand{\@strings@ObjectivesAssumed@ru}{Задание принял к исполнению} 986 | \newcommand{\@strings@ObjectivesAssumed}{\@iflfe{\@strings@ObjectivesAssumed@en}{\@strings@ObjectivesAssumed@ru}} 987 | 988 | \newcommand{\@strings@ANNOTATION@first@en}{SUMMARY} 989 | \newcommand{\@strings@ANNOTATION@first@ru}{АННОТАЦИЯ} 990 | \newcommand{\@strings@ANNOTATION@first}{\@iflfe{\@strings@ANNOTATION@first@en}{\@strings@ANNOTATION@first@ru}} 991 | 992 | \newcommand{\@strings@ANNOTATION@second@en}{OF A GRADUATION THESIS} 993 | \newcommand{\@strings@ANNOTATION@second@ru}{ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЫ} 994 | \newcommand{\@strings@ANNOTATION@second}{\@iflfe{\@strings@ANNOTATION@second@en}{\@strings@ANNOTATION@second@ru}} 995 | 996 | \newcommand{\@strings@NameOfOrganization@en}{Name of organization} 997 | \newcommand{\@strings@NameOfOrganization@ru}{Наименование организации, в которой выполнена ВКР} 998 | \newcommand{\@strings@NameOfOrganization}{\@iflfe{\@strings@NameOfOrganization@en}{\@strings@NameOfOrganization@ru}} 999 | 1000 | \newcommand{\@strings@DescriptionOfThesis@en}{DESCRIPTION OF THE GRADUATION THESIS} 1001 | \newcommand{\@strings@DescriptionOfThesis@ru}{ХАРАКТЕРИСТИКА ВЫПУСКНОЙ КВАЛИФИКАЦИОННОЙ РАБОТЫ} 1002 | \newcommand{\@strings@DescriptionOfThesis}{\@iflfe{\@strings@DescriptionOfThesis@en}{\@strings@DescriptionOfThesis@ru}} 1003 | 1004 | \newcommand{\@strings@ResearchObjective@en}{Research objective} 1005 | \newcommand{\@strings@ResearchObjective@ru}{Цель исследования} 1006 | \newcommand{\@strings@ResearchObjective}{\@iflfe{\@strings@ResearchObjective@en}{\@strings@ResearchObjective@ru}} 1007 | 1008 | \newcommand{\@strings@ResearchTasks@en}{Research tasks} 1009 | \newcommand{\@strings@ResearchTasks@ru}{Задачи, решаемые в ВКР} 1010 | \newcommand{\@strings@ResearchTasks}{\@iflfe{\@strings@ResearchTasks@en}{\@strings@ResearchTasks@ru}} 1011 | 1012 | \newcommand{\@strings@SourcesReview@en}{Number of sources listed in the review section} 1013 | \newcommand{\@strings@SourcesReview@ru}{Число источников, использованных при составлении обзора} 1014 | \newcommand{\@strings@SourcesReview}{\@iflfe{\@strings@SourcesReview@en}{\@strings@SourcesReview@ru}} 1015 | 1016 | \newcommand{\@strings@SourcesTotal@en}{Total number of sources used in the thesis} 1017 | \newcommand{\@strings@SourcesTotal@ru}{Полное число источников, использованных в работе} 1018 | \newcommand{\@strings@SourcesTotal}{\@iflfe{\@strings@SourcesTotal@en}{\@strings@SourcesTotal@ru}} 1019 | 1020 | \newcommand{\@strings@SourcesByYear@ru}{В том числе источников по годам} 1021 | \newcommand{\@strings@SourcesByYear@en}{Sources by years} 1022 | \newcommand{\@strings@SourcesByYear}{\@iflfe{\@strings@SourcesByYear@en}{\@strings@SourcesByYear@ru}} 1023 | 1024 | \newcommand{\@strings@OnlineResources@en}{Use of online (internet) resources} 1025 | \newcommand{\@strings@OnlineResources@ru}{Использование информационных ресурсов Internet} 1026 | \newcommand{\@strings@OnlineResources}{\@iflfe{\@strings@OnlineResources@en}{\@strings@OnlineResources@ru}} 1027 | 1028 | \newcommand{\@strings@UseOfSoftware@en}{Use of modern computer software suites and technologies} 1029 | \newcommand{\@strings@UseOfSoftware@ru}{Использование современных пакетов компьютерных программ и технологий} 1030 | \newcommand{\@strings@UseOfSoftware}{\@iflfe{\@strings@UseOfSoftware@en}{\@strings@UseOfSoftware@ru}} 1031 | 1032 | \newcommand{\@strings@ShortSummary@en}{Short summary of results/conclusions} 1033 | \newcommand{\@strings@ShortSummary@ru}{Краткая характеристика полученных результатов} 1034 | \newcommand{\@strings@ShortSummary}{\@iflfe{\@strings@ShortSummary@en}{\@strings@ShortSummary@ru}} 1035 | 1036 | \newcommand{\@strings@GrantsReceived@en}{Grants received while working on the thesis} 1037 | \newcommand{\@strings@GrantsReceived@ru}{Гранты, полученные при выполнении работы} 1038 | \newcommand{\@strings@GrantsReceived}{\@iflfe{\@strings@GrantsReceived@en}{\@strings@GrantsReceived@ru}} 1039 | 1040 | \newcommand{\@strings@ThesisPublications@en}{Have you produced any publications or conference reports on the topic of the thesis?} 1041 | \newcommand{\@strings@ThesisPublications@ru}{Наличие публикаций и выступлений на конференциях по теме выпускной работы} 1042 | \newcommand{\@strings@ThesisPublications}{\@iflfe{\@strings@ThesisPublications@en}{\@strings@ThesisPublications@ru}} 1043 | 1044 | %%% Локализуемый шаблон титульной страницы 1045 | \newcommand{\typeoutTitlePage}{\begin{titlepage} 1046 | \banhyphens 1047 | \begin{center}\theuniversity\end{center} 1048 | \vspace{0cm plus 0.66fill minus 0cm} 1049 | {\centering\bfseries\MakeUppercase{\@strings@ThesisName}\par} 1050 | \vspace{0cm plus 0.66fill minus 0cm} 1051 | {\centering\MakeUppercase{\thetitle}\par} 1052 | \vspace{0cm plus 1fill minus 0cm} 1053 | {\setlength{\tabcolsep}{3pt}\renewcommand{\arraystretch}{1.5} 1054 | \noindent\begin{tabularx}{\textwidth}{Xl} 1055 | & \@strings@Author: \theauthor \hfilll \signatureplace \\ 1056 | & \@strings@SubjectArea:\; 1057 | \begin{minipage}[t]{0.4\textwidth}\begin{flushleft}\thespecialty\end{flushleft}\end{minipage} \\ 1058 | & \@strings@DegreeLevel: \@strings@DegreeName \\ 1059 | & \@strings@ThesisSupervisorLong: \thesupervisorshort, \thesupervisordegree~ \hfilll \signatureplace \\ 1060 | \end{tabularx}\par} 1061 | \vspace{0cm plus 1fill minus 0cm} 1062 | \begin{center}\thecity, \theyear\@strings@yearend\end{center} 1063 | \end{titlepage}\begin{titlepage} 1064 | \banhyphens 1065 | \noindent\@strings@Student~\theauthor\;\par 1066 | \noindent\@strings@Group~\thestudygroup\; \@strings@FacultyOf~\thefaculty\par\bigskip\par 1067 | \noindent\@strings@SubjectAreaProgramMajor\par 1068 | \noindent\thespecialization \par\bigskip\par 1069 | \displayconsultants\bigskip\par\bigskip\par 1070 | \noindent\@strings@ThesisReceived~\unknowndate\par\bigskip\par 1071 | \noindent\@strings@OriginalityOfThesis~\uhspace{5ex}\%\par\bigskip\par 1072 | \noindent\@strings@ThesisCompletedWithGrade~\infiniteuhspace\par\bigskip\par 1073 | \noindent\@strings@DateOfDefense~\thedefencedate\par\bigskip\par 1074 | \noindent\@strings@SecretaryOfCommission~\thesecretary\hfill\signatureplace\par\bigskip\par 1075 | \noindent\@strings@NumberOfPages~\infiniteuhspace\par\bigskip\par 1076 | \noindent\@strings@NumberOfSupplementary~\infiniteuhspace\par\bigskip\par 1077 | \end{titlepage}} 1078 | 1079 | %%% Локализуемый шаблон задания 1080 | \newcommand{\typeoutSpecification}{\begin{titlepage} 1081 | \begin{center}\theuniversity\end{center} 1082 | \begin{small} 1083 | \noindent\begin{tabularx}{\textwidth}{Xl} 1084 | & \hfilll \textbf{\@strings@APPROVED} \hfilll\ \\ 1085 | & \@strings@HeadOfProgram\\ 1086 | & \theprogramheaddegree\ \theprogramhead\ \signatureplace \\ 1087 | & \unknowndate \\ 1088 | \end{tabularx} 1089 | \bigskip 1090 | \begin{center}\bfseries{\normalsize\@strings@OBJECTIVES@first}\\\@strings@OBJECTIVES@second\end{center} 1091 | \bigskip 1092 | \begingroup\banhyphens 1093 | \noindent \textbf{\@strings@Student}~\theauthor\;\par 1094 | \noindent \textbf{\@strings@Group}~\thestudygroup\; \textbf{\@strings@FacultyOf}~\thefaculty\;\par 1095 | \noindent \textbf{\@strings@DegreeLevel:} \@strings@DegreeName\par 1096 | \noindent \textbf{\@strings@SubjectArea:} \thespecialty\par 1097 | \noindent \textbf{\@strings@ProgramMajor:} \thespecialization\par 1098 | \noindent \textbf{\@strings@ThesisTitle:} \thetitle\par 1099 | \noindent \textbf{\@strings@ThesisSupervisor}~\thesupervisorshort, \thesupervisordegree, \thesupervisorwork\par 1100 | \endgroup 1101 | \noindent \textbf{2~\@strings@DeadlineForSubmission:} \thefinishdate \par 1102 | \noindent \textbf{3~\@strings@RequirementsAndPremise}\par \thetechnicalspec \par\pagebreak[3] 1103 | \noindent \textbf{4~\@strings@ContentOfTheThesis} \par \theplannedcontents\par\pagebreak[3] 1104 | \noindent \textbf{5~\@strings@ListOfGraphic} \par \theplannedgraphics\par\pagebreak[3] 1105 | \noindent \textbf{6~\@strings@SourceMaterials} \par \theplannedsources \par\pagebreak[3] 1106 | \noindent \textbf{7~\@strings@ObjectivesIssuedOn} \thestartdate \par\bigskip\par 1107 | \noindent\begingroup\renewcommand{\arraystretch}{1.5}\begin{tabular}{ll} 1108 | \@strings@ThesisSupervisorLong & \signatureplace \\ 1109 | \@strings@ObjectivesAssumed & \signatureplace ~ \thestartdate 1110 | \end{tabular}\endgroup 1111 | \end{small} 1112 | \end{titlepage}} 1113 | 1114 | %%% Локализуемый шаблон аннотации 1115 | \newcommand{\typeoutAnnotation}{\begin{titlepage} 1116 | \begin{center}\theuniversity\end{center} 1117 | {\centering\bfseries\@strings@ANNOTATION@first\par} 1118 | \begin{small} 1119 | {\centering\bfseries\@strings@ANNOTATION@second\par} 1120 | \bigskip 1121 | \noindent\textbf{\@strings@Student:} \theauthor\par 1122 | \noindent\textbf{\@strings@ThesisTitleLong:} \thetitle\par 1123 | \noindent\textbf{\@strings@NameOfOrganization:} \thedegreehost\par 1124 | \bigskip 1125 | {\centering\bfseries\@strings@DescriptionOfThesis\par} 1126 | \bigskip 1127 | \noindent1~\@strings@ResearchObjective: \theresearchaim\par\pagebreak[3] 1128 | \noindent2~\@strings@ResearchTasks: \theresearchtargets\par\pagebreak[3] 1129 | \noindent3~\@strings@SourcesReview: \relatedworksourcecount\par 1130 | \noindent4~\@strings@SourcesTotal: \total{citnum}\par 1131 | \noindent5~\@strings@SourcesByYear: \par\vspace{3pt} 1132 | \noindent\displaysourcepartition\par\vspace{6pt} 1133 | \noindent6~\@strings@OnlineResources: \internetsources\par\pagebreak[3] 1134 | \noindent7~\@strings@UseOfSoftware: \displayadvancedsoftware\pagebreak[3] 1135 | \noindent8~\@strings@ShortSummary\par\theresearchsummary\par\pagebreak[3]\vspace{1ex minus 1ex} 1136 | \noindent9~\@strings@GrantsReceived\par\theresearchfunding\par\pagebreak[3]\vspace{1ex minus 1ex} 1137 | \noindent10~\@strings@ThesisPublications\par\theresearchpublications\par\bigskip 1138 | \noindent\begingroup\renewcommand{\arraystretch}{1.5}\begin{tabular}{lll} 1139 | \@strings@Student & \theauthorshort & \signatureplace \\ 1140 | \@strings@ThesisSupervisorLong & \thesupervisorshort & \signatureplace \\ 1141 | \multicolumn{3}{l}{\unknowndate} 1142 | \end{tabular}\endgroup 1143 | \end{small} 1144 | \end{titlepage}} 1145 | 1146 | %%% Параметр: Бакалавр/Магистр 1147 | \renewcommand{\maketitle}[1]{ 1148 | \ifstrequal{#1}{Магистр}{ 1149 | \providecommand{\thespecialization@ru}{Технологии разработки программного обеспечения} 1150 | \providecommand{\thespecialty@ru}{01.04.02~Прикладная математика и информатика} 1151 | \providecommand{\thespecialization@en}{Technologies of software engineering} 1152 | \providecommand{\thespecialty@en}{01.04.02~Applied mathematics and informatics} 1153 | \providecommand{\@strings@DegreeName@ru}{Магистр} 1154 | \providecommand{\@strings@DegreeName@en}{Master} 1155 | }{ 1156 | \ifstrequal{#1}{Бакалавр}{ 1157 | \providecommand{\thespecialization@ru}{Информатика и программирование} 1158 | \providecommand{\thespecialty@ru}{01.03.02~Прикладная математика и информатика} 1159 | \providecommand{\thespecialization@en}{Computer science and programming} 1160 | \providecommand{\thespecialty@en}{01.03.02~Applied mathematics and informatics} 1161 | \providecommand{\@strings@DegreeName@ru}{Бакалавр} 1162 | \providecommand{\@strings@DegreeName@en}{Bachelor} 1163 | }{ 1164 | \ClassError{Unknown maketitle argument: #1, expected Магистр or Бакалавр} 1165 | } 1166 | } 1167 | 1168 | \pagenumbering{gobble} 1169 | \typeoutTitlePage 1170 | \if@shouldmaketitlepage@ru\begin{otherlanguage}{russian}\typeoutTitlePage\end{otherlanguage}\fi 1171 | \if@shouldmakespecification\typeoutSpecification\fi 1172 | \if@shouldmakespecification@ru\begin{otherlanguage}{russian}\typeoutSpecification\end{otherlanguage}\fi 1173 | \if@shouldmakeannotation\typeoutAnnotation\fi 1174 | \if@shouldmakeannotation@ru\begin{otherlanguage}{russian}\typeoutAnnotation\end{otherlanguage}\fi 1175 | \pagenumbering{arabic} 1176 | 1177 | %% Ставим номер страницы сверху по центру 1178 | \newcommand{\TheOnlyTruePageStyle}{fancy} 1179 | \pagestyle{\TheOnlyTruePageStyle} 1180 | \renewcommand{\headrulewidth}{0pt} 1181 | \renewcommand{\footrulewidth}{0pt} 1182 | \lhead{} 1183 | \chead{\thepage} 1184 | \rhead{} 1185 | \lfoot{} 1186 | \cfoot{} 1187 | \rfoot{} 1188 | \addtolength{\voffset}{3mm} 1189 | \addtolength{\headsep}{-3mm} 1190 | 1191 | \setcounter{page}{4} 1192 | % Выключаем переносы в оглавлении 1193 | \pretocmd{\tableofcontents}{\begingroup\banhyphens}{}{} 1194 | \apptocmd{\tableofcontents}{\endgroup}{}{} 1195 | } 1196 | 1197 | %% Веселый способ работать с метапостом 1198 | 1199 | \RequirePackage{ifpdf} 1200 | \ifpdf 1201 | \DeclareGraphicsRule{.1}{mps}{*}{} 1202 | \DeclareGraphicsRule{.2}{mps}{*}{} 1203 | \DeclareGraphicsRule{.3}{mps}{*}{} 1204 | \DeclareGraphicsRule{.4}{mps}{*}{} 1205 | \DeclareGraphicsRule{.5}{mps}{*}{} 1206 | \DeclareGraphicsRule{.6}{mps}{*}{} 1207 | \DeclareGraphicsRule{.7}{mps}{*}{} 1208 | \DeclareGraphicsRule{.8}{mps}{*}{} 1209 | \DeclareGraphicsRule{.9}{mps}{*}{} 1210 | \DeclareGraphicsRule{.10}{mps}{*}{} 1211 | \DeclareGraphicsRule{.11}{mps}{*}{} 1212 | \DeclareGraphicsRule{.12}{mps}{*}{} 1213 | \DeclareGraphicsRule{.13}{mps}{*}{} 1214 | \DeclareGraphicsRule{.14}{mps}{*}{} 1215 | \DeclareGraphicsRule{.15}{mps}{*}{} 1216 | \DeclareGraphicsRule{.16}{mps}{*}{} 1217 | \DeclareGraphicsRule{.17}{mps}{*}{} 1218 | \DeclareGraphicsRule{.18}{mps}{*}{} 1219 | \DeclareGraphicsRule{.19}{mps}{*}{} 1220 | \DeclareGraphicsRule{.20}{mps}{*}{} 1221 | \fi 1222 | -------------------------------------------------------------------------------- /itmo-student-thesis/master-thesis-en.tex: -------------------------------------------------------------------------------- 1 | \documentclass[times, % the default MS fonts which the commission likes 2 | specification,annotation, % generate aux pages in the primary language 3 | titlepage-extra-ru,specification-extra-ru,annotation-extra-ru, % generate aux pages + title in Russian 4 | languages={russian,english} % sets English as the primary language and also loads Russian 5 | ]{itmo-student-thesis} 6 | 7 | %% Package options: 8 | %% - times: uses the Microsoft "corefonts" for everything, uses xelatex 9 | %% - specification: when present, generates the "objectives" page, aka specification, in primary language, which is English in this example 10 | %% - annotation: when present, generates the "summary" page, aka annotation, in primary language, which is English in this example 11 | %% - titlepage-extra-ru: when present, generates the title page in Russian 12 | %% - specification-extra-ru: when present, generates the "objectives" page, aka specification, in Russian 13 | %% - annotation-extra-ru: when present, generates the "summary" page, aka annotation, in Russian 14 | %% - languages={...}: sets the languages used in this document. 15 | %% This is passed directly to babel. If it is just the comma-separated list of languages, the last language becomes the primary one. 16 | %% It must include Russian at least to generate "extra-ru" pages, although not including it may break things. 17 | 18 | %% The packages and \begin{filecontents}...\end{filecontents} are for illustrative purposes only. 19 | %% Instead of filecontents, please consider using a normal bibliography file. 20 | \usepackage{tikz} 21 | \usetikzlibrary{arrows} 22 | \usepackage{filecontents} 23 | \begin{filecontents}{master-thesis.bib} 24 | @incollection{ nsga-ii-steady-state, 25 | year = {2009}, 26 | booktitle = {Nature-Inspired Algorithms for Optimisation}, 27 | number = {193}, 28 | series = {Studies in Computational Intelligence}, 29 | title = {On the Effect of Applying a Steady-State Selection Scheme in the Multi-Objective Genetic Algorithm {NSGA}-{II}}, 30 | publisher = {Springer Berlin Heidelberg}, 31 | author = {Nebro, Antonio J. and Durillo, Juan J.}, 32 | pages = {435-456}, 33 | langid = {english} 34 | } 35 | 36 | @inproceedings{ example-english, 37 | year = {2015}, 38 | booktitle = {Proceedings of IEEE Congress on Evolutionary Computation}, 39 | author = {Maxim Buzdalov and Anatoly Shalyto}, 40 | title = {Hard Test Generation for Augmenting Path Maximum Flow 41 | Algorithms using Genetic Algorithms: Revisited}, 42 | pages = {2121-2128}, 43 | langid = {english} 44 | } 45 | 46 | @article{ example-russian, 47 | author = {Максим Викторович Буздалов}, 48 | title = {Генерация тестов для олимпиадных задач по программированию 49 | с использованием генетических алгоритмов}, 50 | journal = {Научно-технический вестник {СПбГУ} {ИТМО}}, 51 | number = {2(72)}, 52 | year = {2011}, 53 | pages = {72-77}, 54 | langid = {russian} 55 | } 56 | 57 | @article{ unrestricted-jump-evco, 58 | author = {Maxim Buzdalov and Benjamin Doerr and Mikhail Kever}, 59 | title = {The Unrestricted Black-Box Complexity of Jump Functions}, 60 | journal = {Evolutionary Computation}, 61 | year = {2016}, 62 | note = {Accepted for publication}, 63 | langid = {english} 64 | } 65 | 66 | @book{ bellman, 67 | author = {R. E. Bellman}, 68 | title = {Dynamic Programming}, 69 | address = {Princeton, NJ}, 70 | publisher = {Princeton University Press}, 71 | numpages = {342}, 72 | pagetotal = {342}, 73 | year = {1957}, 74 | langid = {english} 75 | } 76 | \end{filecontents} 77 | %% The end of "illustrative purposes only" 78 | 79 | %% Point to the file with the bibliography. Multiple resources are allowed, including URLs with online bases. 80 | \addbibresource{master-thesis.bib} 81 | 82 | \begin{document} 83 | 84 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 85 | % % 86 | % There are two kinds of definitions. The first one consists of normal language-agnostic definitions. % 87 | % The definitions of the second kind perform different things under the hood depending on the language. % 88 | % The latter should typically appear twice: % 89 | % - once in English, just as the normal ones, just inside \begin{document}; % 90 | % - once in Russian between \{selectlanguage}{russian} and \selectlanguage{english}. % 91 | % % 92 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 93 | 94 | % Language-agnostic definitions 95 | 96 | \studygroup{M4239} % mandatory 97 | \publishyear{2019} % mandatory 98 | \startdate{01}{September}{2017} % optional; if not present, must be filled in by hand in the printout. 99 | \finishdate{31}{May}{2019} % -- " -- 100 | \defencedate{15}{June}{2019} % -- " -- 101 | 102 | % Language-dependent definitions, English copy 103 | 104 | \title{Example of the master's thesis} 105 | \author{Buzdalov Maksim Viktorovich}{Buzdalov M.V.} 106 | \supervisor{Shalyto Anatoly Abramovich}{Shalyto A.A.}{prof., doct. sci.}{chief research fellow, ITMO University} 107 | 108 | \addconsultant{Belashenkov N.R.}{PhD} % optional; no consulants is a typical situation, do not worry. 109 | \addconsultant{Bezzubik V.V.}{no degree} 110 | 111 | \secretary{Pavlova O.N.} 112 | 113 | %% Objectives/Specification 114 | 115 | %%% Requirements and premise 116 | \technicalspec{It is requried to develop a \LaTeX\ classfile, which enables convenient typesetting of Bachelor's and Master's theses 117 | at the former Computer Technologies department in ITMO University. This classfile shall produce the title page, the page with objectives and summary, 118 | as well as the main body of the text; the former three shall also be generated in Russian according to the official guildelines. 119 | The main body shall closely follow the GOST~7.0.11-2011 standard on dissertations, while the other parts shall closely follow the existing Word-based 120 | templates.} 121 | 122 | %%% Content of the thesis 123 | \plannedcontents{The main body shall test the usage of the most frequent text elements, including enumerations, figures, tables, listings (including pseudocode). 124 | The structure of the main body shall also serve as the unit test, e.g. one shall be able to validate the correctness of the classfile by just looking at it. 125 | In particular, the main body shall contain at least two appendices (in order to validate that figures and tables have chapter-based numbering in appendices) 126 | and at least ten enumeration items at the first level (to check whether illegal letters do not appear).} 127 | 128 | %%% Исходные материалы и пособия 129 | \plannedsources{\begin{enumerate} 130 | \item GOST~7.0.11-2011 <>; 131 | \item Lvovskiy M., Typesetting in \LaTeX; 132 | \item the previous pack of style files, which has been used some ten years ago. 133 | \end{enumerate}} 134 | 135 | %% Summary/Annotation 136 | 137 | %%% Research objective 138 | \researchaim{Development of a convenient \LaTeX\ classfile for bachelors and masters of the former Computer Technologies department.} 139 | 140 | %%% Research tasks 141 | \researchtargets{\begin{enumerate} 142 | \item closely mimicking the existing templates for a title page, specification/objectives, annotation/summary; 143 | \item closely following the GOST~7.0.11-2011 standard in the main body of the text; 144 | \item ensuring reasonable convenience, in particular, specifying multiple-occuring data once, counting sources by types where necessary, etc. 145 | \end{enumerate}} 146 | 147 | %%% Use of modern software suites 148 | \addadvancedsoftware{The \texttt{tabularx} package for slighly more powerful tables}{\ref{sec:tables}, Appendices~\ref{sec:app:1}, \ref{sec:app:2}} 149 | \addadvancedsoftware{The \texttt{biblatex} package and the \texttt{biber} program}{References} 150 | 151 | %%% Short summary of results 152 | \researchsummary{The previous, Russian-only classfile gained some noticeable use in years 2015--2018. 153 | This probably means that it is reasonably well-done. The current bi-lingual version is slightly more cumbersome, 154 | although it is source-compatible with the previous one, which is good.} 155 | 156 | %%% Grants received while working 157 | \researchfunding{I would like to thank the aunties at ITMO University who constantly make small changes to the original template, 158 | including using some of the obscure Word features and making more new mistakes, as my life would otherwise be not so filled with the shear beauty of being. 159 | The original ideas were developed while I prepared my PhD thesis in \LaTeX, as well as tons of scientific reports 160 | for various stages of the ``5-in-100'' grant of the Ministry of Science and Higher Education (project 08-08).} 161 | 162 | %%% Publications on the topic of the thesis: do you have any? 163 | \researchpublications{No, I have not (thankfully!) published anything about this thesis. 164 | \begin{refsection} 165 | However, I am going to show here how you can refer to your own publications: 166 | \nocite{example-english, example-russian} 167 | \printannobibliography 168 | \end{refsection} 169 | } 170 | 171 | % Language-dependent definitions, Russian copy 172 | 173 | \selectlanguage{russian} 174 | \typeout{DEBUG BEGIN RUSSIAN SECTION} 175 | \title{Пример оформления ВКР магистра} 176 | \author{Буздалов Максим Викторович}{Буздалов М.В.} 177 | \supervisor{Шалыто Анатолий Абрамович}{Шалыто А.А.}{проф., д.т.н.}{главный научный сотрудник Университета ИТМО} 178 | 179 | \addconsultant{Белашенков Н.Р.}{канд. физ.-мат. наук, без звания} 180 | \addconsultant{Беззубик В.В.}{без степени, без звания} 181 | 182 | \secretary{Павлова О.Н.} 183 | 184 | %% Задание 185 | %%% Техническое задание и исходные данные к работе 186 | \technicalspec{Требуется разработать стилевой файл для системы \LaTeX, позволяющий оформлять бакалаврские работы и магистерские диссертации 187 | на кафедре компьютерных технологий Университета ИТМО. Стилевой файл должен генерировать титульную страницу пояснительной записки, 188 | задание, аннотацию и содержательную часть пояснительной записк. Первые три документа должны максимально близко соответствовать шаблонам документов, 189 | принятым в настоящий момент на кафедре, в то время как содержательная часть должна максимально близко соответствовать ГОСТ~7.0.11-2011 190 | на диссертацию.} 191 | 192 | %%% Содержание выпускной квалификационной работы (перечень подлежащих разработке вопросов) 193 | \plannedcontents{Пояснительная записка должна демонстрировать использование наиболее типичных конструкций, возникающих при составлении 194 | пояснительной записки (перечисления, рисунки, таблицы, листинги, псевдокод), при этом должна быть составлена так, что демонстрируется 195 | корректность работы стилевого файла. В частности, записка должна содержать не менее двух приложений (для демонстрации нумерации рисунков и таблиц 196 | по приложениям согласно ГОСТ) и не менее десяти элементов нумерованного перечисления первого уровня вложенности (для демонстрации корректности 197 | используемого при нумерации набора русских букв).} 198 | 199 | %%% Исходные материалы и пособия 200 | \plannedsources{\begin{enumerate} 201 | \item ГОСТ~7.0.11-2011 <<Диссертация и автореферат диссертации>>; 202 | \item С.М. Львовский. Набор и верстка в системе \LaTeX; 203 | \item предыдущий комплект стилевых файлов, использовавшийся на кафедре компьютерных технологий. 204 | \end{enumerate}} 205 | 206 | %% Аннотация 207 | %%% Цель исследования 208 | \researchaim{Разработка удобного стилевого файла \LaTeX\ для бакалавров и магистров кафедры компьютерных технологий.} 209 | 210 | %%% Задачи, решаемые в ВКР 211 | \researchtargets{\begin{enumerate} 212 | \item обеспечение соответствия титульной страницы, задания и аннотации шаблонам, принятым в настоящее время на кафедре; 213 | \item обеспечение соответствия содержательной части пояснительной записки требованиям ГОСТ~7.0.11-2011 <<Диссертация и автореферат диссертации>>; 214 | \item обеспечение относительного удобства в использовании~--- указание данных об авторе и научном руководителе один раз и в одном месте, автоматический подсчет числа тех или иных источников. 215 | \end{enumerate}} 216 | 217 | %%% Использование современных пакетов компьютерных программ и технологий 218 | \addadvancedsoftware{Пакет \texttt{tabularx} для чуть более продвинутых таблиц}{\ref{sec:tables}, Приложения~\ref{sec:app:1}, \ref{sec:app:2}} 219 | \addadvancedsoftware{Пакет \texttt{biblatex} и программное средство \texttt{biber}}{Список использованных источников} 220 | 221 | %%% Краткая характеристика полученных результатов 222 | \researchsummary{Получился, надо сказать, практически неплохой стилевик. В 2015--2018 годах 223 | его уже использовали некоторые бакалавры и магистры. Надеюсь на продолжение.} 224 | 225 | %%% Гранты, полученные при выполнении работы 226 | \researchfunding{Автор разрабатывал этот стилевик исключительно за свой счет и на 227 | добровольных началах. Однако значительная его часть была бы невозможна, если бы 228 | автор не написал в свое время кандидатскую диссертацию в \LaTeX, 229 | а также не отвечал за формирование кучи научно-технических отчетов по гранту, 230 | известному как <<5-в-100>>, что происходило при государственной финансовой поддержке 231 | ведущих университетов Российской Федерации (субсидия 074-U01).} 232 | 233 | %%% Наличие публикаций и выступлений на конференциях по теме выпускной работы 234 | \researchpublications{По теме этой работы я (к счастью!) ничего не публиковал. 235 | \begin{refsection} 236 | Однако покажу, как можно ссылаться на свои публикации из списка литературы: 237 | \nocite{example-english, example-russian} 238 | \printannobibliography 239 | \end{refsection} 240 | } 241 | \typeout{DEBUG END RUSSIAN SECTION} 242 | \selectlanguage{english} 243 | 244 | %% This generates the aux documents. Possible args are "Магистр" and "Бакалавр", in Russian. 245 | \maketitle{Магистр} 246 | 247 | \tableofcontents 248 | 249 | \startprefacepage 250 | 251 | Here be the introduction. 252 | 253 | %% The main body begins 254 | \chapter{The first chapter} 255 | 256 | %% This makes the beginning of the "review section" 257 | \startrelatedwork 258 | An example of references that make up the related work aka the ``review section'': \cite{example-english, example-russian, unrestricted-jump-evco, nsga-ii-steady-state}. 259 | %% This makes the end of the "review section" 260 | \finishrelatedwork 261 | This reference will not make it into the related work:~\cite{bellman}. 262 | 263 | \section{Tables}\label{sec:tables} 264 | 265 | Our example of a table is Table~\ref{tab1}. 266 | 267 | \begin{table}[!h] 268 | \caption{The multiplication table (a fragment)}\label{tab1} 269 | \centering 270 | \begin{tabular}{|*{18}{c|}}\hline 271 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 272 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 273 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 274 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 275 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 276 | \end{tabular} 277 | \end{table} 278 | 279 | There exists the more advanced \texttt{tabularx} environment, which can be stretched to the page width. 280 | Here is the example (Table~\ref{tab2}). 281 | 282 | \begin{table}[!h] 283 | \caption{The multiplication table in \texttt{tabularx} (a fragment)}\label{tab2} 284 | \centering 285 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 286 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 287 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 288 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 289 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 290 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 291 | \end{tabularx} 292 | \end{table} 293 | 294 | \section{Figures} 295 | 296 | An example of a figure (implemented in \texttt{TikZ}) is given as Figure~\ref{fig1}. 297 | With \texttt{pdf}-related \LaTeX drivers one may also use 298 | \texttt{*.jpg}, \texttt{*.png} and even \texttt{*.pdf}. With plain \texttt{latex} one typically uses Metapost. 299 | The latter can also be used under \texttt{pdflatex}/\texttt{xetex}, for which reason 300 | the classfile contains the appropriate boilerplate for figures 1 to 20. 301 | 302 | \begin{figure}[!h] 303 | \caption{An example of a figure}\label{fig1} 304 | \centering 305 | \begin{tikzpicture}[scale=0.7] 306 | \draw[thick,->] (0,0)--(3.5,0); 307 | \draw[thick,->] (0,0)--(0,3.5); 308 | \draw[very thick, red] (0,0)--(3,3); 309 | \draw[dashed] (3,0)--(3,3); 310 | \draw[dashed] (1.5,0)--(1.5,1.5); 311 | \end{tikzpicture} 312 | \end{figure} 313 | 314 | \section{Listings} 315 | 316 | There are two basic forms of listings: the source code listings and the pseudocodes. 317 | The first can be typeset using the \texttt{lstlisting} environment from the \texttt{listings} package, 318 | which is included into the classfile and slightly tuned for you. 319 | The example of the ``Hello, World!'' program in Java is given in Listing~\ref{lst1}. 320 | An example of a very big listing spanning multiple pages is given in the appendix (Listing~\ref{lstX}). 321 | 322 | \begin{lstlisting}[float=!h,caption={An example of the source code in Java},label={lst1}] 323 | public class HelloWorld { 324 | public static void main(String[] args) { 325 | System.out.println("Hello, world!"); 326 | } 327 | } 328 | \end{lstlisting} 329 | 330 | The pseudocode can be typeset using a large variety of packages. This classfile has the \texttt{algorithmicx} package preconfigured. 331 | As it does not generate floating environments on its own, the \texttt{algorithm} package is also included. 332 | An example of them being used together is given in Listing~\ref{lst2}. 333 | 334 | \begin{algorithm}[!h] 335 | \caption{An example of the pseudocode}\label{lst2} 336 | \begin{algorithmic} 337 | \Function{IsPrime}{$N$} 338 | \For{$t \gets [2; \lfloor\sqrt{N}\rfloor]$} 339 | \If{$N \bmod t = 0$} 340 | \State\Return \textsc{false} 341 | \EndIf 342 | \EndFor 343 | \State\Return \textsc{true} 344 | \EndFunction 345 | \end{algorithmic} 346 | \end{algorithm} 347 | 348 | Just as a proof of concept, one can also float listings by \texttt{listings} using \texttt{algorithm}, 349 | of which an example is given in Listing~\ref{lst3}. 350 | 351 | \begin{algorithm}[!h] 352 | \caption{\texttt{listings} meet \texttt{algorithm}}\label{lst3} 353 | \begin{lstlisting} 354 | public class HelloWorld { 355 | public static void main(String[] args) { 356 | System.out.println("Hello, world!"); 357 | } 358 | } 359 | \end{lstlisting} 360 | \end{algorithm} 361 | 362 | \chapter{Validation of float numbering} 363 | 364 | Listing~\ref{lst4} shall have number~4. 365 | 366 | \begin{algorithm}[!h] 367 | \caption{\texttt{listings} meet \texttt{algorithm}}\label{lst4} 368 | \begin{lstlisting} 369 | public class HelloWorld { 370 | public static void main(String[] args) { 371 | System.out.println("Hello, world!"); 372 | } 373 | } 374 | \end{lstlisting} 375 | \end{algorithm} 376 | 377 | Figure~\ref{fig2} shall have number~2. 378 | 379 | \begin{figure}[!h] 380 | \caption{An example of a figure}\label{fig2} 381 | \centering 382 | \begin{tikzpicture}[scale=0.7] 383 | \draw[thick,->] (0,0)--(3.5,0); 384 | \draw[thick,->] (0,0)--(0,3.5); 385 | \draw[very thick, red] (0,0)--(3,3); 386 | \draw[dashed] (3,0)--(3,3); 387 | \draw[dashed] (1.5,0)--(1.5,1.5); 388 | \end{tikzpicture} 389 | \end{figure} 390 | 391 | Table~\ref{tab3} shall have number~3. 392 | 393 | \begin{table}[!h] 394 | \caption{The multiplication table in \texttt{tabularx} (a fragment)}\label{tab3} 395 | \centering 396 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 397 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 398 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 399 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 400 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 401 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 402 | \end{tabularx} 403 | \end{table} 404 | 405 | \chapterconclusion 406 | 407 | One shall typically make conclusions at the end of each chapter. From this chapter, we can conclude that 408 | the numbering is correct, hooray! 409 | 410 | \startconclusionpage 411 | 412 | Here be the conclusion. 413 | 414 | \printmainbibliography 415 | 416 | \appendix 417 | 418 | \chapter{An example of an appendix}\label{sec:app:1} 419 | 420 | The appendices shall have all the floats numbered within each ``chapter''. Let's check it. 421 | 422 | Listing~\ref{lst4:apx} shall have number~A.1. 423 | 424 | \begin{algorithm}[!h] 425 | \caption{\texttt{listings} meet \texttt{algorithm}}\label{lst4:apx} 426 | \begin{lstlisting} 427 | public class HelloWorld { 428 | public static void main(String[] args) { 429 | System.out.println("Hello, world!"); 430 | } 431 | } 432 | \end{lstlisting} 433 | \end{algorithm} 434 | 435 | Figure~\ref{fig2:apx} shall have number~A.1. 436 | 437 | \begin{figure}[!h] 438 | \caption{An example of a figure}\label{fig2:apx} 439 | \centering 440 | \begin{tikzpicture}[scale=0.7] 441 | \draw[thick,->] (0,0)--(3.5,0); 442 | \draw[thick,->] (0,0)--(0,3.5); 443 | \draw[very thick, red] (0,0)--(3,3); 444 | \draw[dashed] (3,0)--(3,3); 445 | \draw[dashed] (1.5,0)--(1.5,1.5); 446 | \end{tikzpicture} 447 | \end{figure} 448 | 449 | Table~\ref{tab3:apx} shall have number~A.1. 450 | 451 | \begin{table}[!h] 452 | \caption{The multiplication table in \texttt{tabularx} (a fragment)}\label{tab3:apx} 453 | \centering 454 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 455 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 456 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 457 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 458 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 459 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 460 | \end{tabularx} 461 | \end{table} 462 | 463 | Let's also check the enumerations. The unnumbered ones (the \texttt{itemize} environment): 464 | \begin{itemize} 465 | \item item A; 466 | \item item B; 467 | \item item C; 468 | \end{itemize} 469 | 470 | The numbered ones. 471 | \begin{enumerate} 472 | \item the first element; 473 | \item the second element, but we need to go deeper: 474 | \begin{enumerate} 475 | \item the first subelement; 476 | \item the second subelement; 477 | \item the third subelement; 478 | \end{enumerate} 479 | \item the third element; 480 | \item the fourth element; 481 | \item the fifth element (!); 482 | \item the sixth element; 483 | \item the seventh element; 484 | \item the eighth element; 485 | \item the ninth element; 486 | \item the tenth element. 487 | \end{enumerate} 488 | 489 | \chapter{Yet another example of an appendix, whose long title checks the requirement of GOST, which forbids hyphenation in the titles, as well as in the Table of Contents}\label{sec:app:2} 490 | 491 | Let's check, using tables as an example, that floats in appendices are really numbered by ``chapters''. 492 | Table~\ref{tab3:apx2} shall have number~B.1. 493 | 494 | \begin{table}[!h] 495 | \caption{The multiplication table in \texttt{tabularx} (a fragment)}\label{tab3:apx2} 496 | \centering 497 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 498 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 499 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 500 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 501 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 502 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 503 | \end{tabularx} 504 | \end{table} 505 | 506 | \chapter{An example of a large listing spanning multiple pages} 507 | 508 | \begin{lstlisting}[caption={A very big listing},label={lstX}] 509 | import java.util.*; 510 | 511 | public class Example { 512 | static int[] restoreOutgoing(int[] g, int[] outgoing, 513 | int vertex, int mask) { 514 | int[] rv = new int[1 + Integer.bitCount(mask)]; 515 | int n = g.length; 516 | int current = rv.length - 1; 517 | while (true) { 518 | rv[current] = vertex; 519 | if (current == 0) { 520 | if (vertex != 0) { 521 | throw new AssertionError(); 522 | } 523 | return rv; 524 | } 525 | mask ^= 1 << (vertex - 1); 526 | int prevMask = outgoing[mask] & g[vertex]; 527 | if (prevMask == 0) { 528 | throw new AssertionError(); 529 | } 530 | vertex = Integer.numberOfTrailingZeros(prevMask); 531 | --current; 532 | } 533 | } 534 | 535 | static int[] restoreIncoming(int[] g, int[] incoming, 536 | int vertex, int mask) { 537 | int[] rv = new int[1 + Integer.bitCount(mask)]; 538 | int n = g.length; 539 | int current = 0; 540 | while (true) { 541 | rv[current] = vertex; 542 | if (current == rv.length - 1) { 543 | if (vertex != 0) { 544 | throw new AssertionError(); 545 | } 546 | return rv; 547 | } 548 | mask ^= 1 << (vertex - 1); 549 | int nextMask = incoming[mask] & g[vertex]; 550 | if (nextMask == 0) { 551 | throw new AssertionError(); 552 | } 553 | vertex = Integer.numberOfTrailingZeros(nextMask); 554 | ++current; 555 | } 556 | } 557 | } 558 | \end{lstlisting} 559 | 560 | \end{document} 561 | -------------------------------------------------------------------------------- /itmo-student-thesis/master-thesis.tex: -------------------------------------------------------------------------------- 1 | \documentclass[specification,annotation,times]{itmo-student-thesis} 2 | 3 | %% Опции пакета: 4 | %% - specification - если есть, генерируется задание, иначе не генерируется 5 | %% - annotation - если есть, генерируется аннотация, иначе не генерируется 6 | %% - times - делает все шрифтом Times New Roman, собирается с помощью xelatex 7 | %% - languages={...} - устанавливает перечень используемых языков. По умолчанию это {english,russian}. 8 | %% Последний из языков определяет текст основного документа. 9 | 10 | %% Делает запятую в формулах более интеллектуальной, например: 11 | %% $1,5x$ будет читаться как полтора икса, а не один запятая пять иксов. 12 | %% Однако если написать $1, 5x$, то все будет как прежде. 13 | \usepackage{icomma} 14 | 15 | %% Один из пакетов, позволяющий делать таблицы на всю ширину текста. 16 | \usepackage{tabularx} 17 | 18 | %% Данные пакеты необязательны к использованию в бакалаврских/магистерских 19 | %% Они нужны для иллюстративных целей 20 | %% Начало 21 | \usepackage{tikz} 22 | \usetikzlibrary{arrows} 23 | \usepackage{filecontents} 24 | \begin{filecontents}{master-thesis.bib} 25 | @incollection{ nsga-ii-steady-state, 26 | year = {2009}, 27 | booktitle = {Nature-Inspired Algorithms for Optimisation}, 28 | number = {193}, 29 | series = {Studies in Computational Intelligence}, 30 | title = {On the Effect of Applying a Steady-State Selection Scheme in the Multi-Objective Genetic Algorithm {NSGA}-{II}}, 31 | publisher = {Springer Berlin Heidelberg}, 32 | author = {Nebro, Antonio J. and Durillo, Juan J.}, 33 | pages = {435-456}, 34 | langid = {english} 35 | } 36 | 37 | 38 | @inproceedings{ example-english, 39 | year = {2015}, 40 | booktitle = {Proceedings of IEEE Congress on Evolutionary Computation}, 41 | author = {Maxim Buzdalov and Anatoly Shalyto}, 42 | title = {Hard Test Generation for Augmenting Path Maximum Flow 43 | Algorithms using Genetic Algorithms: Revisited}, 44 | pages = {2121-2128}, 45 | langid = {english} 46 | } 47 | 48 | @article{ example-russian, 49 | author = {Максим Викторович Буздалов}, 50 | title = {Генерация тестов для олимпиадных задач по программированию 51 | с использованием генетических алгоритмов}, 52 | journal = {Научно-технический вестник {СПбГУ} {ИТМО}}, 53 | number = {2(72)}, 54 | year = {2011}, 55 | pages = {72-77}, 56 | langid = {russian} 57 | } 58 | 59 | @article{ unrestricted-jump-evco, 60 | author = {Maxim Buzdalov and Benjamin Doerr and Mikhail Kever}, 61 | title = {The Unrestricted Black-Box Complexity of Jump Functions}, 62 | journal = {Evolutionary Computation}, 63 | year = {2016}, 64 | note = {Accepted for publication}, 65 | langid = {english} 66 | } 67 | 68 | @book{ bellman, 69 | author = {R. E. Bellman}, 70 | title = {Dynamic Programming}, 71 | address = {Princeton, NJ}, 72 | publisher = {Princeton University Press}, 73 | numpages = {342}, 74 | pagetotal = {342}, 75 | year = {1957}, 76 | langid = {english} 77 | } 78 | \end{filecontents} 79 | %% Конец 80 | 81 | %% Указываем файл с библиографией. 82 | \addbibresource{master-thesis.bib} 83 | 84 | \begin{document} 85 | 86 | \studygroup{M4239} 87 | \title{Пример оформления ВКР магистра} 88 | \author{Буздалов Максим Викторович}{Буздалов М.В.} 89 | \supervisor{Шалыто Анатолий Абрамович}{Шалыто А.А.}{проф., д.т.н.}{главный научный сотрудник Университета ИТМО} 90 | \publishyear{2019} 91 | %% Дата выдачи задания. Можно не указывать, тогда надо будет заполнить от руки. 92 | \startdate{01}{сентября}{2017} 93 | %% Срок сдачи студентом работы. Можно не указывать, тогда надо будет заполнить от руки. 94 | \finishdate{31}{мая}{2019} 95 | %% Дата защиты. Можно не указывать, тогда надо будет заполнить от руки. 96 | \defencedate{15}{июня}{2019} 97 | 98 | \addconsultant{Белашенков Н.Р.}{канд. физ.-мат. наук, без звания} 99 | \addconsultant{Беззубик В.В.}{без степени, без звания} 100 | 101 | \secretary{Павлова О.Н.} 102 | 103 | %% Задание 104 | %%% Техническое задание и исходные данные к работе 105 | \technicalspec{Требуется разработать стилевой файл для системы \LaTeX, позволяющий оформлять бакалаврские работы и магистерские диссертации 106 | на кафедре компьютерных технологий Университета ИТМО. Стилевой файл должен генерировать титульную страницу пояснительной записки, 107 | задание, аннотацию и содержательную часть пояснительной записк. Первые три документа должны максимально близко соответствовать шаблонам документов, 108 | принятым в настоящий момент на кафедре, в то время как содержательная часть должна максимально близко соответствовать ГОСТ~7.0.11-2011 109 | на диссертацию.} 110 | 111 | %%% Содержание выпускной квалификационной работы (перечень подлежащих разработке вопросов) 112 | \plannedcontents{Пояснительная записка должна демонстрировать использование наиболее типичных конструкций, возникающих при составлении 113 | пояснительной записки (перечисления, рисунки, таблицы, листинги, псевдокод), при этом должна быть составлена так, что демонстрируется 114 | корректность работы стилевого файла. В частности, записка должна содержать не менее двух приложений (для демонстрации нумерации рисунков и таблиц 115 | по приложениям согласно ГОСТ) и не менее десяти элементов нумерованного перечисления первого уровня вложенности (для демонстрации корректности 116 | используемого при нумерации набора русских букв).} 117 | 118 | %%% Исходные материалы и пособия 119 | \plannedsources{\begin{enumerate} 120 | \item ГОСТ~7.0.11-2011 <<Диссертация и автореферат диссертации>>; 121 | \item С.М. Львовский. Набор и верстка в системе \LaTeX; 122 | \item предыдущий комплект стилевых файлов, использовавшийся на кафедре компьютерных технологий. 123 | \end{enumerate}} 124 | 125 | %%% Цель исследования 126 | \researchaim{Разработка удобного стилевого файла \LaTeX 127 | для бакалавров и магистров кафедры компьютерных технологий.} 128 | 129 | %%% Задачи, решаемые в ВКР 130 | \researchtargets{\begin{enumerate} 131 | \item обеспечение соответствия титульной страницы, задания и аннотации шаблонам, принятым в настоящее время на кафедре; 132 | \item обеспечение соответствия содержательной части пояснительной записки требованиям ГОСТ~7.0.11-2011 <<Диссертация и автореферат диссертации>>; 133 | \item обеспечение относительного удобства в использовании~--- указание данных об авторе и научном руководителе один раз и в одном месте, автоматический подсчет числа тех или иных источников. 134 | \end{enumerate}} 135 | 136 | %%% Использование современных пакетов компьютерных программ и технологий 137 | \addadvancedsoftware{Пакет \texttt{tabularx} для чуть более продвинутых таблиц}{\ref{sec:tables}, Приложения~\ref{sec:app:1}, \ref{sec:app:2}} 138 | \addadvancedsoftware{Пакет \texttt{biblatex} и программное средство \texttt{biber}}{Список использованных источников} 139 | 140 | %%% Краткая характеристика полученных результатов 141 | \researchsummary{Получился, надо сказать, практически неплохой стилевик. В 2015--2018 годах 142 | его уже использовали некоторые бакалавры и магистры. Надеюсь на продолжение.} 143 | 144 | %%% Гранты, полученные при выполнении работы 145 | \researchfunding{Автор разрабатывал этот стилевик исключительно за свой счет и на 146 | добровольных началах. Однако значительная его часть была бы невозможна, если бы 147 | автор не написал в свое время кандидатскую диссертацию в \LaTeX, 148 | а также не отвечал за формирование кучи научно-технических отчетов по гранту, 149 | известному как <<5-в-100>>, что происходило при государственной финансовой поддержке 150 | ведущих университетов Российской Федерации (субсидия 074-U01).} 151 | 152 | %%% Наличие публикаций и выступлений на конференциях по теме выпускной работы 153 | \researchpublications{По теме этой работы я (к счастью!) ничего не публиковал. 154 | \begin{refsection} 155 | Однако покажу, как можно ссылаться на свои публикации из списка литературы: 156 | \nocite{example-english, example-russian} 157 | \printannobibliography 158 | \end{refsection} 159 | } 160 | 161 | %% Эта команда генерирует титульный лист и аннотацию. 162 | \maketitle{Магистр} 163 | 164 | %% Оглавление 165 | \tableofcontents 166 | 167 | %% Макрос для введения. Совместим со старым стилевиком. 168 | \startprefacepage 169 | 170 | В данном разделе размещается введение. 171 | 172 | %% Начало содержательной части. 173 | \chapter{Первая глава} 174 | 175 | %% Так помечается начало обзора. 176 | \startrelatedwork 177 | Пример ссылок в рамках обзора: \cite{example-english, example-russian, unrestricted-jump-evco, nsga-ii-steady-state}. 178 | %% Так помечается конец обзора. 179 | \finishrelatedwork 180 | Вне обзора:~\cite{bellman}. 181 | 182 | \section{Таблицы}\label{sec:tables} 183 | 184 | В качестве примера таблицы приведена таблица~\ref{tab1}. 185 | 186 | \begin{table}[!h] 187 | \caption{Таблица умножения (фрагмент)}\label{tab1} 188 | \centering 189 | \begin{tabular}{|*{18}{c|}}\hline 190 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 191 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 192 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 193 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 194 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 195 | \end{tabular} 196 | \end{table} 197 | 198 | Есть еще такое окружение \texttt{tabularx}, его можно аккуратно растянуть на всю страницу. 199 | Приведем пример (таблица~\ref{tab2}). 200 | 201 | \begin{table}[!h] 202 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab2} 203 | \centering 204 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 205 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 206 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 207 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 208 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 209 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 210 | \end{tabularx} 211 | \end{table} 212 | 213 | \section{Рисунки} 214 | 215 | Пример рисунка (c помощью \texttt{TikZ}) приведен на рисунке~\ref{fig1}. Под \texttt{pdflatex} можно также 216 | использовать \texttt{*.jpg}, \texttt{*.png} и даже \texttt{*.pdf}, под \texttt{latex} можно использовать 217 | Metapost. Последний можно использовать и под \texttt{pdflatex}, для чего в стилевике продекларированы 218 | номера картинок от~1 до~20. 219 | 220 | \begin{figure}[!h] 221 | \caption{Пример рисунка}\label{fig1} 222 | \centering 223 | \begin{tikzpicture}[scale=0.7] 224 | \draw[thick,->] (0,0)--(3.5,0); 225 | \draw[thick,->] (0,0)--(0,3.5); 226 | \draw[very thick, red] (0,0)--(3,3); 227 | \draw[dashed] (3,0)--(3,3); 228 | \draw[dashed] (1.5,0)--(1.5,1.5); 229 | \end{tikzpicture} 230 | \end{figure} 231 | 232 | \section{Листинги} 233 | 234 | В работах студентов кафедры <<Компьютерные технологии>> часто встречаются листинги. Листинги бывают 235 | двух основных видов~--- исходный код и псевдокод. Первый оформляется с помощью окружения \texttt{lstlisting} 236 | из пакета \texttt{listings}, который уже включается в стилевике и немного настроен. Пример Hello World на Java 237 | приведен на листинге~\ref{lst1}. Пример большого листинга~--- в приложении (листинг~\ref{lstX}). 238 | 239 | \begin{lstlisting}[float=!h,caption={Пример исходного кода на Java},label={lst1}] 240 | public class HelloWorld { 241 | public static void main(String[] args) { 242 | System.out.println("Hello, world!"); 243 | } 244 | } 245 | \end{lstlisting} 246 | 247 | Псевдокод можно оформлять с помощью разных пакетов. В данном стилевике включается пакет \texttt{algorithmicx}. 248 | Сам по себе он не генерирует флоатов, поэтому для них используется пакет \texttt{algorithm}. 249 | Пример их совместного использования приведен на листинге~\ref{lst2}. 250 | 251 | \begin{algorithm}[!h] 252 | \caption{Пример псевдокода}\label{lst2} 253 | \begin{algorithmic} 254 | \Function{IsPrime}{$N$} 255 | \For{$t \gets [2; \lfloor\sqrt{N}\rfloor]$} 256 | \If{$N \bmod t = 0$} 257 | \State\Return \textsc{false} 258 | \EndIf 259 | \EndFor 260 | \State\Return \textsc{true} 261 | \EndFunction 262 | \end{algorithmic} 263 | \end{algorithm} 264 | 265 | Наконец, листинги из \texttt{listings} тоже можно подвешивать с помощью \texttt{algorithm}, 266 | пример на листинге~\ref{lst3}. 267 | 268 | \begin{algorithm}[!h] 269 | \caption{Исходный код и флоат \texttt{algorithm}}\label{lst3} 270 | \begin{lstlisting} 271 | public class HelloWorld { 272 | public static void main(String[] args) { 273 | System.out.println("Hello, world!"); 274 | } 275 | } 276 | \end{lstlisting} 277 | \end{algorithm} 278 | 279 | \chapter{Проверка сквозной нумерации} 280 | 281 | Листинг~\ref{lst4} должен иметь номер 4. 282 | 283 | \begin{algorithm}[!h] 284 | \caption{Исходный код и флоат \texttt{algorithm}}\label{lst4} 285 | \begin{lstlisting} 286 | public class HelloWorld { 287 | public static void main(String[] args) { 288 | System.out.println("Hello, world!"); 289 | } 290 | } 291 | \end{lstlisting} 292 | \end{algorithm} 293 | 294 | Рисунок~\ref{fig2} должен иметь номер 2. 295 | 296 | \begin{figure}[!h] 297 | \caption{Пример рисунка}\label{fig2} 298 | \centering 299 | \begin{tikzpicture}[scale=0.7] 300 | \draw[thick,->] (0,0)--(3.5,0); 301 | \draw[thick,->] (0,0)--(0,3.5); 302 | \draw[very thick, red] (0,0)--(3,3); 303 | \draw[dashed] (3,0)--(3,3); 304 | \draw[dashed] (1.5,0)--(1.5,1.5); 305 | \end{tikzpicture} 306 | \end{figure} 307 | 308 | Таблица~\ref{tab3} должна иметь номер 3. 309 | 310 | \begin{table}[!h] 311 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab3} 312 | \centering 313 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 314 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 315 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 316 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 317 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 318 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 319 | \end{tabularx} 320 | \end{table} 321 | 322 | \chapterconclusion 323 | 324 | В конце каждой главы желательно делать выводы. Вывод по данной главе~--- нумерация работает корректно, ура! 325 | 326 | %% Макрос для заключения. Совместим со старым стилевиком. 327 | \startconclusionpage 328 | 329 | В данном разделе размещается заключение. 330 | 331 | \printmainbibliography 332 | 333 | %% После этой команды chapter будет генерировать приложения, нумерованные русскими буквами. 334 | %% \startappendices из старого стилевика будет делать то же самое 335 | \appendix 336 | 337 | \chapter{Пример приложения}\label{sec:app:1} 338 | 339 | В приложениях рисунки, таблицы и другие подобные элементы нумеруются по приложениям с соответствующим префиксом. Проверим это. 340 | 341 | Листинг~\ref{lst4:apx} должен иметь номер А.1. 342 | 343 | \begin{algorithm}[!h] 344 | \caption{Исходный код и флоат \texttt{algorithm}}\label{lst4:apx} 345 | \begin{lstlisting} 346 | public class HelloWorld { 347 | public static void main(String[] args) { 348 | System.out.println("Hello, world!"); 349 | } 350 | } 351 | \end{lstlisting} 352 | \end{algorithm} 353 | 354 | Рисунок~\ref{fig2:apx} должен иметь номер A.1. 355 | 356 | \begin{figure}[!h] 357 | \caption{Пример рисунка}\label{fig2:apx} 358 | \centering 359 | \begin{tikzpicture}[scale=0.7] 360 | \draw[thick,->] (0,0)--(3.5,0); 361 | \draw[thick,->] (0,0)--(0,3.5); 362 | \draw[very thick, red] (0,0)--(3,3); 363 | \draw[dashed] (3,0)--(3,3); 364 | \draw[dashed] (1.5,0)--(1.5,1.5); 365 | \end{tikzpicture} 366 | \end{figure} 367 | 368 | Таблица~\ref{tab3:apx} должна иметь номер A.1. 369 | 370 | \begin{table}[!h] 371 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab3:apx} 372 | \centering 373 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 374 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 375 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 376 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 377 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 378 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 379 | \end{tabularx} 380 | \end{table} 381 | 382 | Заодно проверим нумерованные и ненумерованные перечисления. Ненумерованные: 383 | \begin{itemize} 384 | \item пункт А; 385 | \item пункт Б; 386 | \item пункт В. 387 | \end{itemize} 388 | 389 | Нумерованные списки нескольких уровней: 390 | \begin{enumerate} 391 | \item первый элемент; 392 | \item второй элемент с подэлементами: 393 | \begin{enumerate} 394 | \item первый подэлемент; 395 | \item второй подэлемент; 396 | \item третий подэлемент. 397 | \end{enumerate} 398 | \item третий элемент; 399 | \item четвертый элемент; 400 | \item пятый элемент; 401 | \item шестой элемент; 402 | \item седьмой элемент; 403 | \item восьмой элемент; 404 | \item девятый элемент; 405 | \item десятый элемент. 406 | \end{enumerate} 407 | 408 | \chapter{Еще один пример приложения с неимоверно длиннющим названием для тестирования переносов}\label{sec:app:2} 409 | 410 | Проверим на примере таблиц, что нумерация в приложениях~--- по приложениям. 411 | Таблица~\ref{tab3:apx2} должна иметь номер Б.1. 412 | 413 | \begin{table}[!h] 414 | \caption{Таблица умножения с помощью \texttt{tabularx} (фрагмент)}\label{tab3:apx2} 415 | \centering 416 | \begin{tabularx}{\textwidth}{|*{18}{>{\centering\arraybackslash}X|}}\hline 417 | -- & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 418 | 1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 \\\hline 419 | 2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 & 22 & 24 & 26 & 28 & 30 & 32 & 34 \\\hline 420 | 3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 & 33 & 36 & 39 & 42 & 45 & 48 & 51 \\\hline 421 | 4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 & 44 & 48 & 52 & 56 & 60 & 64 & 68 \\\hline 422 | \end{tabularx} 423 | \end{table} 424 | 425 | \chapter{Пример огромного листинга} 426 | 427 | \begin{lstlisting}[caption={Пример большого листинга},label={lstX}] 428 | import java.util.*; 429 | 430 | public class Example { 431 | static int[] restoreOutgoing(int[] g, int[] outgoing, 432 | int vertex, int mask) { 433 | int[] rv = new int[1 + Integer.bitCount(mask)]; 434 | int n = g.length; 435 | int current = rv.length - 1; 436 | while (true) { 437 | rv[current] = vertex; 438 | if (current == 0) { 439 | if (vertex != 0) { 440 | throw new AssertionError(); 441 | } 442 | return rv; 443 | } 444 | mask ^= 1 << (vertex - 1); 445 | int prevMask = outgoing[mask] & g[vertex]; 446 | if (prevMask == 0) { 447 | throw new AssertionError(); 448 | } 449 | vertex = Integer.numberOfTrailingZeros(prevMask); 450 | --current; 451 | } 452 | } 453 | 454 | static int[] restoreIncoming(int[] g, int[] incoming, 455 | int vertex, int mask) { 456 | int[] rv = new int[1 + Integer.bitCount(mask)]; 457 | int n = g.length; 458 | int current = 0; 459 | while (true) { 460 | rv[current] = vertex; 461 | if (current == rv.length - 1) { 462 | if (vertex != 0) { 463 | throw new AssertionError(); 464 | } 465 | return rv; 466 | } 467 | mask ^= 1 << (vertex - 1); 468 | int nextMask = incoming[mask] & g[vertex]; 469 | if (nextMask == 0) { 470 | throw new AssertionError(); 471 | } 472 | vertex = Integer.numberOfTrailingZeros(nextMask); 473 | ++current; 474 | } 475 | } 476 | } 477 | \end{lstlisting} 478 | 479 | 480 | \end{document} 481 | -------------------------------------------------------------------------------- /itmo-student-thesis/r.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | if [[ "$1" == "clean" ]]; then 4 | rm -f {bachelor-thesis,master-thesis,master-thesis-en}.{bib,aux,log,bbl,bcf,blg,run.xml,toc,tct,pdf,out} 5 | else 6 | for i in bachelor-thesis master-thesis master-thesis-en; do 7 | xelatex $i 8 | biber $i 9 | xelatex $i 10 | xelatex $i 11 | done 12 | 13 | rm -f {bachelor-thesis,master-thesis,master-thesis-en}.{bib,aux,log,bbl,bcf,blg,run.xml,toc,tct,out} 14 | fi 15 | --------------------------------------------------------------------------------