英語能力が低いのにlatexで論文書いて共著者に展開するダメ人間の備忘録.
pandocを使うとlatexからwordの変換がかなりの精度で変換できる. これまで
を試してきたが, pandocを用いた方法が一番互換性が高い.
pandoc install と調べると, 良心的な解説サイトが多々存在する.
また, バイナリ形式でダウンロードできる(Haskellというプログラミング言語ツールのひとつだが, pandocのみでも入手できる).
"pandoc"と"pandoc-citeproc"も同時にインストールされる(あるversionから統合された?).
"pandoc-crossref"のwindows版は別途ダウンロードできた.
全体的に最小構成にする
サポートされていないものはskipしてくれる
documentclassも要らないようだ(マイナーなものを使っているとうまく動作しなくなるみたいなので,コメントアウトする)
\begin{abstract}
\end{abstract}
でくくる
かなり精度よく再現してくれる. これだけでpandocの便利さがわかる.
数式内の文字を変数としての斜字ではなくテキストにしたい場合,
{\rm hoge} では式がめちゃくちゃくなった.
\text{hoge} (latexでcompileする場合は\usepackage{amsmath,amssymb} が必要)にすると上手くゆく.
図のうしろに余計な\\はいれない. captionがでなくなった
figure* はうまくさばいてくれないので
sed -e 's/figure\*/figure/g'
でごまかす. table*も同様に.
図を無理やりminipageで分割して並べると, 図のナンバリングや相互参照がうまくいかなくなる.
windowsではpdf画像をwordに埋め込んでも,見ることが出来いようである.
sed で.pdfを.pngにしつつ, pdfをpngに変換する.
例えば
pdftoppm -singlefile -png pdffile > pngfile
をする. svgの場合は
pdftocairo -svg pdffile svgfile
などとする.
svg
表示は出来るが, 表のナンバリングは出来ない.
version 2.9.2 で問題が解決されてpandoc-crossrefを使うと問題なく変換出来るようになりました. ありがとうございました.
オプションとして
--citeproc --bibliography=bibfile --csl=cslfile
を加えると文章内での引用や参考文献リスト生成が特に問題なくできた.
\refの中でアンダーバー_を使うとうまくナンバリングできなかった.ハイフン-だったらうまくうごいた.
pandoc --filter pandoc-crossref (pandoc -F pandoc-crossref)
で問題なく動くと, 図(tbl)と表(fig)のcaptionにナンバリングしてくれた.
version 2.19.2 ではうまくfilterを出来なかった.ただ,
pandoc input.tex -t json| pandoc-crossref --pipe json | pandoc --citeproc -f json -o output.docx
とすると動いてくれた.
式の参照は, デフォルトではまだ対応が難しそうだ.
ただし, 自力でfilter処理をすると, 数式ナンバリング(labelがあるもののみ)がpandoc-crossrefで出来る.
数式番号としての相互参照も難易度が高い. なので latexのauxファイルを使ってtexファイルの\ref{eq:fuga}を直接filterさせることで誤魔化して対応している.
pandocのdocxデフォルトテンプレートを変えれば変換したdocxファイルの体裁もカスタマイズできる.
pandoc --print-default-data-file reference.docx > reference.docx
とするとテンプレートを出力保存できるのでそのファイルを修正する.
そしてオプション
--reference-doc=reffile
を加えればよい
pandocを使ってlatexをwordに変換しようとする人は少数派です. なので細かなところまで望むのは野暮です.
目的は論文ドラフトの共著者展開なので, 共著者がドラフトを確認するためにストレスを与えない程度に作成できれば問題解決です.
少しマニュアルが入りますが, これまでの苦労を思えば大した問題ではありません.
1) pandocでうまく動くようにオリジナルに少し修正いれる
2) pandocに流し込み, 直接docxに出力してもよいがjsonで中間出力させて独自のfilter処理をする
3) 出力したdocxファイルでスペルチェックや共著者へのお願い, 英文校正などに使う
4) コメントや英文校正の結果は, 改訂したtexで1)-2)を行ってdocxファイルに変換しdocxファイルの差分機能で確認する
5) 必要ならばlatexdiffを使って差分をとる
という流れが可能となります!!!
これで論文執筆が進まない理由がひとつ減りました.