(PART) 製本と多様な形式への対応 {-}

PDF の文書クラス

HTMLは利用者側が見え方をある程度カスタマイズできる. かつて存在した Evernote Clearly やカスタム CSS を使って. そのぶんPDFは作成者側がよりレイアウトに注意を払うことになるだろう. 本稿では文章の区切りを章立てにしている. しかし PDF 数十ページしかない文書を大きな文字サイズの見出しで区切るのは少しものものしい感じがする. YAML フロントマターを変更すれば, トップレベルの見出しを変更できる.

pdf book in Japanese は "book" ということで書籍の組版をデフォルト設定にしている. もう少し小規模な文書ならば, レポート論文記事形式のほうが良いかもしれない. 例えば, 以下のように指定する.

documentclass: bxjsreport

documentclass には LaTeX の文書クラスファイル (.cls) ならなんでも与えることができるが, \XeLaTeX または \LuaLaTeX で日本語文書を作成することを想定しているため, 以下2種類の BXjscls の文書クラス[^bxjscls]の中から選ぶとよい. デフォルトは bxjsbook なので, これは明示的に指定する必要はない.

このうち, bxjsbookpdf book in Japanese のデフォルト設定となっている. rmdja::texlogo("LaTeX") の文書クラスは, 行間や見出しのレイアウトなどを日本語文書に準じたものにするが, それ以外の細かい調整は _output.yml_bookdown.yml の設定を書き換えて調整する. それでも不十分な場合は, .tex ファイルやpandocテンプレートを直接編集したり, 追加のスタイルファイルを読み込んだりするしかない.

しかし, おそらくはこういった細かい調整が必要になることはすくないだろう. 以降では, rmdja が用意しているプレゼンテーションや論文形式のテンプレートを紹介する.

[^bxjscls]: 詳細はここにあるドキュメント参照: https://www.ctan.org/pkg/bxjscls 但し, スライド用クラスである bxjsslide の使用は想定していない. また, bxjsarticle を使う場合は後述の pdf article in Japanese テンプレートから作成したほうがよい. さらに r rmdja::texlogo("LuaLaTeX") を使用するならば luatex-ja で提供される日本語文書クラスも指定することができるが, あまりつかったことがないためレイアウトに不備があるかもしれない. 以降はPDFファイルで出力できる各形式についてこまかく解説する.

プレゼンテーション資料の作成

beamer_presentation_jarmdja の最初期からあったフォーマットで, そもそも当初はこれを作るのが目的だった. このフォーマットは Beamer を使用してプレゼンテーション用スライドをPDFファイルで作成する. Beamer は rmdja::texlogo("LaTeX") の文書クラスの1つで, rmarkdown::beamer_presentation はこれを利用しているが, 例によって日本語表示は想定されていないため, そのためのもろもろの調整込みのラッパーフォーマットである. ただしスライド資料なので組版の禁則処理のような細かい調整は用意していない. rmdjaではスライドはPDF以外の出力は不可能である[^slide-html].

通常の文書と違い, デザインを決めるのは主に theme である. デフォルトでは metropolis[^metropolis-warn] である. 日本語表示のために調整してあるものの, 日本語表示と直接関係ない部分はカスタマイズの余地としていじっていないが, テンプレートには私の好みが反映された調整 (プログレスバーの位置調整) がYAMLフロントマターに直接書き込まれている.

また, 日本語表示と直接関係ないアレンジとして,デフォルトの 文献引用のスタイルが変更される.

  1. 本文での引用スタイルは番号形式 (biblatex の場合は citestyle=numeric, natbib の場合は numeric オプション).
  2. 「参考文献」というセクションタイトルのみのスライドが冒頭に自動で挿入される
  3. 引用された文献の数に応じてフレームが自動分割される
  4. これらの参考文献フレームでは上部のタイトルが表示されない
  5. 文字サイズが脚注サイズに縮小

という設定になっている. 通常のプレゼンテーションでは大量の参考文献を読み上げることは少ないという想定で, 紙面の限られたスライドに参考文献のみ羅列したスライドでページ数が増えないように考慮したためこうした. これは既に作成した my_latex_templates のテンプレートとほぼ同じである.

さらに, Beamer テンプレート特有の設定をいくつか紹介する.

classoption:
  - aspectratio=169

となる. 指定可能なのは 3:2, 4:3, 5:4, 14:1 ,14:9, 16:9, 16:10 で, 上記のようにコロンを抜いて数字のみで指定する. この classoptionr rmdja::texlogo("LaTeX") の文書スタイルに対するオプション全般を与えるためにあるため, (beamer スタイル以外にも) 他にもいろいろ存在する.

詳細はbeamer の公式ドキュメントを参考に.

rmdja の Beamer 用テンプレートの実際の表示例は examples にある.

[^slide-html]: HTML形式のスライドはサポート対象外である. 日本語文書特有の処理はあまりないということ, 普段と違う環境で表示することの多いであろうスライド資料はなるべく環境に依存しない方法で表示すべきと考えているのが理由である. HTMLでスライドを作成したい場合, 次のページが参考になる: https://kazutan.github.io/SappoRoR6/rmd_slide.html#/ [^metropolis-warn]: なお metropolis テーマ開発者は Fira Sans フォントの使用を想定しており, ビルド時にフォントがないという警告が出ることがあるが無視して良い. (参考: https://github.com/matze/mtheme/issues/280)

(WIP) 卒業論文の作成

卒業論文...というか学術論文での体裁でPDFファイルを作成することも可能である. pdf article in Japanese という名前のテンプレートで論文形式のPDFファイルを用意している --- HTML 形式で論文提出を要求するという話は聞いたことがないのでPDFのみ対応している.

書籍形式との違いは,

など些細である. 実際のところ, 文書テンプレートの設定を少しいじっている程度のことしかしていない. テンプレートを開いて確認すればわかるように,

output:
  rmdja::pdf_book_ja:
    toc: false
    pandoc_args:
      - '--top-level-division=section'
documentclass: bxjsarticle

という設定を追加しているだけである[^ltjsarticle].

大学によっては論文の体裁が細かく指定されている場合もあるかもしれない. 例えば1ページあたりの行数や, 1行あたりの文字数とか. 例えば1ページあたり50行, 1行あたり40字とする場合, 以下のような設定を追加する. ただし, 行数は図表の挿入などで変動するし, プロポーショナルフォントや字幅の異なる欧文を多用すれば1行あたりの文字数は多くなりうる.

classoptions:
  - 'number-of-lines=50'
  - 'textwidth=40zw'

さらに, カラー印刷が許容されない場合もある. ggplot2scale_*_grey() などでカラーパレットを簡単に変更できる (図 \@ref(fig:plot-grey-scale)).

ggplot(mutate(mtcars, cyl = factor(cyl)),
       aes(x = mpg, y = wt, color = cyl)) +
  geom_point() + labs(x = "マイル毎米ガロン", y = "重量 (1000ポンド)") +
  theme_bw() +
  scale_color_grey() + scale_fill_grey()

[^ltjsarticle]: このテンプレートでは論文形式のフォーマットとして bxjsarticle を使用している. r rmdja::texlogo("LuaLaTeX") を使用するならば代わりに ltjsarticle クラスも使用可能なはずだが, 私は使ったことがないので説明を省く.

(WIP) 小説の執筆

作家の京極夏彦氏は自分の作品を1ページごとに切り取っても作品として成立するようなレイアウトにこだわっているらしいが, すでに説明したように技術文書や学術論文では図表の配置や改行などにこだわることがあまりない. しかし, 不可能ではない. HTML では難しいが (不可能ではないがHTMLでやるメリットが感じられないので対応する気がない), PDF ではある程度のレイアウトの制御が可能である. ただし, 本当に厳格なJIS準拠の組版にこだわるなら, おそらく tex ソースを直接編集しなければならない.

rmdja で用意されている縦書き文書テンプレート pdf vertical writing in Japanese は, jlreq を利用して[^luatex-ja-tate]縦書き文書のPDFを作成する(図: \@ref(fig:tategaki)). HTML には未対応である.

knitr::include_graphics(file.path(img_dir, "tategaki.png"))

```{block, type="warning"} 現在, 縦書き文書では図のようにゴシック体になってしまうことがある.

```{block, type="tip"}
エディタは横書きのままである. また, 段落改行も Markdown のルールに則して1行空けによってなされる.

```{block, type="tip"} 『小説家になろう』『カクヨム』とかに自動投稿する機能もいまのところ用意していない.

[^luatex-ja-tate]: `luatex-ja` にも縦書き文書クラス `ltjt` シリーズが存在するが, 公式ドキュメントにすら詳しい解説がなかったため採用しなかった.

# 製本方法の詳細

冒頭のチュートリアルで行った製本 (ビルド) の仕組みをもう少し詳しく解説する.

bookdown-demo を念頭に置いた解説. `rmdja` も基本的に同じ.

* `index.Rmd`: デフォルトで最初に読み込まれる`Rmd` ファイル (名前を変える機能もあるが, 現時点では不具合が起こりやすいのでおすすめしない)
* それ以外の `Rmd` ファイル: 連結して読み込むことが可能
* `_output.yml`: マルチメディア展開のための設定. PDF, HTML, EPUB それぞれの設定を書く
* `_bookdown.yml`: bookdown のレイアウト設定
* その他の設定ファイル: その他製本に必要なもの, 画像ファイル, `.css` ファイル, `.bib` 等

`_output.yaml`, `_bookdown.yml` は `index.Rmd` のヘッダに書くこともできるが, 長くなりすぎるので分割できる. `bookdown::render_book()` 関数は, ルートディレクトリのこれらを自動で読み込んでくれる.

## ファイル構成

これらのファイルの中身を解説する.

### `_output.yml`

本来の YAML の `output:` 以下の記述をこの `_output.yml` ファイルに書くことができる.
`output:` を複数書くと`rmarkdown::render_site()` やビルドツールでそれぞれの形式に一括作成してくれる.

```yaml
output:
  bookdown::gitbook:
    lib_dir: assets
    split_by: section
    config:
      toolbar:
        position: static
  bookdown::pdf_book:
    keep_tex: yes
  bookdown::html_book:
    css: toc.css
documentclass: book

詳しくは BKD "Ch. 3 Output Formats" の章を.

_bookdown.yml

_bookdown.ymlindex.Rmd の YAML ヘッダの bookdown: 以下に対応する内容を書くことができる. 例えばどの Rmd ファイルを読み込むかとか, LaTeX のときだけ, HTML のときだけ読み込むような設定も可能.

https://ill-identified.hatenablog.com/entry/2020/09/05/202403

詳しくは, BKD Ch. 4.4 Configuration

Build ペーンから文書をビルドするには, index.Rmd のYAML ヘッダに site: bookdown::bookdown_site を書く必要がある. さらに, index.Rmd をプロジェクトディレクトリのルートに置いていない場合は, ツールバーの Build -> Configure Build Tools... から index.Rmd を置いているディレクトリを site ディレクトリとする設定が必要になる(図 \@ref(fig:build-pane2-1), \@ref(fig:build-pane2-2)).

include_graphics(file.path(img_dir, c("build-pane.png", "build-pane-build.png")))

または, bookdown::render_book("index.Rmd", "rmdja::pdf_book_ja") などでも実行できるから, コマンドラインからも実行できる. 同時製本は rmarkdown::render_site().

出力形式による表現の限界

HTMLとPDFで処理を場合分けする

出力方法で言えば, HTML と PDF に大別できる. Rmdは HTMLタグも LaTeX コマンドも受け付けるが, それぞれ HTML と PDF に変換する際にしか反映できない. よって, 例えば複雑な図表を LaTeX コマンドでじかに Rmd ファイルに書いてしまった場合, HTML では表示されない.

紙媒体と電子媒体では表現できることに差がある. 例えば紙はあらゆる環境で同じような見た目になるが, ハイパーリンクは付けられないし, 一度出版してしまうと修正は容易ではない. PDF の見た目も読者の環境に依存しにくいが, やはり更新が容易ではない.

bookdown には既に印刷された本の中身を書き換えるする機能はないが, 出力ごとに内容を変えることで, PDF にのみ更新履歴を表示することはできる.

knitr::is_latex_output(), knitr::is_html_output() などは, knit 時にどの媒体への変換処理なのかを判定するのに使える. rmdja::ruby() もこの機能を利用しているし, 本文中の \LaTeX{=latex}LaTeX{=html} のロゴも HTML と PDF で使い分けている.

また, _bookdown.yml の設定, rmd_files は, 媒体別に設定することができる.

rmd_files:
  html:
    - index.Rmd
    - html-only.Rmd
  latex:
    - index.Rmd
    - latex-only.Rmd

絵文字の出力

絵文字をHTMLでもPDFでも出力したい場合, \coloremoji{⛄} のように絵文字を囲む. ただし, RStudio のエディタは一部のマルチバイト文字の表示に対応していないので予期せぬ不具合に注意する.

現在の主要Webブラウザでは, 特に設定せずとも Unicode 絵文字をカラー画像に置き換えて表示できるものが多い. しかし PDF 生成時には明示的にフォントを指定するか, 画像に置き換える記述が必要である. その実現のため bxcoloremoji という LaTeX パッケージ^bxcoloremojiを利用する. このパッケージは CTAN に登録されていないため, 別途インストールする必要がある.

画像の保存形式

技術文書での画像の多くはプロットなど単純な図形なので, 写真などを掲載するのでない限り, PDF で出力する場合はプロット画像も PDF にするのが望ましい. JPG や PNG などのラスタ画像では拡大すると粗くなるが, PDF などのベクタ画像ならば拡大しても粗くならず, かつ単純な図形ならばはファイルサイズも小さく済むことが多い. 一方で HTML は通常 Webブラウザで閲覧するため, PDF に対応していないことが多い. HTML でベクタ画像を掲載したい場合は SVG 形式 で出力する.

R による SVG への出力は, 従来組み込みの SVG() で行うことが多かったが, 近年は新たなパッケージが出ている. 有力なのは svglitersvg である.

https://oku.edu.mie-u.ac.jp/~okumura/stat/svg.html

rsvg のほうが高性能だが, knitr で対応しているのは svglite なので簡単に使いたいならこちらを推奨する.

デフォルトの保存形式

デフォルトでは, PDF は cairo_pdf, HTML では解像度を高めに設定した PNG を使用している. これは, 件数の多い散布図など, ベクタ形式ではファイルサイズが大きくなりすぎる場合もありうるための判断である.

画像形式を変更したい場合は, チャンクオプションの dev で, オプションは dev.args=list(...) で変更できる.

https://bookdown.org/yihui/rmarkdown-cookbook/graphical-device.html

製本した文書を配布する

Wepページのホスティング

HTML ファイルは様々な配布方法がある. もちろん自分でサーバを立てても良い. 特に簡単なのは以下の2点である.

  1. github pages を利用する
  2. bookdown.org に投稿する

(1) の詳細は github.com の公式ドキュメントを見るのが一番良いだろう. rmdja では, bookdown の機能である _bookdown.yml に文書ファイルの出力場所を指定するオプションをそのまま使えるため, docs ディレクトリに出力するよう設定すればあとはリモートリポジトリにプッシュし, pages を公開するよう設定するだけである.

既にbookdownで作成した文書を公開している例は多数ある. 例えば既に何度も言及した公式解説サイトはそれじたいが bookdown で作られているし, "R for Data Science" @wickham2016Dataは, 内容の良さも含め一見に値する. また, "Hands-On Data Visualization: Interactive Storytelling from Spreadsheets to Code" [@doughertyforthcomingHandsOn] という本[^handon-source]が来年出るらしい. そして面白いことにこれは R の本ではなく Google スプレッドシートとかの Web 上のサービスの利用法を紹介する文書である.

これらはいずれもソースコードまで公開されている. もちろんここでいうソースコードとは, 本文中のプログラムだけでなく文書を生成する Rmd ファイルなども含める.

それ以外にも有名無名の多くのドキュメントが公開されているが, 一方で日本語はまだまだ少ない. 内容が豊富で, かつ Rmd のソースコードまで公開されている例として以下が見つかった.

さらに以下2つは私が作成したものである.

特に私の2作品は PDF のレイアウトにも注意を払っているが, 当時はまだ rmdja を作成しておらず kazutan 氏作の bookdown_ja_template をさらに改良した kenjimyzk 氏のテンプレート を元にワンオフで作成したフォーマットを使用しているためあまりスマートでない書き方が見られる.

また, HTML 形式の文書には PDF など他のファイル形式のダウンロードリンクを設置することができる. これは _bookdown.yml で表示を指定できる.

(WIP) 入稿するには

国内の印刷所で PDF 入稿する際のスタンダードは何だろうか? 紙媒体でやったことがないので全くわからない. ver. 0.3 時点での対応を紹介する. なおこれらの対応は, 『Bookdownによる技術系同人誌執筆』というブログ記事で言及されていた, 入稿に必要なPDFのスタイルだそうである (印刷所ごとに対応は違うと思われる).

また, 現在は Re:View という電子・紙媒体書籍作成ソフトがあり, 既に出版での使用実績も増えつつあるらしい. R Markdown, ひいては rmdja のモチベーションの1つは, R コードを文書に埋め込むことで結果の再現性を確保する, というものである. 再現性というと抽象的だが, 冒頭に書いたようにコードの埋め込みによってグラフや計算結果の修正差し替え時のミスが減ることはここまで読んだ方は納得いただけるのではないのだろうか. しかし, 文書に R コードの埋め込みが必要なく, 単純に DTP ツールとしての完成度を評価するのなら, Re:View のほうが確実に信頼できる.

トンボの表示

_output.yml

rmdja::pdf_book_ja:
  tombow:true

とするとPDFにトンボ (trimming mark) を表示する. これは gentombow.sty によるものである. しかし私はこの出力が適切なのか判断することができない.

(TODO) 隠しノンブルとヘッダ・フッタのカスタマイズ

対応中

フォントの埋め込み

少なくとも PDF ではフォントを埋め込みそこなったり, Type 3 フォントが設定されないようにしている. ただし Python 等を利用して描いたグラフを埋め込む場合, 個別に設定が必要な場合もあり, 完全な保証はできない.

TODO: https://teastat.blogspot.com/2019/01/bookdown.html の記述のうち, まだ対応してないものがある.

(PART) デバッグとトラブルシュート {-}

このパートで説明すること {-}

残念ながら, 現状 bookdown は完全にプログラミング知識のないエンドユーザでも縦横無尽に使用できるかと言うと, まだまだ不安定でそのレベルには達していない. さらに悪いことに, rmarkdown および bookdownknitr, pandoc, LaTeX といった様々なプログラムを継ぎ接ぎして実装されているため, R の知識だけではエラーが起こった場合や, 意図したとおりの出力が得られないときに原因が分かりにくいことがある. そこで, ここではエラーが出た際にどう対処するかのヒントを書いておく.

製本時のエラーへの対処

エラーがどのタイミングで発生したかを特定する

R Markdown はさまざまな外部プログラムを利用して, 数段階のプロセスを経てソースファイルを変換して文書を作成する複雑なプログラムである. 逆に言えば, Rmd ファイルを md ファイルに変換 (knitrによる処理) するときにエラーが出たのか (= R のプログラムにミスがある可能性が大), md を各ファイルに変換 pandoc する際に起こったのか (= 経験上ほとんどは tex ファイルのコンパイルエラーによるもの) をまず特定するのが重要である. そのためには

  1. keep_md: true / keep_tex: true を設定する
  2. うまくいかないときはキャッシュを削除してから再実行する

という対処法がある. (1) は文字通り中間出力ファイルである .md および .tex を残すことを意味する (tex ファイルの保全はデフォルトで true 設定になっている). これが生成されないなら knitr でのエラーだと分かるし, 中身を見て不自然な内容になっているのなら Rmd の書き方が knitr に正しく評価されていないことがわかる.

キャッシュも私の経験上よくエラーの原因となっている. 以前に実行していたチャンクの結果が更新されていないせいで, knitr の処理の不整合を起こすことがある. *_files には出力に必要な画像ファイルが, *_cache にはチャンク実行結果のキャッシュが残っている. 後者は knitr::opts_chunk$set(cache = T) などでキャッシュを残す設定にできるので, F に設定した上でこれらのファイルを削除する.

処理に時間がかかるチャンクがあってキャッシュを作りたい場合は, 別途 rdsRData ファイルに結果を保存するという方法もある. しかしもしプログラムの再現性を重視する場合, この方法は望ましくないだろう. しかし残念ながら現状はこうするか, ひたすら長い時間を待つしかない.

TODO: https://bookdown.org/yihui/rmarkdown-cookbook/cache.html

YAML フロントマターを確認する

以前『[R] R Markdown の YAML ヘッダでハマったおまえのための記事』というブログ記事にも書いたように, YAML フロントマターは慣れないと書き間違えやすいのが現状である. もし自分で変更したのなら, 改めて確認すべきだろう. 特に, 製本直後にすぐに, 心当たりのないRプログラム関係のエラーが出る場合, チャンクではなく YAML フロントマターの読み取りに失敗している可能性がある.

以下の4原則を覚えておこう. 以前は bookdown の話を想定してなかったので, さらに条文を1つ加えた.

  1. output: 以下はフォーマット関数への引数
  2. トップレベルのオプションは pandoc のオプション
  3. タイプミスや位置間違えでも動いたり, 動かなかったりする
  4. _output.yml および _bookdown.yml を見る.

output: には bookdown::gitbook など, bookdown で提供されているフォーマット関数を指定しており, その配下に記入するのはフォーマット関数に与える引数である. よって, 関数ヘルプを確認すれば有効な引数を知ることができる. しかし一方で, ... が引数になっていることがあるので, タイプミスしてもエラーが出ないことがある.

また, YAMLの構文でサポートされている配列は誤評価を引き起こすことがある.

output:
  bookdown::gitbook:
    toc_depth: 3
    toc: true
output:
  bookdown::gitbook:
    - toc_depth: 3
    - toc: true

上の例は正しい記法である. 一方でハイフン - は YAML では配列を記述するために用意されている. 下記の場合, キーワード引数ではなく位置引数のような扱いになるため, toc に対して 3 を代入することになり, エラーが発生する. 逆に言えば, - を使う場合, キーワードを書かずに値だけを正しい順番で書けば機能する.

インデントしないトップレベルの引数は, 基本的に pandoc に与える引数である. これ意味のない引数を与えてもエラーを返さないことが多いので, タイプミスに注意する.

しかし, フォーマット関数に pandoc_args という構文をサポートしていることや, フォーマット関数で pandoc の同名の引数を上書きする仕様のフォーマットもあるため, 上記は絶対ではない. これが原因で, 「output: 以下に書くべきものを間違えてトップレベルに書いたが, 意図したとおりに機能した」あるいはその逆が発生することがある. また, pandoc の構文ではキーワードにハイフンを使うことができるが, フォーマットは R の関数でもあるためハイフンを使えず, アンダースコアで置き換えられる. この違いも書き間違えの原因になる.

PDF 生成時のエラーを確認する

それでもエラーが出る場合, 私の経験上ほとんどが生成した .tex ファイルをタイプセットする際にエラーが発生している. html との両立を考えると, どうしても pandoc が解釈できる構文に限界がくるためである.

! LaTeX Error: XXXXX

とか

Error: LaTeX failed to XXXX

といったメッセージが表示されるのですぐ分かる. さらに丁寧なことに, tinytex のデバッグ方法へのリンクまで表示される

この場合最も重要なのは, 以下に尽きる.

  1. options(tinytex.verbose = TRUE) を設定する
  2. keep_tex: true を設定する

これは keep_md と同様に, 中間ファイルである .tex を残すことを意味する.

それでも解決しない場合, 改めてこのファイルを手動でタイプセットするのも1つの方法だ. もしうまくいったり, 異なるエラーが出るのなら, 環境の違いが問題かもしれない. そして r rmdja::texlogo("upBibTeX") を使うのなら, 後者が唯一のデバッグ方法だ.

よくあるエラーメッセージ

The File XXX.Rmd Exists.

The file _main.Rmd exists. Please delete it if it was automatically generated. If you are sure it can be safely overwritten or deleted, please set the option 'delete_merged_file' to true in _bookdown.yml.

多くの場合はファイル名が _main.Rmd となるだろう. つまり最終的に出力する PDF と同じ名前である. これは _bookdown.ymlbook_filename で変更することができる. このエラーは文字通り _main.Rmd ファイルが既に存在するから処理を続行できない, というものである. 製本時に index.Rmd と同じフォルダに, 中間生成物である _main.Rmd が作られるが, 前回の製本処理が何らかの理由でエラーが発生し中断しているとこのファイルが残ることがある. よってこのファイルを削除すれば解決する.

No Site Generator Found.

No site generator found.

製本処理にあたって, 基準となるフォルダの設定が見つけられない際に発生する. index.Rmdsite: bookdown::bookdown_site が記述されていないか, ビルドペーンでの設定でフォルダを正しく設定できておらず, index.Rmd の存在しないフォルダを参照していることがよくある原因である.

その他のトラブルシュート

コードブロックや出力テキストの折り返し・改行位置がおかしい

折り返し位置を規定するグローバルオプション getOptions(width) を確認する. 通常は 80 かそれより大きい値が設定されていることが多いが, 何らかの理由で小さく設定されている可能性もある. 確実を期すなら, 冒頭のチャンクに options(width = 140) のように明示的に設定する.

また, コードブロックの折り返しや改行位置がおかしい場合, それはコード自動整形の問題である可能性がある. rmdja はスライド用テンプレート以外でデフォルトでコードブロックの自動整形を適用しているが, blackyapf のある Python などと違い, R のコード自動整形ツールは機能やバリエーションがあまり多くない. コードの整形にこだわるなら, ある程度は手動でやる必要がある. コードの自動整形を無効にするなら, 冒頭のチャンクで以下を実行する.

knitr::opts_chunk$set(tidy = F)

コードの自動整形の詳細については付録 \@ref(autoformatter) を参照.

(TODO) Windows 特有の問題

日本ロケールの Windows OS で RStudio を動かす場合によくあるエラーについても対処法を書いておく. これは R-wakalang でもよく訊かれる質問である. これらは Windows の仕様が根本的にアレなことに起因するため, Linux 等の仮想環境上でRを動かせば一切発生しない問題ではあるが, おそらく初心者の多くがハマっているので仮想環境を使わない解決方法を書いておく.

まず, チャンク等のエラーメッセージが文字化けして読めない. これはロケールの問題であることが多い. 残念ながら日本語版 Windows は未だに CP932 エンコードを使用しているため, CP932 を使うと R の表示で不整合が発生する. よって, CP932 を使用すれば解決できる.

Sys.setlocale(locale="Japanese_Japan.932")

しかし R の他の部分の多くは UTF-8 を前提として作られているので今度はそちらでいろいろな対処が必要になってしまう. もしこのような「仕様」が気に入らないのなら結局のところ AWS 等のクラウドサービスや仮想環境マシンを使い Liunx 系の環境に移行してしまうのが確実である (もちろん Linux でも日本語ロケールの初期設定は必要である).

[^handon-source]: ソース: https://github.com/handsondataviz/book [^poli-source]: ソース: https://github.com/shohei-doi/quant_polisci [^ethics-source]: ソース: https://github.com/MToyokura/Ethics-for-A-Level-Japanese [^sangokushi-source]: ソース: https://github.com/Gedevan-Aleksizde/Japan.R2019 [^structural-source]: ソース: https://github.com/Gedevan-Aleksizde/20190125_tokyor



Gedevan-Aleksizde/rmdja documentation built on Sept. 28, 2021, 2:49 a.m.