LaTeXで年賀状を作る

# はじめに

急に年賀状を用意しないといけない！という時どういったツールをつかうとよいだろうか？PowerPointなどのスライド作成ソフトで作ったり、あるいは専用のツールを購入するという手もあるかもしれない。この記事では、フリーソフトウェアである$\mathrm{\LaTeX}$を利用して美しい年賀状をつくる方法を紹介する。この方法は$\mathrm{\LaTeX}$と[jletteraddress](https://github.com/ueokande/jletteraddress)クラス、さらにそれをコンパイルする環境をDockerで作成したことによって、特に$\mathrm{\LaTeX}$の知識がなくとも勘で年賀状を出力できるのが利点である。また著者の知るかぎり年賀状を作るソフトウェアは数式やソースコードの出力に対応しているとは言えないだろうが、$\mathrm{\LaTeX}$では既存の$\mathrm{\LaTeX}$資産を利用できるため年賀状に数式やソースコードを容易に埋め込むことができるうえ、個人の論文や同人誌など他の$\mathrm{\LaTeX}$文書からデータを流用できるという利点もある。

- https://github.com/y-yu/new-year-letter

上記のGitHubリポジトリにコードの一覧がある。この記事について疑問や改善点を見つけた場合は、気軽にコメントなどで教えてほしい。

## Overleaf版

[@QFTlover](https://twitter.com/QFTlover)さんがOverleafに移植してくれました！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">もう年賀状シーズンは終わりましたが、<a href="https://twitter.com/_yyu_?ref_src=twsrc%5Etfw">@_yyu_</a> さんのLaTeX年賀状テンプレをOverleafに移植しました。<br>許可を得てGalleryに公開しているので誰でもオンラインで簡単に使えます。(compilerはlatexにしてください)<br>完成形は引RTのようになります。(詰め込みすぎて少し切れた)<a href="https://t.co/Anqy1J3p49">https://t.co/Anqy1J3p49</a> <a href="https://t.co/uWAhBnh5g6">https://t.co/uWAhBnh5g6</a></p>&mdash; T duality (@QFTlover) <a href="https://twitter.com/QFTlover/status/1478245286019735558?ref_src=twsrc%5Etfw">January 4, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

- https://www.overleaf.com/latex/templates/japanese-style-happy-new-year-card/sfphcjzbxctn

# 成物果

このような年賀状を出力できる。

- https://y-yu.github.io/new-year-letter/letter.pdf

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10815/8b473bae-ce7b-dbbc-303b-b88c0dc1bc86.png" width="40%"/><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10815/643befe5-3126-827d-cd91-be930403a9ae.png" width="40%"/>

あとはこれを編集して印刷するだけ！

# 使い方

次のような手順で、すごく簡単に:point_up:のような年賀状を得ることができる。なお[Docker](https://www.docker.com/)と`docker-compose`が必要である。

1. `git clone https://github.com/y-yu/new-year-letter.git`
2. `cd new-year-letter`
3. `docker-compose up`

いったんこれで`letter.pdf`を得ることができる。あとは好みにあわせて`letter.tex`を書き換えていけばよい。

## 本文の編集

$\mathrm{\LaTeX}$ファイルの編集というとキツい印象があるかもしれないが、実はサンプルは非常にシンプルに書かれている。

```tex:letter.tex
\documentclass{jletteraddress}

\usepackage{amsmath}
\usepackage[papersize={100mm, 148mm}, margin=0mm]{geometry}

\newcommand{\bra}[1]{\mathinner{\left\langle{#1}\right|}}
\newcommand{\ket}[1]{\mathinner{\left|{#1}\right\rangle}}
\newcommand{\braket}[2]{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}

\sendername{吉村　優}
\senderaddressa{茨城県つくば市天王台1-1-1}
\senderaddressb{筑波大学第三エリア3C212}
\senderpostcode{3058573}

\renewcommand{\baselinestretch}{1.2}

\begin{document}

\pagestyle{empty}

\addaddress
  {山田　太郎}{様}
  {1138654}
  {東京都文京区本郷7-3-1}
  {}

\newpage
\newgeometry{
  top=10mm,
  left=10mm,
  right=10mm,
  bottom=5mm
}

\begin{abstract}
  \footnotesize
  この文章では、新年の挨拶を述べるための手紙である``年賀状''を作る方法について述べる。
  従来の年賀状を作成するソフトウェアは数式やソースコードの埋め込みが貧弱であったが、
  我々はそれを解決す方法として組版ソフト\LaTeX を利用する方法を示す。

  In this paper, we describe how to make a letter to hello new year.
  For conventional softwares that makes those letter,
  it's difficult to write mathmatical expressions or
  programming source code.
  We show how we solve that problem with \LaTeX.
\end{abstract}

\section*{Introduction}

年賀状は年の始めに互いに送信する手紙のことである。
近年はLINEなどに対抗するため、年賀状に次のような複雑な数式を埋め込みたい
ニーズが存在する。

{\scriptsize
\begin{align*}
  \left|\braket{+}{\varphi_{0 \oplus b, 0 \oplus b}}\right|^2 &= \left\{
\begin{array}{l}
\left|\braket{+}{\alpha\ket{0} + \beta\ket{1}}\right|^2 = \left|\frac{1}{\sqrt{2}}(\alpha + \beta)\right|^2 \\
\left|\braket{+}{\beta\ket{0} + \alpha\ket{1}}\right|^2 = \left|\frac{1}{\sqrt{2}}(\beta + \alpha)\right|^2
\end{array}
\right\} \\
&= \frac{(\alpha + \beta)^2}{2}
\end{align*}
}

\noindent
この文章ではこのような複雑な数式を埋め込むために\LaTeX を
利用した解決方法について述べる。

\begin{flushright}
  \tiny This letter was generated by \LaTeX.
\end{flushright}

\end{document}
```

下記にざっくりどういった意味なのか解説していく。

- `\sender○○○`系のコマンドが差出人の情報を示す
- `\baselinestretch`は行間をデフォルトの1.2倍へ広げている（これは好み）
- `\addaddress`は宛先情報
- `\newgeometry`で余白の設定

という感じで、あとは適当に`abstract`とかを消していじってみて`docker-compose up`してコンパイルしていけばOKである。これはこの記事の著者というよりも[jletteraddress](https://github.com/ueokande/jletteraddress)がすごいので、このように簡単になっている。

# まとめ

このように[jletteraddress](https://github.com/ueokande/jletteraddress)を使えば$\mathrm{\LaTeX}$で簡単に年賀状を作ることができる。ただ$\mathrm{\LaTeX}$のコンパイルは慣れていないと大変であるため、著者の貢献としてそこをDockerで隠蔽した。普段、論文や同人誌の執筆などで$\mathrm{\LaTeX}$を使う人がいれば、それと同じような感覚で使えるのは利点だと思う。

# 参考

- [jletteraddress](https://github.com/ueokande/jletteraddress)