読者です 読者をやめる 読者になる 読者になる

#kichi-memo

せいきち (@seikichi) のメモ帳

LaTeX Beamer 小ネタ集

気付けば卒論の試問会もBeamerで乗り切ってしまいました.ということで小ネタ集.

pdfの栞の文字化けを防ぐ

プリアンブルに以下を追加.栞は section や subsection で挿入可能

\ifnum 42146=\euc"A4A2
\AtBeginDvi{\special{pdf:tounicode EUC-UCS2}}
\else
\AtBeginDvi{\special{pdf:tounicode 90ms-RKSJ-UCS2}}
\fi

元ネタ

背景の図を設定

プリアンブルに以下を追加.

\usebackgroundtemplate{
  \includegraphics[width=\paperwidth,height=\paperheight]{image/bg}
}
途中のページで背景の画像を変えたくなった

\frame { ... } の代わりに

{
  \usebackgroundtemplate{\includegraphics[width=\paperwidth]{image/bg2}}
  \frame{
    %% ...  
  }
}
フォントを変えたい (or 埋め込みたい)

PXchfon とかどうですか.

ページのタイトルの色やフォントを変更したい

プリアンブルに以下を追加.

\setbeamerfont{frametitle}{size=\Huge, series=\bfseries}
\setbeamercolor{frametitle}{fg=white}
テキストの色を変更

プリアンブルに以下を追加.

\setbeamercolor{normal text}{fg=black, bg=white}
block の設定

alertblockのタイトルと本体の色を設定する例 (プリアンブルに追加).

\setbeamercolor{block title alerted}{bg=red!50!white, fg=black}
\setbeamercolor{block body alerted}{bg=red!10!white, fg=black}
ヘッダのサイズ変えたい

パワポの背景をパクると「\frametitle{...} で表示させる文字列の位置を調整したい!」となるよね.
以下は私の設定 (プリアンブルに追加).raisebox以外に良い方法があったら誰か教えて下さい.

\setbeamertemplate{frametitle}{\raisebox{-18pt}[0pt][12mm]{\insertframetitle}}
箇条書きの行頭記号を変更したい

四角形+赤色の例 (プリアンブルに追加)

\setbeamercolor{item}{fg=red}
\setbeamertemplate{items}[square]

記号は default, square, circle, ball が存在.itemize環境を変更したいが,enumerate環境等を変更したくない場合は

\setbeamercolor{itemize item}{fg=red}
\setbeamertemplate{itemize items}[square]
ソースコードを貼り付けたい

listings.sty を利用する.日本語を使いたければ jlistings.sty も.
プリアンブルに以下を挿入.lstset 内の language を指定しておくと,挿入の際に毎回言語を指定しなくて良くなり楽.

\usepackage{listings}
\lstset{
  %% language={C}, %プログラミング言語によって変える。
  basicstyle={\ttfamily\small},
  keywordstyle={\color{blue}},
  commentstyle={\color{green}},
  stringstyle=\color{red},
  tabsize=2,
  %% breaklines=true, %折り返し
}

貼り付けの際は frame 環境に fragile オプションが必須.以下は例.

\begin{frame}[fragile]
  \frametitle{Factory によるクラス群の隠蔽}
  \begin{lstlisting}[language={Csharp}]
class DOMBuilderTest : TestCase {
  private OutputBuilder builder;
  public void testAddAboveRoot() {
    string invalidResult = "<orderes>" + ...;
    _builder = new DOMBuilder("orders");_
    builder.addBelow("order");
    try {
      ...
    }
  }
}
  \end{lstlisting}
\end{frame}


「標準でC#無いじゃねえかゴラァ」ってときは以下を追加.他の言語でも似たような感じでOKでしょう.

\lstdefinelanguage{CSharp} {
  morecomment = [l]{//},
  morecomment = [l]{///},
  morecomment = [s]{/*}{*/},
  moredelim=[is][\underbar]{_}{_},
  morestring=[b]",
  sensitive = true,
  morekeywords = {abstract,  event,  new,  struct, var,
    as,  explicit,  null,  switch,
    base,  extern,  object,  this,
    bool,  false,  operator,  throw,
    break,  finally,  out,  true,
    byte,  fixed,  override,  try,
    case,  float,  params,  typeof,
    catch,  for,  private,  uint,
    char,  foreach,  protected,  ulong,
    checked,  goto,  public,  unchecked,
    class,  if,  readonly,  unsafe,
    const,  implicit,  ref,  ushort,
    continue,  in,  return,  using,
    decimal,  int,  sbyte,  virtual,
    default,  interface,  sealed,  volatile,
    delegate,  internal,  short,  void,
    do,  is,  sizeof,  while,
    double,  lock,  stackalloc,
    else,  long,  static,
    enum,  namespace,  string}
}
ページ内のテキストを上に揃えたい

パワポのテキストって開始位置が上の方に固定されてるけど,beamerってテキストが中央に揃えられるよねー,っていう話.

\frame[t] {
  %% ...
}
アニメーションもどき

プレゼン中に図がアニメーションするのではなく,ページ毎に図を切り替えていくだけで良いなら beamerscape とかが便利かも.
inkscapeSVGを作成→レイヤーの名前に「どのページで表示させるか」という情報を入れておく→export_overlaysでSVGをpdfに分割+利用するためのtexファイルを吐かせる みたいな流れ.書いてて全然便利に見えなくてウケる.

verbatime 使いたい

containsverbatim の s を忘れて悩んだのは良い思い出です.

\frame[containsverbatim] {
  %% ...
}
OMakefile

platexのオプションに -interaction=nonstopmode を付けておくと,エラー発生時に入力を求めて来なくなって幸せ.

LATEX = platex -interaction=nonstopmode
LATEXFLAGS = -shell-escape -kanji=euc
DVIPDFM = dvipdfmx
DVIPDFMFLAGS = -V 6
TETEX2_ENABLED = false

TARGET = slide

LaTeXDocument($(TARGET), $(TARGET))

.PHONY: clean
.DEFAULT: $(TARGET).dvi $(TARGET).pdf

clean:
	rm -rf *.toc *.log *.dvi *.fls *.aux *.snm *.nav *.out *.bbl *.blg *.vrb

エラーが見にくいので適当なシェルスクリプトの関数を作って利用.

# colors (256color)
COLOR_NORMAL=`echo -e "\033[0;38m"`
COLOR_RED=`echo -e "\033[1;31m"`
COLOR_BLUE=`echo -e "\033[0;38;5;14m"`
COLOR_GREEN=`echo -e "\033[0;38;5;120m"`
COLOR_YELLOW=`echo -e "\033[0;38;5;226m"`

function comake() {
    LANG=C omake "$@" 2>&1 | sed \
        -e "s@[Ee]rror:.*@$COLOR_RED&$COLOR_NORMAL@g"\
        -e "s@cannot\sfind.*@$COLOR_RED&$COLOR_NORMAL@g"\
        -e "s@[Ww]arning:.*@$COLOR_BLUE&$COLOR_NORMAL@g"\
        -e "s@^[Ww]arning.*@$COLOR_BLUE&$COLOR_NORMAL@g"\
        -e "s@\*\*\* omake: done .*@$COLOR_GREEN&$COLOR_NORMAL@g"\
        -e "s@^File .*@$COLOR_YELLOW&$COLOR_NORMAL@g"
}