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

в 23:27, , рубрики: latex, бланки, верстка, метки: , ,

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

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

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

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

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

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

begin{flushright} % сдвигает содержимое окружения вправо
begin{tabular}{p{.5textwidth}} % делает таблицу из одной колонки шириной в половину текста
Кому 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}[.5textwidth]
  Кому \
  от\
  проживающего\
  \
  тел.\
  документ, удостоверяющий личность\
  серия rule{2cm}{0.25pt} № \  % rule сделает линейку указанной длины и толщины
  выдан
end{lines}

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

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

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

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

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

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

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

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

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

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

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

Линии

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

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

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

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

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

hrule height 1ptkern 2pt hrule height 0.25pt
Всё вместе

Готовый бланк можно скачать здесь, а на обновляющиеся исходники поглазеть здесь

Автор: dbarashev

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js