LaTeX + TikZ で年賀状を作る(2016年版)

概要
LaTeX上で動く描画用のパッケージであるTikZを利用して年賀状を作った例。

LaTeX + TikZ による年賀状

文書処理システムであるLaTeXと、LaTeX上で動く描画用のパッケージであるTikZを使って、2016年用の年賀状を作ってみた。

LaTeX + TikZ によって作られた年賀状
LaTeX + TikZ によって作られた年賀状

年賀状の中央にある青みがかった正三角形は、TikZ で描かれている。この正三角形は、2016個の球によって構成されている。2016個の球を1つ1つ人手で並べていくと大変な手間がかかるが、TikZ で簡単なループを組むことによって、一気に2016個の球を描くことに成功している。なお、2016個の球がちょうど正三角形を構成する背景については、「(西暦)2016(年)も(平成)28(年)も三角数かつ六角数」を参照のこと。

uplatex + dvipdfmx を用いて、上記の2016年の年賀状を出力したPDFを用意したので、印刷などで必要な方はこのPDFをダウンロードしてください。

ソースコード

上記の年賀状を出力するためのLaTeXのソースコードは以下の通りである [1]

\documentclass[uplatex]{jsarticle}
% 和文の多書体を使うために。
\usepackage[expert, deluxe]{otf}
% 紙のサイズや余白の調整のために。
% geometryパッケージにdvipdfmxオプションはないので,
% 代わりにdvipdfmオプションを使う。
\usepackage[dvipdfm]{geometry}
% 図の出力のために。
\usepackage[dvipdfmx]{graphicx}
\usepackage{tikz}

% 紙のサイズを10.0cm×14.8cmに設定し,
% 余白を上下左右ともに1.0cmにする。
\geometry{paperwidth=10.0cm, paperheight=14.8cm, margin=1.0cm}

% 段落始めのインデントをしないようにする。
\setlength\parindent{0pt}

% ページ番号などを表示しないようにする。
\pagestyle{empty}

% 正三角形状に球を並べて
% 図を描くための命令の定義
%% 図を構成する球の半径の定義
\newlength\radius
\pgfmathsetlength{\radius}{0.05cm}
%% 図を描く命令の本体
\newcommand\drawballs[1]{%
    \foreach \y [evaluate=\y as \yy using #1+1-\y] in {1,...,#1} {%
        \foreach \x in {1,...,\yy} {%
            \shade[ball color=blue!\yy] 
                ({(2*\x-2+\y)*\radius},{sqrt(3)*\y*\radius}) circle (\radius); 
        };
    }%
}

% 本文の始まり
\begin{document}
\begin{center}
  % フォントサイズ変更,太ゴシックにする
  {\fontsize{50pt}{60pt}\usekanji{JY2}{hgt}{bx}{n} 謹賀新年}

  % 「謹賀新年」と図の間の水平方向の空白
  \vspace{0.3cm}

  % 63段からなる図を描く
  \begin{tikzpicture}
    \drawballs{63}
  \end{tikzpicture}

  % 図と「2016」の間の水平方向の空白
  \vspace{0.3cm}

  % フォントサイズ変更,フォントをURW Groteskにする
  {\fontsize{42pt}{45pt}\usefont{T1}{ugq}{b}{n} 2016}

  % 「2016」と最後の文章の間の水平方向の空白
  \vfill

 上に描かれている三角形は,上の段から順に,
 $1, 2, \dots, 62, 63$ 個の球から構成されています。
 よって,この三角形には,$1 + 2 + \cdots + 62 + 63$ 個,
 すなわち,{\usefont{T1}{ugq}{b}{n} 2016} 個の球があることになります。

 今年を表す数はこんな楽しげな性質を持っています。
 あなたの2016年が良きものになりますように。
\end{center}
\end{document}

このソースを適当な.texファイルに保存して、uplatex でDVIに変換し、dvipdfmx でPDFに変換すれば、先に挙げたような年賀状がPDF形式で出力される。例えば、nenga-2016.tex というファイルに保存した場合、以下のようなコマンドで、nenga-2016.pdf というPDFが出力されるはずだ。

uplatex nenga-2016
dvipdfmx nenga-2016
脚注
  1. 2016年1月4日追記:年賀状の中の三角形の図を描くにあたっては、Stack Exchange の Triangular numbers in TikZ という質問とそれに対する回答を参考にした []