Как создать презентацию в 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