review icon indicating copy to clipboard operation
review copied to clipboard

参考文献DBとの連携

Open kmuto opened this issue 5 years ago • 12 comments

https://twitter.com/windowmoon/status/1321853175494668288 からのスレッド

BibtexかBibLatexに対応するか、ZoteroかMendeleyかEndnoteと連携できるようになってくれればいいのだが

Zotero・Mendeley・Endnote・ReadCubeから出力できる形式を読めるようにするか、現在の形式を出力するZotero・Mendeley・Endnote・ReadCubeプラグインを用意すればいいだろうと思います。あと、本文中での体裁を調整するCitation Style Languageに対応すればLaTeXからの移行が可能になると思います。

Zoteroからは、CSL JSONやEndnote XMLで出力できるので、これらに対応すればいいのではないでしょうか。

プラグインについては本筋から外れそうなので誰かに任せるとして、JSON・XMLの書き出しをインポートするのはできるかもしれない。 ただ、各ビルダにおいて実際どういう結果になればベストなのか、どのくらいカスタマイズは要求されるのかが私はアカデミックに疎めなのでよくわからないところあり。 なお、bibtexを読み込むのは茨すぎるので避けたい。

kmuto avatar Oct 30 '20 10:10 kmuto

MendeleyとReadCubeで共通で出力できるのは.bibと.ris (Research Information Systems) なので、bibtex が無難といえば無難ですけどねえ(茨がどんなものかわからない。。。)

kdmsnr avatar Oct 30 '20 11:10 kdmsnr

RIS https://en.wikipedia.org/wiki/RIS_(file_format)

kdmsnr avatar Oct 30 '20 11:10 kdmsnr

gemでよければ ref_parsers (Parser for various types of reference file formats. It currently supports RefMan (.ris) and EndNote (.enw))ってのはありました。 https://rubygems.org/gems/ref_parsers/versions/0.0.11

kdmsnr avatar Oct 30 '20 11:10 kdmsnr

おぉ。

bibtexはTeXシステム前提で密接すぎるので、あれをHTML/plain/IDGXMLと混ぜるのかなりきつそうな感じがしています。中にTeXマクロ入れられちゃうとその解析どうするのとか。

ref_parser見てみます。あとは結局取り込んでどう表現するのかという問題もありますね…。ユーザが妥当な順序付きで書き出してるのでそれをそのまま出力すればいい、のかな?

kmuto avatar Oct 30 '20 11:10 kmuto

おそらく書き手側はbibtexでファイルを用意したいと思うんですよね。それで、Re:VIEWから使うときは、何かライブラリで読み書きして、そのままは使わないようにするとかですかね。

これは利用者数多そうでした。 https://rubygems.org/gems/bibtex-ruby/versions/5.0.0?locale=ja

kdmsnr avatar Oct 30 '20 11:10 kdmsnr

実際どれだけ利用者がいるかわからないので、gemがあれば使える、的な利用で問題なさそうですね。 bibtexでもできなくはない、か…。 ちなみに @kdmsnr 的にはこういう機能はあると嬉しい気がします? bibtex出力を活用できる人だと結局普通にTeXで書けちゃうのでは…という気もしたりしなかったり。

kmuto avatar Oct 30 '20 12:10 kmuto

bibtexはツールから作れても、自分でTeXは触れない、というのは一定数いそうな気はします(私もそう)。論文だと規定のテンプレートを埋めればいいでしょうが、同人誌となると自分でいちから整備しないといけないので、Re:VIEWに頼ろうという人はいそうです。なので「参考文献が多い論文っぽい本を同人誌として出したい」という状況であれば、需要がありそうというのはなんとなくわかります。

kdmsnr avatar Oct 30 '20 13:10 kdmsnr

どっちにしろ@<bib>はともかく //bibpaer はいろいろと作り直したい気持ちがあるので、新しいものとして何か作ってしまってもよいかなと思っています。互換性とるの大変そうだから、@<cite>とかの別名かな…

kmuto avatar Oct 30 '20 13:10 kmuto

@<cite> は既存のものがありました

kdmsnr avatar Oct 30 '20 16:10 kdmsnr

まだ雑ですけど、こういう感じでいけそうでした。 (暫定的に ref / references を使っています)

    ## builder.rb
    def citeproc
      require 'bibtex'
      require 'citeproc'
      require 'csl/styles'
      @bibtex ||= BibTeX.open("bib.bib")  # TODO: set via config
      style = 'apa' # TODO: set via config
      @citeproc ||= CiteProc::Processor.new style: style, format: bibtex_format
      @citeproc.import @bibtex.to_citeproc
    rescue LoadError
      error "not found bibtex library"
    end

    def bibtex_format
      "text"
    end

    # @<ref>{key}
    def inline_ref(key)
      citeproc.render :citation, id: key
    end

    # //references
    # print all bibs
    def references
      puts citeproc.bibliography
    end

    ## htmlbuilder.rb
    def bibtex_format
      "html"
    end

    ## compiler.rb
    defsingle :references, 0
    definline :ref

kdmsnr avatar Oct 30 '20 17:10 kdmsnr

事前にライブラリが必要です

gem install bibtex-ruby
gem install citeproc-ruby
gem install csl-styles

kdmsnr avatar Oct 30 '20 17:10 kdmsnr

実装がものすごく雑で申し訳ないですが…… #1595 で作ってみました。

kdmsnr avatar Nov 02 '20 17:11 kdmsnr