Acetaminophen’s diary

化学に関すること,TeXに関すること,ゆきだるまに関すること。

TeX Live で使えるゆきだるま☃のまとめ

これは TeX & LaTeX Advent Calendar 2016 の 23 日目の記事です。昨日は __rinx さんでした。明日は golden_lucky さんです。5 日目7 日目に続いて今年 3 回目の参加となります。

2016 年も残すところあとわずかになりました。師走の仕事納め、学生の皆さんは卒論の大詰めを迎えていることでしょう。特に LaTeX で卒論を書いている皆さんは、さぞかしゆきだるま☃が恋しくなっていることと思います。今日はそんな皆さんに朗報です!

f:id:acetaminophen:20161223125907p:plain

学生の方に限らず、LaTeX 文書を書いていると、無性にゆきだるま☃が欲しくなった経験は誰にでもあるでしょう。そんなときに使える「TeX Live で使えるゆきだるま☃」を一挙に紹介します。

 

1. IPA / IPAex フォントでゆきだるま☃

UnicodeTeX (upTeX, XeTeX, LuaTeX) ならばソース中に直接☃を書けばそのまま出力されます。ただし、本記事の目的は「TeX Live で使える…」ですから、実際に埋め込まれるフォントも TeX Live に含まれていなければなりません

この条件を満たしているフォントの代表格は、日本語フォントとして広く用いられている IPA / IPAex フォントです。たとえば

\documentclass[uplatex]{jsarticle}
\begin{document}
up\LaTeX{}でゆきだるま☃!
\end{document}
$ uplatex test.tex
$ dvipdfmx -f uptex-ipaex.map test.dvi

のようになるでしょう。

f:id:acetaminophen:20161223130143p:plain

LuaLaTeX の場合は、上のソースで \documentclass{ltjsarticle} と変更すれば、(現在の LuaTeX-ja デフォルト設定は IPAex フォント埋め込みなので)似たような出力が得られます。

$ lualatex test.tex

ほかにも、otf パッケージには \ajSnowman という命令があり、VF (Vitual Font) を駆使することで pLaTeX でも☃を出せる仕組みがあります。

\documentclass{jsarticle}
\usepackage{otf}
\begin{document}
p\LaTeX{} + \textsf{otf}でゆきだるま\ajSnowman\end{document}
$ platex test.tex
$ dvipdfmx -f otf-ipaex.map test.dvi

f:id:acetaminophen:20161223130304p:plain

さらに \UTF{2603} でも…いろいろな☃の出し方があるわけですが、結局同じ IPAex フォントなので割愛します。

さて、otf パッケージを使わずに pLaTeX や pdfLaTeX のような非 UnicodeTeX で☃を出す方法はあるのでしょうか。簡単な方法は、元々 TrueType フォントである IPAex フォントを Type1 形式に変換した ipaex-type1 を使う方法です。これも TeX Live に収録されていますので使ってみましょう。この方法なら LaTeX でなく plain TeX フォーマットでも使えます。

\font\ipaextypeone=ipxm-r-u26 at 10pt
Snowman on pdf\TeX\ using ipaex-type1: \ipaextypeone\char"03\relax\bye
$ pdftex test.tex

f:id:acetaminophen:20161223130227p:plain

とはいっても、やっぱり IPAex であることに変わりありません。見飽きてきたのでこの辺でやめておいて、ほかをあたることにしましょう。

 

2. GNU FreeFont でゆきだるま☃

過去記事で既に登場している GNU FreeFont ですが、TeX Live では texmf-dist/fonts/truetype/public/gnu-freefont に入っています。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{FreeSerif}
\setmonofont{FreeMono}
%\setsansfont{FreeSans} % ないみたい…
\begin{document}
Snowman using GNU Freefont: ☃\texttt{}%\textsf{☃}
\end{document}
$ xelatex test.tex

f:id:acetaminophen:20161223130320p:plain

FreeMono のゆきだるま☃、かわいい…

 

3. DejaVuSans フォントでゆきだるま☃

これも過去記事で既に登場している DejaVuSans フォントです。TeX Live では texmf-dist/fonts/truetype/public/dejavu に入っています。

\documentclass{article}
\usepackage{fontspec}
\setsansfont{DejaVuSans}
\setmonofont{DejaVuSansMono}
\begin{document}
Snowman using DejaVuSans: \textsf{}\texttt{}
\end{document}
$ xelatex test.tex

f:id:acetaminophen:20161223130403p:plain

雪の量が違っていますね。

 

4. tikzsymbols パッケージでゆきだるま☃

昨年の Advent Calendar の記事で補遺に登場した tikzsymbols パッケージも、TeX Live に収録されています。これは TikZ を使って描画された欧米風三段ゆきだるまです。

\documentclass{article}
\usepackage{tikzsymbols}
\begin{document}
\verb+\Snowman+ in \textsf{tikzsymbols}: \Snowman
\end{document}
$ pdflatex test.tex

f:id:acetaminophen:20161223130204p:plain

あまりかわいくはないかなあ。

 

5. scsnowman パッケージでゆきだるま☃

これは昨年の Advent Calendar の記事で発表した画期的なパッケージです。これも TeX Live に収録されています。

…エッ!? はい、証拠がこちらです。日本時間で今朝 TeX Live に入りました!

…というわけで、どんどん scsnowman パッケージを使いましょう。

\documentclass[dvipdfmx]{jsarticle}
\usepackage{scsnowman}
\begin{document}
\textsf{scsnowman}パッケージでゆきだるま:\scsnowman\par
\scsnowman[scale=3,hat,muffler=red,mouthshape=tight,buttons=blue]
\scsnowman[scale=3,body,snow,muffler=green,mouthshape=frown,sweat]
\scsnowman[scale=3,hat,arms=brown,buttons=yellow,snow]
\scsnowman[scale=3,body=blue,muffler=yellow,arms]
\scsnowman[scale=3,hat=red,muffler=blue,snow=green]
\scsnowman[scale=3,hat=red,mouth=red,sweat=pink,buttons=red]
\end{document}
$ platex test.tex
$ dvipdfmx test.dvi

f:id:acetaminophen:20161223131410p:plain

やっぱりこれが一番ですね。

 

まとめ

ゆきだるま☃最高!

 

付録:scsnowman パッケージの TeX Live 収録までの体験記

今年の Advent Calendar の 5 日目の記事

世界中の TeX ユーザは、自分で作成した便利パッケージを他人にもぜひ使ってほしい場合、すべて CTAN に登録することになっています。TeX Live は CTAN をほぼ毎日チェックし、更新分があれば取り込みますし、まだ収録していない新しいものが見つかれば(そのライセンスが自由な再配布を許していれば)これも TeX Live に取り込みます。逆にいえば、CTAN に登録していないパッケージを TeX Live が収録することは最近ではほぼありえません。TeX Live で自分のスゴイパッケージを使えるようにしたいと考えた場合は、すみやかに CTAN に登録しましょう

と書きました。これを実践してみただけです。極めて簡単ですので、付録としてこの記事に載せておきます。大まかな流れは以下のとおりです:

  1. パッケージ (.sty など)の作成、必要なドキュメントの作成
  2. CTAN にアップロード
  3. あとは TeX Live に入るのを待つ

結局実質的には「CTAN へのアップロード」が要になります。ここをクリアすれば TeX Live への収録はほぼ確定とみてよいでしょう。というわけで、順番が違う気がしますが、先に CTAN の登録画面を見てみましょう。

CTAN: Comprehensive TeX Archive Network にアクセスします。上のメニューに Upload とあるので、ここをクリック。

f:id:acetaminophen:20161223132015p:plain

フォームに入力する必要事項を眺めてみると、極めて基本的な情報しか必要ないことがわかります。画像は私が scsnowman パッケージについて入力したときのものです。(もちろんすべて英語です。)

f:id:acetaminophen:20161223132228p:plain

Suggested CTAN directory というのが少しわかりにくいかもしれませんが、CTAN にはたくさんのパッケージがあるため種類別に分類されています。私の scsnowman は「絵を描く」が最も近いので graphics 以下を捜し、さらに TikZ/PGF を使っているのでその下へ…という形で場所を決めて入力しました。新しいパッケージを作った場合は、既存の類似パッケージの場所をまねて決めるとよいでしょう。

最も重要なのはライセンスです。TeX Live への収録を目指す場合は特に、広く使われている既存の Free なライセンスの中から一つ選ぶ必要があります。

f:id:acetaminophen:20161223133244p:plain

Free の中に選択肢はいろいろあって「このパッケージは無償で自由に改変・再配布していいよ」とか「このパッケージを改変するときは区別できるように名前を変えてね」などそれぞれ異なりますが、どれを使ってもかまいません(もし自作パッケージが既存の何かを改変したパッケージである場合は、その基になっているパッケージのライセンスを侵害しないように注意が必要です)。決して Nonfree から選んだり、独自ライセンスを作って「使いたい場合は俺得な決まりを守ってね!」というような指定はしてはいけませんTeX Live には収録してもらえなくなります。

残ったフォームは、パッケージ一式を zip 等で固めたものを登録するボタンだけ。

f:id:acetaminophen:20161223133609p:plain

必要事項さえあらかじめわかっておけば、あとはパッケージを作って zip に固めるだけです(もう作ってある場合は、上に示したガイドラインに沿うように調整するのは難しくないでしょう)。パッケージの作りかたについては、最初に

を読むとよいでしょう。問題になるのが「何を zip に固めればよいか」です。この zip の内容次第で、CTAN の中の人から注文が入る場合があります。しかし、大した要求ではないので焦る必要はありません。アップロード画面の右側の Preparation すなわち「CTAN にアップロードする前に準備すること」を読むと、まずパッケージ (.sty) 単独ではなく README ファイルが必要であることがわかります。これはライセンス(後述)や動作条件(たとえば LuaTeX 専用ならその旨とか)とともに、簡単な紹介文を書いておくためのものです。

Include in your upload a plain text file with information that would be useful to a CTAN visitor considering using your package. This information includes a brief description and license information, as well as whether your material requires special fonts or only runs on one kind of platform. Name this file README.md, README.txt or simply README …後略

README さえあればとりあえず何とかなります。より詳しい要求は Additional Information for CTAN Uploaders に書いてありますが、全部読むのは大変だと思ったら「当たって砕けろ」です。アップロードして問題があったら、向こうからメールで「ここを直してくれ」と依頼されるので、それに従って何度かやり直せばよいです。ちなみに今まで*1私が指摘されたのは以下のようなことです:

  • 大規模なパッケージでないのなら doc/ とか sty/ のようなサブディレクトリを掘らずにフラットに置いてほしい
  • LaTeX などで作られる .aux / .log / .toc のような一時ファイルや、git で使われる .gitignore のような設定ファイルは削除してくれ
  • dtx と ins でソースコードを書いている場合、これらから strip されて生成する sty ファイルは不要(ただしドキュメントの pdf は残す)
  • パッケージに書いてある日付と README に書いてある日付がずれてるぞ

イロイロ指摘されることもありますが、最初からカンペキにするのは難しいです。指摘されたらその都度直して学んでいくのが手っ取り早いです。zip を作れば、あとは先ほどのアップロード画面に行くだけ。

ちなみに入力完了して Submit contribution すると以下の画面に遷移します。

f:id:acetaminophen:20161223141142p:plain

CTAN の中の人のチェックを通ったら、メールが届きます。

Hello Hironobu,
thanks for the upload of this new package:
On Thursday 22 December 2016 at 10:34:51 +0100  CTAN Portal Service (no-reply@ctan.org) wrote:
> Upload information:
> Package:        scsnowman
> Summary:        Snowman variants using TikZ
> Version:        1.0  2016-12-22
> Author:         Hironobu Yamashita
> Author’s email: (省略)
> Location:       /graphics/pgf/contrib/scsnowman/
> License:        bsd2
> Upload type:    new
>
> Announcement text:
> ----------------------------------------------------------------------
> First release on CTAN.
> ----------------------------------------------------------------------
> Notes to CTAN maintainers:   ---
> ------------------------------------------------------------------------
> Feedback for submitter:
> ------------------------------------------------------------------------

  The new package has been installed on our central server and
  will be announced about 24 hours later, when the mirrors have
  had enough time to pick up the new files.

        Kind regards
    Petra Rübe-Pugliese
      for the CTAN team

The new package has been installed on our central server とあれば、完了です。お疲れ様でした。あとは、「TeX Live に入ってくれないかなー」と期待して待っていると、そのうち tlmgr で落ちてくるかもしれません(このときは特に通知されません)。

scsnowman のような何の役に立つのかわからない(?)パッケージでも TeX Live は即日で収録してくださいました。要するに、TeX Live に貢献するのは難しいことではないということです。みなさんもぜひパッケージを CTAN にアップロードし、TeX Live を通して世界中の人に使ってもらいましょう。

*1:scsnowman パッケージが初めてではなく、platex や jsclasses も私がアップロードしています。以前紹介した platex-tools バンドルも私です。