Edited at

WSLへのPandocのインストール

ビデオ解説(日本語)

https://youtu.be/QN0DcuRAIpA

ビデオ解説(英語)

https://youtu.be/M9MrQ85xUXY



動作環境

WSL(Windows Subsystem for Linux)にインストールされたUbuntuにPandocをインストールする方法をご紹介いたします。

Pandocは、あるマークアップ形式で書かれた文書を他の形式へ変換するためのツールです。

カリフォルニア大学バークレー校のジョン・マクファーレイン教授(John MacFarlane)がHaskellにより開発したツールです。

対応している形式は大変多く、Markdown、HTML、LaTeX、EPUB、PDFなどにも対応しています。

ここでは、Markdown形式のファイルをPDF形式に変換することを想定して、インストールを行っていくことにします。

Pandocの優れていることは、Markdown形式のファイルのなかに、LaTeXの構文を直接書き込みができる点です。

もちろんこれを実現するためには、LaTeXもインストールしておく必要がありますので、この方法もご紹介します。

また、参考文献や相互参照の機能も追加のツール、Pandoc-citeprocやPandoc-crossrefのインストールも行います。

なお、ここでは、日本語のPDFファイルを作成すること想定していますので、他の言語のPDFファイルを作成する場合は、言語パッケージが必要ない場合や別の言語パッケージを組み入れる必要がありますので、その点予めご了承ください。

またPandocの概要や文法については、Referenceをご覧ください。



Pandocのインストール

まず予め、sudo apt updatesudo apt upgradeを実行し、システムを更新しておいてください。

そして、sudo apt install pandocと入力して、Pandocをインストールします。



Pandoc-Citeprocのインストール

次にPandoc-citeprocをインストールします。

sudo apt install pandoc-citeprocと入力します。



TeXのインストール

次にTeXをインストールします。

sudo apt install texlive-luatexと入力します。



TeXの言語パッケージなどのインストール

次に各言語に関連したパッケージをインストールします。ここでは、日本語を前提としてますが、他の言語の場合は、必要に応じて、該当の言語パッケージをインストールする、ないしこのプロセスをスキップしてください。

sudo apt install texlive-xetex texlive-lang-japaneseと入力します。



Haskellのインストール

次に、Haskellをインストールします。これは、Pandoc自体がHaskellによって開発されたことによります。

sudo apt install haskell-platformと入力します。



Pandoc-Crossrefのインストール

次に、Pandoc-crossrefをインストールするツールCabalをインストールします。

sudo apt install cabal-installと入力します。


次に、cabal関連の更新情報を取得します。

sudo cabal updateと入力します。


次に、cabalを使って、pandoc-crossrefをインストールします。

sudo cabal install --global pandoc-crossrefと入力します。

ここで--globalを追加していることに注意してください。

pandoc-crossrefは、フィルタとして使用しますので、この指定が必要になります。

なお、このプロセスにはかなりの時間を要します。



Visual Studio Codeの起動

次に、Pandoc用のフォルダを作成することにします。

最初にコマンドラインから cd /mnt/cと打ち込んでWindows Cドライブに移動します。

次に、 lsと打ち込んでCドライブの内容を表示してみます。

OKです。


次に、特定のディレクトリにPandoc用のディレクトリを作成します。

ここでは __myprgディレクトリにPandocという名前のディレクトリを作成しました。


このPandocディレクトリに移動し、code .と入力してVisual Studio Codeを起動します。



文献リスト・スタイルのダウンロード

今回は、参考文献リストまで出力しますので、そのためのスタイルを予めダウンロードしておく必要があります。

まず、ブラウザでGitHubのスタイルサイトを開きます。

そのURLは、https://github.com/citation-style-language/styles/です。

この中のchicago-author-date.cslをクリックして、そのデータを表示し、全行をコピーします。


VS Codeに戻り、chicago-author-date.cslファイルを新規作成し、その中にペーストします。

このファイルを保存します。



Bibファイルの作成

次に参考文献用のbibファイルを作成します。

ここでは、myref01.bibファイルを新規作成しました。

ここに文献情報を書き込んでいきます。

その記法については、Referenceを参照してください。



サンプル用Markdownファイルの作成

次にテスト用のサンプルデータをMarkdown形式で作成します。

ここでは、sample01.mdファイルとして作成しました。



Node.jsファイルの作成

次に、Pandocによってコンパイルをすることになりますが、たいへん多くのパラメータを指定する必要がありますので、Node.jsのスクリプトを作成することにしました。

makepdf01.jsというファイルを新規作成し、ここに処理プロセスを記述します。

なお、このソースは以下のとおりです。また、GitHub (https://github.com/Ohtsu/pandoc-o2-makepdf)にもアップロードしましたので、詳しくはそれをご覧ください。


const mdfile = process.argv[2] + '.md';
const pdffile = process.argv[2] + '.pdf';

const spawn = require('child_process').spawn;

const ls = spawn('pandoc', [mdfile,
'-o', pdffile,
'-V', 'documentclass=ltjarticle',
'--pdf-engine=lualatex',
'--toc',
'--bibliography=myref01.bib',
'--csl', 'chicago-author-date.csl',
'--filter', 'pandoc-crossref']);

ls.stdout.on('data', (data) => {
console.log(`stdout: \n${data}`);
});

ls.stderr.on('data', (data) => {
console.log(`stderr: \n${data}`);
});

ls.on('close', (code) => {
console.log(`child process exited with code ${code}`);
});



Node.jsファイルの起動

次にコマンド・ラインから、makepdf01.jsを実行します。

node makepdf01.js sample01と入力します。


コンパイルが終了すると、新たにsample01.pdfファイルが生成されます。

VS Code上で、ファイル・エクスプロラーを起動し、このPDFファイルを表示します。



生成されたPDFファイルの確認

PDFファイルが作成され、目次も作成されました。

各リンクも機能しています。

参考文献リストも生成されています。



コマンドラインからのPandocの直接起動

ここまでは、Node.jsを利用したPandocによるコンパイルでしたが、Node.jsをインストールしていない場合でも、コマンド・ライン上にたくさんのパラメータを指定することにより、直接Pandocによりコンパイルすることもできます。

その場合には、

pandoc sample02.md

-o sample02.pdf

-V documentclass=ltjarticle

--pdf-engine=lualatex

--toc

--bibliography=myref01.bib

--csl chicago-author-date.csl

--filter pandoc-crossref
.

となります。


実際に入力してみます。

pdf-engine名が間違っていました。これを修正して再起動します。

今度は、sample02の拡張子が不足していました。これを修正して再起動します。

OKです。

sample02.pdfが生成されました。



生成されたPDFファイルの確認

このファイルを表示してみます。

OKです。


 


Reference