R Markdownでhtml_documentを拡張する時の注意点 (self_contained)

カテゴリ: r

rmarkdown::html_documentrmarkdown::output_formatで拡張する時、引数の指定方法を注意しないと、self_contained引数やkeep_md引数がうまく機能しなくなります(参考: オリジナルなR Markdownの出力形式を作るoutput_format関数事始め)。

rmarkdown ≧ 2.2

私が出したPR 1823により、 rmarkdown::html_documentself_containedkeep_mdの状態を、 rmarkdown::output_formatが引き継げるようになりました。他の引数と同様に、base_formatの内容を引き継ぐにはclean_supportingkeep_mdNULLにしましょう。

my_html_document <- function(
  self_contained = TRUE, keep_md = FALSE, ...
) {
  rmarkdown::output_format(
    clean_supporting = NULL,
    keep_md = NULL,
    base_format = rmarkdown::html_document(
      self_contained = self_contained,
      keep_md = keep_md,
      ...
    )
  )
}

rmarkdown < 2.2

rmarkdown::html_documentself_contained引数とkeep_md引数に与えた値を、それぞれrmarkdown::output_formatclean_supporting引数とkeep_md引数に与えておきます。両方に与えるのがポイントです。 rmarkdown::html_documentに与えず、rmarkdown::output_formatにだけ与えておくと、 rmarkdown::html_documentがそれぞれの引数に対して内部で行う処理を無視してしまいます。特に、self_containedTRUEFALSEかでPandocに与える引数が変わります。私はこれを知らずにminidownパッケージを実装したがために、 self_contained = FALSEにすると画像ファイルなどを別フォルダにも出力しつつ、 self_contained = TRUEなHTMLファイルを出力するフォーマットを作ってしまいました。この問題は開発版で修正済みで、CRANには0.0.2として近い内にアップする予定です。

my_html_document <- function(
  self_contained = TRUE, keep_md = FALSE, ...
) {
  rmarkdown::output_format(
    clean_supporting = self_contained,
    keep_md = keep_md,
    base_format = rmarkdown::html_document(
      self_contained = self_contained,
      keep_md = keep_md,
      ...
    )
  )
}

Enjoy!