R Presentation ファイル(.Rproj)は knitr::knit()
でmarkdownに変換されてPreviewされる.
knitr::knit()
処理の流れは,
- 引数
encoding
の判定・および変換 readLines()
で読み込み- 拡張子の判定
Chunk
もしくはInline code
が含まれているかどうかの判定cat()
もしくはwriteLines()
で出力
となる.
encoding
の判定
プロジェクトの場合は,プロジェクトのエンコーディングでknitr::knit()
が呼び出された後,
に引数が変換される.
プロジェクトではない場合は,encoding = "UTF-8"
で呼び出され,プロジェクトの場合と同じように引数が変換される.
readLines()
で読み込み
- 判定した
encoding
で読み込む - ここで cp932 のファイルを UTF-8 指定で読み込むと,読み込みに失敗して,結果的に変換に失敗したように見える
- UTF-8 のファイルは,UTF-8 もしくは
''
でしか読み込まれないので,読み込みに失敗することはない
拡張子の判定
拡張子 .Rpres
は all_patterns
に含まれていない
Chunk
もしくは Inline code
の判定
```{r} ```
もしくは
`r `
が含まれていたら,writeLines()
,含まれていなかったら cat()
で出力される.
writeLines()
は encoding
が指定できるので,encoding = ''
もしくは encoding = "UTF-8"
で出力される.
cat()
はファイル名をわたした場合 encoding
指定できないが, (出力する文字列の) Encoding()
がunknown どうかで挙動が変わって,
- UTF-8 のファイルを
readLines(file("filename", encoding = "UTF-8"))
を使って読み込んだ時は,Encoding()
が UTF-8になって,cat()
すると cp932 で出力される encoding = ""
で読み込んだ場合はEncoding()
が unknown で UTF-8 で出力される- (ちなみに,CP932 のファイルを CP932 指定で読むと
Encoding()
が UTF-8 になって,cat()
すると CP932 で出力される) - (指定しないで読み込むと CP932 で出力される)
cat()
するのがよくないのと,cat()
でファイル名をわたすのがよくない気がする.
なので,.Rpres
を all_patterns
に加える,もしくは,cat()
にfile()
をわたしてencodingを指定するのがよいと思うが,別のとこに影響出るんだろうか.
以下実験
プロジェクトではない場合
新規作成
デフォルトエンコーディングで .Rproj
ファイルが作成される
Preview
デフォルトエンコーディングに関係なく,
Chunk もしくは inline code なし
.Rproj
が UTF-8.md
はcp932- Preview は文字化け
.Rproj
が cp932.md
は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.
Chunk もしくは inline code あり
.Rproj
が UTF-8.md
はUTF-8- Preview は文字化けしない
.Rproj
が cp932.md
は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.
プロジェクトの場合
新規作成
プロジェクト設定のエンコーディングで .Rproj
ファイルが作成される
Preview
プロジェクト設定のエンコーディングが UTF-8,Chunk もしくは inline code なし
.Rproj
が UTF-8.md
はcp932- Preview は文字化け
.Rproj
が cp932.md
は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.
プロジェクト設定のエンコーディングが UTF-8,Chunk もしくは inline code あり
.Rproj
が UTF-8.md
はUTF-8- Preview は文字化けしない
.Rproj
が cp932.md
は変換に失敗,日本語が出現するところまでの部分が出力される.多分cp932.