筆者がrmarkdownを試した環境は下のとおり。
当サイトの rptパッケージを導入している場合、上の環境がインストール済みです。
rmarkdownの原稿は、test.rmd のようなファイル名で保存します。
その冒頭には YAMLヘッダというのを置くことができます。
たとえば次のような記述形式です。
---
title: "Test Document"
author: "Black Lady"
date: "2017-02-11"
output: html_document
---
文書の表題、筆者、日付が基本の三項目です。
それに加えて、出力形式(output)も指定できます。
outputの指定がなければ html_document が指定されたものと見なされます。
このヘッダ部分は、YAMLという仕様に即して書きます。
YAMLは、構造を持つデータを表現・記録するための記述ルールです。
配列やハッシュ(連想配列)などを表現できます。
それらが入れ子構造になっていても大丈夫です。
title: "Test Page"
というのはハッシュです。
title
Test Page
(文字列) rmarkdownは、このYAMLヘッダを解釈・整理して markdownの現行を生成し、
htmlなどの最終的な出力ファイルを作成します。
つまり、test.rmd から test.md を生成し、最後に test.html を作成します。
rmarkdownでは、pandocが対応する出力タイプのうち、いくつかを指定できます。
html_document, pdf_document, beamer_presentation, word_document, rtf_document など。
beamer_presentationは、LaTeXで作成するプレゼン用のpdfファイルです。
word_documentは、MS-Word用のdocxファイルです。
日本語を扱う場合、工夫が必要になるケースがあります。
先に示した筆者の環境で、日本語処理できたYAMLヘッダを掲げます。
目次付きhtml出力の例です。
---
title: "Test Document"
author: "Black Lady"
date: "2017-02-11"
output:
html_document:
md_extensions: -ascii_identifiers
pandoc_args: [
"--toc",
"--toc-depth=2"
]
---
md_extensions: -ascii_identifiers
pandoc_args: [ …… ]
--toc
:目次生成の指定、--toc-depth=2
:目次に組み入れるヘッダレベルの指定(h1, h2 を組み入れる)。
pandocは、<h1>, <h2>
などにID属性を付ける際、見出しの文字をそのままID属性にします。
そして、目次を生成する場合は、そのID属性を手がかりにします。
しかし、ascii_identifiers というオプションが指定されると、見出しの2バイト文字を取り除いたうえでID属性にします。
日本語を扱うなら ascii_identifiers を無効にしておくのが無難ですが、rmarkdownライブ来がpandocを起動する際は、ascii_identifiers を有効にしてしまいます。
それを無効にするため md_extensions: -ascii_identifiers
を書きます。
rmarkdownでは、pandoc + LaTeX でpdfファイルを生成できます。
ここでは w32tex の lualatex を用います。
---
title: "Test Document"
author: "Black Lady"
date: "2017-02-11"
output:
pdf_document:
md_extensions: -ascii_identifiers
keep_tex: true
latex_engine: lualatex
pandoc_args: [
"--toc",
"--toc-depth=2"
]
documentclass: ltjltxdoc
classoption: a4paper,12pt
---
keep_tex: true
latex_engine: lualatex
documentclass: ltjltxdoc
classoption: a4paper,12pt
keep_tex を指定してTeXの原稿を残した場合、それを修正したうえで
lualatex test.tex [enter]
上のようにコマンドを実行して、改めてpdfファイルを生成できます。
beamerは、プレゼン用のファイルです。LaTeXによりpdfファイルとして生成します。
見出しが切りかわると、それに応じてスライド(ページ)がかわります。
日本語を扱うのに少々工夫が必要です。
YAMLヘッダの一例は下のとおり。
---
title: "Test Document"
author: "Black Lady"
date: "2017-02-11"
output:
beamer_presentation:
keep_tex: true
latex_engine: lualatex
md_extensions: -ascii_identifiers-tex_math_single_backslash
pandoc_args: [
"-H", "luatexja.tex",
"-V", "theme=Madrid",
"-V", "colortheme=seahorse",
"-V", "fontsize=14pt"
]
---
’luatexja.tex’ というファイルは、予め用意しておきます。次の2行からなるファイルです。
\usepackage{luatexja}
\hypersetup{unicode=true}
これを pandoc の ‘-H’ オプションで、TeX原稿のヘッダ部に挿入します。
これがないとpdfファイルから二バイト文字が抜け落ちてしまうようです。
[参考サイト: markdownの原稿を、pandocを使って、Texのbeamerを利用して、プレゼンスライドPDFに変換
今回、pandocのオプションをいろいろ指定しています。
theme=Madrid
colortheme=seahorse
fontsize=14pt
上は、いずれも pandoc の ‘-V’ オプションで指定しています。小文字でなく大文字の ‘V’ です。
MS-Wordのdocxファイルを生成します。
---
title: "Test Document"
author: "Black Lady"
date: "2017-02-11"
output:
word_document:
toc: true
---
toc: true
があると目次が付きます。
作成されたdocxファイルをWordで開こうとすると、下のメッセージが出ます。
この文書には他のファイルを参照するフィールドが含まれています。
この文書のフィールドを更新してもよろしいですか?
これに「はい」で応答すると目次が挿入されます。
目次では、各見出しごとにページ番号もつきます。
ちょっと便利だとおもった事柄、気になった事柄を記します。
YAMLヘッダ部に number_sections: true
を書くと、見出しに番号が付きます。
たとえば下のように書きます。
output:
html_document:
md_extensions: -ascii_identifiers
number_sections: true
pandoc_args: [
"--toc",
"--toc-depth=2"
]
「この見出しには番号を付けたくない」という場合は、markdownの原稿中の該当の見出しのところで、{-}
を行末に付加します。
### 見出しへのナンバリング {-}
このナンバリングは、htmlだけでなくpdfなどでも有効です。
ただし、word_document では機能しないようです。
LaTeXに bxjsarticle というドキュメントクラスがあります。
日本語ドキュメントクラスの jsarticle を、lualatex, xelatex などでも使えるように修正を施したドキュメントクラスです。
bxjsarticleクラスは、BXjsclsパッケージに含まれています。
これにはpandocモードがあり、TeX原稿の冒頭に次ぎの1行を書いて指定できます。
\documentclass[pandoc,jafont=ipaex]{bxjsarticle}
jsarticleの場合と同様、日本語文書が適切に処理されるようです。
このpandocモードを利用するためのYAMLヘッダを掲げておきます。
---
title: "Test Document"
author: "Black Lady"
date: "2017-02-11"
output:
pdf_document:
keep_tex: true
latex_engine: lualatex
documentclass: bxjsarticle
classoption: pandoc,jafont=ipaex,a4paper
---
BXjsclsパッケージにはスライド作成のための bxjsslideクラスもあります。
これにもpandocモードを適用できるようです。
先のYAMLヘッダの bxjsarticle を bxjsslide に変更します。
すると、見出しごとにスライドが切り替わる形のpdfファイルができます。
[参考サイト]: TeX Wiki - BXjscls
pandocでは目次に組み入れる見出しレベルを --toc-depth
で指定できます。
--toc-depth=2
とすれば h1, h2 だけが目次に組み入れられて、h3 以下は拾われません。
また、toc-depth
の指定がないときは、h3までが組み入れられます。
しかし、word_document の場合、このpandocの仕様が適用されないようです。
word_document だと、見出しレベル4以下も目次に組み入れられるようです。
なんとか --toc-depth=2
を有効にできないか試しましたが、筆者のところでは成功していません。
rmarkdownのYAMLヘッダ部の解説は、これくらいにします。
〜 以上 〜