MacのESSでもquartz描画+日本語したいよね
してみた。
.Rprofileを以下のようにしたところ、とりあえず動く。
Carbon Emacs 2008年夏版と R 2.7.1 で確認しています。
if (.Platform$pkgType == "mac.binary"){ options(device="quartz") } setHook(packageEvent("grDevices", "onLoad"), function(...){ grDevices::quartzFonts(serif=grDevices::quartzFont( c("Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6", "Hiragino Mincho Pro W3", "Hiragino Mincho Pro W6"))) grDevices::quartzFonts(sans=grDevices::quartzFont( c("Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6", "Hiragino Kaku Gothic Pro W3", "Hiragino Kaku Gothic Pro W6"))) # grDevices::quartz.options(family="sans") } ) attach(NULL, name = "MacJapanEnv") assign("familyset_hook", function() { if(names(dev.cur())=="quartz") par(family="sans")}, pos="MacJapanEnv") setHook("plot.new", get("familyset_hook", pos="MacJapanEnv")) options(X11fonts = c("-alias-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*", "-adobe-symbol-*-*-*-*-%d-*-*-*-*-*-*-*")) setHook(packageEvent("grDevices", "onLoad"), function(...) grDevices::pdf.options(family="Japan1GothicBBB") )
動作確認は
plot(1:10, main="ほげ") pdf() plot(1:10, main="ふが") dev.off()
ぶっちゃけ、RjpWiki や id:syou6162 にあるものへ options(device="quartz") を足して、pdf.optionsを書いてるだけ。
Terminal から ESS ではうまくいってる。
Terminal から直接 R だと描画やpdf保存はうまくいくけど、Rで打ちこむ時に文字が化ける。Terminalなどではutf-8で日本語打てるので、R絡みかな?
このdevice="quartz"をやるのに海外だと CarbonEL というLibraryを使うひともいるようだ。特にメリットに気付けていないのでスルーした。
自分の環境ではなぜか
ps.options(family="Japan1GothicBBB")
だと postscript への保存時に日本語変換がうまくいかないというエラーが。
かなしい。
Rのhistoryを一箇所にしてみたいとおもったけど ESS からだとうまくいかないよう‥
~/.Renviron を以下のようにつくる。
R_HISTFILE=~/.Rhistory R_HISTSIZE=10000
~/.Rprofile に
# Things put here are done first. .First <- function(){ utils::loadhistory(Sys.getenv("R_HISTFILE")) cat("\n Welcome to R!") cat("\n " , paste(date()), "\n\n" ) cat("\n " , "You are in", paste(getwd()), "\n\n" ) } # Things put here are done last. .Last <- function(){ utils::savehistory(Sys.getenv("R_HISTFILE")) graphics.off() cat("\n\n .Rhistory has been saved on " ,paste(date())) cat("\n\n Goodbye!\n\n") }
R_HISTFILEはデフォルトだと".Rhistory"なので、起動したディレクトリに作られる。これだと違う場所で行った操作が呼び出せない。
上の2行で、zsh のように便利にならないものかと思っていたのだけど‥。
普通に Terminal から直接 R を呼んだりする場合は問題なさそうだが、ESS はhistory の扱いがどうも違う。iESS は ESS から飛ばされてきた命令を記録してなさそうだし。残念。
ESS の ess-S-assign-key
最近の ESS では ess-S-assign-key というので"_"以外にも"<-"の割り当てができるそう。こんな感じ。
(setq ess-S-assign-key "\C-j") (ess-toggle-S-assign-key t)
kzfm さんのように ess-mode-hook とするのもありなようだ。
http://blog.kzfmix.com/entry/1198403278