blogdownで記事のテンプレートを用意する


blogdownではR Markdownを使ったウェブサイトの作成ができます。名前の通り、ブログを念頭に置いたパッケージです。ドキュメントは以下にあります。ググると日本語の記事もそれなりに出てきます。

blogdown: Creating Websites with R Markdown
https://bookdown.org/yihui/blogdown/

記事の作成にはblogdown::new_post関数を使います。すると引数の内容に応じて、タイトルや作成日時などが自動でYAMLフロントマターに入力され、本文は空白なRmdファイルが作成されます。

この時作成されるRmdファイルの内容を変更するには、 archetypes/default.mdというファイルを用意しましょう。

私の場合、段落内で改行した時に、改行の前後が

  • 改行の前後が全角文字なら半角スペースを除去
  • それ以外なら半角スペースを挿入する

という設定をテンプレートで有効にしたいです。既定値では前後が半角スペース区切りになってしまいます。

というわけで、pandocのeast_asian_line_breaksオプションを使えるように、こんなdefault.mdを用意してみました。

https://github.com/atusy/blog/tree/master/archetypes

---
title: ''
author: ~
date: ''
slug: ''
categories: []
tags: []
output:
  blogdown::html_page:
    md_extensions: +east_asian_line_breaks
---

YAMLのフィールドには、最低限、blogdown::new_post関数の引数の内、YAMLフロントマターに利用される引数に対応するものは含めておくと良いでしょう。今回は更にoutputフィールドを追加しました。もちろん、定型文などがあれば、本文に挿入しておいても良いですね。

str(formals(blogdown::new_post))
## Dotted pair list of 12
##  $ title     : symbol 
##  $ kind      : chr ""
##  $ open      : language interactive()
##  $ author    : language getOption("blogdown.author")
##  $ categories: NULL
##  $ tags      : NULL
##  $ date      : language Sys.Date()
##  $ file      : NULL
##  $ slug      : NULL
##  $ title_case: language getOption("blogdown.title_case")
##  $ subdir    : language getOption("blogdown.subdir", "post")
##  $ ext       : language getOption("blogdown.ext", ".md")

上記の内、titleauthorcategoriestagsdateslugはYAMLに入れておいた方が良い内容です。

Enjoy!!