Хабрахабр

Верстаем заявление в LaTeX

Привет, Хабр! Всех, кого не очень устраивает увлекательное заполнение вордовских официальных бланков, приглашаю под кат.
Все началось с того, что мне предложили принять участие в одной конференции. К требованиям вроде «тезисы подаются в формате ворд!» я кое-как привык, но мое терпение лопнуло, когда мне на почту пришел бланк «заключения о возможности открытой публикации».

Все становится еще веселее, если включить отображение скрытых символов. Бланк представлял из себя .doc файл, изобилующий типичными для русского документооборота полями для заполнения рукой в нужных местах: горизонтальная линия во всю строку с пояснением под ней (например «ФИО, должность, подпись»).

Действительно, сначала я попытался сделать именно так, но вся эта «красота» постоянно ломалась, выезжала за поля и действовала мне на нервы. Казалось бы, нажми на клавиатуре insert да печатай «поверх» набитых линеек, что сложного? Поскрежетал я зубами минут 20 и принял ультимативное решение сделать все в латехе. Чего только стоит кегль текста, норовящий сорваться с 12 на 8, а потом обратно. В итоге потратил всего два вечера получился красивый и качественный документ!

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

отправляется на замечательный форум «Электронные системы управления» в замечательный город Новые Васюки, чтобы представить доклад «Периферийные вычисления для систем управления». Давайте же представим, что сотрудник НИИ «Электронных систем управления» Кузнецов К.

Преамбула

В 2019 работать в латехе достаточно легко: выбираешь редактор по душе, объявляешь тип документа, подгружаешь нужные пакеты и больше не вспоминаешь про оформление своего текста.

Если я не ошибаюсь, то часть этих опций являются значениями по-умолчанию для класса article. Ничего не изменилось и в этот раз: выбираем формат А4, 12 кегль и отключаем титульную страницу. Заодно подключаем пакет, нормализующий отображение в pdf:

\documentclass[12pt,a4paper,notitlepage]
\usepackage{cmap}

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


%%% language, font, encoding
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

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


\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm,nohead,nofoot]{geometry}

Поскольку у нас используются подстрочные пояснения, необходимо увеличить междустрочный интервал. Это легко сделать с помощью \linespread, но я предпочитаю специализированный пакет:


\usepackage[doublespacing]{setspace}

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


\usepackage{graphicx}

А теперь самое интересное! Именно эти пакеты сделали всю работу за меня. Фирменный пакет американского математического общества amsmath определяет макрос underset, позволяющий создавать «подстрочный» текст, и пакет ulem, донельзя облегчающий работу с подчеркиваниями:


\usepackage{amsmath}
\usepackage{ulem}

Тело документа

Вбиваем привычные begin-end{document} и начинаем творить. Дизайн у нас будет абсолютно ручной, поэтому не помешает очистить стиль страницы:


\pagestyle{empty}

Если требуется включить в документ логотип

Здесь ничего сложного: объявляем плавающий объект, используем определенный в graphicx макрос includegraphics с необходимой шириной и радуемся жизни. Более того, pdflatex отлично дружит с форматом png.


\begin{figure}[t!]
\includegraphics[width=0.4\textwidth]{logo.png}
\end{figure}

В заявлении обычно присутствует штамп. На хабре я видел, как его релизуют с помощью таблицы с заданной шириной. Такой подход мне не понравился, поскольку у таблицы есть параметры arraystretch и tabcolsep, которые немного портят отступы и форматирование. Их всегда можно переопределить, но на мой взгляд в разы легче воспользоваться окружением minipage. Лично я предпочитаю, чтобы машина сама подобрала необходимые интервалы, для этого существует hfill. Однако, нам не всегда необходимо заполнить всю строку, как, например, в случае с датой. Здесь мы с помощью rule оставим необходимое место:


\begin{flushright}
\begin{minipage}{0.4\textwidth}
\centering{
УТВЕРЖДАЮ\\
}
\raggedright{
Генеральный\hfillдиректор\hfillЗАО\hfill<<НИИ\hfillЭСУ>>\\
\hrulefill~Иванов~И.~И.\\
}
<<\hspace{0.25cm}>>~\rule{2cm}{0.25pt}~201\hspace{0.25cm}г.\hfill
\end{minipage}
\end{flushright}

Сделать строку для номера указа также не составит труда. Кажется, в каком-то из пакетов отдельно определен символ "№", но я нахожу нерациональным подключать целый пакет только ради него:


\begin{flushleft}
\rule{2cm}{0.25pt}~N$^{\underline{\circ}}$~\rule{2cm}{0.25pt}
\end{flushleft}

Указываем название документа и выравниваем по центру строки:


\begin{center}
Экспертное заключение\\
о возможности опубликования информации
\end{center}

Наконец, нам выдалась возможность воспользоваться пакетом ulem. Для нас пакет примечателен в первую очередь тем, что подчеркнутый текст автоматически переносится на следующую строку в отличие от underline. Мы не знаем, сколько пространства займет текст, и чтобы линии всегда доходили до полей, мы добавляем hfill.


Экспертная комиссия (руководитель-эксперт) ЗАО <<НИИ ЭСУ>> \uline{исполнительный директор ЗАО <<НИИ ЭСУ>> Петров П. П.\hfill}\\

Теперь мы дошли до самой интересной части документа. Подстрочные пояснения мы реализуем с помощью макроса underset пакета amsmath. Единственная проблема, возникающая при таком подходе — работа в математическом режиме. Соответственно, hfill нам уже не поможет. Тут нам придется проделать немного больше работы: вручную растянуть боксы с помощью hspace и расставить при необходимости принудительные переносы. Изначально я пытался автоматизировать и эту часть при помощи resizebox пакета graphicx, но это не привело к удобоваримым результатам. (Приглашаю в комментарии знатоков ТеХ-программирования).


рассмотрев\\
$\underset{\text{(ФИО автора, вид, название материала)}}{\text{\uline{тезисы и доклад Кузнецова К. К. <<Периферийные вычисления для систем управления>>\hspace{2.75cm}}}}$\\
\uline{для участия в форуме <<Электронные системы управления>>, проводимом с 1 по 10 сентября 2019 года по адресу г. Новые Васюки, Российская Федерация, ул. Пушкина, дом 37\hfill}\\

Самая юридически важная часть заявления:


Подтверждает, что представленный материал:\\ $\underset{\text{(содержит ли информацию с ограниченным доступом или компетенции МО РФ)}}{\text{\uline{информацию с ограниченным доступом или компетенции МО РФ не содержит\hspace{4.25cm}}}}$\\
На публикацию материалов получить разрешение:\hfill$\underset{\text{(следует ли)}}{\text{\uline{\hspace{3.5cm}не следует\hspace{3.5cm}}}}$\\
$\underset{\text{(наименование организации с указанием ведомственной принадлежности, заказчика работ)}}{\rule{\textwidth}{0.25pt}}$\\
Заключение экспертной комиссии: \uline{Тезис и доклад могут быть опубликованы в открытых источниках\hfill}\\

Наконец, назначаем ответственных экспертов. Можем оставить и так, а можем вписать реальные фамилии и должности, не забыв при этом про hspace:


$\underset{\text{(должность, подпись, инициалы)}}{\rule{\textwidth}{0.25pt}}$\\
$\underset{\text{(должность, подпись, инициалы)}}{\rule{\textwidth}{0.25pt}}$\\
$\underset{\text{(инициалы руководителя подразделения, должность, подпись)}}{\rule{\textwidth}{0.25pt}}$\\

Финальные штрихи

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

Отдельную благодарность я хотел бы выразить авторам статей:
habr.com/ru/post/207364 за авторством dbarashev
habr.com/ru/post/144648 за авторством Skiminok

Удачной верстки!

Исходный текст


\documentclass[12pt,a4paper,notitlepage]{article}
\usepackage{cmap} %%% language, font, encoding
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel} %%% pagesize
\usepackage[top=2cm,bottom=2cm,left=2cm,right=2cm,nohead,nofoot]{geometry} %%% line spacing and indentation
\usepackage[doublespacing]{setspace} %%% working with graphics
\usepackage{graphicx} \usepackage{amsmath}
\usepackage{ulem} \begin{document}
\pagestyle{empty}
\vfill
\begin{flushright}
\begin{minipage}{0.4\textwidth}
\centering{
УТВЕРЖДАЮ\\
}
\raggedright{
Генеральный\hfillдиректор\hfillЗАО\hfill<<НИИ\hfillЭСУ>>\\
\hrulefill~Иванов~И.~И.\\
}
<<\hspace{0.25cm}>>~\rule{2cm}{0.25pt}~201\hspace{0.25cm}г.\hfill
\end{minipage}
\end{flushright}
\vfill
\begin{flushleft}
\rule{2cm}{0.25pt}~N$^{\underline{\circ}}$~\rule{2cm}{0.25pt}
\end{flushleft}
\vfill
\begin{center}
Экспертное заключение\\
о возможности опубликования информации
\end{center}
\vfill
Экспертная комиссия (руководитель-эксперт) ЗАО <<НИИ ЭСУ>> \uline{исполнительный директор ЗАО <<НИИ ЭСУ>> Петров П. П.\hfill}\\
рассмотрев\\
$\underset{\text{(ФИО автора, вид, название материала)}}{\text{\uline{тезисы и доклад Кузнецова К. К. <<Периферийные вычисления для систем управления>>\hspace{2.75cm}}}}$\\
\uline{для участия в форуме <<Электронные системы управления>>, проводимом с 1 по 10 сентября 2019 года по адресу г. Новые Васюки, Российская Федерация, ул. Пушкина, дом 37\hfill}\\
Подтверждает, что представленный материал:\\ $\underset{\text{(содержит ли информацию с ограниченным доступом или компетенции МО РФ)}}{\text{\uline{информацию с ограниченным доступом или компетенции МО РФ не содержит\hspace{4.25cm}}}}$\\
На публикацию материалов получить разрешение:\hfill$\underset{\text{(следует ли)}}{\text{\uline{\hspace{3.5cm}не следует\hspace{3.5cm}}}}$\\
$\underset{\text{(наименование организации с указанием ведомственной принадлежности, заказчика работ)}}{\rule{\textwidth}{0.25pt}}$\\
Заключение экспертной комиссии: \uline{Тезис и доклад могут быть опубликованы в открытых источниках\hfill}\\
Члены экспертной комиссии (руководитель-эксперт):\\
$\underset{\text{(должность, подпись, инициалы)}}{\rule{\textwidth}{0.25pt}}$\\
$\underset{\text{(должность, подпись, инициалы)}}{\rule{\textwidth}{0.25pt}}$\\
$\underset{\text{(инициалы руководителя подразделения, должность, подпись)}}{\rule{\textwidth}{0.25pt}}$\\
\vfill
\end{document}

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть