R Markdown（とXeLaTeX）で日本語レポート（第2弾）

前にも[同じような記事](https://qiita.com/MTRBEKTCBT/items/0c0d3c5f1d51a62555bf)を書いたが、気づいたら最近の自分のセッティングと記事の内容が記事の更新では済まないくらい変わっていたので新しく記事を書くことにした。
前回の記事から変わった点を挙げる。

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

変わっていない点

1. setupチャンク。（なので省略。）

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

# yaml

````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回書くのが面倒なら

```yaml
hyperrefoptions: pdfusetitle
```

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

# preamble.tex

```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のテンプレートをいじる。
次のコマンドを実行する。


```powershell:Windowsの場合
mkdir %homepath%\AppData\Roaming\pandoc\templates\
pandoc -D latex > %homepath%\AppData\Roaming\pandoc\templates\default.latex
```

```bash:Linuxの場合
mkdir ~/.pandoc/templates
pandoc -D latex > ~/.pandoc/templates/default.latex
```

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

```tex: default.latex
...
\urlstyle{same} % disable monospaced font for URLs
...
```
...わざわざコメントまでしてあった。そんなに嫌か。

## 参考文献を好きな場所に

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

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

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

```tex:Rmd
\addcontentsline{toc}{section}{\bibname}
\bibliography{myrefs}
```

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

## おまけ

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

```tex:default.latex
...
pdfcreator={LaTeX via pandoc}
...
```

みたいなのがあるが、`LaTeX via pandoc`の部分を別の文言に変えるとPDFを作成したときにプロパティで見られる「作成者」の部分が変わる。

# References

1. https://pandoc.org/MANUAL.html#templates
1. https://pandoc.org/MANUAL.html#general-options
    - General options節を少しスクロールすると`--data-dir=DIRECTORY`という引数の説明のところにdefault user data directoryについての記述がある。