R Markdown(とXeLaTeX)で日本語レポート(第2弾)


前にも同じような記事を書いたが、気づいたら最近の自分のセッティングと記事の内容が記事の更新では済まないくらい変わっていたので新しく記事を書くことにした。
前回の記事から変わった点を挙げる。

  1. LaTeXエンジンをluatexからxetexに変えた。早くなった。
  2. 相互参照のためにbookdownを使った。
  3. 前回のように何回もコンパイルしなくてもよくなった。
  4. pandocのテンプレートをちょっといじった。
    1. URLの表示でタイプライター体をデフォルトにした。
    2. 付録の前に参考文献を表示できるようにした。

変わっていない点

  1. setupチャンク。(なので省略。)

ということで、ノンプログラマーなので詳細な解説は(できないので)せずに粛々とコードだけを上げる。ここに書かれたコードの断片にもし有用なものがあれば使ってみてください。感謝。

yaml

yamlフロントマター
---
title: |
  | たいとる
author: |
  | 所属
  | 氏名
date: "`r gsub('0([0-9](月|日))', '\\1', format(Sys.Date(), '%Y年%m月%d日'))`" 
output: 
  bookdown::pdf_document2:
    dev: cairo_pdf
    fig_caption: yes
    keep_tex: true
    latex_engine: xelatex
    number_sections: true
    toc: true
    toc_depth: 3
    citation_package: natbib
    includes:
      in_header: preamble.tex
documentclass: bxjsarticle
classoption: xelatex,ja=standard,a4paper,jafont=yu-win10,10.5ptj,textwidth=40zw,number-of-lines=40,titlepage
indent: true
link-citations: true
lof: true
lot: true
bibliography: myrefs.bib
biblio-style: jeconunicode
header-includes: |
  \usepackage{dcolumn}

title-meta: "ここにタイトルを書くとPDFのメタ情報に記述される"
author-meta: "ここに名前を書くとメタ情報に記述される"

abstract: "概要をここに書く"
---

メタ情報のタイトルと著者を2回書くのが面倒なら

hyperrefoptions: pdfusetitle

と書いておけばtitle:author:に記述した文がそのまま反映される。

preamble.tex

preamble.tex
% 目次の体裁を変える
\usepackage{tocloft}
\renewcommand{\cftsecfont}{\bfseries}
\renewcommand{\cftsecpagefont}{}
\renewcommand{\cftsecleader}{\cftdotfill{\cftdotsep}}
\renewcommand{\cftdotsep}{10}
\renewcommand{\cftsecaftersnum}{}
\setlength{\cftbeforesecskip}{0em}
% ここらへんは適当
\setlength{\cftsecindent}{0em}
\setlength{\cftsecnumwidth}{4em}

\setlength{\cftsubsecindent}{0em}
\setlength{\cftsubsecnumwidth}{4em}

\setlength{\cftsubsubsecindent}{0em}
\setlength{\cftsubsubsecnumwidth}{4em}

\renewcommand{\cftsetpnumwidth}{1em}
\renewcommand{\cftsetrmarg}{1em}

\renewcommand{\cfttoctitlefont}{\Large\gtfamily}
\renewcommand{\cftloftitlefont}{\Large\gtfamily}
\renewcommand{\cftlottitlefont}{\Large\gtfamily}

% RMarkdownで横向きを使えるようにする
\usepackage{lscape}
\newcommand*{\blandscape}{\begin{landscape}}
\newcommand*{\elandscape}{\end{landscape}}

% 数式の設定
\usepackage{amssymb}
\usepackage{mathtools}
\mathtoolsset{showonlyrefs,showmanualtags}

% タイトルの設定。pagetitleを設定する場合は別に要らない。
\usepackage{titling}
\setlength{\droptitle}{-3cm}
\pretitle{\noindent\centering\LARGE\gtfamily\sffamily}
\posttitle{\par\vskip 1\zw}
\preauthor{\noindent\centering\large\rmfamily}
\postauthor{\par\vskip 1\zw}
\predate{\noindent\centering\large\rmfamily}
\postdate{\par}

pandoc

URL

URLをタイプライター体にしたい。pandocではなぜかデフォルトの設定がローマン体になっており、まぁ無難だし、いいんだけど、自分で選んでそうするのとそれしか選べないからそうするのでは意味が違う。自由自在に行き来したい。そういう場合はpandocのテンプレートをいじる。
次のコマンドを実行する(Windowsの場合)。

mkdir %homepath%\AppData\Roaming\pandoc\templates\
pandoc -D latex > %homepath%\AppData\Roaming\pandoc\templates\default.latex

上のファイルを開くと、230行目くらいに次のような記述があるのでsamettに書き換える。pandocのマニュアルに書いてあるように、このディレクトリにテンプレートファイルがある場合は自動的にこれが反映されるらしい。したがって、もし初期化したければ単にこのファイルを消すか別のファイル名にすればいい。

default.latex
...
\urlstyle{same} % disable monospaced font for URLs
...

...わざわざコメントまでしてあった。そんなに嫌か。

参考文献を好きな場所に

初期状態のdefault.latexでは参考文献は必ず文書の最後に表示されてしまう。これだと付録などを付けたいときにちょっと不便である。好きな場所で参考文献を配置したい場合は、一部をコメントアウトすればいい。476行目に

default.latex
...
\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
...

という記述があるので、これをコメントアウトする。そのうえで、自分が作成している.Rmdファイルの参考文献を出力したい場所で

Rmd
\addcontentsline{toc}{section}{\bibname}
\bibliography{myrefs}

とする。これはもしかしたらもっと簡潔な書き方があるかもしれない。通常、R Markdownで参考文献を出力する場合は# 参考文献 {-}のように書くが、これだと章の見出しが2つ出てきたりしてよくない。

おまけ

ちなみに、229行目くらいにhypersetupの設定に関連して

default.latex
...
pdfcreator={LaTeX via pandoc}
...

みたいなのがあるが、この内容は好きに変えられる。多分書き換えない方がいい。

References

  1. https://pandoc.org/MANUAL.html#templates
  2. https://pandoc.org/MANUAL.html#general-options