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

Вёрстка визитных карточек в LaTeX

Время на прочтение 6 мин
Количество просмотров 22K
Доброго всем дня!

На хабре уже немало статей о том, как и где применяется вёрстка в LaTeX. От стандартных научных статей и презентаций до календарей и резюме.

Основным достоинством LaTeX изначально являлось освобождение пишущего от необходимости думать о расположении текста на страничке: автор пишет контент, а движок размещает всё в нужных местах.

Отсюда непреодолимое желание начать сверлить пилой и пилить буравчиком решить при помощи LaTeX задачу, требующую полного контроля расположения текста на странице. Классический пример — вёрстка визиток, которой мы и займёмся.

Сразу оговоримся, что разработкой дизайна мы заниматься не будем — кто-то уже выбрал для нас все отступы, шрифты, интерлиньяжи и т.д., и т.п. Мы же просто воплотим это ТЗ в шаблон LaTeX.

Допустим, что ТЗ выглядит следующим образом:

  • Логотип университета: высота изображения 20,6мм, левый верхний угол отстоит от левого верхнего угла карточки на 4,2мм по обеим координатам
  • Логотип лаборатории: высота изображения 20,6мм, правый верхний угол отстоит от правого
    верхнего угла карточки на 4,2мм по обеим координатам
  • Цвет текста в RGB: (00,62,92)
  • Цвет фона — цвет текста, разбавленный белым на 50% (или RGB (00,31,46))
  • Текст с именем и фамилией набран шрифтом Arial: размер 12, интерлиньяж 14,4. Расположен сразу под логотипами, отступ от левого края 18,5мм, поле справа — 4,2мм.
    Под ним с новой строки текст с должностью, Arial, размер 7, интерлиньяж 7,5
  • Текст с названием лаборатории, телефонами и адресом: Consolas, размер 5,5, интерлиньяж 7,5. Отступ слева 18,5мм, отступ снизу — 4,2мм, поле справа — 4,2мм
  • Оборотная сторона визитки: логотип университета на всю ширину, отцентрован по вертикали и горизонтали


Итак, поехали. Для начала надо выбрать компилятор: latex и pdflatex (вообще-то, в некотором смысле, это одно и то же, но для данной статьи это неважно) нам не нужны, потому что очень и очень плохо переваривают неродные шрифты. Если кто-то захочет подружить pdflatex и, скажем, шрифт Myriad, то количество необходимых телодвижений перейдёт все разумные рамки. XeLaTeX умеет работать с любыми шрифтами и понимает юникод, а больше нам ничего и не надо.

\documentclass{article}
\usepackage{fontspec}

Тип документа нам, в принципе, неважен, всё равно мы будем располагать элементы на страничке в обход стандартных механизмов. Пакет fontspec нам нужен для корректной работы с otf шрифтами и, помимо прочего, он позволяет с лёгкостью настраивать размер шрифта и интерлиньяж (подробнее об этом чуть ниже).

Следующий пункт: как решить вопрос с размером странички. Здесь на помощь приходит пакет geometry, который прекрасно с этим справляется.

\usepackage{geometry}


Наконец, ключевая подзадача: как контролировать положение текстовых блоков на странице, в частности, отступы от полей. Для этого мы воспользуемся пакетом textpos:

\usepackage[absolute]{textpos}

Пакет подключён с опцией absolute, то есть позиционирование блоков будет в абсолютных единицах.

Ещё нам пригодится пакет adjustbox — это один из способов контролировать положение картинок (и вообще т.н. boxed content'а):

\usepackage[export]{adjustpage}

Мы используем опцию export, чтобы стандартные команды пакета распространялись и на \includegraphics.

Наконец, пакет xcolor, так как мы захотим ввести свои собственные цвета.
\usepackage{xcolor}


Теперь займемся настройкой всех пакетов:

\geometry{paperwidth=85mm, paperheight=55mm, layoutwidth=85mm, layoutheight=55mm, left=0mm, top=0mm, right=0mm, bottom=0mm}

Здесь, как нетрудно догадаться, мы задаём размер бумаги, размер пространства, на котором будем располагать текст, и поля.

Зададим основной цвет текста, а также определим макросы для телефонов и адресов:

\definecolor{bl}{RGB}{0,62,92}
\newcommand{\phonei}{T. +7~XXX~XXX~XX~XX - M.  +7~XXX~XXX~XX~XX}
\newcommand{\emaili}{you@domain.somewhere}
\newcommand{\urli}{www.domain.somewhere}
\newcommand{\firstlineaddress}{Name of your Lab}
\newcommand{\secondlineaddress}{1, Nameless street\\* 123456, In The Middle of Nowhere, Earth}

А команда
\pagecolor{bl!50!white}
задаёт цвет фона разбавляя уже известный цвет «bl» белым на 50%.

Если мы захотим вставить логотипы и/или картинки на нашу визитку, то наилучшим вариантом будет использовать векторные форматы. Пусть эти файлы называются, соответственно, LogoUni.eps и LogoLab.eps. Мы их расположим рядом с нашим основным файлом. В приниципе, xelatex умеет работать «из коробки» со многими форматами изображений (к сожалению, svg к этому списку не относится).

Можно начинать воплощать требования в жизнь:

\begin{document}%

Располагаем логотип нашего ВУЗа так, чтобы левый верхний угол изображения имел координаты (4,2мм, 4,2мм) и высота логотипа составляла 20,6мм. Для этого мы воспользуемся окружением:

\begin{textblock*}{width}[a,b](xcoord,ycoord)
\end{textblock*}

Расшифровка довольно проста: текстовый блок шириной width надо расположить так, чтобы в точке на листе с абсолютыми координатами (xcoord,ycoord) оказалась точка блока с относительными координатами [a,b], которые изменяются от нуля до единицы. Если a=0, b=0, то мы располагаем левый верхний угол, если a=1,b=0, то правый верхний, если a=1,b=1, то правый нижний, а если a=0.5, b=0.5 — то центр нашего текстового блока.

Для регулировки высоты изображения просто воспользуемся стандартным методом \includegraphics:

\begin{textblock*}{50mm}[0,0](4.2mm,4.2mm)%
\noindent%
\includegraphics[height=20.6mm]{LogoUni.eps}%
\end{textblock*}

Команда \noindent нужна, чтобы движок не вставлял красную строку и не портил отступы. Замечу также, что знаки % в конце каждой строки — комментарии в TeX — здесь по существу, так как обычные переносы обрабатываются как пробелы и могут навредить вёрстке.

Аналогочным образом поступаем с логотипом лаборатории: располагаем правый верхний угол логотипа по указанным координатам.

\begin{textblock*}{20mm}[1,0](80.8mm,4.2mm)%
\noindent%
\includegraphics[height=20mm, right]{LogoLab.png}%
\end{textblock*}

Опция right в \includegraphics выравнивает картинку по правому краю текста.

Затем расположим блок текста с именем и должностью сразу под картинкой с логотипом, отступ слева — 24,8мм (высота картинки плюс отступ самой картинки):

\setmainfont{Arial}%
\fontsize{12}{14.4}\selectfont%
\begin{textblock*}{62.3mm}[0,0](18.5mm,24.8mm)%
{\color{bl}%
\noindent\namei\\*%
\fontsize{7}{7.5}\selectfont%
\posi%
}\end{textblock*}%

Команда \setmainfont задаёт семейство шрифтов для основного текста (подробнее можно почитать в документации к пакету fontspec), а \fontsize{x}{y} определяет размер шрифта x и интерлиньяж y. Команда \selectfont применяет изменения, введённые fontsize. Последняя команда \\* делает мягкий перенос и не начинает новый абзац.

Наконец, последний блок текста с телефонами и адресом лаборатории расположим с тем же самым отступом 18,5мм так, чтобы от нижние поля были 4,2мм:

\setmainfont{Consolas}%
 \fontsize{5.5}{7.5}\selectfont%
\begin{textblock*}{62.3mm}[0,1](18.5mm,50.8mm)
{\color{bl}%
\noindent\firstlineaddress\\*%
\secondlineaddress\\*%
\phonei\\%   
E. \emaili}\end{textblock*}%


Если мы хотим сделать оборотную сторону визитки — или сделать несколько визиток в одном файле, то обычные команды начала новой страницы (\pagebreak, \newpage, \clearpage, \cleardoublepage, и т.д.) просто так не сработают. Обычного текста на странце ведь нет, поэтому движок считает, что начинать новую страницу не надо. Обходится это всё следующим образом:

\null\newpage%


Уже по накатанной добавляем картинку с логотипом, располагаем центр текстового блока по центру бумаги:

\begin{textblock*}{85mm}[0.5,0.5](42.5mm,27.5mm)%
\noindent%
\includegraphics[width=85mm]%
{LogoUni.eps}%
\end{textblock*}%
\end{document} 

Итоговый документ:
\documentclass{article}
\usepackage{fontspec}

\usepackage{geometry}

\usepackage{xcolor}

\usepackage[export]{adjustbox}
\usepackage[absolute]{textpos}
\usepackage{tikz}

\geometry{paperwidth=85mm, paperheight=55mm, layoutwidth=85mm, layoutheight=55mm, left=0mm, top=0mm, right=0mm, bottom=0mm}

\definecolor{bl}{RGB}{0,62,92}
 
\newcommand{\phonei}{T. +7~XXX~XXX~XX~XX - M.  +7~XXX~XXX~XX~XX}%
\newcommand{\namei}{Name Surname}
\newcommand{\posi}{Position}
\newcommand{\emaili}{E. you@yourdomain.somewhere}
\newcommand{\urli}{yourdomain.somewhere}
\newcommand{\firstlineaddress}{Name of your Lab}
\newcommand{\secondlineaddress}{1, Nameless street\\* 123456, In The Middle of Nowhere, Earth}

\pagecolor{bl!50!white}

\begin{document}%
\begin{textblock*}{50mm}[0,0](4.2mm,4.2mm)%
\noindent%
\includegraphics[height=20.6mm]{LogoUni.eps}%
\end{textblock*}%
\begin{textblock*}{50mm}[1,0](80.8mm,4.2mm)%
\noindent%
\includegraphics[height=20.6mm,right]{LogoLab.eps}%
\end{textblock*}%
%
\setmainfont{Arial}%
\fontsize{12}{14.4}\selectfont%
\begin{textblock*}{62.3mm}[0,0](18.5mm,24.8mm){\color{bl}\noindent\namei\\*%
\setmainfont{Arial}%
\fontsize{7}{7.5}\selectfont%
\posi%
}\end{textblock*}%
\setmainfont{Consolas}%
 \fontsize{5.5}{7.5}\selectfont%
\begin{textblock*}{62.3mm}[0,1](18.5mm,50.8mm){\color{bl}\noindent\firstlineaddress\\*%
\secondlineaddress\\*%
\phonei\\%   
\emaili}\end{textblock*}%
\null\newpage%
\begin{textblock*}{85mm}[0.5,0.5](42.5mm,27.5mm)%
\noindent%
\includegraphics[width=85mm]
{LogoUni.eps}%
\end{textblock*}%
\end{document} 


Логотипы я для этой статьи сам набросал в Inkscape, цвета и шрифты подобрал «лишь бы было», так что за эстетическую составляющую ручаться не буду.

Итоговая лицевая и оборотная сторона:



Ссылки на документацию к использованным пакетам:

adjustbox
geometry
textpos
xcolor
Теги:
Хабы:
+15
Комментарии 21
Комментарии Комментарии 21

Публикации

Истории

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн