Изначально я хотел рассказать в данной статье про свой шаблон дипломной работы, но таких статей полно, зачем мне делать еще одну? За 3 года работы научным сотрудником в лаборатории МГТУ им. Баумана я много чему научился, в том числе и оформлению своих результатов, как графически, так и в Latex. Поэтому эта статья будет посвящена работе со своим шаблоном дипломной работы, а также будет содержать некоторые полезные советы по оформлению презентации и диплома. Я думаю, что смогу дать некоторые полезные советы, так как много раз представлял результаты своей научной работы на конференциях и имею несколько публикаций в иностранных научных журналах Q1. Для кого эта статья? В первую очередь, для студентов, которые решили писать свой диплом в Latex, хотят сделать это хорошо и потратить минимум времени на настройку шаблона под свои требования. Автор подразумевает, что вы уже владеете Latex на минимальном уровне и не будет разбирать всякие мелочи, таких как создание таблиц, добавление новых абзацев и вставка рисунков в Latex. На эти темы существует множество других статей и хороших книг. Где-то в феврале я начал задумываться о том, что пора бы уже начать писать диплом. За 3 года работы научным сотрудником у меня накопилось достаточно материала, но необходимо было это все красиво оформить. Так как на протяжении 6 лет обучения я все писал в Latex, вопрос, где же писать свою работу у меня не стоял. Однако такой способ имеет ряд своих сложностей, таких, как правильный шрифт, зачастую это Times New Roman, правильное оформление в соответствии с требованиями нормоконтроля, автоматическое составление списка использованных источников по ГОСТ и много мелких проблем. Естественно, я начал искать шаблоны в интернете, ведь кто-то наверняка все эти вопросы уже решал. Требования к шаблону у меня были следующие: Шрифт Times New Roman. Такие требования к оформлению работы были раньше, когда я еще писал бакалаврский диплом. Автоматическое составление списка литературы по ГОСТ. Это ооочень удобно, при написании работы с большим количеством источников без этого не обойтись. Использование компилятора pdflatex. Это самый популярный компилятор, для которого уже есть куча работающих пакетов, для него легче всего найти примеры. В нем у меня уже была сделана бакалаврская работа. Простота в использовании шаблона. Без танцев с бубнами по установке и приведением к требованиям нормоконтроля. В идеале в нем не надо разбираться несколько дней и читать форумы, чтобы начать работать. Когда я начал искать информацию, с удивлением обнаружил, что шаблонов, которые удовлетворяли бы всем приведенным выше пунктам, просто нет (или я плохо искал). В некоторых не хватало одного из этих пунктов, какие-то были слишком избыточными для написания простой бакалаврской работы. От безысходности мне пришлось начать разработку своего шаблона с нуля, основываясь на своей старой бакалаврской работе. Собственно, вот на него ссылка. К плюсам своего шаблона я мог бы отнести следующее: Шрифт Times New Roman Автоматическая библиография по ГОСТ (bibtex) Автоматизированная сборка в Linux и Windows Автоматическое создание релизов на GitHub Любое количество собираемых файлов (диплом, презентация и что-либо еще) Собираемые файлы .tex могут иметь любое имя без пробелов Автоматическая очистка временных файлов Latex до и после сборки На компьютере не нужен установленный Latex, вся сборка происходит в контейнере docker Работа проходит нормоконтроль в программе нормоконтроля TestVKR МГТУ им. Н.Э.Баумана Используется самый популярный компилятор - pdflatex И все это без танцев с бубнами. Достаточно установить себе на компьютер docker, и нажать на одну кнопку (Windows) или ввести команду make (Linux). Даже LaTex устанавливать не надо! Редактировать исходники диплома можно из Visual Studio Code. Рекомендую следующие плагины для него: streetsidesoftware.code-spell-checker-russian - проверка русского языка James-Yu.latex-workshop - поддержка LaTex Все остальные плагины можно поставить на ваше усмотрение. Подробную инструкцию по установке и структуру шаблона можно найти в README. Это основной раздел статьи, в котором я подробно разберу, как пользоваться шаблоном, расскажу про реализацию, про проблемы, с которыми мне пришлось столкнуться, а также попутно дам полезные советы по написанию дипломной работы и составлению презентации. Главный файл расчетно-пояснительной записки имеет следующую структуру: Тут находятся все настройки форматирования будущего документа, подключение глав и списка литературы. Пробежимся кратко по тому, на что важно обратить внимание. Я использую documentclass{disser}, потому что он является одним из самых популярных для такого типа работ, по нему легко найти документацию, и он поддерживается pdflatex. Следующая строка непосредственно отвечает за то, чтобы после компиляции появился шрифт Times New Roman. Однако это не будет работать без docker контейнера, в котором установлены шрифты. Далее, после подключения пакетов, следует подключение глав в проект. Хорошей практикой является разбиение вашего Latex-документа на множество разных файлов. Это улучшает читаемость основного файла с настройками и позволяет легче проводить дебаг, попеременно подключая или отключая главу от проекта. Очень рекомендую делать именно так. Внутри главы я использую следующие команды: Тут я дважды пишу название главы, зачем? Одно будет отображено непосредственно в самом тексте, другое - в содержании. Это может быть удобно, если я, например, хочу использовать другой размер шрифта в тексте, в то время, как в содержании шрифт остается тот же. Это увеличивает вариативность написания текста в работе, тем самым помогая соблюсти требования по оформлению. Что касается написания собственно самого текста, то тут главный совет состоит в том, что каждое предложение должно быть написано на новой строчке в tex файле. Какие проблемы это решает? Да очень многие. Во-первых, это позволяет сделать текст более читаемым, во-вторых, если была допущена в какой-то строке ошибка, можно получить номер этой строки, и когда там всего одно предложение, вместо огромного абзаца, это во много раз ускоряет поиск ошибок и их устранение. А еще это играет немаловажную роль в контроле версий. Таким образом, поменяв предложения и применив git diff, вы получите конкретные измененные строки. Подключение литературы в проект выглядит следующим образом (\input{chapters/biblio.tex}): Самой полезной строчкой тут является следующая: Она позволяет заменить стандартное название "Список литературы" на "Список использованных источников", если вдруг ваши требования по оформлению тоже предписывают использовать специальное название, отличное от стандартного. При таком написании не появлялось несколько "списков использованных источников" в содержании, и в содержании размер шрифта этой строки не отличался от всех остальных. Что касается добавления нового источника литературы и его использования в тексте, тут можно дать несколько хороших советов: Алгоритм добавления нового источника литературы следующий: Ищем DOI статьи, которую хотим добавить в список литературы. Это удобно сделать через сайт Google Scholar. Зачастую DOI является частью URL ссылки на работу. Вставляем DOI на сайте doi2bib. Полученное содержимое вставляем в файл biblio.bib, заменяя автоматически сгенерированное название на DOI статьи! Последнее уточнение крайне важное. DOI индивидуальное для каждой статьи, и использование его в качестве имени источника дает уверенность, что вы не добавите дубликат ни в работу, ни в файл с библиографией. Это распространенная практика в научной сфере, которой я рекомендую придерживаться. В тексте работы сослаться на данный источник можно будет так: Если у работы нет DOI, то все необходимые поля придется заполнить самостоятельно. Тогда вам стоит задуматься, достойна ли эта статья оказаться в вашем списке литературы. Как правило, если у работы нет DOI, она опубликована в журнале "не очень". Если же вы уверены, что ваш источник из хорошего журнала, то вы либо ошибаетесь, либо плохо искали DOI, третьего не дано. Желательно использовать в качестве источников только статьи из англоязычных журналов с рейтингом Q1, Q2, все остальное, как правило, не цитируется в качественных научных работах. С презентацией все проще и сложнее одновременно. С одной стороны, для нее намного скромнее требования в плане оформления, с другой - именно по ней комиссия судит о качестве вашей дипломной работы (никто же не читает дипломы, кроме, дай бог, вашего научного руководителя), поэтому стоит уделить ей особое внимание. В процессе создания данного шаблона мне не приходилось сталкиваться с какими-то трудностями в создании презентации в Latex, поэтому я не буду вставлять эту часть работы. Презентацию можно найти в самом репозитории. Она интуитивно понятна, скомпилированный пример находится в релизах. Однако я бы хотел дать советы, которые позволят вам составить хорошую презентацию. Первый совет состоит в следующем: сделать как можно больше красивых и содержательных картинок на каждом слайде вашей презентации. Если вы не знаете какую картинку на данный слайд можно поставить, будьте уверены: он вам не нужен. Лучше мало слайдов, но отточенных до идеала, чем много "сырых". И самое главное: никогда, НИКОГДА, не вставлять на слайд текст. Единственные слайды, где у вас может быть текст - это постановка задачи и заключение. Исключение - краткие, буквально пару слов, комментарии к формулам или важный небольшой список. Я участвовал на нескольких научных конференциях и замечал, когда на слайде появляется текст, все мгновенно засыпают и перестают слушать. Такую же проблему я наблюдал у множества своих одногруппников на защите. Помимо этого, хорошим тоном является указание ссылки на источник на слайде, откуда взята информация или картинка. Это будет высоко оценено комиссией. Вот пример хорошего слайда в презентации: Если вы раньше не имели опыта создания презентаций, я рекомендую ориентироваться на мою презентацию, которая была представлена на многих научных конференциях. Вся основная магия простоты использования данного шаблона происходит здесь. Одновременно это и самая сложная техническая часть, но в этой сборке ничего не придется менять, она максимально универсальная. Для сборки диплома и презентации я написал следующий Makefile: Давайте разберемся, что он делает. С объявлением переменных все понятно, начнем со следующих строк: Аналогичная точка входа на Windows в файле makewin.bat выглядит так: Это точка входа в мою сборку диплома и презентации, тут запускается docker контейнер, в котором происходит вся компиляция проекта. Зачем мне вообще был нужен docker? Не является ли это лишним? Все дело в том, что в нем и происходит выбор шрифта Times New Roman. Получить этот шрифт с помощью компилятора pdflatex в своем дипломе было самой большой проблемой, решение которой заняло у меня около месяца. Он довольно тяжело устанавливается, даже если знать, что для этого нужно делать. Например на Windows у меня вообще не получилось это сделать (без docker). Поэтому я считаю, что было просто необходимо сделать из этого контейнер, чтобы зафиксировать рабочую настройку системы. Кроме этого, у такого подхода есть множество других плюсов: вам не нужно ничего настраивать, чтобы у вас появился этот шрифт, как на Linux, так и на Windows (кроме установки docker, но это не сравнится с теми танцами с бубнами, через которые я прошел, когда делал шрифт). Следующие строки Makefile выполняются уже непосредственно в docker: Тут выполняется 3 этапа: Очистка до сборки. Из основной директории удаляются файлы pdf (а также их log файлы), которые имеют такое же название как файлы .tex. На случай, если вы допустили ошибку, и у вас не скомпилировались до конца ваши файлы, но остались временные, предусмотрена и их очистка тоже, потому что зачастую бывает так, что в новой итерации сборки используются старые сгенерированные файлы, в которых есть ошибка, и пока вы их не удалите, вы будете получать ошибки компиляции совершенно правильного документа! Далее происходит сборка самих файлов, о ней я подробнее расскажу далее. Еще раз очистка временных файлов. Как происходит, собственно, сама сборка документов: Над этой частью тоже пришлось немного помучиться. Вся сложность в условной компиляции списка литературы. Дело в том, что я хотел сделать универсальный Makefile, который будет компилировать файлы с любым именем .tex в основной директории. Однако сложность возникает, если в одном из файлов есть список литературы, а в другом нет. Если вызывать компилятор bibtex для файла, в котором нет цитирований, то он будет выдавать ошибки, и, к сожалению, у него даже нет ключа, который позволил бы этого избежать. Поэтому пришлось провести некоторую исследовательскую работу по поиску отличий временных файлов для диплома и презентации (в которой нет цитирований), и мне удалось найти, что в aux файлах для документа с цитированием присутствуют записи в таком формате "\citation{DOI}". Использование grep идеально подходит для решения данной проблемы с условной компиляцией. При работе с данным шаблоном я рекомендую активно использовать git и GitHub (но это не является обязательным). Во-первых, вы можете эффективно отслеживать свои изменения и работать в команде со своим научным руководителем, которому можно отправлять на ревью свою работу, а во-вторых, в данном шаблоне предусмотрено создание релизов по пушу тега вида v*. Что это дает? Вы можете не индексировать свои скомпилированные файлы, а хранить их в релизах, это очень удобно, особенно, если они большие. По этой причине вы не найдете в моем репозитории скомпилированные файлы, они добавляются только в релиз, когда я считаю, что изменений в них достаточно, чтобы сделать новую версию. Как этим пользоваться? Оставлю тут краткую инструкцию для тех, кто не работал с git: Вам не нужно ничего предварительно настраивать (разве что token GitHub, который должен иметь разрешение actions), необходимый скрипт уже лежит в скрытой папке github/workflows/main.yml. Скрипт для GitHub Actions выглядит следующим образом: Можно заметить, что он довольно простой. Здесь происходит скачивание моего docker контейнера, который опубликован на DockerHub, запуск make release, переименование сгенерированных pdf файлов, которые имеют такое же название как файлы .tex в основной директории (к ним добавляется номер версии), и добавление их в релиз. Соответствует ли этот шаблон ГОСТ? Он соотвествует требованиям моего вуза и программы TestVKR, которую используют в МГТУ им. Баумана для проверки правильности оформления работы. Однако, так как здесь используется самый популярный компилятор pdflatex, подключить нужные пакеты и настроить свой шаблон под ваши требования не составит труда. Я надеюсь, что данный шаблон поможет большому количеству людей, кто решил писать свой диплом в Latex.  Младший инженер встраиваемых систем