Help us understand the problem. What is going on with this article?

今さら人に聞けない、Beamerの基本

More than 3 years have passed since last update.

この記事は TeX & LaTeX Advent Calendar 2015 の21日目の記事です。
昨日はhak7a3 さんでした。明日は u_ribo さんです。

Advent Calenderも最後の週に入りました。
今回は去年に引き続き、Beamerで自在にプレゼンを作る方法についてまとめます。
Beamerをとりあえず使ってみたい方はこちらへ(去年の記事): Beamerによるプレゼンテーション作成Tutorial

今さら人に聞けない、テーマの基本

参考資料
Beamer User Guide: Part III Changing the Way Things Look (P.143-)
ここではこの内容をかいつまんで説明します。

Beamerにおける5種類のテーマ

Beamerにはテーマの指定の方法が5種類あります:

  • Presentation Theme: 全体のテーマを一括で設定する
  • Color Theme: 色を指定する
  • Font Theme: フォントを指定する
  • Inner Theme: フレームの「内側」の外観を設定する(block, itemize等)
  • Outer Theme: フレームの「外側」の外観を設定する(header, footer, title等)

基本的にはPresentation Themeを決めて、Color/Font/Inner/Outerを既存の別のものと切り替えて使うと良いでしょう。
見た目のサンプルは上述のマニュアルに沢山のっていますので、そちらを参照してください。

Presentation Themeは

\usetheme{Madrid}

のように使います。これは使ったことがある方が多いと思います。
Color/Font/Inner/Outerを変更する場合はそれぞれ

\usecolortheme{orchid}
\usefonttheme{professionalfonts}
\useinnertheme{rectangles}
\useoutertheme{tree}

のように指定します。
これは\usepackageと同じ仕組みで、例えば\usepackage{color}がcolor.styを読み込むのと同様に、
\useoutertheme{tree}beamerouterthemetree.styを読み込みます。
beamer[color/font/inner/outer]theme[name].styという命名規則です。
これは私の環境(ArchLinux+TeXLive)では/usr/share/texmf-dist/tex/latex/beamer/themes/outer/にあります。
自分の$TEXMFを管理しているなら、そこに自作のthemeをインストールすることができるということです。

既存のものを組み合わせるだけならここまでで十分なはずです。

16 Inner Themes, Outer Themes, and Templates (P.159-)

ここからはどうやってBeamerがtypesetによってスライドの要素(element)を描画しているのかを見ていきましょう。
以下の内容はユーザーガイドの16章に対応します。
上でPresentation Themeの他に4つのテーマについて列挙しましたが、Inner/Outer ThemeとColor/Font Themeは内部的には果たす役割が異なります。
Inner/Outer Themeはテンプレートを定義し、Color/Fontはそのテンプレートに挿入される文字列に(挿入される直前に)装飾を加えます。
ここではこのテンプレートについて説明しましょう。

まず次のようなフレームを作りたいとしましょう:

\begin{frame}
  \begin{centering}
    \color{red}
    \textbf{The Title of This Frame.}
    \par
  \end{centering}
  Blah, blah.
\end{frame}

BeamerはLaTeX上に構築されているので当然LaTeXのtypesetによって文字を配置することができます。
しかしこのスライドのタイトルであるcentering環境をすべてのスライドに手動で書き込むのは
関数をつかわずにプログラムを書くようなものです。
そこで次のように分離できると望ましいわけです:

\setbeamertemplate{frametitle}{
  \begin{centering}
    \color{red}
    \textbf{\insertframetitle}
    \par
  \end{centering}
}

\begin{frame}
  \frametitle{The Title of This Frame.}
  Blah, blah.
\end{frame}

\setbeamertemplateframetitleという名前でcentering環境の部分をテンプレートとして登録しています。
\frametitleframetitleという名前のテンプレートを取得し、引数であるThe Title of This Frame.
\insertframetitleの部分に挿入し、その結果をtypesetします。
結果として上記の直接書いたスライドと同じスライドができあがる、という仕組みです。

frametitleというのはBeamerが標準で定義している名前で、beamerouterthemedefault.styで定義されています。
新たにテンプレートを定義する際は\defbeamertemplate、既に定義されているものを上書きする場合は\setbeamertemplateを使います。
どのような名前が定義されているかはテーマによっても異なり、ユーザーガイドには一部しか記載されていません。
自分でテンプレートを修正する際にはstyファイルを読む必要がありそうです。

17 Colors, 18 Fonts

上でタイトルに\color{red}によって赤色をつけていました。
しかし同じテンプレートを色だけ変えて、あるいはフォントだけ変えて使用したい事は良くあります。
これを解決するために、テンプレートに挿入される前に文字を修飾する機構があります:

\setbeamercolor{frametitle}{fg=red}
\setbeamerfont{frametitle}{series=\bfseries}
\setbeamertemplate{frametitle}{
  \begin{centering}
    \insertframetitle\par
  \end{centering}
}

\begin{frame}
  \frametitle{The Title of This Frame.}
  Blah, blah.
\end{frame}

色については、系統的なカラースキームを生成するために、パレットと呼ばれている中間変数を導入する:

\setbeamercolor{palette primary}{fg=red}
\setbeamercolor{frametitle}{parent=palette primary}

parent=...で設定されている色の設定を継承できる。

基本的な機構は以上である。これでtex/latex/beamer/{color,font,inner,outer}/*.styにあるファイルを読むための
基礎知識を提供できたと思う。自分でテーマを自作するには自分の気に入らない部分がどの名前で参照されてるのかを確認し、
その部分をsetbeamer*で書き換えればいい。

最後に

テーマについてしかまとめられず、Beamerの基本と呼ぶには不十分な感がありますがご容赦ください。
マクロの展開の途中部分を書き換えることで出力を調整する感じがXSLTの様な関数型な感じで楽しいです。

ricos
FEMによる構造解析、機械学習の専門家集団。計算資源のクラウド提供もしています。
https://www.ricos.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした