はじめてのVimプラグインつくった

作成した経緯

私は普段から開発や文書作成にVimを愛用しているが,プレゼン用のスライドに関してはAppleのKeynoteを使って作成していた.

しかし,スライドもテキストベースでVimで作れると楽だなと思っていろいろ調べていた.
過去にはPandocを使ってMarkdownからスライド用PDFを生成する
ということも試したが,結局Keynoteに戻っていた.

いろいろ調べた結果,reveal.jsを使うとMarkdownで書いた文書をWebスライドとしてレンダリングできるということを知った.軽く使ってみた結果,使い勝手が良さそうだったので,これをVimからすぐに使えるようにプラグインとしてまとめた.

なお,今回が初のVimプラグイン開発なので,Vim Scriptの書き方がおかしいなどあるかもしれない.

プラグイン本体はGithubのmas9612/mdslide.vimにて公開している.

プラグインの内容

現在はまだ必要最低限の機能しか実装していない.現時点ではローカルWebサーバの起動・停止,Webスライドのオープン,スライド内容を強制的に更新する,という4つの機能のみを使うことができる.

reveal.jsの仕様上,発表者ノートなどの機能を使うためにはローカルサーバを動かす必要があるため,その機能を盛り込んである.

基本的にreveal.jsのMarkdown表記に従ってMarkdownを作成し,ローカルサーバを起動するだけでWebスライドがレンダリングされて見れるようになる.

これから・所感

まだ欲しい機能など実装できていない部分も多いので,少しずつ実装をすすめていく.
英語難しい.

Pandocを使用してMarkdownからプレゼン用PDFを作成する

タイトルの通り.エディタで完結するならそっちのほうが良いので試してみた.

環境はOS X 10.11.6.

pandocのインストールなど

必要なもののインストールなどは以下の記事を参考にさせて頂きました.ただし,TeXはMacTeXをインストールしました.

markdownの原稿を、pandocを使って、Texのbeamerを利用して、プレゼンスライドPDFに変換

スタイルファイルの導入

設定などを済ませた後に,Keynote風のスタイルファイルを導入した.beamerthemeKeynoteLikeGradient.styというスタイルファイルを使うとできるみたいなので,それをダウンロードしてきてインストールする.

beamerthemeKeynoteLikeGradient.styはここからお借りしました.

$ mkdir -p /usr/local/texlive/texmf-local/tex/latex/
$ mv beamerthemeKeynoteLikeGradient.sty /usr/local/texlive/texmf-local/tex/latex/
$ sudo texhash

最後の texhash を実行しないと,スタイルファイルを配置してもコンパイル時にスタイルファイルが見つからないというエラーになるので注意.

プレゼン用PDFの作成

次のコマンドを実行するだけ. OUTFILEINFILE は適当に変えてください.

$ pandoc --latex-engine=lualatex \
    -t beamer \
    -V theme:KeynoteLikeGradient \
    -H h-luatexja.tex \
    -o OUTFILE \
    INFILE

しかし,毎回これを打つのはめんどくさいため,ラッパースクリプトを書いた.

ソースは以下.

#!/bin/sh

CMDNAME=`basename $0`
USAGE="Usage: $CMDNAME [-o OUTFILE] INFILE"

while getopts o: OPT
do
    case $OPT in
        "o" )
        OUTFILE=$OPTARG
        ;;
    * ) echo $USAGE
        exit 1;;
    esac
done

shift `expr $OPTIND - 1`

if [ $# == 0 -o $# -gt 1 ]; then
    echo $USAGE
    exit 1
fi

INFILE=$1

if [ -n "$OUTFILE" ]; then
    pandoc --latex-engine=lualatex \
        -t beamer \
        -V theme:KeynoteLikeGradient \
        -H h-luatexja.tex \
        -o $OUTFILE \
        $INFILE
else
    pandoc --latex-engine=lualatex \
        -t beamer \
        -V theme:KeynoteLikeGradient \
        -H h-luatexja.tex \
        $INFILE
fi

このスクリプトを適当な所に配置することで,次のようにすればPDFを作成できるようになる.

$ pandoc_wrapper -o OUTFILE INFILE

スクリプトを書くまでもなかった気がするが,気にしないことにする.

なお,pandocに --listings オプションを指定し, -H オプションで指定するヘッダファイル内でlistingsの設定をすることでソースコード部分にlistingsを使ったシンタックスハイライトが可能になる.