ill-identified diary

所属組織の見解などとは一切関係なく小難しい話しかしません

[TeX] [beamer] ありふれた新米会社員の教えるスライド作成術

この記事は最終更新日から3年以上が経過しています

2020/7/6 追記: 最近は overleaf を始め使いやすいTeXエディタが増えてきたため, 必ずしも LyX が最も優れたエディタとは言えなくなってきた. 一方で, きちんとした日本語文書を作成するにはなんだかんだで細かい設定が必要になることが多い. そのため, R言語の開発環境と連動した R Markdown で日本語 beamer スライドを作成するパッケージを開発した. これはTeX特有の細かい煩雑な設定をユーザーから隠し,全体テーマとか色とかフォントとか, デザインに関する重要な設定だけをユーザーの好みでいじれるようにしたフォーマットである. この記事で使っているいかにも Beamer っぽい古臭いデザインが嫌な人もいるだろう (私も余り好きではない) が, metropolis テーマなどを併用すれば古臭さはだいぶ薄れる. このパッケージではそういうデザイン面にも配慮している.

ill-identified.hatenablog.com

導入

万能な TeX は beamer クラスを使うことでプレゼンに必要なスライドもスタイリッシュかつセンセーショナルに仕上げることができる. しかしながら, オフィスのパソコンには大抵入っているマイクロソフトのパワーポイントはお手軽にスライドを作成できる GUI があるため, まだ TeX に慣れ親しんでいない人間には敷居が高く感じられるだろう. そこで, 今回はなるべく熟練を必要としないソフトを介し, TeX を使用したスライドを作成する方法を紹介してみたい.

TeX (+beamer) の特徴

  • スライドの基本的なデザインの設定が単純 (過剰に凝った装飾がしにくいため, そのぶん内容自体の質向上に集中できる).
  • TeX なので数式の出力が美しい.
  • パワーポイントでのテンプレートのように, あらかじめいくつものデザインテーマが用意されており, それを \theme{hoge hoge} というふうに書くことで使用できる. もちろんさらに他の構文によって細かくデザインを調整することもできる.
  • TeX なので, ベクタ画像にも対応している. MSオフィスは基本的に png, jpg のようなラスタ画像 (ビットマップ画像) にしか対応していないため, 拡大縮小した際に画質が悪くなるという問題がある (個人的には MS オフィスのこの仕様が非常に嫌いで, 今回の話を思い立った主な理由である).

今回は, TeX + beamer を用いるにあたって, LyX を用いて編集する方法を紹介する. LyX は以前紹介したように TeXの WYSIWYM なエディタである.

beamer について解説している記事は多くあるため, 今回は beamer のマニュアルというよりは, スライド作成時の頻出のネタやつまづきやすい点の紹介をまとめた.

TeX + beamer + LyX

以前も紹介した LyX で beamer を作成するのが, 比較的効率がいいだと思う.ただし, そもそも, beamer じたいが日本語表示をあまり考慮していないため, 通常は beamer を使用した和文スライドの作成が面倒である. そこで, 自分は XeLaTeX で処理している. おそらく, 厳密には日本語の禁則処理に対応していないのだろうが, スライドならば長文を書くことも少ないのであまり気にならないだろう. よって, 最初の設定で時間をとることになる. XeLaTeX の設定じたいは前と同じで, bxjsarticle クラスと zxjatype パッケージを用いて和文を作成できる状態になっていればいい. beamer のクラスは初めから登録されているので, [文書] -> [設定] から選ぶだけでいい

なお, beamer の主要なテーマ設定がどのようなものかは, Beamer theme galleryで見ることができる. プリアンブルに, \theme{テーマ名} と書くことでテーマを指定できる.

frame 環境

beamer では, frame 環境ごとに区切ることでスライドを作成していく. TeX 直打ちでは,

\begin{frame}
スライドその1
本文
...
...
\end{frame}

\begin{frame}
スライドその2
本文
...
...
\end{frame}

という感じに記述するが, LyX では beamer に対応した入力も指定されているため, ウィンドウ左上のドロップダウンリストから, \begin{frame}\end{frame} にそれぞれ対応する「フレーム開始」,「フレーム終了」を選ぶことができる. 「フレーム開始」はLyXの画面上に Frame と表示される. この行に書いた文はこのスライドのタイトルになる. 「フレーム終了」は横線が表示されるだけで, 他に指定することはない. 各スライドは必ず開始と終了で囲うようにする. 実際には囲わなくても自動で補完される箇所もあるのだが, 見やすくするため, およびエラー予防のために必ず両方書くことを推奨する.

さらに beamer 独自の環境として, 「ブロック」がある. これで重要な文章を枠で囲うことができる. ブロック内にさらに箇条書きなどの環境を入れる場合, タブキーを使って階層を下げると良い.

LyX は beamer の使用を簡単にするが, それでも他と比べて TeX を直接入力する必要に迫られる場面が増える. ブロックのタイトルも, TeX コードを直打ちしなければならない. そこで, LyX で TeX コードを直接入力する方法を覚えておいたほうがいい. ctrl+L もしくは, [挿入] -> [TeXコード] で, 文字を TeX コードとして認識する枠が挿入される. この枠を用いなかった場合, TeXコードでなくそのままの文字として出力されてしまう.

ブロックにタイトルを付ける場合, ブロックを指定した直後にTeXコードを挿入し, {タイトル} というようにブレース (波括弧) で囲ってタイトルを入力する.

ここまでの入力例の画像が以下

f:id:ill-identified:20140601233150p:plain

これの出力結果が以下 (テーマやフォントの指定によって変わる).

f:id:ill-identified:20140601233430p:plain

アニメーションを付ける.

スライドの表示を途中で止める, スライド切り替え時のフェードアウト効果などのアニメーションを多用するのは正直に言うと好きではないが, それでもアニメーションを使用したい場合には, 辻研究室 の beamer の解説ページ第2部が詳しいので, そちらを見ることを勧める. サウンド再生など, パワポ作成方法を覚えたての人間が多用したくなるステキ機能が beamer にも実装されていることがわかる. ただし, TeX コードで書いてあるので TeX をある程度理解している必要がある. LyX はアニメーション関係のコマンドをほとんどサポートしていないため, TeX コードの直接入力が必要である.

使用例を1つだけ紹介すると, \pause はスライドの再生を中断できる. 箇条書きの文章の途中に挿入しておくと, スライド再生中に \pause の時点で表示が中断され, さらになんらかのキーを押すと続きが表示される.

スライド用と印刷用で異なるデザインにする

スライドに, 先の \pause などアニメーションを入れた場合, そのままでは印刷した場合も同一スライドがアニメーションの数だけ印刷されることにになる. この場合印刷前に, [文書]->[設定]-> [文書クラス] のクラスオプションの [任意設定] 項目に, handout と記述することで, ファイル全体のアニメーションを無効にできる. .tex ファイルとしては, \documentsclass[handout]{beamer} に相当する. そのため, 最後の仕上げの段階で, handout と書いたファイルを別名保存しておくだけで良い.

f:id:ill-identified:20140601233527p:plain

アニメーションを使わない場合でも, この機能が役に立つ場合がある. 長めのスライドで全体の流れを把握するため, 節目ごとに目次を繰り返し表示したいとする. この場合, ctrl+L

\AtBeginSubsection[]{
  \frame<beamer>{ 
    \frametitle{Outline}   
    \tableofcontents[currentsection,currentsubsection] 
  }
}

というTeXコードを入力する. こうすると, section (節) ごとに目次のスライドを自動で挿入してくれる. 配布用のスライドにはおそらくこのような措置は冗長だろう. handout を設定した場合はこの方法で挿入された目次は印刷されなくなる.

数式がサンセリフ体になるのを防ぐ

beamer はデフォルトでは, 数式も平文も全てサンセリフ体と設定されている*1. よって, ボールドサンセリフでベクトルや行列を表記する際は注意が必要である. ベクトルとスカラを区別したい, あるいはその他のこだわりで数式をいつものセリフ体で描きたい場合, \usefonttheme{professionalfonts} とプリアンブルに書く. これは数式環境のみセリフ体にするオプションである. ちなみに, スライドにおいては聴衆とスクリーンに距離があっても読みやすいように, 原則としてタイトルも本文もサンセリフ/ゴシック体に統一するのが作法である. セリフ体/明朝体は線の太さに強弱があるため, 細い線が視認しづらくなるので注意が必要である.

特に指定しなかった場合の例:

f:id:ill-identified:20140601235430p:plain

professionalfonts を指定した場合の例:

f:id:ill-identified:20140601235457p:plain

プログラムコードを掲載する場合の注意

verbatim 環境を用いてプログラムコードを書くとエラーが発生する. verbatim を利用している lstlisting を使っても同様である. これは beamer の仕様で, verbatim を使いたい場合は frame 環境に fragile オプションを付ける:

\begin{frame}[fragile]{プログラムコード}
\begin{lstlisting}
program code
hoge hoge
\end{lstlisting}
\end{frame} 

個人的には, せっかくの LyX なのに TeX コードを打つのは面倒なので, ローカルレイアウト機能を使うといいと考える. レイアウト機能とは, 環境を登録して左上のドロップダウンメニューから選べるようにする機能である. [文書] -> [設定] -> [ローカルのレイアウト] に以下をコピペする.

Style Fragileフレーム開始
  Category          Frames
  TocLevel          4
  KeepEmpty         1
  LatexType         Command
  LatexName         lyxframeend{}\lyxfragileframe
  Margin            First_Dynamic
  NextNoIndent      1
  ParSkip           0
  TopSep            2.5
  BottomSep         0.5
  ParSep            0
  Align             Center
  LabelType         Static
  LabelBottomSep    0
  LeftMargin        M
  LabelSep          xx
  LabelString       "Frame (fragile)"

  Font
    Series          Bold
    Size            Largest
    Color           Blue
  EndFont

  LabelFont 
    Family          Roman
    Color           latex
  EndFont

  Preamble
    \long\def\lyxfragileframe#1{\@lyxfragileframe#1\@lyxframestop}%
    \def\@lyxfragileframe{\@ifnextchar<{\@@lyxfragileframe}{\@@lyxfragileframe<*>}}%
    \long\def\@@lyxfragileframe<#1>#2\@lyxframestop#3\lyxframeend{%
      \frame<#1>[fragile]{\frametitle{#2}#3}}
  EndPreamble
End

コピペし, [検証 (V)] を押すと, ドロップダウンリストに「fragile フレーム開始」という項目ができる. これで元からある, 「フレーム開始」と同じように使える. 自分は, 同様に白紙フレームや複数枚またぎフレームも設定している. なお, このレイアウトは「ローカル」であるため, このファイルでのみ有効である. .layout ファイルを編集すればテンプレートにできるが, まあテンプレ用の .lyx ファイルを保存しとくだけでもいいと思う.

上記のレイアウトを使用した場合の画面

f:id:ill-identified:20140601233600p:plain

通常の「フレーム開始」を使用した場合はエラー:

f:id:ill-identified:20140601233620p:plain

その他のフレームオプション

fragile 以外の有用な frame 環境のオプションとしては, 上下のヘッダ・フッタを消し, スライドの台紙を完全に白紙にする, plain オプション, 環境がスライドからはみ出す場合, 自動で複数のスライドに分割する allowframebreaks, 画像を自動ではみ出さないように縮小する shrink がある. カンマで区切ることで同時に複数のオプションを指定できる.

beamer の寸法

beamer で作成した pdf の寸法は A版でも B版でもない. 12.8 cm x 9.6 cm つまり 4:3 の縦横比のスライドを出力する. そこで, フォントサイズを pt 単位で大きなものに指定したりしていると, 文字が重なり期待した結果にならないことがある. 寸法を数値で細かく指定することもできるが, A4版などの規格を指定すれば済む場合がおおいので, おそらく beamerposter パッケージを使用するのが最も楽.

\usepackage[size=a4]{beamerposter}

これで横向きA4版になる. 名前から分かるように beamerposter は発表用ポスターにするためのパッケージなので, これで寸法を指定できる. なお, 我々が普段使っているB版は国際規格じゃないらしいので指定しないほうが無難 (未確認)?

ロゴマークをスライドに付ける

自社のロゴマークをスライドごとに入れたい! という要求にも beamer は対応してくれる. ctrl+L もしくは [挿入] -> [TeXコード] でTeXコードを入力する枠を挿入し, そこに

\pgfdeclareimage[height=0.5cm]{institution-logo}{画像ファイル名}

\logo{\pgfuseimage{institution-logo}}

とすると, 各スライドに画像ファイル名で指定したロゴマークが入ります. ここでは TeX が通常使える形式の画像ファイルを使えるため, 解像度の劣化しないベクタ画像で貴社の画像を貼り付けられる!

リンクの枠に色を付けない

設定によっては, pdf を生成した場合に, リンク部分を枠で囲うよう設定されている場合がある. プレゼン用のスライドでリンクの強調表示は不要なので, これは消したほうがよい. [文書] -> [設定] -> [PDF特性] の「ハイパーリンク」のタブに「リンクのまわりに枠を付けない」というチェックボックスがある. なお, そもそも, hyperref を使わない場合は不要な設定なので気にしなくていい.

f:id:ill-identified:20140601233311p:plain

チャート図を作成する

表や文章を表示するのは簡単だが, SmartArt のような, いわゆるポンチ絵, チャート図を作成する機能は LyX にはない. TeX 自体には画像を描画する機能もあるが, はっきり言ってコード直接入力で作成するのは致命的に効率が悪い. しかし, 今回のテーマは TeX + beamer + Lyx がスライドの仕上がり具合も使いやすさも優れていることを主張することなので, 苦肉の策として, inkscape で作図するという方法を考えた.

(続く)

参照

*1:そのため zxjatype パッケージによるフォント指定も, 基本的に\setjasansfont{} の設定が反映される.