Mac で Sweave --- Mac OS X El Capitan

1. MacTeX のインストール

けちくさいことをいわずに、MacTeX をインストール。

http://www.tug.org/mactex/mactex-download.html で、MacTeX.pkg を control+クリック(右クリック) で「別名でリンク先を保存...」でダウンロード。

ダブルクリックでインストール(途中 パスワードを聞かれ、cc コマンドのインストールも求められる)。

「ターミナル」を起動し、tlmgr 自身とインストール済みパッケージを更新。

まずは tlmgr 自身を更新(プロンプトの後に以下をコピー&ペースト)。

sudo tlmgr update --self 

次に導入済みパッケージの更新(プロンプトの後に以下をコピー&ペースト。500個以上あったりするかも知れないので、気長に)。

sudo tlmgr update  --all

2. スタイルファイルなど

ファインダーの option+「移動」メニューで「ライブラリ」ディレクトリに入り,texmf/tex/platex ディレクトリに使用する style ファイルを置く。

システムのライブラリではなく,

Macintosh HD-->ユーザ-->hoge-->ライブラリ-->texmf-->tex-->platex-->スタイルファイル(のディレクトリ)

置いた後には必ず sudo mktexlsr の実行を忘れないこと。

なお,*.Rnw,*.tex ファイルは utf-8 エンコーディングとするので,style ファイルも utf-8 にしておくこと。

3. UpTeX のインストール

http://www2.kumagaku.ac.jp/teacher/herogw/index.html から「Drag & Drop UpTeX」(20151009版以降)をダウンロード。

ダブルクリッックしてできる UpTeX.app を「アプリケーションフォルダ」へ移動。

同梱されている説明書を読み,環境設定。

一番最初に UpTeX.app を起動するには,control+クリック(右クリック)で開くを選び,その後更にもう一度聞かれるので「開く」。

UpTeX.app の「環境設定」メニューを選び,dvipdfmx のフォント,TeX コンポーネントのアップデート。

texbin のパスをクリップボードにコピーしておいて,次の TeXShop のインストールで使う。

4. TeXShop のインストール

http://pages.uoregon.edu/koch/texshop/obtaining.html から、「Latest TeXShop Version3」をダウンロード。

ダブルクリッックしてできる TeXShop.app を「アプリケーションフォルダ」へ移動。

TeXShop を起動して「環境設定」

「書類」タブでは,[エンコーディング」を Unicode(UTF-8) に設定。

「内部設定」タブでは,texbin のパス設定は,UpTeX を使うなら,

/Applications/UpTeX.app/Contents/Resources/TEX/texbin

(デフォルトでは他のものが動く。それでも支障はないようだ)

LaTeX の設定は,UpTeX を使うなら,

ptex2pdf -u -l -ot "-synctex=1 -file-line-error"

TeXShop の環境設定を変更したら,その設定で TeXShop を使いたい場合は一度 TeXShop を終了させて,再度起動。

5. ソースファイルは *.Rnw,*.tex

もっぱら *.Rnw を使うなら,TeXShop の環境設定の[タイプセット]タブで,デフォルトのコマンドに自分の好きなもの(後述のようにするなら Sweave)をセット。

ソースファイルの encoding は utf-8 。

dvipdfmx,uplatex の使用は document class で指定する。

\documentclass[dvipdfmx,uplatex] {jsarticle}

6. タイプセットの方法

6.1. TeXShop からの場合

Rscript で書いた TeXShop の Engine の例

以下の内容のファイル Sweave.engine を,ファインダーの option+「移動」メニューで「ライブラリ」ディレクトリに入り,TeXShop/Engines の中にコピーする。システムのライブラリではなく,

Macintosh HD-->ユーザ-->hoge-->ライブラリ-->TeXShop-->Engines-->Sweave.engine

アクセスモードは chmod 777 Sweave.engine で,実行可能に設定。

書類の種類を選択するボタン(通常は LaTeX などになっている)で,「Sweave」を選択し「タイプセット」ボタンをクリックすると *.Rnw --> *.tex --> *.dvi --> *.pdf の順に処理される。

ファイルを分割して main.Rnw から \SweaveInput{foo.Rnw} でタイプセットするとき,foo.Rnw の先頭に

% ! TEX root = main.Rnw

と書いておくと,エディタで foo.Rnw を編集中でも,foo.Rnw の修正を自動保存した後に,main.Rnw からタイプセットしてくれる。

#!/usr/local/bin/Rscript --vanilla
ms <- function(file, makeindex = FALSE, silent = TRUE, deleteWorkfiles = FALSE, ...) {
	if (grepl("\\.", file) == FALSE) {
		file <- paste(file, "Rnw", sep = ".")
	}
	Sys.setlocale(locale = "ja_JP.UTF-8")
	Sweave(file, encoding = "utf-8")
	base <- sub(".(R|S)nw", "", file)
	file <- paste(base, ".tex", sep = "")
	cmd <- sprintf("/Applications/UpTeX.app/Contents/Resources/TEX/texbin/ptex2pdf -u -l -s -ot '-synctex=1 -file-line-error' %s%s", file, ifelse(silent, " | grep -v \"texmf\"", ""))
	repeat {
		system(cmd)
		con <- file(sub(".tex", ".log", file), open = "r", encoding = "utf-8")
		log <- readLines(con)
		close(con)
		no.error <- TRUE
		if (sum(grepl("Emergency stop", log)) > 0) {
			no.error <- FALSE
			break
		}
		if (sum(grepl("Rerun to get", log)) == 0) 
			break
	}
	if (no.error) {
		if (makeindex) {
			system(sprintf("~/mbin/makeindex %s", sub(".tex", "", file)))
			system(cmd)
		}
		system(sprintf("/Applications/UpTeX.app/Contents/Resources/TEX/texbin/dvipdfmx -V 5 %s", sub(".tex", ".dvi", file)))
	}
	if (deleteWorkfiles) {
		system(sprintf("/bin/rm %s.aux %s.dvi %s.log %s.tex %s.toc", base, base, 
			base, base, base))
	}
}
# 以下の xfigure 関数は,src パラメータで渡された描画プログラムに基づいて,figure というサブディレクトリに pdf 画像ファイルを作り,それを pdf 文書ファイル中に include するためのもの
xfigure <- function(src, caption = "caption", fn, label = fn, 
	base = "figure", size = 320, width = size * 6/320, height = 2/3, 
	mgp = c(1.8, 0.6, 0), mar = c(3, 3, 1, 1), rev = -3, htbp = "htbp") {
	height <- width * height
	pdf(sprintf("%s/%s.pdf", base, fn), width = width, height = height)
	par(mgp = mgp, mar = mar)
	parsed <- parse(text = src)
	results <- eval(parsed)
	dev.off()
	header <- sprintf("\\begin{figure}[%s]\n\t\\centering", 
		htbp)
	trailer <- sprintf("\t\\vspace{%smm}\\caption{%s}\n\t\\label{%s}\n\\end{figure}", 
		rev, caption, label)
	cat(sprintf("%s\n\t\\includegraphics[bb=0 0 %sin %sin, clip, width=%sbp]{%s/%s.pdf}\n%s\n", 
		header, width, height, size, base, fn, trailer), fill = TRUE)
       invisible(results)
}
grDevices::pdf.options(family="Japan1")
arg <- commandArgs()
ms(arg[7])
warn <- warnings()
if (length(warn)) head(warn, 2)

6.2. コマンドラインからの例

foo ディレクトリに foo.Rnw があるとき,最終的に foo.pdf を作るには以下のようにする

$ cd /foo
$ Rscript --vanilla -e "Sweave('foo.Rnw', encoding='utf-8')"
$ ptex2pdf -u -l -ot "-synctex=1 -file-line-error" foo.tex

6.3. シェルスクリプトの例

#!/bin/sh
# make Sweave
#
Rscript --vanilla -e "Sweave('$1.Rnw', encoding='utf-8')"
/uptex/UpTeX.app/Contents/Resources/texbin/ptex2pdf -u -l -ot "-synctex=1 -file-line-error" $1.tex

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS