12/13/2010

Создание постеров с beamerposter

Некоторое время назад был опубликован пост об Inkscape, в котором уважаемые комментаторы попеняли автору на то, что не использовал для постеров beamerposter. Автор взял на себя очередное социалистическое обязательство в этот самый beamerposter потыкать палочкой. Результаты оной деятельности можно прочесть далее.

Итак, герой дня - beamerposter, небольшое и в меру красноглазое расширение пакета Beamer. Только в отличие от beamer, который создаёт презентации, beamerposter, как можно догадаться из названия, пытается выдавать плакаты, транспаранты для пионерских речёвок и научные постеры.

[Лирика] Документация... <неразборчиво>
... просто бесподобна: написанная двумя Адмиралами Очевидностями, с двумя убогими темами (и никакой информации о том, что темы Beamer вы использовать не сможете), коряво изложена в прилагающемся отдельно PDF-файле, и на сайте такие говорящие за себя примеры, что просто диву даёшься - неужели кто-то вот этим пользуется!?
Автор этих строк уже готовится арендовать большую сцену, и, в стиле Стива Балмера, начать по ней прыгать и орать дурным голосом "Документейшн,
Документейшн, Документейшн!". Ибо дывелоперсов с красными глазёнками и барабанчиками на шеях уже понабежало много, а usability и функционал ими написанного почему-то не радует. Более того, ни разу не очевидно, как их поделия использовать простым смертным.
[/Лирика]


Установка и настройка beamerposter
Скажу сразу: поход на официальный сайт вам ничегошеньки не даст, ибо там, кроме самого стилевого файла и двух совершенно страшных примеров, больше ничего нет. Чтобы начало было не таким страшным, можно скачать отсюда мой пример, который работает и выглядит удобоваримо:

Предупреждаю также, что описанное ниже работает только на TeXLive, так что те, кто ещё пользуется tetex, обновляйтесь.

Итак, последовательность действий:
  1. скачать архив с примером отсюда;
  2. распаковать в любой каталог;
  3. открыть virens_beamerposter_demo.tex и вдумчиво на него посмотреть;
  4. скомпилировать пример;
  5. открыть его kghostview.
После этого переходим к настройке всего этого под себя.

Описание типичного постера в beamerposter
Шапка (до окружения document) документа в LaTeX для beamerposter выглядит следующим образом:

\documentclass[final,hyperref={pdfpagelabels=false}]{beamer} %% <- используем Beamer
\mode{\usetheme{Lankton}} %% <- название темы оформления для постера (это НЕ ТЕМА от Beamer!)
\usepackage{times}
\usepackage{ragged2e} %% <-
\usepackage{amsmath,amsthm, amssymb, latexsym} %% <- пакеты расширений LaTeX по вкусу
\boldmath %% <- математические формулы будут полужирными, чтоб в глаза било
\usepackage[english]{babel} %% <- Англiцкi пырыносы
\usepackage[latin1]{inputenc} %% <- Англiцка мова

\usepackage{graphicx}
\graphicspath{{figures/}}

% \usepackage[orientation=portrait,size=custom,width=40,height=80,scale=.6,debug]{beamerposter}
\usepackage[orientation=portrait,size=a0,scale=1.4]{beamerposter} %% <- задаём ориентацию и размер страницы

%-- Header and footer information ----------------------------------
\newcommand{\footleft}{School of Electrical engineering, the University of Newcastle, Australia}
\newcommand{\footright}{email: mail@mvkonnik.info}
\title{Fantastic Poster About My Research} %% <- Заголовок постера
\author{Mikhail V. Konnik} %% <- Авторы постера
\institute{The University of Newcastle, Australia} %% <- Место работы Авторов постера
%-------------------------------------------------------------------


Далее всё будет разворачиваться в окружениях:

%-- Main Document --------------------------------------------------
\begin{document}
\begin{frame}{}

%%% наш нобелевский постер здесь

\end{frame}
\end{document}
%-- Main Document --------------------------------------------------

Написание текста, иллюстрации и формулы - всё как в привычном ЛаТеХе. Теперь о том, как разбивать текст по колонкам и блокам - основным составляющим постера.

Цветовая гамма
Для того, чтобы изменить цвета в выдаваемом постере, придётся немного покрасноглазить с редактированием стилевого файла. Это в общем не страшно, и несколько проще наложения RT-патчей на ядро, но требует некоторых комментариев.

Итак, открываем файл beamerthemeLankton.sty в вашем любимом текстовом редакторе и в самом начале находим заданные цвета под названиями butter и orange.
\definecolor{butter}{rgb}{0.98824, 0.91373, 0.30980} % #fce94f
\definecolor{orange}{rgb}{0.98824, 0.68627, 0.24314} % #fcaf3e

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

\definecolor{deepdeepblue}{rgb}{0.16471, 0.039216, 0.42745}
\definecolor{deepblue}{rgb}{0.22, 0.1, 0.99}
\definecolor{normblue}{rgb}{0.27059, 0.38039, 0.95294}
\definecolor{backgrndblue}{rgb}{0.79608, 0.69804, 1}

Далее идут команды вида \setbeamercolor, которые и задают цвета отдельных элементов.
Вот, например, как задать цвет заголовка постера и цвета имён авторов:

\setbeamercolor{title in headline}{fg=deepblue}
\setbeamercolor{author in headline}{fg=normblue}

Остальные цвета задаются аналогичным образом. Вменяемые названия переменных сильно облегчают нам задачу в отсутствие нормальной документации.

Блоки
Минимальной единицей организации информации в шаблоне является блок. В блоках содержатся рисунки и текст: Introduction, Results, Conclusion и другие - всё как в обычных научных статьях. Для создания блоков используем окружение block, например вот так:
\begin{block}{Summary}
This is a poster containing text and other things
This part is the summary. People might read this. $\alpha = 1$
\end{block}
Это приведёт к тому, что текст, заключённый в блок, займёт всю ширину страницы. Название, в данном случае Summary, будет оформлено отдельно от текста (это зависит от используемой темы). Делать блоки во всю ширь страницы хорошо, если это, скажем, Summary или Conclusion. Для экспериментальных данных это не всегда уместно - лучше всего разбить блоки на подблоки и организовать их в несколько колонок.


Колонки
Если нужно разбить текст постера на колонки, то сначала пишем:
\begin{columns}[t]
%%% здесь будет текст, разбитый на несколько колонок
\end{columns}
В квадратных скобках указывается выравнивание колонок. Выравнивание может быть: c (center) - по центру, b (bottom) - по нижнему краю, t или T (top) -- по верхнему краю (результаты t и T немного различаются.

Далее внутри окружения \begin{columns} .... \end{columns} создаём, собственно, сами колонки необходимой ширины (можно использовать относительную ширину типа 0.32\linewidth) с помощью другого окружения, \begin{column} .... \end{column} . После окончания колонки правила хорошего тона предписывают написать в качестве комментария номер колонки, чтобы потом не запутаться в них.

После этого, внутри каждого окружения \begin{column} .... \end{column} размещаем таблицы, графики, текст и формулы. Всё вместе это выглядит так:

\begin{columns}[t]
%
% %-- Column 1 ---------------------------------------------------
\begin{column}{0.32\linewidth}

%-- Block 1-1
\begin{block}{Summary}
This is a poster containing text and other things
This part is the summary. People might read this
\end{block}

%-- Block 1-2
\begin{block}{Motivation}
You can make a poster very quickly and easily by cutting and pasting
the \LaTeX~codes from the paper!
\end{block}

%-- Block 1-3
\begin{block}{Columns}
The columns will automatically align with each other and try to look
% as nice as possible. You may have to add {\tt$\backslash$vspace\{1pt\}}
commands to adjust the spacing here and there. Remember that you can
use positive or negative numbers.
\end{block}

\end{column}%1

%-- Column 2 ---------------------------------------------------
\begin{column}{0.32\linewidth}

%-- Block 2-1
\begin{block}{Lists}
\begin{itemize}
\item You can make
\item lists, that
\item allow people to see quickly
\end{itemize}
\end{block}

%-- Block 2-2
\begin{block}{Math}
Include math within the text is as simple as $1+1=2$. You can also
highlight more important equations like this:
\begin{equation}
\int_0^1\sin(x)+\cos^2(x)+\alpha x~d\!x
\end{equation}
\end{block}

%-- Block 2-3
\begin{block}{Pictures}
\begin{figure}[htb]
\centering
\includegraphics[width=1\columnwidth]{science}
\end{figure}
\end{block}

\end{column}%2

%-- Column 3 ---------------------------------------------------
\begin{column}{0.32\linewidth}

%-- Block 3-1
\begin{block}{Experiments}
Remember to put lots of figures on your poster... Nobody reads anymore!
\end{block}

%-- Block 3-2
\begin{block}{Conclusion}
Much less annoying than PowerPoint. Copy and Paste from your
document. Overall, a great idea!
\end{block}

%-- Block 3-3
\begin{block}{Logo}
To change the logo (if you don't want to represent for Georgia Tech).
Replace the file {\tt logo.png} and with the logo of your choice!
Make sure the background is black.
\end{block}

\end{column}%3

\end{columns}

В данном примере текст разбит на три колонки, в которых содержатся блоки.


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

Выравнивание текста по ширине

По умолчанию текст в блоках выровнен влево, что не очень красиво смотрится. Это можно исправить, подключив пакет ragged2e в преамбуле:
\usepackage{ragged2e} %% justify the text.
Выравнивание по ширине блока делается так же, как и в Beamer, с помощью команды \justifying которую следует поместить после блока. Например вот так:
\begin{block}{Summary} \justifying
Это поможет выровнять текст по ширине внутри блока.

Режим "черновик"
Если у вас в постере очень большие рисунки, вы будете долго ждать, пока kghostview их отрисует. Для горячих парней это неприемлемо, и чтобы они не кипятились, можно выключить на время отображение рисунков, добавив в преамбулу документа:
\documentclass[draft,hyperref={pdfpagelabels=false}]{beamer}
После этого в postscript-файле будут отображаться только пустые места для рисунков в рамках:


Это существенно упростит и ускорит перерисовку документа при подготовке. Не забудьте закомментировать эту опцию перед финальной компиляцией для отправки в пресс-центр.

Компиляция и вывод на печать
Этот код можно скомпилировать в PostScript - так удобнее работать при создании постера, когда всё компилируется в PostScript и просматривается с помощью KGhostView (он умеет отслеживать изменения в файле и автоматически перезагружать файл, опция в меню Settings-> Watch File). Окончательный вариант перегоняем в PDF с помощью:
pdflatex virens_beamerposter_demo.tex
и на флешке несём в местную типографию для изваяния шедевра. Также можно сначала перегнать в postscript вот так:
latex virens_beamerposter_demo.tex
dvips virens_beamerposter_demo

и затем уже в PDF. Обычно типографии разнятся во вкусах: кто-то любит PDF, кому-то подавай postscript, а некторые любят только TIFF.


Ссылки по теме
Официальный сайт бесполезен чуть менее, чем совсем: авторам не позволяет религия один раз сесть и сделать нормальную документацию, зато позволяет двести раз отвечать в гуглгруппе на одни и те же вопросы.
Сколько-нибудь вменяемая тема Lankton для beamerposter, на которой и основан мой пример. Автор сей темы, будучи макинтошевцем, насовал туда каких-то настолько замороченных пакетов расширений, что они при компиляции напрочь срезали все математические формулы. Пришлось доработать напильником тему Lankton, так что можно без применения кувалды, паяльника и такой-то матери переделать её в то, что хоть как-то работает. На русском есть пост про beamerposter на блоге tuxray.

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

  1. Хех. Вот как раз вчера подумалось, что латеховцы такие латеховцы, что могут зарваться и даже какие–нибудь журнальчики и проч. верстать в любимом инструменте, хоть он для того и не предназначен. Хотя, если судить по твоему посту, должно быть удобно.

    Ты это, косяки поправь:
    темы Beamer вы использоваться не сможете
    Тут у тебя что–то руский сломался, твой предложение есть плохо согласован.

    Ну и парочка авторских помарок :)
    Предупреждаю так же
    Так же можно сначала перегнать в postscript

    ОтветитьУдалить
  2. Полезный пост. Если возникнет необходимость - знаю где искать

    ОтветитьУдалить
  3. @Minoru комментирует...
    О, а вот и наш граммарштандартнацифюрер на фольксвагене приехал! :-) А не соблаговолит ли ув.тов.Минору пройтись калёным железом по предыдущему посту?

    Вот как раз вчера подумалось, что латеховцы такие латеховцы, что могут зарваться и даже какие–нибудь журнальчики и проч. верстать в любимом инструменте
    А ведь могут. У меня пост лежит в загашниках (можешь глянуть) про это. Старый рваный баян, конечно, но тем не менее - верстать журнал в ЛаТеХе можно.

    Хотя, если судить по твоему посту, должно быть удобно.
    Не очень. Там в стилевом файле трёхколоночный набор забит гвоздями, а сам код писал кто-то под редкостной дурью. В общем, править его - себе дороже. Результат получил приемлемый, но я заморачивался с этим года 4 назад, когда делать было нефига.

    Ты это, косяки поправь
    Дык, ну а то ж!

    Тут у тебя что–то руский сломался, твой предложение есть плохо согласован.
    Их бин читать много инглиш паперс, соу русиш парсер капутен темпорари :-))

    Ну и парочка авторских помарок :)
    Пофiксив.


    @Антон комментирует...
    Полезный пост.
    Да, кстати. Там раздел лирики, конечно, длинноват и резковат, но предыдущий вариант был с непечатными пятиэтажными ругательствами.

    Если возникнет необходимость - знаю где искать
    Ага, я теперь тоже :-))

    ОтветитьУдалить
  4. Простите за оффтопик, не знаете как закачать kml-точки в Гармин csx 60?

    ОтветитьУдалить
  5. А не соблаговолит ли ув.тов.Минору пройтись калёным железом по предыдущему посту?
    Done! Что–то я какой–то рассеянный стал — посты пропускаю. Эх, старею… :D

    ОтветитьУдалить
  6. И если вдруг кому понадобится сделать постер на русском, то сразу не выйдет. Только с pscyr.

    ОтветитьУдалить
  7. @Анонимный комментирует...
    Простите за оффтопик, не знаете как закачать kml-точки в Гармин csx 60?
    Не, не в курсе. Кстати, комменты можно писать и в старые посты - я читаю все.

    @Minoru комментирует...
    Done!
    Эээ... я был не точен, прошу пардону. Не совсем done: вот этот ещё остался. Кстати, будешь там первым комментатором :-)

    Что–то я какой–то рассеянный стал — посты пропускаю.
    Хочешь расстрою? Их было целых два. Про doxygen (вторая часть) и про перенос системы. Так что да, старик, годы берут своё. Но ничего, следующие посты будут короче.

    @Анонимный комментирует...
    И если вдруг кому понадобится сделать постер на русском, то сразу не выйдет. Только с pscyr.
    Анонимус! Выдавай скорей тайну золотого ключика! Как это сделать-то?

    ОтветитьУдалить
  8. Там в стилевом файле трёхколоночный набор забит гвоздями

    Неправда ваша. Вот это: http://const.uimech.org/MISC/MF2010-poster.pdf было легко сделано. Переменное количество колонок, если что.

    ОтветитьУдалить
  9. И если вдруг кому понадобится сделать постер на русском, то сразу не выйдет. Только с pscyr.

    Неправда ваша. Представленный выше ссылкой постер сделан со стандартным urwcyr.

    ОтветитьУдалить
  10. @Const комментирует...
    Переменное количество колонок, если что.
    Я не об этом - это я про журнал в латехе. Там три колонки, если не ошибаюсь. А в бимерпостере да, сколько хочешь. Удобно и просто, когда нормальный пример найдёшь.

    Представленный выше ссылкой постер сделан со стандартным urwcyr.
    Const, от представленного выше постера ни тепло, ни холодно. Народ интересуется, как постеры на русском делать. Выложи код, пожалуйста. Это сильно поможет интересовавшимся.

    ОтветитьУдалить
  11. открываем файл beamerthemeLankton.sty в вашем любимом текстовом редакторе
    На деле beamerthemeLankton.sty -- это часть преамбулы, автоматически вставляемая в текст на место \mode{\usetheme{Lankton}}. Поэтому открываем не текстовым редактором, а например kile, чтобы иметь подсветку синтаксиса и прочие вкусности.

    \begin{columns}[t]
    Раз уж автор взялся за подробное объяснение окружения columns, то стоило бы сказать, что здесь [t] -- выравнивание колонок по вертикали. Выравнивание может быть: c (center) -- по центру, b (bottom) -- по нижнему краю, t или T (top) -- по верхнему краю (результаты t и T немного различаются, можно поэкспериментировать). Ну и чтобы окончательно добить автора: [t] не нужно, это опция по умолчанию.

    \begin{block}{Summary} \justifying
    Так делать не стоит, если нужно такое выравнивание, то оно должно намертво вбиваться в шаблон. Да-да, здесь опять можно пнуть авторов шаблона.

    И напоследок, пенять создателей beamerposter не стоит -- это почти единственная возможность делать постеры в любимом LaTeX'е. В теме Lankton меняется не только цвет, как можно подумать из поста, а многое-многое другое. В теме дается обычное описание блоков как в Beamer, но требующее изучения beameruserguide.

    ОтветитьУдалить
  12. Уважаемый virens, давайте я вам отправлю исходники данного постера, а вы поступите с ними как сочтёте нужным: выложите as is, либо сделаете описание по ним…

    ОтветитьУдалить
  13. Да, кстати, двухколоночный набор всё-равно не прибит жёстко. Для любителей имеется замечательный пакет multicols (http://www.ctan.org/tex-archive/macros/latex/required/tools/multicol.pdf рекомендую: от одной до 4-х колонок в описании пакета, количество их изменяется в рамках одной страницы)

    ОтветитьУдалить
  14. @iv_vl комментирует...
    Поэтому открываем не текстовым редактором, а например kile
    За явный фавор кедам меня покарают местные гномоводы, за вим - емаксеры, за емакс - вимеры, на mcedit - все сразу :-) Так что стараюсь быть политкорректным, а вы в этом сравнении предлагаете "афроамериканцев" звать чернож$#@ми :-)

    Раз уж автор взялся за подробное объяснение
    ... то обязательно огребёт шишек на свою голову :-)
    За пояснение спасибо, вставил в текст. Комментаторы тем и ценны, что соринку в чужом глазу видят за версту и сразу же об этом радостно сигнализируют :-)

    Ну и чтобы окончательно добить автора
    Не надо меня из фоторужья щёлкать, я, может, только жить начинаю. На пенсию перехожу (с) почтальон Печкин.

    \justifying Так делать не стоит, если нужно такое выравнивание, то оно должно намертво вбиваться в шаблон.
    Шаблон от одного деятеля из Джорджии (США), так что чем богаты... На сайте бимерпостера эти два примера вообще страшные, как атомная война.

    И напоследок, пенять создателей beamerposter не стоит -- это почти единственная возможность делать постеры в любимом LaTeX'е.
    Стоит. Вместо того, чтобы написать подробную документацию и выложить ОДИН НОРМАЛЬНЫЙ прилично выглядящий пример, эти буратины нацарапали какой-то бред на своей страничке и выложили два примера, страшнее и ублюдочнее которых я просто не видел. Вот вам пример опенсорца: хорошая идея абсолютно угроблена подачей и документацией.

    Я ещё раз повторю свою позицию: программа хороша настолько, насколько хороша документация к ней. Пример: язык численных вычислений Yorick. Хорошая реализация и классная идея угроблены отсутствием доков и примером. И теперь мы давимся тормозным матлабом и кривой октавой.

    В теме Lankton меняется не только цвет, как можно подумать из поста, а многое-многое другое.
    А не надо "многое-многое другое". Даже с дефолтными настройками Lancton выдаёт пристойный результат. Вобщем, это всё, что надо. Собственно, мы же не конкурс красоты устраиваем.

    @Const комментирует...
    Уважаемый virens, давайте я вам отправлю исходники данного постера, а вы поступите с ними как сочтёте нужным
    Конечно, отправляйте: mydebianblog на джимайл дот ком. Или ссылку оставьте на исходники.

    ОтветитьУдалить
  15. Миша, ты меня разочаровал своей лирикой. Тебя Экслер укусил, что ли? :)

    ОтветитьУдалить
  16. @Роман Чепляка комментирует...
    Миша, ты меня разочаровал своей лирикой.
    Ну извини, Роман. Просто я много ругался плохими словами, когда сам пытался сделать постер по их "документации".

    Тебя Экслер укусил, что ли? :)
    Да куда уж мне до таких мэтров...

    Да, кстати, я немного поправил пост, добавил про просмотр в kghostview. Если пользователи Гнома напишут, чем они глядят на PostScript, чтоб обновлялось при изменении файла, буду благодарен.

    ОтветитьУдалить
  17. Русский в beamerposter

    необходимо всего лишь заменить \usepackage{times} на \usepackage{cyrtimes} в начале

    найдено здесь (+ объяснения)
    http://groups.google.com/group/linux.debian.bugs.dist/browse_thread/thread/c9ec6204ba4e12e4

    ОтветитьУдалить
  18. Спасибо за допиленные файлы и статью. Есть поправка: в преамбулу необходимо было добавить строку
    \setbeamertemplate{caption}[numbered]
    чтобы рисунки нумеровались автоматически. Иначе у меня не нумеровало (использую TeXlive2013 и TeXstudio)

    ОтветитьУдалить
  19. Для тех, кто парится с тем, как делать постер на русском, есть отличный шаблон, который непонятно почему хорошо работает и не коверкает шрифты http://www.latextemplates.com/template/baposter-portrait-poster. Только необходимо скачать пакет type1ec и прописать следующее:

    \usepackage[T1]{fontenc}
    \usepackage[english,russian]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage{type1ec}

    ОтветитьУдалить