воскресенье, 8 июня 2008 г.

Верстаем диплом в LaTeX: делаем рамки в соответствии с ГОСТ


Продолжаем серию статей о верстке диплома в LaTeX и сегодня поговорим о рамках и настройках страницы.

В состав пакета eskdpz входит класс G2-104-68, который и занимается отрисовкой рамок. Сами рамки находятся в файлах

- gost_frame1.eps - рамка для титульника, просто рамка
- gost_frame2.eps - рамка для аннотации, содержит штампик с названием и кодом проекта, литерой, номером страницы (3 или 4), числом страниц в проекте, названием ВУЗа и кафедры, а также подписями разработчика, руководителя, нормоконтролера и заведующего кафедрой.
- gost_frame3.eps - рамка для всех страниц проекта, содержит код проекта и номер страницы.


Итак, какие проблемы в пакете с отображением рамок. Прежде всего я бы выделил большие отступы (больше гостовских 5мм) от верхнего, нижнего и правого краев листа. Понятно, что точно 5мм получить очень трудно (технологические поля у каждого принтера свои), но даже на глаз видна разница между 6-7мм и сантиметром. Поэтому ситуацию нужно исправлять.

Посмотрим на код команды печати рамки в оригинальном файле:

\newcommand\BackgroundPicture[2]{%

 \setlength{\unitlength}{1pt}%

 \put(0,\strip@pt\paperheight){%

 \parbox[t][\paperheight]{\paperwidth}{%

 \vfill

 \centering\includegraphics[angle=#2]{#1}

 \vfill

}}} %

 


как видим здесь рамка центруется. Это не совсем правильно, рамку надо прижать к правому краю.

Есть еще один момент - по левой стороне рамок нанесен гостовский вертикальный штампик. По стандартам ЮУрГУ он не нужен. Я долго думал как его убрать. Первая мысль была - вырезать в фотошопе, но фотошоп отвратительно работает с eps, воспринимая его как растровое изображение - в итоге вся кирилица ("разраб", "проверил" и тд) безбожно портится. Потом я вспомнил что LaTeX позволяет поворачивать изображения и ОБРЕЗАТЬ их при вставке.

В результате получился следующий код команды:

\newcommand\BackgroundPicture[2]{%

 \setlength{\unitlength}{1pt}%

 \put(0,\strip@pt\paperheight){%

 \parbox[t][\paperheight]{\paperwidth}{%

 \vfill

 \hfill\includegraphics[angle=#2,trim=12.4mm 0 0 0,clip]{#1}\hspace{0.5cm}

 \vfill

}}} %

 


Сразу замечу, что центрует не только LaTeX, но и Acrobat Reader (по-умолчанию). Поэтому при печати надо снять галочку Auto-Rotate and Center.

Вторым вопросом является изменение высоты страницы, чтобы уменьшить верхний и нижний отступы от края листа, до границ рамки. Также необходимо установить отступ текста от левой границы рамки в 5мм, а от правой - в 3 мм. Параметры подбирались эмпирически (методом тыка), результатом стали следующие настройки геометрии (код находится в файле G2-105-95.sty):

\geometry{verbose,a4paper}

   \setlength{\headheight}{0pt}

   \setlength{\headsep}{0pt}

   \setlength{\topmargin}{-1.0cm}

   \setlength{\textheight}{25.0cm}

   \setlength{\textwidth}{17.6cm}

   \setlength{\oddsidemargin}{0cm}

   \setlength{\evensidemargin}{0pt}

   \setlength{\marginparsep}{0pt}

   \setlength{\marginparpush}{0pt}

   \parindent=15mm

   \setlength{\leftmargini}{\parindent}

   \addtolength{\leftmargini}{4mm}

   \setlength{\headheight}{0pt}

   \setlength{\headsep}{0pt}


После данных манипуляций (кстати ровно 5мм я не добился, получилось 7, но уже не так бросается в глаза) необходимо настроить заполнение полей в штампиках. Особенно это касается штампика аннотации. Напомню что я ввел команду gostlitera для заполнения поля "литера" (для дипломных проектов ставится буква "Д").

Код заполнения штампика аннотации (находится в файле G2-104-68.sty, снабжен соответствующим комментарием):

\spbox{539}{61}{594}{79}{c}{\pageref{LastPage}}

\spbox{496}{61}{537}{79}{c}{\thepage}

\spformedbox{122}{77}{184}{93}{l}{\textsl{\small\@gostrazrabotchik}}

\spformedbox{122}{60}{184}{80}{l}{\textsl{\small\@gostproveril}}

\spformedbox{122}{33}{184}{51}{l}{\textsl{\small\@gostnormokontroler}}

\spformedbox{122}{18}{184}{37}{l}{\textsl{\small\@gostutverdil}}

\spbox{261}{90}{593}{140}{c}{\LARGE{\@gostklgi}}

\spbox{258}{22}{444}{99}{c}{\parbox{65mm}{\centering\small{\@gosttitleobject} \\ \@gosttitledocument}}

\spbox{504}{19}{540}{69}{c}{\parbox{40mm}{\centering\small{\@gosttitlecompany}}}

\spbox{454}{65}{460}{74}{c}{\@gostlitera}


Макрос \pageref{LastPage} выводит колличество страниц в документе.

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

\spbox{567}{19}{593}{45}{c}{\thepage}

\spbox{257}{19}{564}{65}{c}{\LARGE{\@gostklgi}}


UPD: Команда gostlitera определяется в файле G2-105-95.sty следующим образом: \def\gostlitera#1{\gdef\@gostlitera{#1}}

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

З.Ы. Как всегда жду ваших вопросов, пожеланий, комментариев.

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


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

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

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

Можно было EPS-ник поправить в Inkscape за 2 минуты. Для любителей Windows Inkscape есть и под него.

Samolisov Pavel комментирует...

Большое спасибо за Ваш совет, я вот про lnkscape вообще ничего не знал, но и средствами LaTeX все удалось сделать. Наверное средствами LaTeX даже кошернее...

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

привет !

Большое спасибо за статью и за инфу о рамках. Небольшое замечание : при использовании стандартного пакета eskdpz имеется проблема с отображением подписей таблиц и рисунков. Они (подписи) появляются узкой колонкой. Это можно исправить убрав в файле G2-105-95.sty строчку %\renewcommand\captionmargin{0.2cm}

После этого все работает... Может об этом сообщить кому (разработчикам пакета...) ?

Samolisov Pavel комментирует...

Я решил данную проблему полностью переопределив формат подписей, тем более что это необходимо было делать по требованиям нормоконтроля.

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

Добрый день.

Возможно, стоит включить в текст упоминание о том, что для ввода команды gostlitera ее стоит сперва определить в файле G2-105-95.sty:

\def\gostlitera#1{\gdef\@gostlitera{#1}}

Samolisov Pavel комментирует...

Да, вы правы. Изменил текст статьи.

Samolisov Pavel комментирует...

Спасибо.

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

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