Шаблон диплома в LaTex / практика написания диплома и составления презентации
Изначально я хотел рассказать в данной статье про свой шаблон дипломной работы, но таких статей полно, зачем мне делать еще одну? За 6 лет работы научным сотрудником в лаборатории МГТУ им. Баумана я много чему научился, в том числе и оформлению своих результатов, как графически, так и в Latex. Поэтому эта статья будет посвящена работе со своим шаблоном дипломной работы, а также будет содержать некоторые полезные советы по оформлению презентации и диплома. Я думаю, что смогу дать некоторые полезные советы, так как много раз представлял результаты своей научной работы на конференциях и имею несколько публикаций в иностранных научных журналах Q1.
Для кого эта статья?
В первую очередь, для студентов, которые решили писать свой диплом в Latex, хотят сделать это хорошо и потратить минимум времени на настройку шаблона под свои требования. Автор подразумевает, что вы уже владеете Latex на минимальном уровне и не будет разбирать всякие мелочи, таких как создание таблиц, добавление новых абзацев и вставка рисунков в Latex. На эти темы существует множество других статей и хороших книг.
Свой шаблон дипломной работы в LaTex
Где-то в феврале я начал задумываться о том, что пора бы уже начать писать диплом. За 3 года работы научным сотрудником у меня накопилось достаточно материала, но необходимо было это все красиво оформить. Так как на протяжении 6 лет обучения я все писал в Latex, вопрос, где же писать свою работу у меня не стоял. Однако такой способ имеет ряд своих сложностей, таких, как правильный шрифт, зачастую это Times New Roman
, правильное оформление в соответствии с требованиями нормоконтроля, автоматическое составление списка использованных источников по ГОСТ и много мелких проблем. Естественно, я начал искать шаблоны в интернете, ведь кто-то наверняка все эти вопросы уже решал.
Требования к шаблону у меня были следующие:
Шрифт
Times New Roman
. Такие требования к оформлению работы были раньше, когда я еще писал бакалаврский диплом.Автоматическое составление списка литературы по ГОСТ. Это ооочень удобно, при написании работы с большим количеством источников без этого не обойтись.
Использование компилятора
pdflatex
. Это самый популярный компилятор, для которого уже есть куча работающих пакетов, для него легче всего найти примеры. В нем у меня уже была сделана бакалаврская работа.Простота в использовании шаблона. Без танцов с бубнами по установке и приведением к требованиям нормоконтроля. В идеале в нем не надо разбираться несколько дней и читать форумы, чтобы начать работать.
Когда я начал искать информацию, с удивлением обнаружил, что шаблонов, которые удовлетворяли бы всем приведенным выше пунктам, просто нет (или я плохо искал). В некоторых не хватало одного из этих пунктов, какие-то были слишком избыточными для написания простой бакалаврской работы. От безысходности мне пришлось начать разработку своего шаблона с нуля, основываясь на своей старой бакалаврской работе.
Собственно, вот на него ссылка.
Фишки моего LaTex шаблона диплома
К плюсам своего шаблона я мог бы отнести следующее:
Шрифт 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[
candidate, % тип документа
subf, % подключить и настроить пакет subfig для вложенной нумерации рисунков
times % шрифт Times как основной
]{disser}
\renewcommand{\rmdefault}{ftm} % Основная строчка, которая позволяет получить шрифт Times New Roman
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
.
.
\begin{document}
% Титульник (первая страница файла Title.pdf)
\includepdf[pages={1-1}]{additional/Title.pdf}
% Аннотация, Содержание, Введение
\input{chapters/introduction.tex}
% Главы
\input{chapters/chapter_1.tex}
\input{chapters/chapter_2.tex}
.
.
% Библиография
\input{chapters/biblio.tex}
% Приложение (у меня пустое)
\input{chapters/appendix.tex}
\end{document}
Тут находятся все настройки форматирования будущего документа, подключение глав и списка литературы. Пробежимся кратко по тому, на что важно обратить внимание.
Я использую documentclass{disser}
, потому что он является одним из самых популярных для такого типа работ, по нему легко найти документацию, и он поддерживается pdflatex
.
Следующая строка непосредственно отвечает за то, чтобы после компиляции появился шрифт Times New Roman
.
\renewcommand{\rmdefault}{ftm}
Однако это не будет работать без docker
контейнера, в котором установлены шрифты.
Далее, после подключения пакетов, следует подключение глав в проект.
\input{chapters/chapter_1.tex}
\input{chapters/chapter_2.tex}
Хорошей практикой является разбиение вашего Latex-документа на множество разных файлов. Это улучшает читаемость основного файла с настройками и позволяет легче проводить дебаг, попеременно подключая или отключая главу от проекта. Очень рекомендую делать именно так.
Внутри главы я использую следующие команды:
\newpage
\begin{center} % центрирование посередине страницы
\textbf{\large 1. РОЛЬ ДАЛЬНОДЕЙСТВИЯ ПРИТЯЖЕНИЯ В ПРОСТЫХ ЖИДКОСТЯХ} % Название главы, какое оно будет в тексте
\end{center}
\refstepcounter{chapter}
\addcontentsline{toc}{chapter}{1. РОЛЬ ДАЛЬНОДЕЙСТВИЯ ПРИТЯЖЕНИЯ В ПРОСТЫХ ЖИДКОСТЯХ} % Название главы, какое оно будет в содержании
Тут я дважды пишу название главы, зачем? Одно будет отображено непосредственно в самом тексте, другое — в содержании. Это может быть удобно, если я, например, хочу использовать другой размер шрифта в тексте, в то время, как в содержании шрифт остается тот же. Это увеличивает вариативность написания текста в работе, тем самым помогая соблюсти требования по оформлению.
Что касается написания собственно самого текста, то тут главный совет состоит в том, что каждое предложение должно быть написано на новой строчке в tex
файле.
...
Для решения поставленной задачи методом молекулярной динамики были смоделированы системы.
Пост обработка проводилась с использованием MATLAB и python.
...
Какие проблемы это решает? Да очень многие. Во-первых, это позволяет сделать текст более читаемым, во-вторых, если была допущена в какой-то строке ошибка, можно получить номер этой строки, и когда там всего одно предложение, вместо огромного абзаца, это во много раз ускоряет поиск ошибок и их устранение. А еще это играет немаловажную роль в контроле версий. Таким образом, поменяв предложения и применив git diff
, вы получите конкретные измененные строки.
Подключение литературы в проект выглядит следующим образом (\input{chapters/biblio.tex}
):
\addcontentsline{toc}{chapter}{СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ} % это будет отображаться в содержании
\renewcommand{\bibsection}{\centering\textbf{\large СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ}} % смена названия библиографии по умолчанию
\bibliographystyle{biblio/gost2008n} % файл, задающий формат ссылок по ГОСТ
\bibliography{biblio/biblio} % файл с библиографией
Самой полезной строчкой тут является следующая:
renewcommand{\bibsection}{\centering\textbf{\large СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ}}
Она позволяет заменить стандартное название «Список литературы» на «Список использованных источников», если вдруг ваши требования по оформлению тоже предписывают использовать специальное название, отличное от стандартного. При таком написании не появлялось несколько «списков использованных источников» в содержании, и в содержании размер шрифта этой строки не отличался от всех остальных.
Что касается добавления нового источника литературы и его использования в тексте, тут можно дать несколько хороших советов:
Алгоритм добавления нового источника литературы следующий:
Ищем DOI статьи, которую хотим добавить в список литературы. Это удобно сделать через сайт Google Scholar. Зачастую DOI является частью URL ссылки на работу.
Вставляем DOI на сайте doi2bib.
Полученное содержимое вставляем в файл biblio.bib, заменяя автоматически сгенерированное название на DOI статьи!
Последнее уточнение крайне важное. DOI индивидуальное для каждой статьи, и использование его в качестве имени источника дает уверенность, что вы не добавите дубликат ни в работу, ни в файл с библиографией. Это распространенная практика в научной сфере, которой я рекомендую придерживаться.
В тексте работы сослаться на данный источник можно будет так:
... в работе~\cite{DOI} % ~ нужна для того, чтобы номер источника не переносился на следующую строку
Если у работы нет DOI, то все необходимые поля придется заполнить самостоятельно. Тогда вам стоит задуматься, достойна ли эта статья оказаться в вашем списке литературы. Как правило, если у работы нет DOI, она опубликована в журнале «не очень». Если же вы уверены, что ваш источник из хорошего журнала, то вы либо ошибаетесь, либо плохо искали DOI, третьего не дано. Желательно использовать в качестве источников только статьи из англоязычных журналов с рейтингом Q1, Q2, все остальное, как правило, не цитируется в качественных научных работах.
Презентация
С презентацией все проще и сложнее одновременно. С одной стороны, для нее намного скромнее требования в плане оформления, с другой — именно по ней комиссия судит о качестве вашей дипломной работы (никто же не читает дипломы, кроме, дай бог, вашего научного руководителя), поэтому стоит уделить ей особое внимание.
В процессе создания данного шаблона мне не приходилось сталкиваться с какими-то трудностями в создании презентации в Latex, поэтому я не буду вставлять эту часть работы. Презентацию можно найти в самом репозитории. Она интуитивно понятна, скомпилированный пример находится в релизах. Однако я бы хотел дать советы, которые позволят вам составить хорошую презентацию.
Первый совет состоит в следующем: сделать как можно больше красивых и содержательных картинок на каждом слайде вашей презентации. Если вы не знаете какую картинку на данный слайд можно поставить, будьте уверены: он вам не нужен. Лучше мало слайдов, но отточенных до идеала, чем много «сырых».
И самое главное: никогда, НИКОГДА, не вставлять на слайд текст. Единственные слайды, где у вас может быть текст — это постановка задачи и заключение. Исключение — краткие, буквально пару слов, комментарии к формулам или важный небольшой список. Я участвовал на нескольких научных конференциях и замечал, когда на слайде появляется текст, все мгновенно засыпают и перестают слушать. Такую же проблему я наблюдал у множества своих одногруппников на защите.
Помимо этого, хорошим тоном является указание ссылки на источник на слайде, откуда взята информация или картинка. Это будет высоко оценено комиссией.
Вот пример хорошего слайда в презентации:
Если вы раньше не имели опыта создания презентаций, я рекомендую ориентироваться на мою презентацию, которая была представлена на многих научных конференциях.
Сборка
Вся основная магия простоты использования данного шаблона происходит здесь. Одновременно это и самая сложная техническая часть, но в этой сборке ничего не придется менять, она максимально универсальная.
Для сборки диплома и презентации я написал следующий Makefile
:
LATEX_COMPILER = pdflatex
LATEX_COMPILER_FLAGS = -interaction=nonstopmode
BIBLIO_COMPILER = bibtex
BIBLIO_COMPILER_FLAGS =
RM = rm -f
TEMPORARY_FILES = *.out *.aux *.blg *.bbl *.toc *.nav *.snm
LOG_FILES = *.log
DOCKER_RUN = docker run
DOCKER_FLAGS = --rm -i -v "${PWD}":/diplom:Z
DOCKER_IMAGE = 2109199812/docker-latex
DOCKER_COMMAND = bash -c "make release"
FILES_TO_BUILD := $(shell find "${PWD}" -maxdepth 1 -name '*.tex' -printf "%f\n" | sed -r "s/(.*).tex/\1.pdf/g")
.PHONY: all release clean_before_build clean_after_build
all:
$(DOCKER_RUN) $(DOCKER_FLAGS) $(DOCKER_IMAGE) $(DOCKER_COMMAND)
release: clean_before_build $(FILES_TO_BUILD) clean_after_build
%.pdf: %.tex
$(LATEX_COMPILER) $(LATEX_COMPILER_FLAGS) $*
@if grep -r "citation{.*}" $*.aux; then \
$(BIBLIO_COMPILER) $(BIBLIO_COMPILER_FLAGS) $*; \
fi
$(LATEX_COMPILER) $(LATEX_COMPILER_FLAGS) $*
$(LATEX_COMPILER) $(LATEX_COMPILER_FLAGS) $*
clean_before_build:
$(RM) $(FILES_TO_BUILD) $(LOG_FILES) $(TEMPORARY_FILES)
clean_after_build:
$(RM) $(TEMPORARY_FILES)
Давайте разберемся, что он делает. С объявлением переменных все понятно, начнем со следующих строк:
all:
$(DOCKER_RUN) $(DOCKER_FLAGS) $(DOCKER_IMAGE) $(DOCKER_COMMAND)
Аналогичная точка входа на Windows
в файле makewin.bat
выглядит так:
@echo off
SETLOCAL
docker run --rm -i -v "%cd%":/diplom:Z 2109199812/docker-latex bash -c "make release"
pause
ENDLOCAL
Это точка входа в мою сборку диплома и презентации, тут запускается docker
контейнер, в котором происходит вся компиляция проекта.
Зачем мне вообще был нужен docker
? Не является ли это лишним? Все дело в том, что в нем и происходит выбор шрифта Times New Roman
. Получить этот шрифт с помощью компилятора pdflatex
в своем дипломе было самой большой проблемой, решение которой заняло у меня около месяца. Он довольно тяжело устанавливается, даже если знать, что для этого нужно делать. Например на Windows
у меня вообще не получилось это сделать (без docker
). Поэтому я считаю, что было просто необходимо сделать из этого контейнер, чтобы зафиксировать рабочую настройку системы. Кроме этого, у такого подхода есть множество других плюсов: вам не нужно ничего настраивать, чтобы у вас появился этот шрифт, как на Linux
, так и на Windows
(кроме установки docker
, но это не сравнится с теми танцами с бубнами, через которые я прошел, когда делал шрифт).
Следующие строки Makefile
выполняются уже непосредственно в docker
:
release: clean_before_build $(FILES_TO_BUILD) clean_after_build
Тут выполняется 3 этапа:
Очистка до сборки. Из основной директории удаляются файлы
pdf
(а также ихlog
файлы), которые имеют такое же название как файлы.tex
. На случай, если вы допустили ошибку, и у вас не скомпилировались до конца ваши файлы, но остались временные, предусмотрена и их очистка тоже, потому что зачастую бывает так, что в новой итерации сборки используются старые сгенерированные файлы, в которых есть ошибка, и пока вы их не удалите, вы будете получать ошибки компиляции совершенно правильного документа!Далее происходит сборка самих файлов, о ней я подробнее расскажу далее.
Еще раз очистка временных файлов.
Как происходит, собственно, сама сборка документов:
%.pdf: %.tex
$(LATEX_COMPILER) $(LATEX_COMPILER_FLAGS) $*
@if grep -r "citation{.*}" $*.aux; then \
$(BIBLIO_COMPILER) $(BIBLIO_COMPILER_FLAGS) $*; \
fi
$(LATEX_COMPILER) $(LATEX_COMPILER_FLAGS) $*
$(LATEX_COMPILER) $(LATEX_COMPILER_FLAGS) $*
Над этой частью тоже пришлось немного помучиться. Вся сложность в условной компиляции списка литературы. Дело в том, что я хотел сделать универсальный Makefile
, который будет компилировать файлы с любым именем .tex
в основной директории. Однако сложность возникает, если в одном из файлов есть список литературы, а в другом нет. Если вызывать компилятор bibtex
для файла, в котором нет цитирований, то он будет выдавать ошибки, и, к сожалению, у него даже нет ключа, который позволил бы этого избежать. Поэтому пришлось провести некоторую исследовательскую работу по поиску отличий временных файлов для диплома и презентации (в которой нет цитирований), и мне удалось найти, что в aux
файлах для документа с цитированием присутствуют записи в таком формате "\citation{DOI}"
. Использование grep
идеально подходит для решения данной проблемы с условной компиляцией.
Создание релизов
При работе с данным шаблоном я рекомендую активно использовать git
и GitHub
(но это не является обязательным). Во-первых, вы можете эффективно отслеживать свои изменения и работать в команде со своим научным руководителем, которому можно отправлять на ревью свою работу, а во-вторых, в данном шаблоне предусмотрено создание релизов по пушу тега вида v*
. Что это дает? Вы можете не индексировать свои скомпилированные файлы, а хранить их в релизах, это очень удобно, особенно, если они большие. По этой причине вы не найдете в моем репозитории скомпилированные файлы, они добавляются только в релиз, когда я считаю, что изменений в них достаточно, чтобы сделать новую версию.
Как этим пользоваться?
Оставлю тут краткую инструкцию для тех, кто не работал с git:
git add .
git commit -m "your comment"
git push
git tag -a v0.1 -m "your comment"
git push --tags
Вам не нужно ничего предварительно настраивать (разве что token GitHub
, который должен иметь разрешение actions
), необходимый скрипт уже лежит в скрытой папке github/workflows/main.yml
.
Скрипт для GitHub Actions
выглядит следующим образом:
name: Create_Thesis
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
container:
image: docker.io/2109199812/docker-latex:latest
steps:
- uses: actions/checkout@v3
- name: Compile Thesis
shell: bash
run: make release
- name: Rename release file
shell: bash
run: |
for filename in $(find "$(pwd)" -maxdepth 1 -name '*.tex' -printf "%f\n" | sed -r "s/(.*).tex/\1/g"); do mv ${filename}.pdf ${filename}-${GITHUB_REF#refs/*/}.pdf; done
- name: Release
uses: softprops/action-gh-release@v1
with:
files: |
*-v*.pdf
Можно заметить, что он довольно простой. Здесь происходит скачивание моего docker
контейнера, который опубликован на DockerHub
, запуск make release
, переименование сгенерированных pdf файлов, которые имеют такое же название как файлы .tex
в основной директории (к ним добавляется номер версии), и добавление их в релиз.
Заключение
Соответствует ли этот шаблон ГОСТ?
Он соотвествует требованиям моего вуза и программы TestVKR
, которую используют в МГТУ им. Баумана для проверки правильности оформления работы. Однако, так как здесь используется самый популярный компилятор pdflatex
, подключить нужные пакеты и настроить свой шаблон под ваши требования не составит труда.
Я надеюсь, что данный шаблон поможет большому количеству людей, кто решил писать свой диплом в Latex
.