ライブラリ追加の方法および補足

T. Yoshiizumi

2017/03/04


<目 次>


1. rubyライブラリの追加と削除

 rubyライブラリの多くは gem というコマンドで追加します。

 markdownをhtmlに変換したりする時に用いる kramdown は、ver 1.13.1 が既にインストール済みですが、より新しいバージョンが公開された時に、その最新版を導入し、旧バージョンを削除する例を掲げます。rubyスクリプトです。

−−−−−−−− スクリプトここから
# encoding: Windows-31J
require "rpt"

cmds = ["gem install kramdown",
    "gem uninstall kramdown -v 1.13.1"]
cmds.each do |cmd|
  system( cmd )
end
−−−−−−−− スクリプトここまで

 ちなみに、gem list を実行すれば、gemでインストールされているライブラリの一覧を得ることができます。


2. 統計ソフトRのパッケージの追加と削除

 統計ソフトRのパッケージを追加したい時は、次のようなrubyスクリプトを実行します。

 回帰分析におけるロバスト推測(外れ値への対処)のパッケージ導入例です。

 筑波大学のサイトからダウンロードする形になっています。もちろん、他のところでもかまいません。

 Rプログラムの実行過程と結果が log.txt として書き出されます。

−−−−−−−− スクリプトここから
# encoding: Windows-31J
require "rpt"

url = "http://cran.md.tsukuba.ac.jp/"
package1 = "robustbase"
package2 = "MPV"

rpro = <<EOS
options(CRAN="#{url}")
options(repos="#{url}")
install.packages("#{package1}")
install.packages("#{package2}")
library("#{package1}")  # 念のため読み込んでみる
library("#{package2}")
search()  # 読み込んであるパッケージの一覧
EOS

hs = Rrx::rexec(rpro, "log.txt")
−−−−−−−− スクリプトここまで

 上のRプログラム中に出てくる「install.packages」のところを「remove.packages」に変更すれば、パッケージを削除できます。

 削除の場合は、当然ながらダウンロードのためのURLを指定する必要はありません。

 念のためパッケージ削除のrubyスクリプトを掲げておきます。

−−−−−−−− スクリプトここから
# encoding: Windows-31J
require "rpt"
package1 = "robustbase"
package2 = "MPV"
rpro = <<EOS
remove.packages("#{package1}")
remove.packages("#{package2}")
EOS
hs = Rrx::rexec(rpro, "log.txt")
−−−−−−−− スクリプトここまで

    

 統計ソフトRのプログラムコードをmarkdownの原稿中に書き込んでおいて、 統計関係のレポートを手早く作ろうという発想があります。

 それを実現するための rmarkdown というパッケージをインストールするためのrubyスクリプトも掲げておきます。

−−−−−−−− スクリプトここから
# encoding: Windows-31J
require "rpt"
url = "http://cran.rstudio.com/"
rpro = <<EOS
options(CRAN="#{url}")
options(repos="#{url}")
install.packages("rmarkdown", dependencies = TRUE)
install.packages("devtools")
library(devtools)
install_github("yihui/runr")
search()  # 読み込んであるパッケージの一覧
EOS
hs = Rrx::rexec(rpro, "log.txt")
−−−−−−−− スクリプトここまで

 上を実行すると、rmarkdownに関連する多くのパッケージがインストールされます。 knitrもインストールされます。


3. LaTeXの変換に関する事柄

 markdownの原稿が変数 mkd_str に代入されている場合、 それをTeXの原稿に変換するメソッドが用意されています。rubyのメソッドです。

「require “rpt”」を記述すると使えるようになります。

  tex_str = Rpt::kramdown_tex_s(mkd_str)  # kramdownによりTeXに変換
  tex_str = Rpt::pandoc_tex_s(mkd_str)  # pandocによりTeXに変換

 上の両者とも、tex_str にはスタンドアロンのTeXの原稿が代入されます。

 第2引数以降にオプションを指定することができますが、それは kramdown と pandoc によって異なります。オプションについてはそれぞれの解説を参考にして下さい。

 kramdownにしろpandocにしろ、画像挿入に関しては次のどちらかが書き加えられます。

  \usepackage{graphicx}
  \usepackage[]{graphicx}

 しかし、このままだと w32tex のコマンド(platex, dvipdfmx)によって、画像をうまく挿入できません。

上のusepackageの箇所を次のように書き換える必要があります。

  \usepackage[dvipdfmx]{graphicx}

 前述の kramdown_tex_s(), pandoc_tex_s() の両者とも、この画像挿入に対応させるための書き換えを行います。

    

 生成された tex_str をpdfに変換するメソッドとしては tex2pdf() が用意されています。

  pdf_str = Rpt::tex2pdf(tex_str)

 上のようにして得られた pdf_str をバイナリーモードでファイルに出力すれば、pdfファイルを作ることができます。

 この tex2pdf() の内部処理では、tex_str の中に \tableofcontents があれば、目次生成のためにdvi作成を2度行います。つまりコンパイルを2度行います。

 tex2pdf() は、pdfを変数に記録して返すので、大きな文書の作成には向いていないと思います。

 大きな文書を作る場合は、tex_strをファイルに書き出した上で、次のようにLaTeXのコマンドを実行する方をお勧めします。

  platex test.tex
  dvipdfmx test.dvi

 上の2つのコマンド実行をrubyスクリプト内で子プロセスとして行えば、pdfファイルが生成されます。

 rpt利用時は、platex, dvipdfmx のどちらも、フルパス名を指定せずに使えます。

〜 以上 〜