Date Редакция Категория comp Теги LaTeX / R / Markdown / beamer

Как создать презентацию в beamer средствами RMarkdown подробно описано в официальном руководстве, целиком построенном на примерах. Поэтому рассмотрим те вопросы, которые за пределами этого руководства или, на наш взгляд, освещены в нем недостаточно.

Прежде всего мы полагаем, что вы знаете что такое LaTeX и его пакет beamer, а также что такое R, среда разработки RStudio и пакет RMarkdown. Если это не так, то загляните сначала сюда и сюда.

Русификация

Первую презентацию можно создать прямо из меню RStudio: File/New File/R Markdown.... Она будет целиком на английском языке и добавление в нее русского текста вызовет при трансляции (кнопка Knitr) сообщение об ошибке.

Проблема заключается в том, что при подготовке PDF-файла презентации используется промежуточный LaTeX'овский документ (сам beamer является одним из пакетов-расширений LaTeX), в шаблон которого, поставляемый вместе с RMarkdown, не включена поддержка русского языка. Нужно найти искомый шаблон и добавить туда несколько строк кода. Здесь описано как это делается.

Помещаем модифицированный шаблон (у нас это mystyle.tex) в рабочий каталог, то есть каталог, где находится исходный .Rmd файл презентации. Возможно, помимо русификации вам понадобится добавить в шаблон другие настройки. Я помещаю их в отдельный файл (header.tex), чтобы не смешивать с базовыми настройками шаблона.

Заголовок презентации может быть примерно таким:

---
title: "Заголовок презентации"
author: "Автор И.О."
fontenc: "T2A"
fonttheme: "professionalfonts"
output: 
  beamer_presentation:
    template: mystyle.tex
    includes:
      in_header: header.tex
---

fontenc указывает на внутри-TeX'овскую кодировку текста (кириллическую T2A). Использование beamer'овской настройки professionalfonts позволяет получить формулы, записанные традиционными для математики шрифтами (с засечками), наряду с текстом слайдов оформленным шрифтами без засечек.

Скачать исходные файлы и tex-шаблоны презентации

Заметки к слайдам

Заметки добавляются с помощью команды \note:

\documentclass{beamer}
\begin{document}

\begin{frame}{Слайд}
With some text.
\end{frame}

\note{I have a lot to explain.}

\end{document}

Отображение заметок управляется настройками beamer:

\documentclass[notes]{beamer}       % слайды + заметки
\documentclass[notes=only]{beamer}  % только заметки
% Отображает только заметки без использования опций 
% в заголовке класса.
\documentclass{beamer}
\setbeameroption{show only notes}

Заметки могут оказаться весьма объемными и не уместиться на единственном слайде. Для решения этой проблемы можно уменьшить размер шрифта заметок: поместить внутрь заметки \scriptsize или другую команду управления размером шрифта, или указать в преамбуле глобальную настройку \AtBeginNote{\scriptsize}.

Кроме того, можно вместо \note использовать команду \note<+>, что позволяет разбить заметку на несколько слайдов.

Сейчас я поступаю так:

  • печатаю слайды без заметок, по 2 на страницу A4, один слайд под другим;
  • распечатываю только заметки, выполненные с помощью \note<+>, также по 2 на страницу.

Колонки на слайде

Средствами для создания колонок Markdown не располагает. Командами из beamer'а воспользоваться напрямую также невозможно, так как все, что находится внутри окружений \begin...\end pandoc считает TeX-овской разметкой. Поэтому приходится хитрить, добавляя в стилевой header.tex псевдонимы нужных команд.

Первый вариант реализации двухколоночного представления использует TeX-пакет multicol:

% Добавить в header.tex
\usepackage{multicol}
\newcommand{\btwocol}{\begin{multicols}{2}}
\newcommand{\etwocol}{\end{multicols}}

Достоинство этого варианта в том, что не надо задавать каждую колонку отдельной командой:

    ## Две колонки

    \btwocol
    ```{r, results="asis"}
    print("test")
    ```

    Помещаем сюда какой-то текст. Он должен оказаться во второй колонке.
    \etwocol

    Этот текст должен размещаться после колонок.

Я предпочитаю более простое решение

\newcommand{\bcols}{\begin{columns}}
\newcommand{\ecols}{\end{columns}}

которое к тому же позволяет создавать произвольное число колонок:

## Слайд с двумя колонками

\bcols
\column{.5\textwidth}
Колонка 1.
\column{.5\textwidth}
Колонка 2.
\ecols

Этот текст должен размещаться после колонок.

Две колонки на слайде

Текст для докладчика

Если потребовать в YAML-заголовке сохранять LaTeX-овкий файл, то в первой строке этого файла мы увидим

\documentclass[ignorenoneframetext]{beamer}

Это означает, что текст, не входящий в слайд, в том числе и заметки для докладчика, игнорируется.

Чтобы просмотреть одни заметки (notes), вместо указанной строки можно написать

\documentclass[]{beamer}
\setbeameroption{show only notes}

Можно пойти по другому пути и превратить презентацию в связный текст, где будут отображаться заметки. Для этого в составе beamer существует специальный пакет beamerarticle.

Укажем в преамбуле LaTeX-овского документа:

\documentclass{article}
\usepackage{beamerarticle}
\usepackage{hyperref}
\renewcommand{\note}{\par\textbf{Note}}

Объявить hyperref необходимо, потому что в beamerarticle в отличие от полного beamera, пакет hyperref автоматически не подгружается.

По умолчанию заметки в beamerarticle игнорируются. Поэтому пришлось переделать команду создания заметки \note так, чтобы заголовок заметки выделялся полужирным шрифтом.



Комментарии

comments powered by Disqus