niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

いつの間にかrmarkdownでpagebreakのlua filterが使われていたので簡単に紹介する。

各ファイル形式に対応している。

Pandocは、内部的にはファイルを読み込むReaderと書き出すWriterに機能が分けられており、Readerで読んだ文書は内部的にはPandoc's ASTというPandocが扱いやすくするためのデータ構造に一旦データを持ち直します。この中間データに対して処理を加えることで、出力するファイルに色々と操作をする仕組みとしてフィルタがあり、中でもLua言語で書かれたLua filterは最近のPandocでは推しの機能のひとつです。

PandocにはLua filterのリポジトリがあり、色々なユーザから便利なフィルタが提供されています。ライセンスの内容を読み、自分の用途に合わせて使うと良いでしょう。また、自分でこれは良いものが出来たと思ったらリポジトリに追加してもらえないか聞いてみるのも良いでしょう(自分も追加してもらおうと思っていたけど面倒くさくて放置していたらどこに置いたかすら忘れてしまった…)

今回の改ページフィルタもこのリポジトリに納められています(rmarkdownパッケージに内包されているので、こちらのリポジトリのバージョンが上がってもrmarkdownパッケージ内のフィルタは自動的には後進されないので注意…と言ってもあまり変更はないと思うのでヨシ!)

github.com

改ページフィルタの使い方はREADMEを読めばわかりますが、\newpageだけ書かれた段落を入れることで、各出力形式に対応した改ページのコードが生成されて埋め込まれます。\newpageの記述のある行の前後には空の行を入れておきましょう(フィルタのREADMEのとおりですが)

また、RMarkdown Cookbookにも書いてありましたので、こちらもあわせて参考にしてください。

bookdown.org

唯一、ODT形式での出力だけは注意点があるのでそれはまた別途記事に残します。ひとまずここでは紹介だけ。

改ページフィルタは便利なので、独自実装するくらいなら素直にこれを使いましょう。私も独自実装持ってましたが、今後はこれを使っていきます。