[Pandoc] markdownからdocxでpandoc-crossrefを用いたときの参考文献の入れ方

Pandocを用いて,markdownでplosone sampleの内容を書いて,wordとして作成する方法の記事の2部目です.一つ前の記事はこちらです.
[Pandoc] markdownで論文として通用するレベルのwordへの変換を頑張る
コードはこちら.
https://github.com/toshiakiasakura/pandoc_plosone_sample_reproduction

前回の記事では,参考文献の話には触れていなかったので,ここでは参考文献の入れ方について書いていく.といっても,すでに秀逸な記事がありまして,こちらの三部に目を通している前提で話を進める.
Zoteroから参考文献リストを自動エクスポートする (PandocとZoteroで参考文献:前編)
Pandocで参考文献リストを処理する扱う方法 (PandocとZoteroで参考文献:後編)
Pandocで参考文献が辛い話 (PandocとZoteroで参考文献:余談編)

はい,僕はこの記事の通りに進めていったが,文章の途中に入れた参考文献が変わってくれない.え,なんで? なんで? で詰まった.

ということでこの記事では,pandoc-crossrefを用いている場合に起きるバグについてと,zotxtについての2部構成で書く.

pandoc-crossrefを用いたときのciteprocの制御

今回は,plosoneのサンプルページを再現したいため,また,論文を書く際にmarkdownを使うメリットの一つである図表の相互参照の機能を用いるためにも,pandoc-crossrefは欠かせない.だが,引用文献が入れられないのはもっと困るという状況.

pandoc-crossrefの公式ページを見ると,以下のような話が,
citeproc and pandoc-crossref

要約すると,citeprocとpandoc-crossrefの表記が一緒だから,必ずpandoc-crossrefの後に,citeprocを用いてね,という話.だけれども,コマンドラインから一々,–citeprocを指定する際に,bibliographyとcslも指定しなければいけなくなる.default.yamlに全部書き込んでおきたいとなる.

そこで遭遇する次の問題は,citeprocをどうやってpandoc-crossrefの後に実行するのか,という話.

pandoc-citeprocというfilterが古いversionではあったが,これは内部に組み込まれた.なのでエラーが出てしまう.citeproc: true という記法でciteprocをdeafult.yamlから起動する方法も分かったが,これでは結局,pandoc-crossrefの後にはciteprocが動いてくれない.

公式のpandocのサイトを死ぬ気で探したらあった.
Reader options
typeをつければ良いんだ.

ということで,default.yamlは以下のようになる.

to: docx  # output format type.
output-file: ./result.docx  # output file name.
input-files:
- plosone_sample.md  # input file name(s).

from: markdown  # input file format.
reference-doc: plosone_template.docx  # style template word file.
filters:
- pandoc-mustache  # For variable substition purpose.
- pantable  # For table import from .csv files.
- pandoc-docx-pagebreakpy # For pagebreak
- pandoc-crossref
  #- pandoc-zotxt.lua
- type: citeproc

bibliography: 1_plosone.bib
csl: plos-one.csl

metadata:
    mustache: ./variables.yaml
    tableEqns: true
    titleDelim: "."
    tableTitle: "Table"
    figureTitle: "Fig"
    tblPrefix: "Table"
    figPrefix: 
        - "Fig"
        - "Figs"
    eqnPrefix: "Eq."
    lang: en

filtersが上から順次,実行されていくことは留意した方が良い.

例えば,Pantable と pandoc-crossrefも順番が大切になる.Pantableのyamlパートにpandoc-crossrefの記号が入っているので,もしpandoc-crossrefを先にすると読み取れずに終わる.なので,Pantableを先に持ってきて,table部分を処理してmarkdownの形式にしてからpandoc-crossrefを実行させる必要がある.

zotxtについて

zotxtはpandocの3rd partyのパッケージでなんと以下のサイトで紹介していたような,bibを出力せずに参考文献を取り入れてくれる機能を提供する.
Zoteroから参考文献リストを自動エクスポートする (PandocとZoteroで参考文献:前編)

一応,zotxtのdocumentに従ってインストールを進めれば動かすことは出来る.(pandoc-zotxt.luaのrepositoryもちゃんと見ないとダメ)
zotxt: a Zotero extension for text

だが,個人的にはこれは使わないほうが良いんじゃないのかなぁと思っている.メリットとしては,bibliographyを書かなくて済むという点だが,逆にこれがデメリットになると感じる.

zotxtを使ったデメリットは以下のようになる.

・他人との共有の際に,その人がzoteroを使っており,かつ,参考文献に関して同じ論文を全部zotero上に載せており(or zoteroのcollection機能を使っている),かつ,Citation Keyの指定方法が全く同じになっている.
・自分がCitation Keyの指定方法を変えた際に,再現できなくなる.

どちらも,個人の環境に過剰に適合してしまうために,他の人でも再現する,もしくは自分の環境ですら時間が経ったら再現出来なくなる危険性を孕む.

そもそもbibにエクスポートすると言っても一度,ディレクトリーの指定をしたら自動的にzoteroに追加した分は処理してくれるのでそんなに苦労な手間ではないと思う.それで,zoteroで全く同じ設定を他の人に依頼して統一する手間を踏むよりは,bibを出力して,他の人もdocumentを再現出来るような体制の方が重要かと.また,再現性も担保される.

以上.

———-雑感(`・ω・´)———-
Pandocの記事タイトルは,形式の変換なので皆同じようなタイトルの作り方になってしまって難しいですね.

コメント

タイトルとURLをコピーしました