Как стать автором
Обновить

Практические советы по верстке бланков заявлений в ЛаТеХе

Время на прочтение3 мин
Количество просмотров27K
Несколько полезных приемов для любителей LaTeX'а, желающих сверстать бланк какого-нибудь заявления. Будем для примера верстать форму претензии к Почте России (её «официальный» вариант можно, если повезёт, скачать с сайта Почты России). Всю верстку от первой и до последней буквы объяснять не будем, предполагая, что читатель с основами ЛаТеХа знаком. Рассмотрим специфические рецепты верстки «линеек» где нужно вписать пропущенные слова, чекбоксов с метками, подписей мелким шрифтом снизу текста и линий разной толщины и прерывистости.

Разумеется, рецепты не единственно возможные и наверняка чем-нибудь да неправильные. Если знаете, как готовить лучше, милости просим в комментарии.




Адресат заявления

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

Простейший код, делающий желаемое, выглядит так:

\begin{flushright} % сдвигает содержимое окружения вправо
\begin{tabular}{p{.5\textwidth}} % делает таблицу из одной колонки шириной в половину текста
Кому \hrulefill \\ % \hrulefill делает линию до конца строки
от \hrulefill
\end{tabular}
\end{flushright}

Мы его немного модифицируем, чтобы окружения flushright, tabular и макрос \hrulefill вставлялись автоматически. Для этого определим новое окружение lines:

\newenvironment{lines}[1][\textwidth] % по умолчанию линейки на всю ширину текста
{
\newcolumntype{E}{>{}p{#1}<{\hrulefill}} % в конце нашего столбца будет приписываться \hrulefill
\begin{flushright} % автоматически вставим flushright
\begin{tabular}[h]{E} % и tabular нужного формата
}
{\end{tabular}\end{flushright}
}

использовать его можно так:

\begin{lines}[.5\textwidth]
  Кому \\
  от\\
  проживающего\\
  \\
  тел.\\
  документ, удостоверяющий личность\\
  серия \rule{2cm}{0.25pt} № \\  % \rule сделает линейку указанной длины и толщины
  выдан
\end{lines}



Поля для галочек

Обвести что-то рамочкой можно макросом \fbox, а вот как сделать пустой бокс нужного размера, скажем, 3 миллиметра? Способов наверняка много. Можно воспользоваться окружением minipage, которое позволяет указать ширину и высоту: \begin{minipage}[c][0.3cm]{0.3cm}\quad\end{minipage}, а можно и низкоуровневыми командами \vbox и \hbox: \vbox to 3mm {\vfil \hbox to 3mm{} \vfil}. В любом случае, писать каждый раз столько кода не хочется, поэтому давайте сделаем новую команду \chkbox и будем передавать ей аргументом текст, который надо поместить рядом с чекбоксом.

% \: сделает пробел между квадратиком и текстом, 
% а \parbox сделает параграф нужной ширины, чтобы в тексте можно было использовать переносы строк
% не забудьте включить пакет calc для арифметического действия с длинами
\newcommand\chkbox[1]{\fbox{\begin{minipage}[c][0.3cm]{0.3cm}\quad\end{minipage}}\:\parbox[t]{\linewidth - 0.3cm}{#1} 
}

Разместим квадратики на странице при помощи таблицы:

\begin{tabular}{p{.17\textwidth}p{.25\textwidth}p{.25\textwidth}p{.3\textwidth}} % отрегулируйте ширину колонок по вкусу
\chkbox{авиа} & \chkbox{уведомление о\\ вручении} & \chkbox{наложенный платеж} & \parbox[t]{.3\textwidth}{сумма наложенного\\ платежа \hrulefill} \\ 
\end{tabular}



Текст под линией

Сделать подчеркнутый текст несложно, а вот как сделать «надчеркнутый», например, написать мелким шрифтом «Фамилия И.О.» под полем для ФИО? Один из способов — воспользоваться макросом \underset из пакета amsmath:

% текст "должность, фамилия и подпись должностного лица" под пустой линейкой шириной в полстраницы
$\underset{\text{(должность, фамилия и подпись должностного лица)}}{\underline{\hspace{0.5\textwidth}}}$



Линии

Наконец, часто бывают нужны линии на всю страницу. В верстаемом примере требуется прерывистая линия, отделяющая отрывной талон, а иногда в заявлениях или обращениях линиями отделяют «фирменную» шапку от остального текста (как, например, в письме на картинке справа). Прерывистую линию можно сделать при помощи макроса \hdashrule из пакета dashrule:

% линейка шириной во всю страницу толщиной 1 пункт, опущенная на 2 миллиметра относительно базовой линии, 
% с шаблоном "штрих 3 миллиметра пробел 1 миллиметр"
\hdashrule[-2mm]{\textwidth}{1pt}{3mm 1mm}

Сплошные линии можно сделать командой \rule, у которой такой же синтаксис, за исключением отсутствия последнего аргумента (шаблона линии). Две сплошные линии разной толщины сделать несложно:

\rule{\textwidth}{.5mm}
\rule{\textwidth}{.25mm}

но расстояние между ними получается слишком большим. Можно поиграться со сдвигом линеек, но проще воспользоваться командами \hrule и установкой кернинга:

\hrule height 1pt\kern 2pt \hrule height 0.25pt


Всё вместе

Готовый бланк можно скачать здесь, а на обновляющиеся исходники поглазеть здесь
Теги:
Хабы:
Всего голосов 20: ↑20 и ↓0+20
Комментарии14

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань