プレゼンで使う数式画像を作成[vim + vim-quickrun + latexmk + dvipng]
はじめに
プレゼンテーションで数式を使いたいときに,どのツールを利用するか,というのは(発表の中身を無視すれば)大事な要素の一つです。
殆どすべてのスライドに数式が登場し,LaTeXそのものに慣れている人であれば,LaTeXでスライド形式のpdfを作成できるパッケージbeamerなどを使って スライドを作成するほうが,おそらく一番いいと思います。
逆に,前スライド中に一つや二つ程度しかスライドが出てこないのであれば,PowerPointやKeynoteなど,自分の使いやすいツールでスライドを作成し, 数式の部分は付属の数式エディタを用いるか,その書体が気に入らない場合には数式を画像に変換したものを貼り付けるといった方法があるかと思います。
今回は,このLaTeX記法で書いた数式を画像に変換する簡単な方法を紹介したいと思います。
また,この記事の中で本人はvimとその関連ツールを使っていますが,あまり自動化にこだわらないのであれば,別に手動でも簡単に編集と変換が行えます。
お世話になるツールはこちら
また,これらを合わせて利用するためのシェルスクリプトを使います。
dvipng
まず,dvipngですが,これはその名称から明らかなようにtexファイルをコンパイルしたあとに生成されるdviファイルから, png形式(実はgifもいける)の画像を生成するスクリプトです。 TeXLiveでTeXをインストールしてきた場合,デフォルトで入っている場合が多いかと思います。
fig_test.tex
ファイルに対してこのスクリプトを
platex fig_test.tex dvipng -T tight -bd 1000 fig_test.dvi
のように実行すると,fig_test.tex
が
\documentclass[43pt]{jsarticle} \usepackage{amsmath} \usepackage{amssymb} \usepackage{amsthm} \usepackage{ascmac} \pagestyle{empty} % "\vector{a}" でベクトル \def\vector#1{\mbox{\boldmath \(#1\)}} \begin{document} \begin{align*} f(x) &= \int^{\infty}_{-\infty}\mathrm{d}x \frac{\sin x}{x} \\ &= \pi \end{align*} \newpage $y = x^{2}$ \newpage $\mathcal{C}$ \end{document}
のようであったとき,各ページごとに数式を画像に変換したものが作成されます
(fig_test1.png
, fig_test2.png
, fig_test3.png
のように番号付けされる)。
このときオプション-T tight
によって空白部分が切り抜かれ,
-bd 1000
によって背景に透過処理が施された数式画像が生成されます。
fig_test1.png
fig_test2.png
fig_test3.png
シェルスクリプト'texmath'
さて,このdvipngだけでもかなり簡単に画像作成ができることが分かるかと思いますが, さらにこれを便利に使用するために, 新しく画像群を作成するときに使うためのシェルスクリプトを書いてみました。
#!/bin/bash -e # written by Shotaro Fujimoto (https://github.com/ssh0) # first edited: 2015-11-03 # using latexmk rc file latexmkrc="$HOME/.latexmkrc_dvipng" usage() { cat <<EOF NAME texmath - compile latex to png with dvipng (and create texmath file) USAGE texmath [-e FILE | FILE] [-h] ARGUMENTS -e FILE: Open and edit FILE. Or create it when FILE doesn't exist, FILE: If you provide only file name, this script compiles the file with latexmk and then creates png file by dvipng. --help: Display this help and exit EOF exit 1 } texmathtemplate="$(cat <<EOF % vim: ft=texmath \documentclass[43pt]{jsarticle} \usepackage{amsmath} \usepackage{amssymb} \usepackage{amsthm} \usepackage{ascmac} \pagestyle{empty} % '\vector{a}' でベクトル \def\vector#1{\mbox{\boldmath \(#1\)}} \begin{document} \begin{eqnarray*} \end{eqnarray*} \newpage \end{document} EOF )" if [ "$1" = "-h" ]; then usage elif [ "$1" = "-e" ]; then if [ -f "$2" ]; then texfile="$2" elif [ ! "$2" = "" ]; then texfile="$2" echo "$texmathtemplate" > "$texfile" else echo "Option '-e' needs a file name to edit." echo "Aborted." exit 1 fi vim "$texfile" elif [ ! -f "$1" ]; then echo "'$1' doesn't exist." echo "Aborted." exit 1 elif [ -f "$1" ]; then texfile="$1" latexmk -r "$latexmkrc" "${texfile}" \ && latexmk -c "${texfile}" \ && dvipng -T tight -bd 1000 "${texfile%.tex}.dvi" \ && rm *.fls else usage fi
オプション-e
の後にファイル名を指定することで,ファイルの編集ができます。(ない場合は新規作成)
オプションを付けずにファイル名を引数にした場合には,latexmkを使ってdviに変換したものをdvipngを用いてpng画像に変換します。
上のシェルスクリプトに関連して~/.latexmkrc_dvipng
には以下のように書いておきます。
#!/usr/bin/perl $latex = 'platex -interaction=nonstopmode -kanji=utf-8 %O %S'; $pdf_mode = 0;
$pdf_mode = 0
とすることによって,自動でpdf化する機能を無効にすることができます。
詳しくはlatexmkのマニュアルを参照してください。
Vimを使ってファイルを保存するたびに画像を生成するようにする
これをvimから使用する方法ですが,vim-quickrunをつかうと,任意のタイミングで任意のコマンドを実行することができるので,
今回はmodelineを使ってファイルタイプを"texmath"であると認識させ,そのファイルの保存時にコマンドtexmath
を実行することにします。
まず,ファイルタイプtexmathに対してもtexのシンタックスハイライトなどを効かせたいので,~/.vimrc
に以下を記述します。
augroup texmath autocmd! autocmd FileType texmath setlocal syntax=tex augroup END
~/.vim/ftplugin/texmath_quickrun.vim
には以下のように書きます。
" LaTeX Quickrun (texmath) let g:quickrun_config['texmath'] = { \ 'runner' : 'vimproc', \ 'command' : 'texmath', \ 'outputter' : 'error', \ 'outputter/error/success' : 'null', \ 'outputter/error/error' : 'quickfix', \ 'srcfile' : expand("%s"), \ 'exec': '%c %s', \} augroup texmath_autocompile autocmd! autocmd BufWritePost,FileWritePost *.tex :QuickRun augroup END
非同期処理のためにvimprocを使用します。
まとめ
たくさん数式の画像がほしい時に,便利に使うことができると思います。 MacだとLaTeXiTなるものがあるらしく,そんなのがほしいなぁと考えてこのようなことになりました。
何かの参考になれば幸いです。