пятница, 27 января 2012 г.

Диплом в LaTeX. Версия для МАИ. Часть 1.

Предисловие

В МАИ прежде чем выйти на защиту, необходимо сдать диплом и раздаточные материалы (презентацию) в КДП - Кабинет Дипломного Проектирования. Процесс этот не самый приятный и временами отдаёт маразмом. В интернетах существует методичка с требованиям и верстать диплом нужно в соответствии с ней. Это заметно уменьшит количество придирок и, как следствие, ненужных поездок в институт. В этой серии статей будут рассмотрены решения, применённые при вёрстке диплома, которые применил автор при сдаче дипломной работы в МАИ, на 8 факультете в 2012 году.

Вступление

По теме написания дипломов в LaTeX есть достаточно материалов, главным образом у Дебианщика и Сурового Челябинского Программиста ещё рекомендую почитать этот форум. Серия данных статей расчитана на тех, кто уже знаком с LaTeX'ом. В ней часть материала будет повторяться с приведёнными источниками, части я по данным ссылкам не нашёл (скорей всего плохо искал). Первая статья посвящена глобальным настройкам документа.

 

Рубрикация

В работе использовались разделы начиная с уровня \chapter. В стандартном виде с ними возникали следующие проблемы:
  • \chapter печатает слово "Глава" да и вообще занимает половину страницы
  • \section и \chapter переносят слова, чего делать в заголовках нельзя
Для решения был применён следующий код:

\makeatletter
% запрещаем переносы в названиях секций
\renewcommand{\section}{\@startsection{section}{1}{0pt}%
                                {-3.5ex plus -1ex minus -.2ex}%
                                {2.3ex plus .2ex}%
{\centering\hyphenpenalty=10000\normalfont\Large\bfseries}}

% меняем заголовок для команды \chapter и запрещаем переносы слов
\usepackage {titlesec}
\titleformat{\chapter}{\thispagestyle{myheadings}\centering\hyphenpenalty=10000\normalfont\huge\bfseries}{
\thechapter. }{0pt}{\Huge}
\makeatother

Рассмотрим подробнее что произошло:
Команда \makeatletter делает символ @ буквой, команда \makeatother возвращает всё на свои места.
Далее переопределяем команду заголовков для секций. От стандартного определения она отличается последним аргументом, который задаёт стиль оформления заголовка. К стилю добавились  команды \centering для размещения заголовка по центру и \hyphenpenalty=10000, которая запрещает переносы в словах.
Затем переопределяется команда, определяющая вид Главы. Надо заметить, что \chapter не использует \@startsection и определять одно через другое не стоит. Помимо изменений, использованных для секций, убирается надпись "Глава" и печатается точка после номера главы.

Далее нужно изменить название главы "Литература" на "Список использованных источников":

\renewcommand{\bibname}{Список использованных источников}
\addcontentsline{toc}{chapter}{Список использованных источников}

Первая команда изменит название главы, а вторая добавит её в оглавление.

Да, на самом деле это не "Оглавление", а "Содержание":

\renewcommand{\contentsname}{Содержание}

В русской литературе нумерация источников представляется в формате
1.
2.
Поэтому переопределяем команду \@biblabe:

\renewcommand\@biblabel[1]{#1.}

 

Настройки страниц

Изначально LaTeX делает колонку с текстом довольно узкой, но в соответствии с требованиями КДП,  она должна иметь определённые границы. Просто расширить страницу можно подключив пакет fullpage а вот задать конкретную геометрию можно следующим образом:

\usepackage {geometry}
\geometry{left=2cm}                % левое поле
\geometry{right=1.5cm}            % правое поле
\geometry{top=1.5cm}                % верхнее поле
\geometry{bottom=1.5cm}            % нижнее поле


Номера страниц должны быть в правом верхнем углу экрана. В самом простом случае достаточно сделать

\pagestyle{myheadings}

но если нужно более сложное форматирование, следует обратиться к пакету fancyhdr.

При переносе номеров страниц текст стал залезать на сам номер. Чтобы убрать такой эффект, увеличить отступ от заголовка:

\addtolength{\headsep}{15pt}

 

Настройки абзацев и шрифта

Шрифт должен иметь 14 кегль. Для этого существуют расширения стандартных классов документов с приставкой ext. Так для своего диплома я определил следующее:

\documentclass[a4paper,14pt]{extreport}

Между строк должен быть полуторный отступ:
\renewcommand{\baselinestretch}{1.5}        % полуторный междустрочный интервал

Кроме того, мне нравится, когда первый абзац начинается с красной строки:
\usepackage {indentfirst}

Включение файлов

Если работа состоит более чем из одной секции, рекомендуется разнести текст по разным файлам. В случае с дипломом получается более сложная иерархия и включение файлов имеет несколько уровней вложенности. В главном файле оно производится при помощи команды \include, а вот в тех, которые сами являются подключаемыми надо использовать \input.

Включаемые изображения лучше размещать отдельно от директории исходников и чтобы при включении не писать каждый раз длинный относительный путь, в преамбуле можно сделать

\graphicspath{{img/}}

 

Прочее

В русских текстах в качестве кавычек принято использовать <<ёлочки>>. Для работы с кавычками существует пакет csquotes, а настройка русских кавычек выглядит так:

\usepackage {csquotes}
\DeclareQuoteStyle{russian}
    {\guillemotleft}{\guillemotright}[0.025em]
    {\quotedblbase}{\textquotedblleft}
\ExecuteQuoteOptions{style=russian}

\newcommand{\enq}[1]{\enquote{#1}}            % укороченный синоним для кавычек


Иногда возникает необходимость распечатки листингов кода. Для этого есть пакет lstlistings. Его базовые настройка выглядят так:

\usepackage {listings}
\lstset{tabsize=2,
    breaklines,
    columns=fullflexible,
    flexiblecolumns,
    numbers=left,
    numberstyle={\footnotesize},
    extendedchars}
Если нужно привести листинг языка, не включённого в стандартную поставку, можно определить его самостоятельно:

\lstdefinelanguage{JavaScript}{
  keywords={typeof, new, true, false, catch, function, return, null, catch,
switch, var, if, in, while, do, else, case, break},
  keywordstyle=\color{blue}\bfseries,
  ndkeywords={class, export, boolean, throw, implements, import, this},
  ndkeywordstyle=\color{darkgray}\bfseries,
  identifierstyle=\color{black},
  sensitive=false,
  comment=[l]{//},
  morecomment=[s]{/*}{*/},
  commentstyle=\color{purple}\ttfamily,
  stringstyle=\color{red}\ttfamily,
  morestring=[b]',
  morestring=[b]"
}


 

Заключение

Во второй части будут рассмотрены конкретные примеры работы с текстом, а в третьей - примеры создания презентации.

Комментариев нет:

Отправить комментарий