2016年8月3日水曜日

R: pdflatex is not available

Rで「pdflatex is not available」というエラーに遭遇したときの対処方法。
こちらのサイトを参考にした。

まず、ターミナルで「pdflatex」の場所を確かめる。whichを使う。

$ which pdflatex
/usr/texbin/pdflatex

ちなみに「R」の場所はこちら。

$ which r
/usr/bin/r

「pdflatex」が入っていることを確認した。mac側ではなくR側の問題ということになる。

Rがソフトウェアを認識するかどうかは、Sys.which()で知ることができる。
たとえば「R」を探すなら、

> Sys.which("r")
           r 
"/usr/bin/r"

という具合。ターミナルでみたときと同じ。

上のエラーが出ている状態で「pdflatex」を探してみると、

> Sys.which("pdflatex")
pdflatex 
      "" 

どうやら認識していないことがわかる。

これはPATHの問題。RのPATHを調べるには、Sys.getenv()を使う。

> Sys.getenv("PATH")
[1] "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"

いくつかPATHがあるが、「/usr/texbin」がない。
これがエラーの元凶。

PATHを通す作業を行う。そのためには、Sys.setenv()を使う。
既存のPATHと「/usr/texbin」をpaste()で繋げるところがRっぽい。

Sys.setenv(PATH = paste(Sys.getenv("PATH"), "/usr/texbin", sep=":"))

これで、PATHが追加された。

> Sys.getenv("PATH")
[1] "/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/texbin"

Rが「pdflatex」の場所を知ることができるようになった。

> Sys.which("pdflatex")
              pdflatex 
"/usr/texbin/pdflatex" 

これで、「pdflatex is not available」というエラーが出なくなる。