понедельник, 9 июня 2008 г.

Верстаем диплом в LaTeX: шрифты и заголовки


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

Итак, прежде всего определимся с тем, какие должны использоваться шрифты и как должны выглядеть заголовки. По стандартам ЮУрГУ (впрочем уверен что в других ВУЗах так же) шрифты должны быть следующими:

  • Основной текст - Times New Roman, 14й

  • Заголовки первого, второго, третьего уровней (а больше уровней и не допускается) - Arial, 16й

  • Оглавление (да, да, весь текст оглавления) - Arial, 16й



Замечу, что заголовки НЕ ДОЛЖНЫ выделяться жирным или курсивом, как и оглавление. Да, сразу скажу, слово "Аннотация" в аннотации это не заголовок.


С основным текстом все просто. Уже настраивая геометрию мы указали, что будем использовать 14-й размер шрифта. Для того, чтобы задать гарнитуру Times New Roman - необходимо в преамбулу документа добавить следующую команду:

\renewcommand{\rmdefault}{ftm}


С заголовками дело несколько сложнее. Прежде всего следует отделить настройки размера шрифта и гарнитуры. Размер шрифта задается командами типа \tiny, \large, \Large, \LARGE и т.д. Я переопределил две команды - \large и \Large, назначив им 16-й и 18-й кегль соответственно. В принципе, можно было обойтись только переопределением команды \large. Код команд я поместил в файл eskdps.sty:

\renewcommand\large{\@setfontsize\large{15.5}{17}}

\renewcommand\Large{\@setfontsize\Large{16.5}{19}}

 


Теперь необходимо настроить использование данных размеров и гарнитуры Arial для отображения разделов документа. Команды, задающие отображение разделов находятся в файле G2-105-95.sty, я переопределил их следующим образом:

\renewcommand\section{%                    

                     \renewcommand{\theengost}{\thesection.\@arabic\c@engost}

                     \setcounter{engost}{0}

                     \gostnewpage                    

                     \@startsection{section}{1}{\z@}%

                                   {-3.25ex \@plus -1ex \@minus -.2ex}%

                                   {1.5ex \@plus.2ex}%                                                                    

                                   {\normalfont\large\textar}}



\renewcommand\subsection{%

                        \renewcommand{\theengost}{\thesubsection.\@arabic\c@engost}

                         \setcounter{engost}{0}

                         \@startsection{subsection}{2}{\z@}%

                                     {-3.25ex\@plus -1ex \@minus -.2ex}%

                                     {1.5ex \@plus .2ex}%

                                     {\normalfont\large\textar}}

\renewcommand\subsubsection{%

                           \renewcommand{\theengost}{\thesubsubsection.\@arabic\c@engost}

                           \setcounter{engost}{0}

                            \@startsection{subsubsection}{3}{\z@}%

                                     {-3.25ex\@plus -1ex \@minus -.2ex}%

                                     {1.5ex \@plus .2ex}%

                                     {\normalfont\large\textar}}

 


команда \large задает размер шрифта, ее мы переопределили выше. Команда \textar задает использование Arial для отрисовки заголовков.

Остался один момент - оглавление. Оглавление (заголовок и текст) должно выводиться Arial'ом, 16-м. Для этого изменим команду \tableofcontents следующим образом:

\renewcommand\tableofcontents{%

\clearpage

\begin{center}

    \large\textar{Оглавление}

\end{center}    

    \large\textar{\@starttoc{toc}}%

    \newpage

}

 


Вообще использовать слово "Оглавление" внутри данной команды - моветон и не комильфо ни разу, но почему-то когда я использовал команду \contentsname она печатала слово "Содержание" и это не переопределялось с помощью

\renewcommand{\contentsname}{Оглавление}


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

\newcommand*\l@sectionx[2]{%

  \ifnum \c@tocdepth >\z@

    \addpenalty\@secpenalty

    \addvspace{1.5em \@plus\p@}%

    \setlength\@tempdima{1.5em}%

    \begingroup

      \@tempdima 1.7 em\relax

      \parindent \z@ \rightskip \@pnumwidth

      \parfillskip -\@pnumwidth

      \leavevmode %\bfseries

      \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip

      {\hspace{2.5cm}{#1}\nobreak }%

      \leaders\hbox{%

        $\m@th

        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep%

        mu$}\hfill%

      \nobreak%

     \hb@xt@\@pnumwidth{\hfil\large \normalcolor #2}%

     \par%

    \endgroup

  \fi}



\renewcommand*\l@section[2]{%

  \ifnum \c@tocdepth >\z@

    \addpenalty\@secpenalty

    \addvspace{1.5em \@plus\p@}%

    \setlength\@tempdima{1.5em}%

    \begingroup

      \@tempdima 1.5cm \relax

      \parindent \z@ \rightskip \@pnumwidth

      \parfillskip -\@pnumwidth

      \leavevmode %\bfseries

      \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip

      {\hspace{1cm}{#1}\nobreak }%

      \leaders\hbox{%

        $\m@th

        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep%

        mu$}\hfill%

      \nobreak%

     \hb@xt@\@pnumwidth{\hfil\large \normalcolor #2}%

     \par%

    \endgroup

  \fi}





\renewcommand*\l@subsection[2]{%

  \ifnum \c@tocdepth >\z@

    \addpenalty\@secpenalty%

    \setlength\@tempdima{1.5em}%

    \begingroup

      \@tempdima 1.5cm \relax

      \parindent \z@ \rightskip \@pnumwidth

      \parfillskip -\@pnumwidth

      \leavevmode %\bfseries

      \advance\leftskip \@tempdima \null\nobreak\hskip -\leftskip

      {\hspace{1cm}{#1}\nobreak }%

      \leaders\hbox{%

        $\m@th

        \mkern \@dotsep mu\hbox{.}\mkern \@dotsep%

        mu$}\hfill%

      \nobreak%

     \hb@xt@\@pnumwidth{\hfil\large \normalcolor #2}%

     \par%

    \endgroup

  \fi}

 


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

Другие статьи серии:


Понравилось сообщение - подпишись на блог

12 комментариев:

d0rM03D комментирует...

Возможно кому-то пригодится. У меня заголовки стали корректно отображаться Arial'ом только после того, как я заменил \textar на \arfamily. По сути это одинаковые команды, но первая требует аргумента. Поэтому при переопределении формата заголовков стоит использовать вторую.

Unknown комментирует...

Странно, но у меня и с \textar всеп получилось очень хорошо. Поэтому затрудняюсь что лучше использовать, работает и то и другое.

m939 комментирует...

А как заставить \section начинать раздел с новой страницы?

Unknown комментирует...

Необходимо переопределить данную команду в стилевом файле. В начало определения команды добавить \newpage

Анонимный комментирует...

Насколько мне извесно, а позже было проверено при работе, класс article, как и любой другой класс, не поддерживает параметр 14pt. Вместо этого компилятор использует значение по умолчанию, т.е. 10pt.

Сделал так как написано у вас в посту, но система не заработала. Можете ли вы выложить свои, уже изенённый, файлы eskdpz?

Анонимный комментирует...

\begin{document}
\renewcommand{\contentsname}{Оглавление}
\tableofcontents

так работает...

bartix комментирует...

1. Собственно чем не нравиться нативная Helvetica что йдет в почтавке вместо M$-вой Arial?
2. Жаль... недостандарты. В Госта-х была литературная и школьная гарнитуры. В ПолиграфМаше былы и есть суперские гарнитуры NewStandard... Их своовал Паратайп, и почти все используют подделку Times в которой отвратительные метрики и начертания.

Unknown комментирует...

\contentsname переопределяется следующим образом:
\addto\captionsrussian{\renewcommand{\contentsname}{Оглавление}}

Анонимный комментирует...

Если прописать \renewcommand{\contentsname}{Оглавление} в другом файле и подключить его к главному командой input

то все работает

Unknown комментирует...

Интересная особенность.

Татьяна комментирует...

Да это и не особенность вобщем-то ))

\cmdname печатают разный текст в зависимости от текущего языка, поэтому переопределение любой такой команды посредством \renewcommand остается в силе лишь до следующего переключения языка. Далее новое значение будет потеряно, поскольку любая из команд выбора языка восстанавливает значения всех команд \cmdname, заданные пакетом babel для соответствующего языка:
1. \renewcommand{\appendixname}{Дополнение}\appendixname\\
2. \selectlanguage{english}\appendixname\\
3. \selectlanguage{russian}\appendixname
1. Дополнение
2. Appendix
3. Приложение

Список определений всех команд \cmdname для конкретного языка language хранится в команде
\captionslanguage
(с) Котельников, Чеботаев

Так что надо воспользоваться командой:
\addto{cmd}{defs}
Собственно это и написал выше Соболев )

Unknown комментирует...

Татьяна, спасибо за комментарий.

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

Любой Ваш комментарий важен для меня, однако, помните, что действует предмодерация. Давайте уважать друг друга!