- Published on
雪だるま☃してみる
- Authors
- Name
- Eito YONEYAMA
- @ynym_8
雪だるまの歴史
雪だるま☃する前に, まず, Unicodeの雪だるまの歴史を遡る必要がある. Unicode 5.1 以前は, 雪だるまは U+2603 SNOWMAN のみであったが, Unicode 5.2 で U+26C4 SNOWMAN WITHOUT SNOW と U+26C7 BLACK SNOWMAN が追加された. Unicode 5.1 以前の例示字形では U+2603 において背景に雪が降っていたが, 前述により Unicode 5.2 以降の例示字形では, U+2603 は雪だるま(白)+降雪, U+26C4 は雪だるま(白)のみ, U+26C7 は黒い雪だるま+降雪, というデザインとなった (雪だるま3兄弟の誕生!). なお, 雪だるまグリフのデザインはフォントによって多種多様であり, U+2603 でも雪が降ったり降らなかったり, 表情が異なったりする. 様々なフォントにおける雪だるまグリフのデザインについては, TeX Alchemist Online の記事が参考になる.
さて, ここまでの説明で分かるように, 使用するフォントによって雪だるまが異なってしまうという大問題が発生する. これは, LaTeXにおいても同様であり, この問題に対して様々な議論がなされた1. そこで作られたのが, scsnowman パッケージである. パッケージの使い方は, 作者である aminophen さんの記事, 公式ドキュメント 辺りを参照されたい.
Hello, ☃!
まず, Hello, World! ならぬ Hello, ☃! をする. scsnowman パッケージで雪だるまを表示するには, 以下のように記述する.
\documentclass{standalone}
\usepackage{scsnowman}
\begin{document}
Hello, \scsnowman[hat,muffler=red,arms]!
\end{document}
上記により, 以下のような出力を得る.

無事に Hello, ☃! 出来た!!
どうせなら Lua で日付表示
先ほどの雪だるまだけでは味気ない2ので日付も表示してみる. 以下のように記述する.
\documentclass{ltjsarticle}
\usepackage{luacode}
\usepackage{scsnowman}
\usepackage{float}
\usepackage{tikz}
\begin{luacode*}
function today(mode)
if mode == "date" then
tex.sprint("Today is " .. os.date(("%Y-%m-%d")) .. ".")
elseif mode == "time" then
tex.sprint("The current time is " .. os.date(("%H:%M:%S")) .. ".")
end
end
\end{luacode*}
\newcommand{\myToday}[1]{\directlua{today("#1")}}
\newcommand{\popup}[1]{%
\newlength{\len}%
\settowidth{\len}{#1}%
\pgfmathsetmacro{\buff}{\len / 72.27 * 2.54}%
\setlength{\len}{\buff cm}%
\pgfmathsetmacro{\scale}{\len / 3.02cm}%
\begin{tikzpicture}
\fill[black] (0,0) ellipse [x radius=\scale*2.01cm, y radius=\scale*1.01cm];
\fill[black] (-\scale*0.51,-\scale*0.91) -- (0,-\scale*2.02) -- (\scale*0.51,-\scale*0.91) -- cycle;
\fill[white] (0,0) ellipse [x radius=\scale*2cm, y radius=\scale*1cm];
\fill[white] (-\scale*0.5,-\scale*0.9) -- (0,-\scale*2) -- (\scale*0.5,-\scale*0.9) -- cycle;
\node[align=center] at (0,0) {#1};
\end{tikzpicture}%
}
\begin{document}
\begin{table}[H]
\centering
\begin{tabular}{c}
\popup{\myToday{date}}\\
\scsnowman[hat,muffler=red,arms,scale=10]
\end{tabular}
\end{table}
\end{document}
上記により, 以下のような出力を得る.

吹き出しが不格好なのはご愛敬.