LaTeX + диплом

    Продолжаем тему LaTeX + диплом.

    Понадобилось мне написать диплом. Времени в обрез, требования жесткие. Материал есть, текст почти готов, надо оформлять. Сел, подумал, и решил, что ручной версткой уж точно заниматься не хочется. Из опыта участия во всевозможных олимпиадах вспомнилось, что лучше час потерять, но сделать решение, которое потом пройдет тесты, чем сразу сделать что-то и потому судорожно переделывать. Плюс к тому хотелось таки заняться плотным изучением Latex и компании.



    Ставим задачу


    Исходные условия:
    Компьютер Acer Aspire One. Очень удачная машинка для студента, надо заметить. Нетбуки в Европе так и называют — студенческие компьютеры.
    Операционная система — Linpus (читай Fedora 8).
    Система верски — Latex в реализации teTex, ныне свернутая.

    Требуется в течение недели получить текст диплома, оформленного по всем правилам учебного заведения.

    Правила оформления такие:
    • Гарнитура Times New Roman;
    • Кегль 12pt;
    • полуторный интервал;
    • отступ от заголовка 6pt;
    • заголовки первого уровня (т.е. названия глав) выключаются по центру;
    • заголовки последующих уровней выключаются влево с обязательным абзацным отступом;
    • совпадающим с абзацным отступом основного текста;
    • приложения нумеруются с цифры 1;
    • слова «ОГЛАВЛЕНИЕ», «ВВЕДЕНИЕ» пишутся заглавными буквами (т.е. буквально так, как это набрано в этом предложении);
    • все заголовки включаются в содержание.


    В качестве основы для публикации после непродолжительного анализа был выбран пакет disser. Самое главное, что в нем подкупило — это ощущение целостности и наличие файла для сборки (т.е. Makefile).

    Установка



    Сначала автор хотел установить TeXLive, но это не получилось. Почему-то не запустился инсталлятор, а поскольку в perl'е автор не силен, желания разбираться не было никакого. Из пакетов с помощью yum был установлен teTeX.

    Надо отметить, что процесс этот проходил не быстро, благо GPRS-интернет от Мегафон — удовольствие не быстрое (это не камень в огород Мегафона, а констотация факта. GPRS-интернет медленный!)

    После этого из CTAN (www.ctan.org) были установлены пакеты disser и связанные с ним. Как определялись пакеты, которые надо установить? Экспериментальным путем.
    В теле документа thesis.tex пишется \usepackage{какой_то_пакет}, затем дается команда

    make; make pdf

    и проверяется наличие ошибки вида «не найден какой_то_пакет.sty». Если такая ошибка есть, то этот пакет скачивался из интернета, инсталлировался (с обязательным выполнением команды sudo texhash) и процесс повторялся. Надо сказать, что автор установил довольно много пакетов, прежде чем понять, что же ему надо и на чем можно остановиться, поэтому намеренно не привожу перечень пакетов, которые были установлены.

    Про среду следует сказать отдельно.

    В моем случае (т.е. в приведенной выше конфигурации) установка teTeX произошла в каталог /usr/share/texmf (далее $TEXMF) с правами rw-r--r--, т.е. простой пользователь может только читать, но не писать. А инсталляция пакетов Latex происходит в каталог $TEXMF/tex/latex/ и далее. Поэтому все содержимое пакетов недоступно (мы же не работаем под root'ом!) Пакет disser установился, соответственно, в каталог $TEXMF/tex/latex/disser, а документация к нему в $TEXMF/doc/latex/disser.

    В документации к пакету disser приводятся примеры разных работ — кандидатской, докторской и магистерской диссертаций, а также работа бакалавра. Содержатся они в каталоге templates. Если бы было право на запись, то можно было бы прямо в каталоге, например, bachelor выполнить make и получить на выходе dvi-файл.

    Но поскольку права на запись нет, примеры были скопированы в каталог ~/Documents и работа велась там.

    В Makefile были внесены изменения (был прописан абсолютный путь в директиве include), чтобы уже в копии можно было выполнять make.

    Далее начался собственно процесс верстки.

    Сборка диплома



    Текст изначально планировался к набору в кодировке utf-8, но позже выяснилось, что BiBTeX не умеет обрабатывать библиотечные файлы в этой кодировке, а совместить две кодировки в одном проекте не получается. Может это и возможно, но дешевле оказалось весь проект верстать в cp1251.

    Набор текста производился в редакторе geany, от которого требовалась только подсветка синтаксиса и умение работать в кодировке cp1251. Немаловажным фактом оказалась и возможность работать в режиме полного экрана (отключены все элементы интерфейса, кроме строки меню), поскольку экран компьютера маленький.

    Пакет disser предполагает разбиение документа на небольшие, логически связанные порции. Так, введение и заключение находятся в отдельных файлах, intro.tex и concl.tex соответственно. Главы находятся в файлах 1.tex, 2.tex, 3.tex и т.д. Приложения в файлах app-1.tex, app-2.tex и т.д.

    Сборка документа производится путем указания в файле thesis.tex (основной документ) следующих строк между \begin{document} и \end{document}:

    \input{intro}
    \input{1}
    \input{2}
    \input{3}
    \input{concl}

    \input{app-1}
    \input{app-2}
    ...


    Оглавление, по требованиям, находится в начале документа и начинается со страницы 2. Титульный лист для дипломной работы выдавался (печатался отдельно), поэтому никакой необходимости его верстать и включать в документ не было. Для отключения титульного листа в заголовке документа было указывается notitlepage, т.е.

    \documentclass[notitlepage, ...]{disser}

    где многоточием заменены другие опции.

    Размер листа устанавливается пакетом geometry:

    \usepackage[
    a4paper, includefoot,
    left=3cm, right=1cm, top=2cm, bottom=1.5cm,
    headsep=1cm, footskip=1cm
    ]{geometry}


    Настройка заголовков



    Надо отметить, что в пакете disser очень грамотно произведена настройка элементов текста, т.е. названий глав, секций, подсекций и т.д.

    Например, для оформления названия главы имеются следующие команды:

    \thechapteralign
    \thechapterfont
    \prethechapter
    \postthechapter
    \chapteralign
    \chapterfont
    \beforechapter
    \afterchapter


    Команды определяют оформление разных частей заголовка: \thechapteralign — выключку номера, \thechapterfont — шрифт номера, \prethechapter — текст до номера, \postthechapter — текст после номера, \chapteralign — выключку текста заголовка, \chapterfont — шрифт текста заголовка, \beforechapter — отступ до заголовка, \afterchapter — отступ после заголовка.

    Такая же серия команд есть и для оформления заголовка в оглавлении.

    Подобная настройка произведена для каждого уровня заголовков. Подробности — в файле disser.pdf.

    Такое разбиение позволяет сделать, например, такой заголовок:

    Глава 1.
    Анализ текущего состояния

    и указать разное оформление для номера и для текста заголовка.

    В итоге, для диплома в преамбуле документа появились такие команды (показана только настройка главы):

    \renewcommand{\thechapterfont}{\normalsize\bfseries} % Номер главы полужирным
    \renewcommand{\prethechapter}{} % Убираем слово "Глава"
    \renewcommand{\postthechapter}{.~} % ставим точку и пробел после номер
    \renewcommand{\chapterfont}{\normalsize\bfseries} % шрифт текста заголовка
    \renewcommand{\tocprethechapter}{} % в оглавлении убираем слово "Глава"


    Перекомпилируем и получаем правильно оформленные заголовки главы.

    Другие заголовки



    По умолчанию все заголовки в пакете disser набираются более крупным шрифтом, нежели основной текст. По требованиям же заголовки должны набираться тем же кеглем, что и основной текст (12), полужирного начертания.

    Поэтому в преамбулу вписываем:

    \renewcommand{\chapterfont}{\normalsize\bfseries}
    \renewcommand{\sectionfont}{\normalsize\bfseries}
    \renewcommand{\subsectionfont}{\normalsize\bfseries}
    \renewcommand{\subsubsectionfont}{\normalsize\bfseries}
    \renewcommand{\appendixfont}{\normalsize\bfseries}


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

    Для этого в преамбулу включаем команды (основной текст имеет отступ 1 см)

    \renewcommand{\sectionindent}{1cm}
    \renewcommand{\subsectionindent}{1cm}


    Отступ от заголовка до текста должен быть не менее 6 пунктов:

    \renewcommand{\aftersection}{6pt plus .1pt}

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

    \renewcommand{\aftersubsection}{3pt plus .1pt}

    Выражение «plus .1pt» позволяет Latex немного двигать заголовки в вертикальном направлении при верстке страницы, что на нескольких страницах привело к более привлекательному результату.

    Текст заголовков



    По требованиям заголовки набираются заглавными буквами. Исправить это оказалось довольно просто. В преамбуле указываем

    \renewcommand{\introname}{ВВЕДЕНИЕ}
    \renewcommand{\pretheappendix}{\protect{ПРИЛОЖЕНИЕ}~} % в тексте
    \renewcommand{\tocpretheappendix}{\protect{ПРИЛОЖЕНИЕ}~} % в оглавлении
    \renewcommand{\conclusionname}{ЗАКЛЮЧЕНИЕ}


    По каким-то причинам «ОГЛАВЛЕНИЕ» и «БИБЛИОГРАФИЧЕСКИЙ СПИСОК» пришлось вставлять в тело документа, причем последнее — непосредственно перед библиографией.

    Нумерация



    Диплом по требованиям начинается с титульной страницы, после которой идет оглавление. Оглавление печатается на странице 2 и далее. Делается это с помощью команды

    \setcounter{page}{2}

    непосредственно перед \tableofcontents.

    Приложения нумеруются с цифры 1. По умолчанию пакет disser предлагает нумерацию приложений с буквы «А» (кириллица). Для изменения формата номера в преамбуле пишется команда

    \renewcommand{\theappendix}{\arabic{chapter}} % заменяем нумерацию приложений на цифры

    Кроме того, текст «ПРИЛОЖЕНИЕ 1» выключается вправо. Делается это командой

    \renewcommand{\theappendixalign}{\hfill}

    в преамбуле. Команда \hfill заполняет все свободное пространство строки, «раздавливая» то, что стоит до и после нее в разные стороны строки.

    Оглавление



    В оглавление должны включаться заголовки всех уровней. По умолчанию пакет disser включает в оглавление только главы и секции. Подсекции — не включаются.

    Чтобы исправить, в преамбулу добавляем команду

    \setcounter{tocdepth}{2}

    В случае с дипломом автора этого оказалось достаточно, поскольку заголовки ниже subsection не использовались. Если это будет не так, то нужно указать 3 или даже 4 в команде выше.

    Команды разбиения текста (chapter, section и пр.) имеют необязательный параметр, позволяющий указать текст, который будет включен в оглавление. Это удобно использовать для переноса строк в случае длинных заголовков. Команда

    \section[Очень длинный\\заголовок]{Очень\\длинный заголовок}

    позволяет по-разному оформить заголовок в тексте и в оглавлении.

    Приложения в оглавления начинаются со слова «ПРИЛОЖЕНИЯ», которое ссылается на ту же страницу, что и первое приложение, т.е.

    ПРИЛОЖЕНИЯ.......................51
    ПРИЛОЖЕНИЕ 1. Сводная таблица....51

    Делается это просто. В тексте первого приложения (в файле app-1.tex) в начало добавляются две команды:

    \clearpage
    \addcontentsline{toc}{chapter}{ПРИЛОЖЕНИЯ}


    \clearpage нужно для того, чтобы команды \addcontentsline и \chapter попали на одну страницу.

    Библиографический список



    Пакет disser для формирования библиографии использует команду bibtex8. В поставке teTeX этой команды нет, во всяком случае в тех репозиториях, которые подключены по умолчанию.

    Поэтому автор скачал исходный код утилиты и собрал ее самостоятельно, после чего поместил ее в каталог /usr/bin рядом с утилитой bibtex, а в каталог с дипломом поместил файл gost705.bst, используемый пакетом disser.

    Шрифт Times New Roman/12 pt



    Нормоконтроллер не пропустил шрифт cm-super, используемый по умолчанию. Поэтому пришлось подключить пакет PsCyr для того, чтобы текст верстался именно Times New Roman. Мне этот шрифт категорически не нравится, но это формальность, так что пришлось сделать как указано.

    По каким-то причинам при указании опции 12pt в \documentclass Latex отказался менять размер шрифта. Пришлось последовательно (с пересборкой диплома) указать шрифт 8pt, 9pt, 11pt и затем 12pt. После этого шрифт стал нужного размера.

    Заключительные положения



    Следует отметить, что на все эксперименты и настройку суммарно ушло около 3 дней. Это с учетом того, что знание Latex у автора до этого было довольно поверхностное.

    Основную информацию автор почерпнул из книг К. В. Воронцова «Latex2e в примерах», С.М. Львовского «Набор и вёрстка в системе Latex» и, конечно, документации пакета disser, какой бы скудной она ни была.

    Преимущества Latex для работ подобного плана огромны — ссылочный аппарат позволяет не заботиться о том, в каком порядке идут приложения, элементы библиографического списка, таблицы, рисунки и проч.; работа ведется с простыми текстовыми файлами, поэтому потеря форматирования из-за проблем внутри MS Word/OO Writer невозможна в принципе; высокое полиграфическое качество; совершено прозрачная работа с математикой.

    Проблемы, конечно, тоже есть, но они нивелируются достоинствами: сложности с форматированием длинных таблиц, сложная работа с рисунками, особенно крупноформатными; не всегда очевидные способы борьбы с проблемными местами в тексте (висячие строки, слова, overfull, underfull) и т.д. В целом, для качественной работы в Latex нужно несколько больше знаний в полиграфии и программировании, чем при простой верстке в Word/Writer. Но оно того стоит.

    Рыба текста главного файла диплома с использованием пакета disser:
    \documentclass[bachelor,subf,12pt,notitlepage]{disser}
    \usepackage{pscyr}
    \usepackage[
    a4paper, mag=1000, includefoot,
    left=3cm, right=1cm, top=2cm, bottom=1.5cm, headsep=1cm, footskip=1cm
    ]{geometry}

    \usepackage[T2A]{fontenc}
    \usepackage[cp1251]{inputenc}
    \usepackage[english,russian]{babel}
    \usepackage{multirow}
    \usepackage{longtable}

    \ifpdf\usepackage[pdftex]{graphicx}\else\usepackage{graphicx}\fi

    \usepackage{comment}

    \ifpdf\usepackage{epstopdf}\usepackage{pdfpages}\fi

    \graphicspath{{fig/}}
    \renewcommand{\thechapterfont}{\normalsize\bfseries} % Номер главы полужирным
    \renewcommand{\prethechapter}{} % Убираем слово "глава"
    \renewcommand{\postthechapter}{.~} % ставим точку и пробел после номер
    \renewcommand{\appendixfont}{\normalsize\bfseries}
    \renewcommand{\chapterfont}{\normalsize\bfseries}
    \renewcommand{\sectionfont}{\normalsize\bfseries}
    \renewcommand{\subsectionfont}{\normalsize\bfseries}
    \renewcommand{\subsubsectionfont}{\normalsize\bfseries}
    \renewcommand{\tocprethechapter}{} % в оглавлении убираем слово "Глава"
    \renewcommand{\theappendixalign}{\hfill} % выключка вправо для слова "приложение" в приложениии
    \renewcommand{\theappendix}{\arabic{chapter}} % заменяем нумерацию приложений на цифры
    \renewcommand{\pretheappendix}{\protect{ПРИЛОЖЕНИЕ}~} % Меняем регистр слова "Приложение"
    \renewcommand{\tocpretheappendix}{\protect{ПРИЛОЖЕНИЕ}~} % Меняем регистр слова "Приложение"
    \renewcommand{\introname}{ВВЕДЕНИЕ}
    \renewcommand{\sectionindent}{1cm}
    \renewcommand{\subsectionindent}{1cm}
    \renewcommand{\aftersection}{6pt plus .1pt}
    \renewcommand{\aftersubsection}{3pt plus .1pt}
    \renewcommand{\conclusionname}{ЗАКЛЮЧЕНИЕ}
    \renewcommand{\bibname}{БИБЛИОГРАФИЧЕСКИЙ СПИСОК}

    \setcounter{tocdepth}{2}

    \begin{document}

    \setcounter{page}{2}
    \renewcommand{\contentsname}{ОГЛАВЛЕНИЕ}

    % ----------------------------------------------------------------
    \tableofcontents
    % ----------------------------------------------------------------

    \input{intro}
    \input{1}
    \input{2}
    \input{3}
    \input{concl}
    % ----------------------------------------------------------------

    \appendix
    \renewcommand{\sectionfont}{\normalsize\bfseries}
    \renewcommand{\theappendixfont}{\normalsize\bfseries}
    \input{app-1}
    \input{app-2}
    \input{app-3}
    \input{app-4}

    \renewcommand{\bibname}{БИБЛИОГРАФИЧЕСКИЙ СПИСОК}
    \bibliography{thesis}
    \bibliographystyle{gost705}
    \end{document}
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 13

      +3
      Мусье знает толк в извращениях.
        0
        >… Сначала автор хотел…
        >… автор не силен…

        текст о себе от третьего лица наводит на мысли что с автором не всё в порядке (см. гугл или venidero.ya.ru/replies.xml?item_no=4&ncrnd=7291)
          +2
          Это издержки диплома.
        +2
        привели бы несколько страниц готового результата, это все-таки не листинг консольной утилиты :)
          +1
          Собственно, присоединяюсь. На Хабре куча топиков про Латекс, а конечный документ, или хотя бы его отрывки, мало кто публикует.
            +1
            Кусок pdf-файла с дипломом, отдельные страницы.
            Весь диплом выложить не могу, много непубличной информации.
            Несколько страниц на mail.ru
              0
              да весь и не нужно было, главное — чтобы был наглядный результат вашего кода :)
              честно сказать, меня, как полиграфиста, всегда удивляли стандарты верстки подобных работ, особенно проприетарные шрифты с засечками и чудовищный интерлиньяж.
                +1
                Насколько я понимаю, вопрос этот скорее исторический, нежели практический.
                Тексты то печатались на машинке, отсюда и интерлиньяж, ну а шрифт — то что в Word'e приемлимое было, на том и привыкли делать.

                По моим наблюдениям, впрочем, ситуация потихоньку меняется — ВУЗы начинают свои стандарты разрабатывать, не такие «дурные».
                  0
                  это радует, надеюсь, когда я наконец решу пойти в ВУЗ, там многое изменится к лучшему.
              0
              Если не лень копаться:
                0
                Не понял комментарий.

                Если это утверждение, то — не лень.
                Некоторые сложности на входе, зато в дальнейшей верстке куча вопросов снимается.
                Особенно удобно местами менять приложения и работать со ссылками.
                  0
                  Извиняюсь за неполный коментарий — почему-то отослался сам…

                  Если не лень копаться:
                  Пользовался не чистым LaTeX, а XeLaTeX.
                  1) Курсач, с кучей фигни, „халявания“, грязных хаков, немного питона, проблема с десятичной запятой(давно делалось, а тогда работало). Есть и исходники и pdf
                  bitbucket.org/imposeren/ktrea/src/

                  2) Конспект, недоделанный(не все лекции), но в нём вроде всё нормально(пофикшен баг с десятичной запятой):
                  bitbucket.org/imposeren/study/src/tip/mazor/

                  Всё собиралось xelatex`ом
                  xelatex -shell-escape
                  (-shell-escape потому-что там питон может использоваться местами)
              0
              Понадобилось мне написать диплом. Времени в обрез

              какая знакомая ситуация :)


              ну и заодно вопрос к сообществу: может кто-нибудь посоветовать файлы стилей, что бы диплом генерился в соответствии со всякими там ГОСТами?

              Only users with full accounts can post comments. Log in, please.