ぼくじょう日記

てらお牧場に起こる出来事を書きつらねていきます。

markdown+pandocのlatexとhtmlへの変換について

日本語のユーザーガイドを見ていると、 タイトル、著者、アブストラクトについておさまりが悪くて困っていたが、どうやらメタデータブロックに書き込むことによってこれらを定義することができるようだ。やってみよう。 YAMLメタデータブロックを使ってみる。

このメタデータブロックに書いた情報を展開するためには、どうも template にそのように書き込んでやればいいようだ。 ひとつ面白そうな実例が乗っていて、例えば著者情報について、 name: と affiliation: を何人分も並べて定義するようなことができそうで、 その場合には以下のようなテンプレートを書けばいい、というようなことが書かれている。

$for(author)$
$if(author.name)$
$author.name$$if(author.affiliation)$ ($author.affiliation$)$endif$
$else$
$author$
$endif$
$endfor$

たぶんこれは Haskell なのだろうと思われる。この際まじめにやってみる。 個人的にテンプレートをつくるなら、 $HOME/.pandoc/ に置けばよいのだろう。

テンプレートの作り方や使い方なども含めて書かれていそうなのは、Pandoc User's Guide というページの記述だ。

ここで tepmlates の節を見に行く。 はじめの項目に書かれているのは、 -s オプションの意味合い。同やら単に -s とつけると、header, footer を自動的につけてくれて出力するみたいだ。もしかして・・

おお。htmlにはきちんとタイトルがついたではないか。 なおかつ、author情報も出そうとしかかっているではないか。 残念ながら abstract は見当たらない。が、できそうではある。

latexの出力もすばらしくて、いろいろなプリアンブルがつけられた上に、title, author, abstract が展開されている。author だけは謎のリストになっているが、これは上記の haskell スクリプトか何かで何とかなりそうだ。 この出力はどんなものになるか、ちょっと latex + dvipdf を試してみる。 ちょっと余白が広すぎるが、独自テンプレートをつくることで対応できそうだ。 まずは、$HOME/.pandoc/templates/default.latex などを作ってみることにする。

やってみたいことは以下のとおり。

  1. 字の大きさを大きくする
  2. 余白を小さくする
  3. 著者情報をもう少ししっかり書くようにする (Haskellで書き加える)
  4. doublespace.latex も作成してみる
  5. セクション番号を書く (-N オプションをつけて変換する)

デフォルトテンプレートを見ると、基本的には YAML で変数設定したら全部反映して直りそうな感じ。 ただ author だけはだめそうなので、ここだけ

最終的には、以下のコマンドで変換している。

% pandoc -N -s src/main.md --bibliography src/reference.bib --filter pandoc-crossref -o latex/main.tex

最後に行番号をつけてダブルスペースで出力する方法。 行番号については、packageとして、lineno.styを使う。 そのうえで、今回は\begin{document}の直後にページ単位のナンバリングであることを指定するオプション\pagewiselinenumbersを指定。 ダブルスペースは、YAMLlinestretch: 1.8を指定。

ところで、 (Iguchi et al. 2000; 2009) としたいので、そういう場合の記法が何だったか思い出した。 -@ で年号だけになるとのこと。書いてある通りにしたらうまくいった。 が、このページがどこにあったのかが分からなくなってしまった。困った。