裏 RjpWiki

文字通り,RjpWiki の裏を行きます
R プログラム コンピュータ・サイエンス 統計学

pythontex は,使えないな!

2018年09月04日 | RとLaTeX

pythontex は,望み薄かな?

実装が古いのと,日本語化の関連で,ちょっと面倒くさいというか無理っぽい。

 

やっぱ,R と Sweave の組み合わせが最強。

コメント

Pweave の入力と出力の区別

2018年09月04日 | RとLaTeX

そのまんまでは,入力と出力のフォーマットに全く違いがない。ので,まぎらわしい。

Sweave のようには行かず,インタラクティブモードのように,入力の前にプロンプトがつくようにはできないようだ。

そこで,LaTeX の listings を使う。

listings.sty と jlisting.sty を用意して,プリアンブルで以下を定義しておく。

\usepackage{listings,jlisting}
\lstset{%
  basicstyle={\ttfamily\normalsize},%
  frame={tbrl},
  numbers=left,%
  xleftmargin=3zw,%
  lineskip=-0.5ex%
}

これだけではだめで,

/usr/local/lib/python3.6/site-packages/pweave/formatters/tex.py

の,initformat の赤字部分を以下のように変更する。

    def initformat(self):
        self.formatdict = dict(codestart='\\begin{lstlisting}',
                               codeend='\\end{lstlisting}',
                               outputstart='\\begin{quote}\n\\begin{verbatim}',
                               outputend='\\end{verbatim}\n\\end{quote}',
                               figfmt='.pdf',
                               width='\\linewidth',
                               doctype='tex')

これで

<<>>=
x = 2
y = 4
print(x-y)
@

が,

のようなイメージで表示される。

すなわち,プログラム〔入力〕が行番号付きで,出力は行番号なしで出力される。

\color{} を使って,入力と出力を分けることもできるけど,色を使うのは避けたい。

コメント

Pweave のコードチャンク・オプション

2018年09月04日 | RとLaTeX
  • ネームなしのオプションは name または label
    すなわち,以下の 3 つ,name="aaa", label="aaa", aaa は同じもので,チャンクの名前を定義する
  • echo=True or (False)
    コードチャンクのエコー出力をするかどうか
  • evaluate=True or (False)
    コードチャンクを評価するかどうか
  • results="verbatim" or ("hidden")
    結果をテキスト出力("verbatim"),出力しない("hidden")
    "tex", "rst" は未実装?
  • term=False or (True)
    False のときは,結果はまとめて出力される
    True のときは,結果はその都度出力される
  • include=True or (False)
    True のときは,生成される図は自動的に文書に挿入される
    False のときは,図は生成されるが文書には挿入されない
  • fig=True or (False)
    True のときは,matplotlib plot で生成される図をファイルに書き出す
    このファイルは \includegraphics で文書に挿入できる
    figure 環境の caption は次の caption オプションで定義する
  • caption=""
    fig オプションと一緒に使い,figure 環境の caption を定義する
  • width
    文書に挿入される図の大きさ(任意の単位: cm, pt, linewidth など)
  • f_size=(8,6)
    保存される matplotlib の図の大きさ(単位はインチ)
    横幅,縦軸をタプルで指定
  • f_spines=True
    False のときは,matplot の図の右,上の spine を取り除く
  • f_env
    図の環境を追加する
  • f_pos="htbp"
    figure 環境の図の位置を指定する
  • wrap=True or (False, "code", "results")
    True ならば,長い行は 75 文字で折り返す
    "code","results" は指定されたものだけを折り返す
  • complete=True or (False)
  • source=ファイル名または Python モジュール・ファイル
    入力ソースをファイルやモジュール・ファイルにする

コメント

Pweave の TeXShop engine

2018年09月01日 | RとLaTeX

Sweave engine の最初の部分だけを以下のように変更して使う。

mp = function(file, makeindex=FALSE, silent=FALSE, deletePdfs=FALSE, deleteWorkfiles=FALSE, ...) {
  Sys.setlocale("LC_ALL", "ja_JP.UTF-8")
  if (grepl("\\.", file) == FALSE) {
    file = paste(file, "Rnw", sep=".")
  }
  cat("Input file:", file, "\n")
  cmd = sprintf("pweave -f tex %s", file)
  system(cmd)
  base = sub(".Rnw", "", file)
  :

 

コメント

Pweave --- Sweave for python

2018年09月01日 | RとLaTeX

R のための Sweave と同じような感じで,python のための Pweave(http://mpastell.com/pweave/) を使ってみる。

以下で,全角の <,> は,実際は半角で

TeXShop を使って,*.Pnw --> *.tex ---> *.pdf の操作を行うにあたって,大問題がある。

それは,TeXShop は .Pnw などという拡張子を認識しないということである(.Rnw は認識するのに)。

仕方ないから,.Rnw を流用することにするが,何とかならないか?

● チャンクの記述法

もう一つの問題点。

コマンドラインでは ```pythpn 〜 ``` が有効で,<<>>= 〜 @ はだめ。

TeXShop では全く逆。```pythpn 〜 ``` がだめで,<<>>= 〜 @ が有効。


次の 3 つの例は,だめ。

(1)

```python
a = 12
b = 34
print(a+b)
```

(2)

オプションを定義することもできる

```python, echo=False
a = 12
b = 34
print(a+b)
```

図を挿入する方法

```python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi)
plt.plot(x, np.sin(x))
```

\bigskip

次の 2 つの例は有効。

<<fig = True, width = '12 cm', echo = True>>=
from pylab import *
plot(arange(10))
show()
@

<<>>=
x = 2
y = 4
print(x-y)
@


● インラインコード

コードをその場で評価する sqrt(8)= <% np.sqrt(8) %>
            8 の平方根を,この後へ挿入 sqrt(8)=2.8284271247461903


式を評価した結果を出力する sqrt(8)=<%= np.sqrt(8) %>
            8 の平方根を,この後へ挿入 sqrt(8)=2.8284271247461903

違いはないようにみえるのだが?

コメント

TeXShop で Sweave

2018年08月20日 | RとLaTeX

TeXShop で用意されている engine に Sweave 用のものがないので,作ってみた。

基本的には,以下のようであるが,肝は Sweave 関数の前に,Sys.setlocale("LC_ALL", "ja_JP.UTF-8") を置くこと。これがないと locale が "C" になっているので,日本語が正しく処理されない。

このファイルを Sweave.engine と名付けて,Engines フォルダに放り込んでおく。選択肢に "Sweave" が加わる。

#!/usr/local/bin/Rscript --vanilla --default-packages=methods,datasets,utils,grDevices,graphics,stats
file = sub("\\.Rnw", "", commandArgs(TRUE)[1])
Sys.setlocale("LC_ALL", "ja_JP.UTF-8")
Sweave(file, encoding="utf-8")
system(sprintf("/Library/TeX/texbin/uplatex %s.tex", file))
system(sprintf("/Library/TeX/texbin/dvipdfmx %s.dvi", file))

 

コメント

Sweave.sty

2018年07月29日 | RとLaTeX

Sweave で,

<<>>==
ans <- lm(Petal.Length ~ ., data=iris)
logLik(ans)
@

のようなチャンクを含む *.Rnw を

Sweave ==> uplatex ==> dvipdfmx すると,*.dvi ファイルを *.pdf ファイルにする際に

kpathsea: Running mktexpk --mfmode / --bdpi 600 --mag 1+0/600 --dpi 600 tcrm1000
mktexpk: Cannot find mktex.opt; check your installation.
kpathsea: Appending font creation commands to missfont.log.

dvipdfmx:warning: Could not locate a virtual/physical font for TFM "tcrm1000".
dvipdfmx:warning: >> There are no valid font mapping entry for this font.
dvipdfmx:warning: >> Font file name "tcrm1000" was assumed but failed to locate that font.
dvipdfmx:fatal: Cannot proceed without .vf or "physical" font for PDF output...

Output file removed.

なるエラーメッセージを吐いてとまってしまう。

R コンソールでは,直前のエラーメッセージが赤字で目立つのだが,その前に本当のエラーが暗示されている。

LaTeX Font Warning: Font shape `TS1/aett/m/n' undefined
(Font)              using `TS1/cmr/m/n' instead
(Font)              for symbol `textquotesingle' on input line 31.

ドツボにはまっていたのだが,`textquotesingle' だの,aett だのと書かれているのがポイント。

確かに,件のチャンクの出力は,

'log Lik.' -9.283269 (df=7)

と,シングルクオートを含む。さらに,そういえば Sweave.sty で ae が悪さをすることがあるというのを思い出した。

Sweave.sty の 8 行目,

\setboolean{Sweave@ae}{true}

\setboolean{Sweave@ae}{false}

にすることで,問題解決...したのかな?



コメント

Pumpkin Helmet

2014年10月07日 | RとLaTeX

R の次のバージョンのコードネームは Pumpkin Helmet だそうだ。

いつものように,Snoopy と Charlie Brown ゆかりのもの。

http://dvd.netflix.com/Movie/You-re-a-Good-Sport-Charlie-Brown/70111491

最初の絵の説明中には,以前のコードネーム Good Sport(R 3.0.1) や Masked Marvel(R 3.0.0) も出ている。

http://en.wikipedia.org/wiki/You%27re_a_Good_Sport,_Charlie_Brown も参照。

コメント

Sweave-13

2011年12月15日 | RとLaTeX

Sweave-12 で書いた ae フォントを使うかどうかの件

やはり,困るという人もいるようで,マニュアルにちゃんと記載がある。

‘Sweave.sty’ also supports the [noae] option, which suppresses the use of the ae package, the use of which may interfere with certain encoding and typeface selections. If you have problems in the rendering of certain character sets, try this option.

マニュアル,ちゃんと読め > オレ

コメント

Sweave-12

2011年12月07日 | RとLaTeX

Sweave で作った pdf と,LaTeX だけで作った pdf を比べて,前者と後者のフォントの大きさ(当然ながら,版面の大きさとか行当たりの文字数など)が異なることに気づいた。
LaTeX のソースに \usepackage{Sweave} を加えるだけで,変になることがわかった。

消去法で突き止めた原因は,Sweave.sty にある
\newboolean{Sweave@ae}
\setboolean{Sweave@ae}{true}
が元凶のようだ。このようになっていると
\RequirePackage[T1]{fontenc} というfontを使うようになるようだ。そこで,
\setboolean{Sweave@ae}{false}
とすると,おかしなことはなくなった。

もっとも,そのほうがいいか,元のままがいいかは,個人の好みなんだろうなあ。

コメント

Sweave-11

2011年10月17日 | RとLaTeX

\include に対応するものはないけど \input に対しては,\SweaveInput がある。

\includeonly ができないのだけど,やむを得ない。

コメント

Sweave-10

2011年10月14日 | RとLaTeX

xtable と print.xtable の組み合わせで表を書くというのも,長ったらしいオプションであるとか,標準と違うデフォルトとかいうことで,これもまたラッパー関数を書くしかないかなと言うことで以下のようなものを作る。

ytable <- function(x, caption, label, align=NULL, digits=NULL, display=NULL,
                         table.placement="htbp", caption.placement="top",
                         math.style.negative=TRUE )
{
    library(xtable)
    xtable:::print.xtable(xtable(x, caption=caption, label=label, align=align, digits=digits, display=display),
                         table.placement=table.placement, caption.placement=caption.placement,
                         math.style.negative=math.style.negative)
}

.Rnw で

ytable(iris[1:10,], "iris data", "sss")

とか

x <- 1:10
y <- rnorm(10)
ytable(lm(y~x), caption="aaaaa", label="qqq")

caption と label は必須。もし,print.xtable の引数でデフォルトにしたいあるいはデフォルト値を変えたいものがあれば,この関数で定義しておく。


コメント

Sweave-9

2011年10月14日 | RとLaTeX

図をフロートにする方法はSweave-3 に書いたが,\begin{figure} から始まる一連の指示を毎回書くのは面倒くさい。

表は xtable でそのままフロートになるのだから xtable のような関数を書いてやればよい。

xfigure <- function(fn, caption, label, location="htbp")
{
    cat(sprintf("\\begin{figure}[%s]\n", location))
    cat("\t\\centering\n")
    cat(sprintf("\t\\includegraphics{%s}\n", sub(".(pdf|PDF)", "", fn)))
    cat(sprintf("\t\\caption{%s}\n", caption))
    cat(sprintf("\t\\label{%s}\n", label))
    cat("\\end{figure}\n")
}

これを .Rnw で以下のように使う。

<<results=tex, echo=false>>=
fn <- "test.pdf"
pdf(fn, width=3, height=2, onefile=FALSE)
hist(rnorm(10000))
invisible(dev.off()) # invisible にするか,結果を何かに代入するかしないと余計な文字列が出力される
xfigure(fn, "ヒストグラム", "lab1")
@

毎回 invisible(dev.off()) と書くのが面倒なら,dev.off2 <- function invisible(dev.off()) とでもしておく。

コメント

Sweave-8

2011年10月13日 | RとLaTeX

fig=TRUE を使うとき,悪さをする ctable.sty を使わないことを前提として,余計な処理をしないラッパー関数。エンコーディングも euc-jp であると決める。

ms <- function(file)
{
    Sweave(file, encoding="euc-jp")
    file <- sub(".(R|S)nw", ".tex", file)
    repeat {
        system(sprintf("/Applications/UpTeX.app/teTeX/bin/platex -kanji=euc %s", file))
        con <- file(sub(".tex", ".log", file), open="r", encoding="euc-jp")
        log <- readLines(con)
        close(con)
        if (sum(grepl("Rerun to get", log)) == 0) break
    }
    system(sprintf("/Applications/UpTeX.app/teTeX/bin/dvipdfmx %s", sub(".tex", ".dvi", file)))
}

コメント

Sweave-7

2011年10月12日 | RとLaTeX

<<>>= の中に書けるもの

engine  文字列(R)  engine=R か engine=S のコードチャンクのみ処理される。
echo
  論理値(TRUE)  R/S コードを出力ファイルに含めるかどうか。
keep.source
  論理値(FALSE)  R/S コードがエコーされるとき,TRUE ならば書いたままのコードがコピーされ,FALSE ならば deparse されたコード(演算子の前後などに適切に空白を入れたコード)がエコーされる。
eval
  論理値(TRUE)  コードチャンクを評価するかどうか。評価しないと言うことは結果も図も作成されないと言うこと。
results
  文字列(verbatim)  verbatim なら R/S 関数の出力は \verbatim 環境に似た環境の下に出力される。tex なら LaTeX の文法に従うものとしてそのまま取り込まれる。hide なら実行はされるがすべての出力は抑制される。
print
  論理値(FALSE)  TRUE の場合はすべての式は print 関数でラップされてから評価される。このようにすれば,全ての式の結果は見えるようになるからだ。
term
  論理値(TRUE)  TRUE の場合は,値の見え方が通常の対話 R セッションと同じになる。すなわち,代入の結果は表示されず,オブジェクト名の場合は値が表示される。false の場合には明示的に print 関数や cat 関数を使わない限り表示されない。
split
  論理値(FALSE)  TRUE の場合は,それぞれのコードチャンクのテキスト出力は別々のファイルに書き込まれる。
strip.white  論理値(FALSE)  TRUE の場合は出力の前と後の空白行が取り除かれる。all の場合は,全ての空白行が取り除かれる。
prefix
  論理値(TRUE)  生成される画像とテキスト出力のファイル名が共通になる。
prefix.string
  文字列  ファイル名のデフォルトは '*.(Rnw|Snw)' の拡張子を除いた部分。
include
  論理値(TRUE)  テキスト出力の \input,グラフ出力の \includegraphics を自動生成するかどうか。別の場所に自分で挿入したいような場合には include=FALSE とする。
fig
  論理値(FALSE)  コードチャンクがグラフ出力をするかどうか。
eps
  論理値(FALSE)  eps 形式のグラフィックファイルを出力するかどうか。
pdf
  論理値(TRUE)  pdf 形式のグラフィックファイルを出力するかどうか。
pdf.version  pdf のバージョンをセットする。デフォルトは pdf.options() で取られる。
pdf.encoding
  pdf のエンコーディングをセットする。デフォルトは pdf.options() で取られる。
png  論理値(FALSE)  png 形式のグラフィックファイルを出力するかどうか。R ≧ 2.13.0 で有効。
jpeg  論理値(FALSE)  jpeg 形式のグラフィックファイルを出力するかどうか。R ≧ 2.13.0 で有効。
grdevice  (NULL)  R ≧ 2.13.0 で有効。
width  数値(6)  図の横幅(インチ単位)
height  数値(6)  図の高さ(インチ単位)
resolution  数値(300)  インチあたりのピクセル数(png, jpeg でのみ)  
concordance  論理値(FALSE)
figs.only  論理値(TRUE)  

コメント