Published on

雪だるま☃してみる

Authors

雪だるまの歴史

雪だるま☃する前に, まず, Unicodeの雪だるまの歴史を遡る必要がある. Unicode 5.1 以前は, 雪だるまは U+2603 SNOWMAN のみであったが, Unicode 5.2 で U+26C4 SNOWMAN WITHOUT SNOWU+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

無事に 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}                  

上記により, 以下のような出力を得る.

date

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

Footnotes

  1. 諸説あり.

  2. でも素敵.