夏といえば、やっぱり「ゆきだるま」!
暑い日々が続いていますが、いかがお過ごしでしょうか。私は暑くて融けてしまいそうなのですが、今日は8月8日です。待ちに待ったナントカの日ですね!
梅雨も明けて、いよいよ夏到来!
— ZR-☃nobabbler (@zr_tex8r) 2016年7月28日
夏といえば、もちろん、ゆきだるま☃!
というわけで、今日は、暑い日々にもめげずに必死で融けずにがんばっているゆきだるま☃を見て、涼むことにしましょう。
☃ ⛄ ⛇ ☃ ⛄ ⛇ ☃ ⛄ ⛇ ☃ ⛄ ⛇ ☃ ⛄ ⛇ ☃ ⛄ ⛇ ☃ ⛄ ⛇ ☃
あの画期的なパッケージ再来!
昨年末、ある画期的なパッケージを本ブログで発表しました。ゆきだるまの絵を LaTeX 文書に簡単に挿入する「scsnowman パッケージ」です。
このパッケージを使えば、Unicode に収録されている「ゆきだるま3兄弟」(U+2603, U+26C4, U+26C7) のヤヤコシイ「フォントによる字形の多用性」を、統一的なオプションで一意に表現することができるようになるのでした。フォントによる字形の多様性については、過去記事を参照してください。
さて、scsnowman パッケージの使い方を簡単に復習してみましょう。まだ入手していない方は、お手数ですが GitHub からダウンロードしてください:
pLaTeX + dvipdfmx の場合の使い方の一例です:
% pLaTeX 文書 \documentclass[dvipdfmx]{jsarticle} \usepackage{scsnowman} \begin{document} ゆきだるま\scsnowman マフラー付き\scsnowman[muffler=red]\par 帽子と雪あり\scsnowman[hat,snow]\par 大きめの黒ゆきだるま\scsnowman[scale=3,body] \end{document}
今回は、「ナントカの日」にちなんで新機能を追加し、パワーアップした scsnowman パッケージを徹底的に紹介しようと思います。
デフォルト変更機能
従来は \scsnowman
をオプション引数なしで単独で使うと、必ず「プレーンのゆきだるま」が出ていました。つまり、“異体字” を出すためにはその都度 \scsnowman[hat=red,muffler=red]
のようにオプション引数を与える必要がありました。これでは、たとえば前回登場していただいた「黒☃大輔さん」は、苗字の☃が登場するたびその都度オプション引数を書くか、自前の命令を定義しておく必要がありました。
\documentclass[dvipdfmx,twocolumn]{jsarticle} \usepackage{scsnowman} \newcommand{\mysnowman}{\scsnowman[body=true,hat,snow,muffler]} \begin{document} 私、黒\mysnowman 大輔は、1950年に黒\mysnowman 太郎の長男として誕生しました。 その後、黒\mysnowman 家には… \end{document}
「自分の苗字以外に☃を書類に書くことはないので、デフォルトを変更できるとよいですね…」という黒☃さんからの要望を受けまして、新たな命令を用意しました。
\scsnowmandefault{<key>=<value>,...}
:以降の文書での、オプション無指定時の☃のデフォルト字形を指定する。
引数一つを必ずとる命令です。引数書式は \scsnowman[<key>=<value>,...]
のオプションと全く同じで、一度実行しておくと以降ではデフォルトとしてこの指定が使われます。もし以降の箇所で、明示的に \scsnowman
のオプション引数が使われた場合は、「デフォルト指定されたオプションからの変化」として認識されます。実際の例を見てみましょう。
\documentclass[dvipdfmx,twocolumn]{jsarticle} \usepackage{scsnowman} \begin{document} \scsnowmandefault{body,hat,snow,muffler}% 私、黒\scsnowman 大輔は、1950年に黒\scsnowman 太郎の長男として 誕生しました。その後、黒\scsnowman 家には… \scsnowmandefault{hat,snow,arms}% お隣には白\scsnowman さんが住んでいました。白\scsnowman さんは、 宛名の文字を「\scsnowman」でなく「\scsnowman[arms=false,muffler]」 と書いてしまうとお手紙を読まずに食べてしまうような変わった方でした。 ただし、\scsnowman[hat=red]のように帽子に色が付いた宛名を見ると、 白\scsnowman さんは喜んでいました。 \end{document}
この例だと少し分かりにくいかもしれませんが、たとえば「全部の☃を大きくしたい!」という場合に\scsnowmandefault{scale=10}
を予め書いておく、という使いかたができます。
“異体字” の拡張
今回は buttons、mouthshape、sweat というキーを追加しました。buttons と sweat は true / false / 色を指定し、mouthshape は以下に示すように3通りの形から選びます。
\documentclass[dvipdfmx]{jsarticle} \usepackage[svgnames]{xcolor} \usepackage{scsnowman} \begin{document} % buttons で「ボタン」(マフラーの有無で微妙に位置が変わる) \scsnowmandefault{scale=15,hat=Green,arms=Brown,snow=SkyBlue} \scsnowman[buttons=RoyalBlue,muffler=Red] \scsnowman[buttons=RoyalBlue] % mouthshape で「口の形」 \scsnowmandefault{scale=15,hat,muffler=Red} \scsnowman[mouthshape=smile]% にっこり \scsnowman[mouthshape=frown]% しかめっ面 \scsnowman[mouthshape=tight]% 真一文字 % sweat で「汗」 \scsnowman[mouthshape=tight,arms,buttons,sweat] \end{document}
もっと文書に☃を!
ご存じのとおり、TeX/LaTeX はアレです。そんな LaTeX をどうしても使わなければならない、でももっと文書作成を楽しみたいという場合、真面目な文書の中にかわいらしいゆきだるま☃がたくさん出てきてくれると、なんだか愉快な気持ちになれるかもしれません。そこで、そんな需要に応えるべく、scsnowman パッケージ側でいくつかの機能を提供することにしました。
「証明終わり記号」を☃にしたい
\makeqedsnowman
… \makeqedother
という命令で挟んだ部分の proof 環境(amsthm パッケージが提供)で、証明終わり記号が☃になります。
\documentclass[dvipdfmx,a6paper,papersize]{jsarticle} \usepackage{scsnowman} \newtheorem{theorem}{定義} \newtheorem{definition}{定理} \renewcommand{\proofname}{証明} \begin{document} \begin{definition}\normalfont ゆきだるまとは,… \end{definition} \begin{definition}\normalfont \TeX はDonald E. Knuthに… \end{definition} \begin{theorem}\normalfont ゆきだるまはカワイイ。 \end{theorem} \makeqedsnowman % QED をゆきだるまに \begin{proof} 定義により,ゆきだるまはカワイイ。 \end{proof} \makeqedother % 元に戻す \begin{theorem}\normalfont \TeX はアレ。 \end{theorem} \begin{proof} 定義により,\TeX はアレである。 \end{proof} \end{document}
「箇条書き」を☃にしたい
\makeitemsnowman
… \makeitemother
で挟んだ部分の itemize 環境で、箇条書きのラベルが☃になります。四階層でそれぞれ赤・青・緑・黄の☃が現れます。
\documentclass[dvipdfmx,a5paper,papersize]{jsarticle} \usepackage{scsnowman} \begin{document} ゆきだるまで箇条書き: \makeitemsnowman \begin{itemize} \item 動物 \begin{itemize} \item 哺乳類 \item 鳥類 \item … \end{itemize} \item 植物 \begin{itemize} \item 裸子植物 \item 被子植物 \begin{itemize} \item 単子葉類 \item 双子葉類 \begin{itemize} \item 合弁花類 \item 離弁花類 \end{itemize} \end{itemize} \end{itemize} \end{itemize} \makeitemother \end{document}
ちなみに QED の案は doraTeX さんのツイートから拝借しました。
この本,「例の終わり」マークが✌️になってる。これは証明終わりマークが☃になる日も近いな。 pic.twitter.com/vd79IykWq4
— Yusuke Terada (@doraTeX) 2016年3月13日
コラム:命令の名前について
\makeナントカカントカ
という命令は、LaTeX(というかチョットした TeX on LaTeX)に少しでも触れたことがある人なら、何となく見覚えがあるのではないでしょうか。そう、言わずと知れた \makeatletter
… \makeatother
です。恐らく初見では誰しも「ナンジャコリャ?」で、解ってくると何だか少し TeX ができるようになったような嬉しい気分になるという沼の入り口ですね。これは勿論 make O C という第5文型ですから、これを踏襲した名称にしました。
そういえば「QED マーク」をゆきだるまにする \makeqedsnowman ... \makeqedother という命令を scsnowman パッケージに追加する構想が、時間がなくてお蔵入りになっている。 https://t.co/y8lcY2wNth
— Acetaminophen (@aminophen) 2016年5月5日
もっと文書を☃に!
ここまで読んでもまだ満足しない方がいらっしゃるかもしれません。
「文書の一部だけ☃でも足りない! もっともっと☃の割合を高めるべきだ!」
という主張が考えられます。そこで、文書中に☃を入れるのではなく、文書そのものを☃にしてしまいましょう。
現状の tcclearerr については
— ZR-☃nobabbler (@zr_tex8r) 2016年5月8日
「TeX文書の出力に本当に必要なもの」
に対する考察が致命的に欠けている。
本当に出力すべきものなんて、ゆきだるま☃しかないはず。#TeX https://t.co/tDIQHNT4VZ
これを実現してくれるのが、\makedocumentsnowman
です(ちなみに、\makedocumentother
は必要ありません。\makedocumentsnowman
を実行した時点で、文書は☃だけになっているのですから、\makedocumentother
を実行する余地などないのです)。
\makedocumentsnowman
— ZR-☃nobabbler (@zr_tex8r) 2016年5月5日
\makedocumentother#TeX #えっ
この命令は「文書を☃にする」ものですから、\begin{document}
より前に書きます*1。たとえば以下のようにします:
\documentclass[dvipdfmx]{jsarticle} \usepackage{scsnowman} \makedocumentsnowman \begin{document} \TeX はアレ、ああ\TeX はアレ、\TeX はアレ \end{document}
あるいは、以下でも大丈夫です(ただしこの場合、クラスオプション=グローバルオプションが scsnowman パッケージ読み込み時点で指定されていないため、「ドライバ指定」が極めて難しくなります。このため、この例ではドライバ自動判定に任せられる pdflatex で処理可能な例を挙げます):
% pdflatex \RequirePackage{scsnowman} \makedocumentsnowman \docomentclass{article} % コマンドが間違っていても 10 INPUT A % もはや TeX っぽくなくても 20 INPUT B % どうせ無視されるので 30 C=A+B % なんでも OK! 40 PRINT C 50 END
このように、\makedocumentsnowman
さえ発行してしまえば、それ以降がどんな入力であっても処理結果は常に「ゆきだるま三兄弟」になります。どこかの誰かが似たようなことをやっていた気がしますね*2。
終わりに
ここまで来て「ナントカの日」がわからない方へ一言:
☃「えっ、ナントカの日を知らない? 何でなんでナンデ?」 https://t.co/lGHhX98GZt
— ZR-アレnobabbler (@zr_tex8r) 2016年8月4日
暑い夏を、たまには「ゆきだるま☃」を眺めて涼みながら、どうにか乗り切りましょう。