суббота, 30 мая 2009 г.

Постер в LaTeX

Задача - создать постер в LaTeX. Для начала, какое премущество имеет LaTeX перед WYSIWYG в создании постера? В создании обычного-то текста всё понятно, но ведь в постере желательно видеть сразу как всё будет выглядеть. Да, есть такой недостаток, но преимущество состоит в том, что есть непосредственная возможность копировать текст прямо из ваших презентаций, статей, отчётов и тому подобного, созданного в латехе. Таким образом, можно затратить куда меньше времени, чем на выравнивание рисунков в кореле (некоторые «умельцы» и в Powerpoint умудряются постер наваять - качество явно страдает). Более того, получится весьма приличный результат.

В интернете вы можете найти по запросу "latex poster" много всего. Я здесь напишу о том, что лично я использовал.

Первый подход - просто a0poster

Просто вот так взять, да и написать постер с помощью пакета a0poster как-то не складывалось - было неохота читать документацию к пакету, да и вообще порой с нуля тяжеловато бывает. И тут мне попалась на глаза замечательная ссылка. Там описывается как можно сделать постер в латехе и можно скачать исходные файлы. По примеру уж как-нибудь разберёмся! Пример мне понравился, его я и использовал, несколько модифицировав, для себя.

Итак, сразу выброшу сюда свой готовый исходник с комментами.

\documentclass[a0,portrait]{a0poster} %размер листа и ориентация (можно landscape)
\usepackage{palatino}  % ваш шрифт.  Можно times, helvetica и т.д.
\usepackage{xcolor}    % чтобы задать свои цвета.
\usepackage{multicol}  % текст в несколько колонок.
\usepackage{graphicx}
\usepackage{epsfig,float} % чтобы подключить рисунки. Просто graphicx
                          % не хватит.  Не спрашивайте почему - не знаю уже.

\usepackage{psfrag}       % чтобы можно было на рисунках подправить
                          % какие-нибудь надписи.  Подробнее о psfrag
                          % как-нибудь потом.

\usepackage{amssymb,amsmath}    % набираем математику

\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
% зададим относительный путь до рисунков:
\graphicspath{{pictures/}{../pictures/pdf/}{../pictures/eps/}}

\bibliographystyle{unsrt}  % стиль бибтеха

% зададим сокращения, которые будем использовать далее:
\newcommand{\celcius}{\,^{\circ}\mathrm{C}}     %градус цельсия.
\def \sample{$\rm SrCo_{0.6}Fe_{0.2}Nb_{0.2}O_{3-\delta}$}
\def \nb0{$\rm SrCo_{0.8}Fe_{0.2}O_{3-\delta}$}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%% геометрия %%%%%%%%%%%%%%%%%%%%%%%%%
\addtolength{\textwidth}{0.5cm} % чуть пошире ширина текста
\addtolength{\oddsidemargin}{-0.7cm} % немного убавим слева, чтобы
           % основное пространство было более или менее в середине.

\setlength{\columnsep}{2cm}     % расстояние между колонками.
\setlength{\columnseprule}{1pt} % толщина разделительной линии
                                % между колонками.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\pagestyle{empty}  % без нумерации страниц

\definecolor{MYBlue}{rgb}{0.0470,0,0.5294}  % задаём свой цвет (для разделов)

% Оформление разделов
\makeatletter
\renewcommand{\section}{\@startsection
        {section}%                          % the name
        {1}%                                % the level
        {0mm}%                              % the indent
        {-0.6\baselineskip}%                % the beforeskip
        {1mm}%                              % the afterskip
        {\LARGE\color{MYBlue}\bfseries}}    % the style
\renewcommand{\subsection}{\@startsection
        {subsection}%                       % the name
        {2}%                                % the level
        {0mm}%                              % the indent
        {-0.6\baselineskip}%                % the beforeskip
        {1mm}%                              % the afterskip
        {\Large\color{MYBlue}\bfseries}}    % the style
\renewcommand{\subsubsection}{\@startsection
        {subsubsection}%                    % the name
        {3}%                                % the level
        {0mm}%                              % the indent
        {-0.6\baselineskip}%                % the beforeskip
        {1mm}%                              % the afterskip
        {\Large\color{MYBlue}\bfseries}}    % the style
\makeatother

%%%%%%%%%%%% Здесь начинается ваш постер %%%%%%%%%%%%%%%
\begin{document}

% заголовок
\parbox[c]{0.1\textwidth}{
   \includegraphics[width=0.1\textwidth]{logo_bic} %левый логотип
}
\hfill
\parbox[c]{0.6\textwidth}{
   \begin{center}
     %название работы
     \Huge
     \sf
     High temperature structural rearrangements in perovskite revealed
     by \textit{ex situ} measurements
   \end{center}
}
\hfill
\parbox[c]{0.1\textwidth}{
   \includegraphics[width=0.1\textwidth]{SSRC} %правый логотип
}

% перечислим авторов
\begin{center}
  \parbox{0.26\textwidth}{
     \small
     \begin{center}
       M.~G.~Ivanov\\
       Novosibirsk State University\\
       {\tt mymail@ngs.ru}
     \end{center}
  }
  \parbox{0.26\textwidth}{
     \small
     \begin{center}
       A.~N.~Shmakov\\
       Boreskov Institute of Catalysis, SB RAS, Novosibirsk\\
       {\tt Hismail@inp.nsk.su}
     \end{center}
  }
\end{center}

\vspace{1cm}

% собственно, пора уже и текст написать!  То есть скопировать
% откуда-нибудь из ваших предыдущих текстов.

% три колонки
\begin{multicols}{3}

  \section{Introduction}
  \label{intro}

  Bla-bla-bla\ldots

  \section{\textit{In situ} high-temperature X-Ray measurements}
  \label{insitu}

  Again bla-bla-bla\ldots
  \begin{figure}[H]
    % вставка рисунка.  [H] обязательно!  Какова фундаментальная
    % проблема этого - не знаю.
    \includegraphics[width=\columnwidth]{nb02_lattice_vacuum_up_down_reduced}
    \caption{Lattice parameter of the sample while heating in
       vacuum.}\label{lattice_up_down}
  \end{figure}

  \section{\textit{Ex situ} measurements using SR}
  \label{exsitu}

  Some more information

  \section{Conclusion}

  It is time to make a conclusion.

\end{multicols}

\end{document}

Сложности в этом случае

Первая сложность заключается в том, что трудновато подобрать необходимый объём информации, чтобы постер был заполнен достаточно, дабы не было свободных мест в большом количестве, но и чтобы всё поместилось. В этом плане WYSIWYG, конечно, выигрывает. В любом случае, свободные места будут снизу, так что постер может оказаться чуть меньшего размера. Более того, можно увеличить зазор между разделами, например, для более равномерного распределения пространства. Это не такая уж и проблема.

Во-вторых, есть небольшие проблемы с расположением рисунков. Именно, небольшие, если вспомнить чудовищные трудности с ровным позиционированием рисунков в каком-нибудь визуальном редакторе. Проблема в том, что надо использовать опцию [H] в окружении figure, иначе рисунок не будет включён. А эта опция означает, что рисунок будет включён ровно туда, куда вы укажете, что не всегда идеально, если вспомнить прекрасную особенность латеха удачно расставлять плавающие объекты. Так что, не исключено, что с идеальным расположением рисунков придётся немного поиграться, но через пару-тройку перекомпиляций, вы будете довольны результатом, полагаю.

Beamerposter

Есть возможность использовать окружения из пакета beamer. Допустим, презентации в latex-beamer мы делать умеем. Так вот, пакет beamerposter предоставляет возможность создать постер с использованием стандартных окружений beamer. По сути, будет постер, составленный из различных блоков (block, exampleblock, alertblock). Соответственно, всё это будет уже по-разному оформлено в различных цветах. Надо сказать, что beamerposter является всего лишь надстройкой над a0poster, так что теоретически-то всё можно сделать и без него, но с ним оказалось удобнее.

На сайте с пакетом есть различные темы оформления. Дело в том, что обычные темы для beamer годятся лишь частично - в них не хватает оформления для большого заголовка с названием, авторами, логотипами. Я, например, скачал тему I6dv и подправил для своих нужд - об этом чуть ниже, а пока выложу набросок исходника.

Чтобы воспользоваться этим пакетом и темой, просто бросьте в директорию с вашим постером файлы стиля и темы, если не хотите заморачиваться.

\documentclass[final]{beamer}
\mode<presentation>
{
   \usetheme{I6dv} % тема
}
\usepackage{times}
\usepackage{amsmath,amssymb}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[orientation=portrait,size=a0,scale=1.1]{beamerposter}
% ориентация может быть landscape.
% размер - другой, какой захотите, например, a1,
% или какой-нибудь свой, size=custom,width=200,height=120
% scale - множитель на размер шрифта.  Очень удобно для подгонки
% содержимого постера для идеального заполнения пространства!
\usepackage{multicol}  % в несколько колонок

% нумерация рисунков в презентации
\setbeamertemplate{caption}[numbered]

\newcommand{\celcius}{\,^{\circ}\mathrm{C}}
\graphicspath{{pics/}}
\listfiles

% Display a grid to help align images
%\beamertemplategridbackground[1cm]

\title{\Huge Phase splitting with temperature in perovskite-type
   strontium cobaltite \\doped with Fe and Nb}

\author{Maxim G. Ivanov\inst{1}, Alexander N. Shmakov\inst{1,2},
   Sergey V. Tsybulya\inst{1,2}, Olga Yu. Podyacheva\inst{1}}
\institute[] % (optional, but mostly needed)
{
  \inst{1}%
  Boreskov Institute of Catalysis SB RAS, Russia
  \\
  \inst{2}%
  Novosibirsk State University, Russia
}

\date[May. 27-30th, 2009]{May. 27-30th, 2009}

\begin{document}
\begin{frame}{}
\vspace{-1cm}
\begin{columns}[t]  %выравнивание колонок постера по верху
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  \begin{column}{.39\linewidth}  % задаём ширину первой колонки

    \begin{block}{Introduction}
      Here is your introduction.
    \end{block}

    \vspace{2.5cm}  %Небольшой зазор (потом с ним поиграем на конечном этапе)

    \begin{block}{Experimental}
      \begin{exampleblock}{Samples preparation}
        The samples were prepared by\ldots
      \end{exampleblock}

      \begin{exampleblock}{The structural analysis}
        X-ray powder diffraction (XRPD) was performed at the\ldots
      \end{exampleblock}

      \begin{exampleblock}{Oxygen conductivity performance}
        The oxygen conductivity experiments were carried out by\ldots
      \end{exampleblock}

      \begin{columns}
        % разобьём данную колонку на два столбца для рисунков
        \column{0.35\textwidth}
        \begin{figure}[h]
          \centering
          \includegraphics[width=\columnwidth]{membrane-reactor-en}
          \caption{Scheme of the membrane reactor}
          \label{fig:membrane}
        \end{figure}

        \column{0.65\textwidth}
        \begin{figure}[h]
          \centering
          \includegraphics[width=\columnwidth]{all_plot_in_one_1_2_3}
          \caption{Characteristic data obtained
             at the set up}
          \label{fig:oxygen-conductivity}
        \end{figure}
      \end{columns}

    \end{block}  %конец Experimental

    \begin{exampleblock}{Acknowledgments}
      Many thanks to\ldots
    \end{exampleblock}
  \end{column}  %конец первой колонки

  \begin{column}{.59\linewidth}
    \begin{block}{Results and Discussion}
      Although the samples involved were considered to have\ldots

      \begin{figure}[h]
        % вставим два рисунка рядом другим образом
        \centering
        \includegraphics[width=0.49\textwidth]{diffraction_profile}\hfill
        \includegraphics[width=0.49\textwidth]{lattice-nb02-mm4}\\
        \parbox{0.49\textwidth}{\caption{Diffraction profile of 110 peak}
           \label{fig:diff-profile}}
        \parbox{0.49\textwidth}{\caption{Lattice parameters of the two
           phases}
           \label{fig:lattice-parameters-2phases}}
      \end{figure}
      Fig.~\ref{fig:lattice-parameters-2phases} shows\ldots

      \begin{columns}[t]  % разобьём на два столбца.
                          % выравнивание столбцов по верхней точке,
                          % чтобы не был один выше другого.
        \column{0.48\textwidth}
        \begin{exampleblock}{Phases proportion}
           If one considers the process of structural transformation
           to have\ldots
        \end{exampleblock}

        \column{0.48\textwidth}
        \begin{exampleblock}{Oxygen conductivity}
          The thermal dependence of oxygen conductivity through the
          membrane could be written as follows:\ldots
        \end{exampleblock}
      \end{columns}  %конец локального разбиениия

      \begin{exampleblock}{The similarity in activation energy values
           and the connection between oxygen conductivity and the
           second phase}
        The $E_{activation}$ values determined from these two methods
        turned out to be rather similar.
      \end{exampleblock}
    \end{block} % конец блока "Results and Discussion"

    \begin{block}{Conclusion}
      \begin{itemize}
          \item The first conclusion.
          \item The second conclusion.
          \item The third conclusion.
      \end{itemize}
    \end{block}  %конец "Conclusion"

  \end{column}  % конец второй большой колонки постера

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{columns}  % конец разбиения на колонки

\vfill

\end{frame}

\end{document}

Видно, что используется практически всё, как в обычной презентации beamer.

Теперь, вернёмся к темам. Открыв тему, скачанную с официального сайта, мы обнаружим, что там есть строчки, пытающиеся включить какой-нибудь логотип, естественно, не имеющий к вам отношения. Например, что-то типа:

\includegraphics[width=.6\linewidth]{logos/i6-hks44}
Найти это просто можно, выполнив поиск по «logo» (где-то в разделе \setbeamertemplate{headline}). Здесь просто надо поменять «logos/i6-hks44» на имя файла вашего логотипа и указать желаемую ширину.

В разделе \setbeamertemplate{footline} вы можете поменять подстрочную надпись. Например, я просто оставил свои координаты:

\setbeamertemplate{footline}{
  \begin{beamercolorbox}[wd=\paperwidth]{upper separation line foot}
    \rule{0pt}{2pt}
  \end{beamercolorbox}

  \begin{beamercolorbox}[ht=4ex,leftskip=1cm,rightskip=1cm]{footline}
    % здесь можно что-нибудь написать про себя или институт
    Boreskov Institute of Catalysis - Structural methods department -
    Novosibirsk, Russia \hfill Mail: \texttt{russia@nauki.net}
    \vskip1ex
  \end{beamercolorbox}

  \begin{beamercolorbox}[wd=\paperwidth]{lower separation line foot}
    \rule{0pt}{2pt}
  \end{beamercolorbox}
}

Проблемы с beamerposter

Нет в мире совершенства…

Так, например, я не понял, как настроить переносы слов. Простое подключение babel не помогает. Если в презентации переносы ни к чему, то на постере бы совсем не помешали. Вопрос пока открыт.

Проблема в a0poster вообще: не ясно как можно написать постер на русском. Трудность в том, что при подключении \usepackage[T2A]{fontenc} сбиваются размеры шрифтов - в заголовках вместо больших букв используются буквы стандартного размера. Но просто a0poster это хотя бы так проглатывает, а beamerposter вообще отказывается собираться. Впрочем, проект beamerposter развивается, и, возможно, скоро всё заработает. А вы пока делайте постеры для зарубежных конференций :)

Печать

Была неожиданная трудность с печатью в издательском отделе. Почему-то корректно открытый файл pdf в акробате начал печататься кракозябрами. Даже не знаю, с чем это было связано, ведь раньше при использовании чистого a0poster проблем не возникало. Быть может, что-то в отделе не то с принтером, а может быть и такой вариант. Раньше я постер прогонял через latex, dvips, ps2pdf, но в случае с beamerposter я запустил pdflatex. Могло ли это повлиять?

Чтобы заведомо проблем не было, можно просто сконвертировать в картинку:

convert -density 300 -page A0 -compress lzw poster.pdf poster.tiff
Желательно сразу в несколько форматов:
convert -density 300 -page A0 poster.pdf poster.png
Теперь уж точно проблем возникнуть не должно.

Если большого плоттера у вас нет, то можно распечатать постер на множестве маленьких листов. Для этого служит программа poster. Здесь говорится, что для того, чтобы разбить постер A1 на восемь листов A4 надо дать следующую команду:

poster -iA1 -mA4 -pA1 poster.ps

В любом случае, лучше прочитать мануал - он поставляется с этой программой.

Резюме

Итак, мы рассмотрели два варианта создания постера в LaTeX - с использованием чистого a0poster и с надстройкой beamerposter. Преимущества первого в большей гибкости, но второй несколько проще и даёт сразу хороший результат.

Копируете статью - поставьте ссылку на оригинал!

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

  1. Несмотря на мою склонность к ЛаТеХу, мне кажется, что создание постеров в нём - не самая лучшая идея. Если только у вас не куча текста с формулами. По мне так проще и наглядней использовать Inkscape, особенно когда местные "деятели" выдвигают нестандартные размеры постеров.

    В ЛаТеХовских постерах, как на иллюстрации к посту, но мой взгляд слишком много текста. Хотя идея кажется интересной, её реализация может потребовать слишком много времени. И

    чудовищные трудности с ровным позиционированием рисунков в каком-нибудь визуальном редакторе

    ... явно преувеличены. Я использую Inkscape и там всё очень хорошо и просто выравнивается. Результат хорош.

    За статью спасибо, честно говоря, не знал про a0poster.

    ОтветитьУдалить
  2. Ну это у меня трудности с WYSISYG. Я пользовался, когда не знал вообще про линукс, Corel Draw. Как-то коряво получалось у меня.
    А по поводу большого количества текста, так его же всегда можно уменьшить, и добавить рисунков :), благо в beamerposter есть scale, чтобы всё смотрелось хорошо.
    А было бы интересно прочитать историю о том, как сделать постер в Inkscape :)

    ОтветитьУдалить
  3. А было бы интересно прочитать историю о том, как сделать постер в Inkscape :)
    Собственно, скоро будет. На выходных допилю пост, соберу свои заметки по Inkscape и выложу. А то местные "инноваторы" меня потрясли вопросами в стиле "а где делать постеры"и "откуда скачать фотошоп?" :-))

    ОтветитьУдалить
  4. а можно у вас спросить? Как увеличить шрифт в латехе? просто я пишу курсовую и мне нужно написать крупно формулу ...

    ОтветитьУдалить
  5. Попробуйте содержимое формулы заключить в \Large, \LARGE, \Huge, смотря насколько крупно надо. Например, \Huge{$x^2$}.

    ОтветитьУдалить
  6. для больших заголовков в русскоязычном постере можно применить обходной вариант: сделать отдельный ps (например) файл со здоровенным заголовком и включить его как картинку на место заголовка, заранее вырезав нужную область: \includegraphics[width=0.80\textwidth, bb=89 747 590 792, clip]{title.ps}

    ОтветитьУдалить
  7. я раньше тоже пользовался a0poster, но теперь мне всех милей fig2sty

    ОтветитьУдалить
  8. Большое спасибо за наводку! Попробую и Ваш вариант. Очень здорово, что всё это с детальным readme!

    ОтветитьУдалить
  9. Шрифты нужного размера для постера на русском языке.
    Ставим cm-super
    Подключаем его и пакет type1ec. Вуаля.
    \usepackage[T1]{fontenc}
    \usepackage[english,russian]{babel}
    \usepackage[utf8]{inputenc}
    \usepackage{type1ec}

    ОтветитьУдалить
  10. Игорь Макаров25 апреля 2012 г. в 11:43

    По поводу крючков при печати pdf: зачем зависеть от postscript, у которого могут быть проблемы с кириллицей? Можно сначала сконвертировать pdf в jpg (в фотошопе, напр.). Тогда у вас уже картинка, которая гарантировано напечатается как на экране

    ОтветитьУдалить
  11. Есть ещё такая вещь baposter.cls. Довольно красиво получается и работать просто. Правда, в texlive нет.

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

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