Показаны сообщения с ярлыком latex. Показать все сообщения
Показаны сообщения с ярлыком latex. Показать все сообщения

среда, 13 октября 2010 г.

Градиенты в PSTricks

Иногда для того, чтобы подчеркнуть некий переходный процесс или наличие размытой границы, на рисунках бывает полезным использовать градиенты (ну а кому-то интересны рюшечки). Поскольку большинство рисунков в своей работе я выполняю с использованием PSTricks, прямо не выходя из LaTeX (о рисовании примитивов уже было написано), то в данной заметке я опишу как создавать градиенты с помощью PSTricks.

Простые градиенты

Нам понадобится пакет pst-grad. Чтобы создать градиент, необходимо нарисовать требуемую физуру, а в качестве заливки в поле для дополнительных опций указать fillstyle=gradient. После этого нам окажутся доступны следующие параметры (из названий всё понятно):

  • gradbegin — начальный цвет.
  • gradend — конечный цвет.
  • gradlines — количество линий, используемых для рисования. градиента. Чем больше - тем ровнее, но страдает время отрисовки. По умолчанию 500.
  • gradangle — направление вектора градиента. На самом деле, перпендикуляра к вектору градиента (специально это так сделано, или нет - мне не понятно) .
  • gradmidpoint — обозначает положение средней точки градиента (от 0 до 1). Понять что это такое можно, взглянув на рисунок, который можно создать следующим кодом.
 
\documentclass[a4paper]{article} 
\usepackage[utf8]{inputenc} 
 
\usepackage[noxcolor]{pstricks} 
\usepackage{pst-grad} 
 
\begin{document} 
\begin{pspicture}(-2,-1)(2,10)
  % рисуем прямоуголник с градиентом
  \psframe[fillstyle=gradient, gradbegin=green, gradend=blue,
     gradlines=500, gradmidpoint=1, gradangle=10](-2,-1)(2,1)
  % вставляем подпись
  \uput[90](0,1){gradmidpoint=1}
 
  % повторяем то же, но со смещением относительно начальной точки
  \rput(0,3){
     \psframe[fillstyle=gradient, gradbegin=green, gradend=blue,
     gradlines=500, gradmidpoint=0, gradangle=10](-2,-1)(2,1)
     \uput[90](0,1){gradmidpoint=0}
  }
 
  \rput(0,6){
     \psframe[fillstyle=gradient, gradbegin=green, gradend=blue,
     gradlines=500, gradmidpoint=0.3, gradangle=10](-2,-1)(2,1)
     \uput[90](0,1){gradmidpoint=0.3}
  }
 
  \rput(0,9){
     \psframe[fillstyle=gradient, gradbegin=green, gradend=blue,
     gradlines=500, gradmidpoint=0.9, gradangle=10](-2,-1)(2,1)
     \uput[90](0,1){gradmidpoint=0.9, default}
  }
\end{pspicture} 

Цвета можно задавать исходя из стандартных имён, или в RGB формате. Для этого подключим пакет color и определим цвет посредством definecolor:

 
\usepackage{color} 
...
\begin{document} 
\begin{pspicture}(-2,-1)(2,11)
  \definecolor{mycolor}{rgb}{1,0.5,0.1}
  % а потом можем использовать цвет mycolor как захотим
\end{pspicture} 
\end{document} 

Радиальные градиенты

С помощью пакета pst-grad не удаётся создать радиальных градиентов. К примеру, если мы попытаемся использовать градиентную заливку в круге, то получим следующее:

 
\begin{pspicture}(-2,-2)(2,2)
  \definecolor{gradbegin}{rgb}{0.4,0.6,0.9}
  \definecolor{gradend}{rgb}{1,0.45,0.83}
  \pscircle[fillstyle=gradient,gradlines=1000,gradmidpoint=0](0,0){2}
\end{pspicture} 

То есть, обычный плоский градиент.

Для создания радиальных градиентов можно использовать пакет pst-slpe. В данном случае используется fillstyle=ccslope, а аргументы, задающие цвета, аналогичные: slopebegin, slopeend.

Особое внимание стоит уделить опции sloperadius. Из иллюстрации ниже должно быть понятно что к чему.

 
\begin{pspicture}(-2,-8)(8,4)
  \uput[90](0,3){red,yellow}
  \pscircle[fillstyle=ccslope,slopebegin=red, slopeend=yellow,
  sloperadius=1](0,0){2}
  \uput[90](0,2){sloperadius=1}
 
  \uput[90](5,3){yellow,blue}
  \rput(5,0){
     \pscircle[fillstyle=ccslope,slopebegin=yellow, slopeend=blue,
     sloperadius=1](0,0){2}
     \uput[90](0,2){sloperadius=1}
  }
 
  \rput(0,-5){
     \pscircle[fillstyle=ccslope,slopebegin=red, slopeend=yellow,
     sloperadius=2](0,0){2}
     \uput[90](0,2){sloperadius=2}
  }
 
  \rput(5,-5){
     \pscircle[fillstyle=ccslope,slopebegin=yellow, slopeend=blue,
     sloperadius=3](0,0){2}
     \uput[90](0,2){sloperadius=3}
  }
\end{pspicture} 

Стоит отметить, точку отсчёта градиента можно смещать.

 
\begin{pspicture}(-2,-2)(2,3)
  \pscircle[fillstyle=ccslope,slopebegin=yellow, slopeend=blue,
  slopecenter=0.1 0.3](0,0){2}
  \uput[90](0,2){slopecenter=0.1 0.3}
\end{pspicture} 

Более того, с помощью pst-slpe, можно создавать и такие вещи:

 
\begin{pspicture}(-2,-2)(2,2)
  \pscircle[fillstyle=radslope,slopebegin=yellow, slopeend=blue](0,0){2}
  \uput[90](0,2){fillstyle=radslope}
\end{pspicture} 

Напоследок могу посоветовать почитать документацию по пакетам pstricks (/usr/share/doc/texlive-pstricks-doc/generic/pstricks) и pst-slpe (/usr/share/doc/texlive-pstricks-doc/generic/pst-slpe).


Читать далее…

среда, 14 апреля 2010 г.

PSTricks. Рисуем в LaTeX.

ЛаТеХ помимо вёрстки текста ещё и умеет рисовать. Сделать набросок схемы установки, подрисовать стрелки или кружочки в презентации, поиграть с текстом или даже построить какой-либо график можно с помощью PSTricks. PSTricks позволяет делать рисунки прямо в тексте, то есть в принципе не надо вылазить в графический редактор, создавать рисунок, а потом экспортировать в удобоваримый формат. PSTricks даёт возможность достаточно быстро и без особых усилий создавать хорошие рисунки. Кроме того, существует множество пакетов, в которых уже реализованы многие примитивы, что позволяет ими оперировать на более высоком уровне. Скажем, вам не придётся рисовать пружинку вручную — это сделает один из макросов в пакете pst-coil, для того, чтобы нарисовать мензурку над горелкой химикам поможет пакет pst-labo.

При этом, следует заметить, что наличие PSTricks не означает, что в его пользу навсегда можно отказаться от такого средств создания иллюстраций, как Metapost. Недостаток PSTricks, на мой взгляд, состоит в том, что нельзя добиться полной автоматизации и построения наиболее общего рисунка. В PSTricks нет в явном виде переменных, которыми можно было бы легко оперировать, а ведь это неоспоримое преимущество Metapost, поскольку очень здорово создать рисунок, в котором всё будет зависеть от пары-тройки переменных, передвинув которые можно добиться наиболее наглядного результата. В PSTricks же всё реализовано через декартовы или полярные координаты в явном виде.

Установка

Для начала установим pstricks. В Debian все как обычно:

> aptitude install texlive-pstricks texlive-pstricks-doc

Эта команда установит pstricks целиком, со всеми входящими в него пакетами и документацией к ним. В общем случае ничего руками доставлять не надо будет. Документация будет лежать в /usr/share/doc/texlive-pstricks-doc/ в виде pdf-файлов.

Синтаксис

Итак, начнём. Концепция всех макросов примерно такова: аргументы указываются в фигурных скобках, дополнительные опции — в квадратных, а координаты — в круглых. В частности, чтобы нарисовать вектор из (1,2) в (4,3) толщиной 2pt и красного цвета, нужно написать следующее:

\psline[linecolor=red, linewidth=2pt]{->}(1,2)(4,3)

Как видно, для макроса \psline, который строит отрезки со стрелками на концах или без них, обязательным аргументом является направление вектора. Если нужен не вектор, а просто отрезок, то фигурные скобки можно опустить.

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

\pscircle[fillcolor=red, fillstyle=solid](4,2){1.8}

Можно представить, что надо построить несколько элементов, однаково закрашенных. Но при этом не хотелось бы каждый раз писать "fillcolor=red, fillstyle=solid". Для этого существует макрос \psset, благодаря которому можно задать перманентно для всего рисунка от текущего момента до момента переопределения различные графические параметры, такие как тип заполнения, цвет линии, цвет заполнения, тип линии, толщина линии, значение единицы длины (по умолчанию 1cm).

Очевидно, что именно задаёт следующая команда

\psset{linewidth=2pt, linecolor=blue, fillstyle=solid,
   fillcolor=yellow, linestyle=dashed, unit=2cm}

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

\psset{linewidth=2pt, linecolor=blue, fillstyle=solid,
   fillcolor=yellow, linestyle=dashed}
\psline{->}(0,0)(1,2)
\pscircle[fillcolor=red, fillstyle=solid, linecolor=black](4,2){1.8}

Примитивы

Точки

В рисунке всё начинается с точки.

Нарисовать точку можно следующей командой:

\psdot[dotstyle=triangle](1,1)
Здесь «точка» будет нарисована треугольником (незакрашенным) в координате (1,1). Чтобы треугольник был закрашенным, надо указать triangle*. Аналогично будет и для других стилей точки.

По умолчанию, если не выбран dotstyle, точка будет нарисована закрашенным кружком. Немаловажным параметром является dotsize. Что он означает объяснять не надо.

Ряд точек рисуется с помощью макроса \psdots:

\psdots(x1,y1)(x2,y2)(x3,y3)(x4,y4)

Сетка

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

Синтаксис следующий:

\begin{pspicture}(0,0)(3,4)
  ...ваш рисунок...
\end{pspicture}

Здесь (0,0) — это координаты нижней левой точки рисунка, а (3,4) — координаты правой верхней.

В случае, если координаты границ рисунка заданы, есть возможность нарисовать координатную сетку. Для этого используется макрос \psgrid.

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

\psgrid[subgriddiv=2]

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

\begin{pspicture}(0,0)(3,4)
  \psgrid[subgriddiv=2]
  \psdot(1,1)
  \psdot[linecolor=red, dotstyle=asterisk, dotsize=20pt](1,2)
  \psdot[linecolor=blue, dotstyle=diamond*, dotsize=10pt](1,3)
  \psdot[linecolor=green, dotstyle=square, dotsize=20pt](2,2)
  \psdot[dotstyle=o, dotsize=20pt](2,1)
  \psdot[dotstyle=pentagon*, dotsize=15pt](2,3)
\end{pspicture}

Далее я буду в основном при написании исходного кода опускать окружение pspicture, однако на практике про него не следует забывать.

Отрезки

Как мы уже видели, для создания отрезков или векторов используется следующая конструкция (при этом дополнительные опции, которые можно определить с помощью \psset я буду преимущественно опускать, чтобы не загромождать вид):

\psline{->}(1,2)(3,-5)

Чтобы поменять направление вектора, совсем не обязательно менять местами координаты — достаточно изменить направление с {->} на {<-}.

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

\psline[linecolor=black](0,0)(1,1)(2,-1)(4,2)
\psline[linearc=0.3, linecolor=red](0,0)(1,1)(2,-1)(4,2)
\psline[linearc=0.5, linecolor=blue](0,0)(1,1)(2,-1)(4,2)
\psline[linearc=0.8, linecolor=green](0,0)(1,1)(2,-1)(4,2)

Окружность, эллипс, сектор, сегмент

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

\psellipse[fillcolor=green, fillstyle=solid](2,3)(2,1)
\pscircle*(2,3){1}

Здесь использована конструкция \pscircle*, которая означает, что окружность следует залить тем же цветом, что и цвет линии linecolor.

Для секторов используется макрос \pswedge, для которого нужно задать положение центра окружности, радиус, начальный угол и конечный угол. Аналогичные параметры задаются и для \psarc, рисующего дуги. Сегмент можно нарисовать, с помощью \psarc*:

\pswedge[linecolor=red, linestyle=solid](2,2){2}{15}{135}
\psarc*[linecolor=blue](2,2){2}{190}{300}
\psarc[showpoints=true, arrowsize=10pt]{->}(2,2){2}{310}{360}

Прямоугольники

Для прямоугольников задаются левый нижний и правый верхний углы. Аналогично linearc для прямоугольников использутся framearc:

\psframe[linecolor=blue, framearc=0.5](0,0)(4,3)
\psframe[linecolor=black](1,1)(3,2)

Кроме того, есть возможность загнать в прямоугольник кусок текста:

\psframebox[linecolor=red]{Кусок текста}, \psovalbox{овальный кусок}

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

Кривые

Кривые можно рисовать с помощью \psbezier и \pscurve.

\psbezier рисует кривые безье. Начальное направление кривой идёт по касательной к отрезку, соединяющему первую пару точек, а конечное, соответственно, по касательной к отрезку, соединяющему вторую пару. Дополнительный параметр showpoints позволяет понять принцип:

\psgrid
\psbezier[showpoints=true](0.5,1)(1,3)(2,0.5)(3,4)

\pscurve просто рисует кривую через заданные точки. А \psccurve рисует замкнутую кривую. Параметр curvature, принимающий три значения, определяет насколько «кривой» будет линия. Следует немного поиграть с параметрами, чтобы понять принцип:

\psgrid
\pscurve[curvature=1 0.1 0, showpoint=true](0.5,0.5)(2,0.5)(1,2)(2.5,2.8)
\pscurve[curvature=0.5 0.1 0, linecolor=red](0.5,0.5)(2,0.5)(1,2)(2.5,2.8)
\pscurve[curvature=0.2 0.1 0, linecolor=blue, arrowsize=10pt]{->}(0.5,0.5)(2,0.5)(1,2)(2.5,2.8)
\psccurve[linecolor=purple](0.5,0.5)(2,0.5)(1,2)(2.5,2.8)

Резюме

На этом я закончу первую статью по PSTricks. В принципе, уже описанных примитивов достаточно для создания простеньких и не очень рисунков.

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

В дальнейшем мы посмотрим на операции с цветами, простейшую автоматизацию, рассмотрим некоторые дополнительные пакеты для PSTricks.

И, напоследок, что следует почитать:


Читать далее…

суббота, 17 октября 2009 г.

Отображение текущих разделов в содержании презентации beamer.

И снова про презентации в beamer. Иногда полезно по ходу презентации акцентировать внимание на том, что именно вы планируете рассказать в данный конкретный момент по ходу презентации. Это особенно важно, если зрители во время докладов на конференции засыпают, а не хочется, чтобы они спали на вашем докладе. В настоящее время визуальный фактор стал играть основополагающую роль в презентации, а именно, на докладчика почти никогда зрители не смотрят (в большинстве своём), а некоторые не особо-то и слушают, поскольку целиком сфокусировали свой взгляд и внимание на изображении от проектора в полутёмном конференц-зале с мягкими креслами. А монотонная речь докладчика только помогает слушателям отдохнуть и набраться сил после вчерашнего фуршета по поводу успешного окончания третьего или четвертого дня конференции, вздремнув на вашем докладе.

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

Поэтому, если вам требуется внимание аудитории, иногда необходимо как следует взбодрить слушателей (разумеется, первым делом следует искоренить монотонное бубнение себе под нос), не только сказав к какому разделу или части работы вы подошли, но и показать это на слайде. О том, как это можно удобно сделать с помощью пакета beamer, я расскажу в этой заметке.

Чтобы при появлении нового раздела (section) на экране отображалась часть содержания доклада, необходимо в преамбуле (до \begin{document}) написать следующее:

\AtBeginSection[]{
   \begin{frame}<beamer> \frametitle{Содержание}
     \tableofcontents[currentsection]
   \end{frame}
}

Если же хочется, чтобы при появлении каждого подраздела (subsection) происходило то же самое, то «AtBeginSection» надо заменить на «AtBeginSubsection».

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

\subsection{Очень важный подраздел}
\begin{frame}<beamer> \frametitle{Содержание}
  \tableofcontents[currentsection, currentsubsection]
\end{frame}

\begin{frame} \frametitle{Очень важный слайд}
  Очень важная информация!  Пора проснуться!
\end{frame}

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

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

\documentclass[pdf,hyperref={unicode}]{beamer}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}

% Тема презентации
\usetheme{Warsaw}

\AtBeginSection[]{
   \begin{frame}<beamer> \frametitle{Содержание}
     \tableofcontents[currentsection, currentsubsection]
   \end{frame}
}

\begin{document}

\section{Введение}
\label{sec:introducion}

\subsection{Подраздел введения}
\begin{frame} \frametitle{Первый слайд}
  Докладчик занял место на трибуне, а зрители уже
  расположились поудобнее в мягких креслах.
\end{frame}

\subsection{Второй подраздел}

\begin{frame} \frametitle{Ещё один слайд}
  Внимание!  Начинается второй подраздел, ещё рано спать! \\
  \vspace{0.5cm}
  Если хотите разбудить слушателей в начале подраздела, то в преамбуле
  следует <<AtBeginSection>> заменить на <<AtBeginSubsection>>.
\end{frame}

\section{Вы ещё не спите?}

\begin{frame}[containsverbatim]
  \frametitle{Бодрящий слайд}

\begin{verbatim}
Проснись и пой,
Проснись и пой.
Попробуй в жизни хоть раз
Не выпускать улыбку из открытых глаз.
Пускай, капризен успех,
Он выбирает из тех,
Кто может первым посмеяться над собой.
Пой засыпая,
Пой во сне,
Проснись и пой.
\end{verbatim}

\end{frame}

\subsection{Очень важный подраздел}
\begin{frame}<beamer> \frametitle{Содержание}
  \tableofcontents[currentsection, currentsubsection]
\end{frame}

\begin{frame} \frametitle{Очень важный слайд}
  \alert{Очень важная информация!}  \\
  \vspace{0.5cm}
  Пора проснуться!
\end{frame}

\end{document}

Читать далее…

пятница, 18 сентября 2009 г.

utf8gost или как подружить русскую библиографию в BibTeX с ГОСТом и юникодом

Недавно при прочтении моего сообщения про бибтех в емаксе у комментатора появился вопрос можно ли оформить по ГОСТу библиографию с помощью BibTeX. Значит это кому-нибудь нужно… Я пользовался для этого бибтеховским стилем gost. По сути, в бибтеховском файле надо было просто прописать в добавление ко всему что было поле language = "russian", например вот так:

@Book{Aleksandrov_Perovskites04,
  author =       {Александров, К. С. and Безносиков, Б. В.},
  title =        {Перовскиты. Настоящее и будущее. (Многообразие
                  прафаз, фазовые превращения, возможности синтеза
                  новых соединений)},
  address =      {Новосибирск},
  publisher =    {Издательство СО РАН},
  year =         2004,
  pages =        231,
  language =     "russian"
}
а в латеховском исходнике указать:
\bibliographystyle{gost71u}               % выбор стиля оформления библиографии
\bibliography{../../bibliography/biblio}  % относительный путь до бибтеховской базы (без расширения bib)
В данном случае используем стиль gost71u. U означает аналог unsrt - ссылки будут нумероваться в порядке упоминания в тексте. Для стиля gost71s ссылки будут нумероваться по алфавиту.

В пакете gost есть ещё стили gost780u и gost780s. Они соответствуют ГОСТу 7.80-00 от 2000 года, в то время как gost71 - ГОСТу 7.1-84 от 1984 года. Хотя чисто визуально «стандартным» везде в моём кругу считают стиль, как оказалось, 84 года. Вообще с нашими ГОСТами сам чёрт ногу сломит. Недавно вот наши чиновники придумали в очередной раз новый стандарт. В любом случае нам за этими глупыми обновлениями не угнаться, поэтому пока пользуемся тем что есть.

А как же юникод?

Всё бы ничего, но стиль корректно функционирует только для однобайтовых кодировок, то есть никак не для юникода. Как-то видел сообщение на ЛОРе, что нашёлся умелец, который как-то стиль пропатчил, но с некоторыми ограничениями в функциональности. Там же на ЛОРе обнаружил сообщение, о том, что теперь есть те гостовские стили, адаптированные под юникод! Архив со стилем можно скачать тут. В архиве помимо необходимых для функционирования стиля файлов есть pdf-файлы с примерами того, как это будет выглядеть на печати.

Установка стиля

Перейдите в директорию, где лежат бибтеховские стили (в моём случае, на Debian Lenny это /usr/share/texmf-texlive/bibtex/bst):

$ cd /usr/share/texmf-texlive/bibtex/bst
Распакуйте архив:
$ sudo unzip /path/to/utf8gost.zip

После этого от нормального рута, а не через sudo скомандуйте:

# texhash

Запускаем

Теперь можно копировать базу, на всякий случай, и конвертировать её в юникод, если до этого было что-то другое. И наконец, исправляем в латеховском исходнике используемый стиль на один из utf8gost7*. Например, на ГОСТ 84 года в порядке упоминания в тексте:

\bibliographystyle{utf8gost71u}

По мере короткого использования никаких багов не заметил. Ждём новый стиль под «самый новый ГОСТ». Только боюсь, он уже будет неактуален, потому что появится «вообще самый-самый новый»… :)


Читать далее…

суббота, 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. Преимущества первого в большей гибкости, но второй несколько проще и даёт сразу хороший результат.


Читать далее…

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

База библиографических ссылок BibTeX в Emacs

Что такое BibTeX и какая от него польза можно прочитать здесь. Забегая вперед, скажу, что вещь это весьма полезная, научившись пользоваться которой, вам будет намного проще управляться с бибилиографическими ссылками в LaTeX, не мучаясь с переформатированием под каждый отдельный случай (например, считается, судя по всему, хорошим тоном для каждого журнала придумать своё и только своё правило для оформления этих ссылок. Справиться с этим варварством как раз поможет BibTeX).

Для редактирования базы данных BibTeX в линукс существует несколько программ, например, kbib, kbibtex, XfBib, jabref. Как следует из названия, первые две предназначены для работы в KDE, в то время, как последняя основана на Java. Я не имею ничего против этого языка программирования :), но лично мне не нравятся тормозящие программы, имеющие своеобразный интерфейс (возможно я не осили, но побороть ужасно размытые шрифты я не смог, а потом уже и не хотелось). Перечисленные программы обладают весьма серьезным функционалом, за исключением простенькой XfBib. Однако мне весь этот функционал не нужен, так же, как и KDE с Java. Можно, конечно, править библиографию руками, что весьма напряжно, но В Емаксе есть для этого специальный режим bibtex-mode.

Режим подхватится автоматически при редактировании файла с расширением bib, но если этого не произошло можно включить режим вручную:

M-x bibtex-mode

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

Комбинации клавиш

Создание окружения

Статья в журнале (A rticle):

C-c C-e C-a

Статья в сборнике тезисов (in P roceedings):

C-c C-e C-p

Заказная статья в сборнике (in C ollection):

C-c C-e C-c

Глава или страницы в книге (chapter in B ook):

C-c C-e C-b

Сборник трудов конференции вообще, а не отдельная статья (p roceedings):

C-c C-e p

Книга целиком (B ook):

C-c C-e b

Технический отчёт (T echnical report):

C-c C-e C-t

Если интересует что-то ещё, то сочетание можно посмотреть в меню «Entry-types», а если показ меню отключён, как у меня, то его можно посмотреть одновременно нажав Ctrl и правую кнопку мыши.

Заполнение полей

Для каждого типа окружения имеется обязательный набор полей. Также есть необязательные поля, которые начинаются с «OPT» (например, OPTmonth) или с ALT (например, ALTEditor).

Необязательное поле можно сделать активным комбинацией:

C-c C-o

Чтобы не мучаться с позиционированием курсора между фигурными стрелками, для перехода от одного поля к следующему лучше использовать bibtex-next-field

C-j

Выравниваются поля стандартно:

M-q

А для выравнивания всех полей в окружении служит bibtex-fill-entry

C-c C-q

Создать свое собственное поле (например, language) можно посредством bibtex-make-field

C-c C-f

Пример использования

@Article{sunarso08:_mixed_ionic_elect_conduc_miec,
  author =       {J. Sunarso and S. Baumann and J. M. Serra and
                  W. A. Meulenberg and S. Liu and Y. S. Lin and
                  J. C. Diniz da Costa},
  title =        {Mixed ionic-electronic conducting {(MIEC)}
                  ceramic-based membranes for oxygen separation},
  journal =      {Journal of Membrane Science},
  year =         2008,
  volume =       320,
  pages =        {13-41}
}

Закончив заполнение полей полезно всё выровнять с скомандовать bibtex-clean-entry.

C-c C-c
Как бы странно это ни звучало, но эта команда проверяет синтаксическую корректность окружения и предлагает дать название записи. Надо сказать, что некириллические названия задаёт сама вполне адекватно.

При создании документа с использованием AUCTeX и RefTeX можно сослаться на запись комбинацией C-c C-[. Будет предожено ввести регулярное выражение записи. Для простоты можно ввести кусок названия. Затем в вывалившемся списке отметить нужный вариант. Но об этом подробнее я расскажу в отдельном сообщении.

Преимущества и недостатки

К плюсам этого способа работы с библиографией можно отнести интеграцию с правкой текста в LaTeX, отсутствие необходимости привыкать к другой программе, поскольку всё можно сделать не выходя из емакса. Также, поскольку емакс работает с системой контроля версий, можно заслать обновленный вариант сразу же

C-x v v
после ввода комментария
C-c C-c

Из минусов могу отметить отсутсвие поиска в интернете, что, если не ошибаюсь как-то было реализовано в kbibtex. Хотя, лично для меня, это совсем не минус.


Читать далее…