須通り
Sudo Masaaki official site
For the reinstatement of
population ecology.

入れなされ
 TeX Liveを
  入れなされ

ホーム | 統計 Top | Pandocを用いた論文のフォーマット変換

目次

  1. Pandocで何とかするという発想
  2. 導入方法
  3. 基本的な変換手順
  4. Word文書への変換
  5. HTML5への変換
  6. PDFへの変換

Pandocで何とかするという発想

論文を書くとき、最初から MS Word 等のワープロソフトを使うのは何かと危うい1。たとえ投稿先のジャーナルや共著者が、Word形式のドキュメントしか受け付けないとしても、気軽にメモを取る段階ではプレーンテキストが好ましいし、文章全体のロジックを組み立てるにはLaTeXないしマークアップ言語が便利である。

単一のデータフォーマットで全工程をカバーすることが困難ならば、各作業を適宜好きなフォーマットで進めつつ、最終的には変換して提出用データにできれば良いという発想に至るだろう。こうした互換性を保証する変換ツールとして、注目を集めているのがPandocである。

注:なぜ論文を書くのにWordが危ういかというと、文章の階層構造と装飾とを分離するインセンティブが設計上働かないから。たとえば章タイトル行が太字であるべき理由は、その箇所が文章構造の切れ目という、特別な意味を持っていることを明示するためだ。これを見出しスタイルとして定義しておくのと、単純にその箇所の見た目を太字にする行為との間には雲泥の差がある。なおLaTeXやHTML等でもタグを乱用して、場当たり的な装飾で見た目だけを仕上げることは可能だ。だがその不合理さは、ソースファイルという形で作業者に知覚され得る。嫌らしいことにワープロソフトでは、ソースは人間の目から隠されており、ユーザーが自らの行為の不合理性を認識しにくい。

導入方法

公式サイトからインストーラを拾ってくる。インストール中は特に引っかかる箇所は無い。

注意: Windows 7 においてインストーラから入れた場合、環境変数Pathが自動では通らなかった(2015年7月)。以下を手動で追加。
C:\Users\あなたのゆーざーねーむ\AppData\Local\Pandoc

基本的な変換手順

とりあえずWindowsの場合を説明する。まず変換元ファイルを置いたフォルダでコマンドプロンプトを開き(エクスプローラで当該フォルダに移動して「Shift+右クリック」→「コマンドウィンドウをここで開く(W)」)、以下のようなコマンドを打てばいい。変換された文書ファイルが、同じフォルダに新規作成される。

pandoc manuscript.tex  -t docx -o manuscript.docx

コマンド pandoc に続いて、変換元のファイル名を拡張子込みで指定。
-t に続いてコンバート先のファイル形式を指定。ただし無指定でも、多くの場合は出力ファイル名の拡張子から自動判別してくれる。
-o に続いてコンバート先のファイル名を、拡張子込みで指定(既存ファイルの名前と被ると上書きされる)。

変換可能なファイル形式は公式サイトに掲載されている。一応2015年8月時点での情報を抜書きしておくと、
(読み込み可能)Markdown, CommonMark, and (subsets of) Textile, reStructuredText, HTML, LaTeX, MediaWiki markup, TWiki markup, Haddock markup, OPML, Emacs Org-mode, DocBook, txt2tags, EPUB and Word docx
(書き出し可能)plain text, Markdown, reStructuredText, XHTML, HTML 5, LaTeX (including beamer slide shows), ConTeXt, RTF, OPML, DocBook, OpenDocument, ODT, Word docx, GNU Texinfo, MediaWiki markup, DokuWiki markup, Haddock markup, EPUB (v2 or v3), FictionBook2, Textile, groff man pages, Emacs Org-Mode, AsciiDoc, InDesign ICML, and Slidy, Slideous, DZSlides, reveal.js or S5 HTML slide shows.
後述するがLaTeXがインストールされている場合に、PDFの出力も可能である。

Word文書への変換

ジャーナルがtex入稿を認めていないか、共著者が多数いる場合には、論文投稿以前の何処かの時点でWordフォーマットへの変換が必要となるだろう。幸いなことに、Pandocのtex→docx変換機能は極夜を照らすオーロラの如く、わりと強力である。

TeXからdocxへの変換
pandoc manuscript.tex  -t docx -o manuscript.docx

注意点をいくつか。

  • 数式については、概ねWordの数式エディタに則った形式に変換・表示される。時々未変換のtexソースが残るが、手動で発見できる範囲に留まるようだ(下手に変換を試みてメチャクチャな結果を返されるよりも賢明な判断である)。
  • Figureへの参照はレンダリングされずに[fig:hogehoge]などとしてソース記述が残る(正しくは本文内の出現順に1, 2, 3などと番号へ変換されねばならない)。
  • 元のTeXドキュメントにコメントが入っている場合、%に続く一行コメント箇所は全て消去される。だが \if0 ~ \fi で複数行コメントを入れている部分は、削除されず本文にご登場なさる。
  • 元のTeXファイルにおいて、eps形式の図を \includegraphics などとして貼り込んでいる場合、画像ファイル自体はdocxファイル内にps形式でインポートされている。しかしながら、Windows上のWordではps形式の図をレンダリングできないので、結果としてWordでこの文書を開くとオブジェクトの枠だけ表示され「このイメージは、現在表示できません。」となる場合が多い。もしWindows環境で作業するならば、無難な解決策は画像をラスター形式で準備しておき、Word内でもう一回貼り付けなおすことだろう。
  • 上記にもかかわらず、Mac版のWordでは(e)psを取り込んで表示可能である2。さらに、Mac版のWordで開いて保存した文書ファイルについては、Windowsへ再度持っていっても図がベクター形式で綺麗に表示される。謎である。

Office for MacはOfficeとは別物のソフトだと思っておいた方がいい。

docxのスタイルテンプレートを事前定義

ひょっとすると、Pandocが吐き出すWordファイルの見た目が気に食わない人もいるだろう。なんやら見出しはブルーだし、全般に日本語フォントの扱いがしょぼい。だが心配は要らない、Pandocにはお好みのテンプレートを食べさせられる。たとえば以下のようなコマンドで、変換処理のつどテンプレート(hoge.docx)を食べさせてもいいし、

pandoc manuscript.tex  -t docx --reference-docx=hoge.docx -o manuscript.docx

あるいは

C:\Users\ゆーざーねーむ\AppData\Roaming\Pandoc

このフォルダに(無ければ作成) "reference.docx" というファイル名で、あなたが使いたいスタイルを定義した文書を置いてもいい。以降これが、Pandocであなたが作るWord文書のデフォルトテンプレートとなる。ちなみに、この文書の本文は空でなくてもよく、テキトーな既存文書からでも上手にスタイル設定だけを拾ってきて、よしなに処理してくれる。Pandoc賢い。

つまりはこういうことだ。投稿したいジャーナルがテンプレートを公開しているか、以前に投稿したときのWord原稿が手元にあれば、そいつを雛形にすることがいくらでも可能なのである。あなたは単に、texでソースを準備しておいてコマンド一発で流し込むだけでいい。リジェクトされてもすぐさま別のジャーナルへ出せる寸法だ。

HTML5への変換

基本形は以下。

pandoc manuscript.tex -o manuscript.html

TeXからhtmlに変換した場合の数式処理

Pandocでhtmlへ変換した場合の数式だが、HTML5のmath要素でインライン表示できる範囲、例えば2p2(1 − p)2といったものは十分に変換できる。htmlで表現しづらい複雑な数式はあえて解釈せず、TeXソースのまま残すようになっている。複雑なTableも然り。

図の扱い

なお図をepsファイルとして別個に用意している場合、上記のコマンドは十分ではない場合がある。具体的にいうと、単純に pandoc コマンドで作られたhtmlファイルには<embed src="figure.eps" />として元のepsファイルが埋め込まれるが、通常のウェブブラウザではepsを表示できない。閲覧用にhtml変換したいならば、TeXソースの段階で png を貼付けるのが楽である。

PDFへの変換

PandocにおいてPDFへの変換を実行する環境の整備は、ちょっとした鬼門だ。公式サイトのインストールガイドには次のように書かれている。"For PDF output, you’ll also need to install LaTeX. We recommend MiKTeX." 要するに、PDF作成エンジンがpandoc自体には含まれないからシステム内のLaTeXを使えという意味なのだが、実のところMiKTeXは日本語の扱いが弱く、もっぱら欧米のWindows環境で普及しているディストリビューションである。

では極東の民が進むべき道とは何か。最初から、2バイト文字に強いTeXをインストールすればいいのだ。

お使いのシステムにLaTeXを入れていない人

大本の TeX 環境として、とりあえず TeX Live の最新版を入れると良い。導入方法はTeX Wiki - TeX Liveを参照。インストール先は標準(TeX Live 2015ならC:\texlive\2015)にしておこう。これを例えばProgram Filesなどに入れると、Vista以降のOSでは管理者権限の扱いが面倒になる。あと、TeXworks は便利なエディタなので入れておくと良い。その後、次の手順へ進む(TeXそのものの使い方は別途学習すべきであるが)。

すでにLaTeXを入れている人

TeXエンジンへのパスは既に通っているはずなので、まずこちらのTeXソースファイルをダウンロードし、何も考えずに以下の変換を試みよ。

欧文環境でのみ有効な書き方
pandoc neko1.tex -o neko11.pdf

残念ながらこれは、日本語を含む文書には通らない。以下のように叱られるはずだ。

! Package inputenc Error: Unicode char \u8:蜷セ not set up for use with LaTeX.

See the inputenc package documentation for explanation.
Type  H   for immediate help.
 ...

l.67

Try running pandoc with --latex-engine=xelatex.
pandoc: Error producing PDF from TeX source
pandoc neko1.tex -o neko11.pdf

何が悪いかというと、Pandocがデフォルトで使用する(参考)pdftex というエンジンが日本語に対応していないのである3。なのでエラーメッセージにもあるように --latex-engine という設定項目を用い、別のエンジンを選んでやればいい。Pandoc は pdflatex, lualatex, xelatex の3つを解釈できるのだが(日本語環境でよく使われる platex は非対応)、とりあえず各所で推奨されている lualatex を使ってみる。

注:別にPandocの開発方針が悪いわけではなく、欧米ではpdftexのほうがデファクトスタンダードなのだ。

日本語TeX→PDFの正しい書き方の例
pandoc --verbose neko1.tex -o neko12.pdf -V documentclass=ltjarticle --latex-engine=lualatex
Pandoc pdf-png conversion success.

Fig. 1 | TeXからPDFへの、Pandocをもちいた変換の成功例。なおPDFをAdobe IllustratorでPNGファイルに直したものを表示している。

ちなみに "-V documentclass=ltjarticle" の部分は、ソースファイルを強制的に ltjarticle というドキュメントクラスで解釈させるよう、lualatexに指示する。そんな面倒なことをする理由として、筆者の普段使いのTeX処理系がpLaTeXなので、ソースファイル内ではドキュメントクラスをjarticleとしている。しかしlualatexはjarticleを解釈できないので、その代替品であるltjarticleとして読み替えさせるわけだ。

蛇足だが、この変換処理はそれなりに時間がかかるので、過程が見えるよう --verbose をつけておくと良い。

EPS画像を含むLaTeX文書からのPDF作成

上記が無事変換されたなら、次に図を含むTeX文書からの変換を試みよ。こちらのTeXソースファイルこちらのEPSファイルをダウンロードして、同じフォルダに配置。しかる後、

pandoc --verbose neko2.tex -o neko21.pdf -V documentclass=ltjarticle --latex-engine=lualatex

と試してみる。

Pandoc pdf-png conversion with an eps figure.

Fig. 2 | EPS形式画像を含むTeXからPDFへの、Pandocをもちいた変換例。

ちなみに下は、TeXworks上でptex2pdf.exeを用いて同ソース(ドキュメントクラスはjarticleとしてある)をコンパイルしたとき、得られる文書である。

Pandoc pdf-png conversion with an eps figure (compiled by platex2e).

Fig. 3 | EPS形式画像を含むTeXからPDFへの、pLaTeX2e+jarticleによる本来の出力結果。

概ね上手く行っているが、いくつかおかしな部分があることに気づくだろう。まず文章部分のマージンサイズが違うし、コンパイルした日付が消えている。絵の表示サイズも違う(ソース側で2倍に拡大表示させるよう指定しているので、下が正解)。さらに、(図1)という参照部分がPandocを用いた変換では補完されず、ソースが残ってしまっている。これはどうやら、単純に jarticle と ltjarticle の相違というわけでもないようだ(TeXworks 上で試したところ、lualatex+ltjarticle を使っても ptex2pdf + jarticle を使っても、同様に Fig. 3 の出力になった)。理由の詳細が不明なため、ひとまず保留しておく。

蛇足:PDFからの逆変換

ここまではPDF「への」変換を扱ってきた。ではPDF「から」テキストへの変換はどうか。Pandocの機能としてはサポートされていないようだし、一般に可能な操作ではない。そもそもPDFは、文書のレイアウトを保持するための規格であるから、文章を行単位の「文字列+座標」に分解してしまう。この過程が不可逆であり(ある文字列から次の文字列への読み上げ順序を、タグとして記述できるPDF(タグ付きPDF)も存在するが標準規格ではない)、基本的にPDFからのテキスト復元は単なる「推測」でしかないのだ。