7.10 既存の HTML ファイルの内容を読み込む (*)

html_document フォーマット (あるいはこのオプションをサポートしている他のフォーマット) の includes オプション があれば, 既存の HTML ファイルの本文を 出力する HTML 文書内の3箇所のいずれかに読み込むことができます. それらは タグ内部, の前, そして本文の後でかつ

の直前です.

output:
  html_document:
    includes:
      in_header: header.html
      before_body: before.html
      after_body: after.html

HTML にあまり詳しくないなら, 7.9節がこのオプションをより理解するのに役に立つかもしれません.

in_header オプションを使うなら, CSS と JavaScript コードを <head> タグ内に挿入することができます. before_body を使うなら, バナーやロゴを表示するヘッダを埋め込むこともできます. after_body を使うなら, フッタを読み込ませることができます. 例えばこのように.

<div class="footer">Copyright &copy; John Doe 2020</div>

外部 HTML ファイルの内容を本文の好きな位置に読み込みたいときもあるでしょう. これは htmltools::includeHTML() を使えば可能です. HTML ファイルパスをこの関数に与えます. 関数はこのファイルを読み込み, 出力文書にたいしてこのファイルの中身を書き込みます. 9.5節で使用したようなテクニックをを使っても良いかもしれません. 例えばこのように.

````{=html}
```{r, echo=FALSE, results='asis'}
xfun::file_string('file.html')
```
````

HTML ファイル内に読み込めるのは別の HTML の一部分だけであり, HTMLファイルそのものを読み込んではならないことに注意してください. 完全な HTML ファイルとは <html> タグを含むものであり, これは他の <html> タグ内に埋め込むことができません. 以下は HTML 文書に別の完全な HTML 文書が 埋め込まれた場合の無効な HTML 文書です.

<html>
  <head>  </head>

  <body>
  親 HTML ファイル.

  <!-- 以下 htmltools::includeHTML() -->
    <html>
      <head>  </head>
      <body>
      子 HTML ファイル.
      </body>
    </html>
  <!-- 読み込み終わり -->

  </body>
</html>

HTML ファイルを別の HTML 出力文書に読み込む時に問題が発生したなら, HTML ファイルに <html> タグが含まれていないか確認するとよいでしょう.

rmarkdown パッケージには html_fragment という出力フォーマットがあり, 完全な HTML 文書の代わりに HTML の一部を生成します. Rmd 文書内で別のコンパイルされた Rmd 文書の結果を読み込みたい場合, 後者の Rmd 文書の出力には 通常用いるhtml_document フォーマットの代わりに html_fragment フォーマットを使うとよいでしょう.

HTML ファイルの代わりに Rmd または Markdown 文書を読み込ませたいなら, 16.4節で紹介されている子文書を使うこともできます.