マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

今年もまたもや Merry TeXmas! ― \end{texadvent2025}


TeX & LaTeX Advent Calendar 2025
*  *  *

アドベントカレンダー完走!

[greetings]
--*--+--*--+--*--+--*--+--*--+--*--+--*--+--*--+--*--+--*--+--*--+--*---
________,_,_T,_e,_X,_m,_a,_s,__=_,_G,_r,_e,_e,_t,_i,_n,_g,_s,___________
_8=[=[96978570890987108370858683790987:7284866709'[0405060607\\63_929495
]',97096810837085868379'\\84907867807792'..68:679085700910..'94'70796910
:7284866709'\87','95'1010707969;9697846866790910;969739848509...10837085
868379018566677770.6880796866850992...9410707969;969739858909...10837085
868379018570890939848509...1010707969;9697398668098710837085868379018685
7125.687366830985807986786770830987,18231010707969;96973966830966,67,68,
691083708586837992[66]=67,[68018083'']=6994707969;9697397078096810837085
8683790197098710837085868379'\\'..68..'92'..87..'94'70796901707969;9677=
77817072;9649,52,51,55,36=77.49,77.52,77.51,77.55,77.36;9685,8969=52'01\
85'1249'//'110918-49'\79'1063171249'/11'110918-49'11/'1011'11/',51'1726'
1251'6671'1251'3439'9684,81,8670=8512'\79',18-51'\17\2018',49'\\8692'110
989696318/3986681011'94'9691,89,8477=856317,846317,49'"'110986701249'\\'
11360952'"\\'1012360981-52'"'10106317/39848511'"'967977,80=9111'\79'1189
,867012856318/'01'1249'95'/'\87'1249'\\'1152'\85\79'/'\79'1249'\\'113609
811012360981-52'040511293133_65'10968574,7886=36'8574857770'118911':'118
9118477,36'78867171777083'118911':'118911'"04'113609896963181011'"'96668
3=0909857411098911','11891178861063-1812788611098911','11891185741063-18
12''1011098911','1063-1810/396683;968589=4992'52';52=09806318/3985891249
'_'110955'52'/39707809'70788173'101011'_'1249'11'110955'52'/39707809'848
583807972'101011'11'106317/39848594837085868379018911'04747881808385'119
111'"3379808873708370/857089786684:18.17.17"'119111':'1191110949'11'12'8
57089786684'1011797711'0484738088'119111':'119111'857089786684'119111'.'
119111'8874857309'1189116683118911'10'117977118589118911-1801707969;9697
8586837909841074710184==''857370790183708586837901707969;9681,67,85=7781
7072.786685687309846866790910,8410747101810185737079;9678=0981.788671717
77083018083'391717'10:7284866709'6309.1009.1009.1005','06180618061906190
6200620'1074710478==230185737079;85=09[[\697071\685392068494\697071\6846
92068494\697071\683592068494]]10:718083786685098570890981.85748577700180
83"47746870"10,78,67018083"929594"10707969;707969;84=098510667969[[\6970
7174797068807780839268469492415346459492\684694\79806970[8468667770=1823
,838085668570=-1822]668509192522,1825251092\8574769192\69866876[77668672
73747972,7866727468736685=517069]9494;\79806970[8468667770=1825,83808566
8570=1822]6685092425,1825251092\8574769192\8088779494;\79806970[84686677
70=2019.202122]668509182517,1825171092\78667670678089[178185][77]92\8468
84798088786679[67806990=5673748570]94\846884798088786679[78867171777083=
6846,67868585807984=518090667735778670,66837884=408077697079838069]94;\7
9806970[8468667770=21.19,85708985=40807769]668509182517,2017251092\71807
98584817068925053358386847352858380767094\685394;\79806970[8468667770=19
.21,85708985=5673748570]668509182517,21171092\71807985848170689253705701
40908370014966727077776694\683594;\677072747992846880817094[8473747185=9
2092222,22221094,8468667770=192217,77747970018874698573=20.21246781]\685
2\70796992846880817094]]8083[[\71747777[40807769]09182517,18251710687483
687770[836669748684=181917];\71747777[37747840836690]09182019,1822171070
777774818470[8901836669748684=1825,9001836669748684=1921];\71747777[3774
7840836690]09191925,1822171070777774818470[8901836669748684=1825,9001836
669748684=1921];\69836688[37747840836690,77747970018874698573=1820.22678
1,7774797001686681=8380867969]09182025,191919108580[808685=2017,7479=182
217]09191919,19191910;]]84=09[[068492\77708595\7980708981667969\697071\:
04180419042004219209.04180419,.042004211094\697071\;04180419042004210422
04230424042592..6880798583807784\:0418041904200421667969\:04220423042404
25..\:94\697071\'92192294\697071\"92242294\89697071\68529295\69836688[71
747777=517069]\:20222419\;202224192022252522172525\;2217252522\'25252225
2525\;222525252417252524202519\;242025192420251924192518\;24192518232325
2223182520\;231825202323242523222419\;221724192022241920222419--68906877
70;95\69836688[71747777=5673748570]\:20222324\;20222324201923\"20192417\
;20192417201924\'20222420\;202224202217242123222420\;23222420232524\'232
52417\;23252417232523\"23222324\;221723232022232420222324--6890687770;95
\71747777\:2421251868748368777009.172010;95\71747777[5673748570]\:242125
1868748368777009.171910;9494\69806886787079856877668484[8487727966787084
]928485667969667780797094\86847081666876667270927180798584817068,8574769
1,846884798088786679,857476916986687684,857476917774797284-8088778494\81
66727068807780839237668376408370707994\677072747992698068867870798594\67
7072747992857476918174688586837094[89=186781,90=186781]\8684706684678086
79697479726780890917,171083706885667972777009202317,20231710;0684\707969
92857476918174688586837094\70796992698068867870798594]]10:71808378668509
85018083'',841083708586837901840170796901668484708385096866777767666876.
837072748485708309'80817079_83706669_71747770',970979109670=9271=6684847
08385097480.808170790979,'83'1010,79=799474710179:786685687309'06.859081
05'1085737079;70.837066697083=97091083708586837901858683790970.71:837066
6909'66'1010707969;70778470;70.837066697083=9709108370858683790170.71:83
70666909'77'10707969;707969;8370858683790170017079691010]=];_88,_42_='8'
_['\108\111\97\100'](_8["\108\111\119\101\114"]('\76\79\65\68\40_8:\071'
..'\83\85\66\40\'\92\78\',\'\'\41:\71\83\85\66\40\'\40\37\68\37\68\41'..
'\',\70\85\78\67\84\73\79\78\40_\41\82\69\84\85\82\78\32_.\67\72\065\82'
..'\40\84\79\78\85\77\66\69\82\40_\41\04331\41\69\78\68\41:\71\83\85\66'
..'\40\'\\127\',\'\76\79\67\65\76\32\'\41:\71\83\85\66\40\'\\128\',\''..
'\70\85\78\67\84\73\79\78\32\'\41,_88\41\40\41'))(_88)--'_\"-:2025\12\25
_,_8,__8___,_88,____=________--_._8_:,_8_8__,__8._-__88_._8__,_8_-_-..__
[texmas.typ]
#import "@nowhere/texmas:1.0.0": *
#show: texmas.with(
  title: "Merry TeXmas",
  muffler: "#FF0000", // HTML color
)
*See You _Next_ Year!*
(コンパイル方法)

というわけで、14回目の開催となる TeX & LaTeX Advent Calendar 2025 も、素敵なTeXネタを途絶えさせることなく無事にクリスマスの日を迎えられました。今年の参加者は全部で19名でした。参加者の皆様に心からの感謝を捧げたいと思います。

今年の重点テーマは「(La)TeXをカンタンにする方法」でした。(La)TeXの世界ではカンタンなものはツマラナイと敬遠されがちです。しかし(La)TeXでの製作の価値は「どれほど難しいことをしたか」ではなく「何を作ったか」の方にあるはずです。カンタンで誰でもできる方法の紹介はとても価値があることです。時には「誰でもカンタンに使える」ようにするために難しいことをする必要もあるでしょう。Advent Calendarは終わりましたが、「LaTeXをカンタンにする」ことをいつも心の片隅に置いてください。

TeX & LaTeX Advent Calendar 2025 を楽しんでくれた皆さんに、

ありがとう!

そして

2026年のパズル年賀状

今年の年賀状。

以前に述べたとおり、年賀状にはその年の数に関連した数学パズルを載せるのが通例である1。今年は令和☃年なのでゆきだるま⛄にちなんだ2虫食い算になった。

肝心のパズル問題の部分の文字が(例によって)小さくで読みづらいが、以下のように書かれている。


以下の条件に従って虫食い算を解きなさい。

  • この問題では 8 をで表記している。
  • 各横列のどこかに必ずが入る。
  • 各横列・縦列・(45°方向の)斜め列について2つ以上のが入ることはない。

(問題の図)

※灰色マスは列確認用で数字は入らない。

一番上にあるのはアルバニア語ヴィスクチ文字表記)での新年の挨拶。


  1. Typstの和文用のマトモなテンプレートの作製に時間を取られている人が多いためか、年を追うごとに年賀状で数学パズルを見ることが少なくなっているようで感じる。
  2. ⛄「なお『出題の内容をみる限り⛄である必然性が全くない』というツッコミに関しては地中に埋めてしまうことにしましょう」

“TeX”でナベアツする件とか、暮れのごあいさつとか

年末なので、ぼんやりと某キ~タを眺めていたら、こんな記事を見つけた。

qiita.com

懐かしい🙂……おや?

ある日インターネットを徘徊してると「ナベアツのコードを自力で書けない人は,そのプログラミング言語を使える人たちの集合には属さない」という言説?を目にしました.

チョット調べたところ、確かにそういう言説を口にしているアレな人🙃が存在するようである。

TeX”でナベアツをしたい話

さらにその記事を読んでいくと「LaTeXをどこまで許容するのか」について議論されていた。

はじめは生の TeX 言語のみで(つまり plain TeX で使えるコードのみで)ナベアツを実装しようとしていたのですが,

これを読んで、昨年(2024年)の春にあった​「“TeX”とは何を指すのか」​の議論を思い出した。

zrbabbler.hatenablog.com

このときの議論に従うと、「LaTeXTeXではない」という見解の下では、“TeX”といえそうなものはiniTeXしかない。となると今までの議論の当然の帰結として、iniTeXで動くナベアツのコードが書けないと「自分がTeX言語を使える人である」と主張できなくなってしまう。

TeXができない人になるのはアレなので、iniTeXでナベアツをやってみることにした。

ただし、「2次方程式の解の公式」が固定された単発の文書として成立するのに対して、ナベアツは入力(上限の整数値)をもつ“機能”である。慣習が何も定まっていないiniTeXに対してライブラリのインタフェースを設計するのは困難である。そこで、ナベアツ専用のTeXのマクロパッケージ、名付けてNabeAzzTeXをつくることにする。もちろんplainなどの既存の実装は一切使わず、また拡張プリミティブをもたない元祖TeX上で動作させるという条件を課す。

TeX”でナベアツをしてみた話

構想が決まったので、早速NabeAzzTeXをつくってみた😃

[nabeazztex.tex]
% レイアウト設定
\hsize=97mm \vsize=159mm
\hbadness=1000 \vbadness=1000
\baselineskip=15pt
\parfillskip=0pt plus 1fil

\begingroup
  % コード設定
  \catcode`\{=1 \catcode`\}=2
  \catcode`\#=6 \catcode`\@=11

  % フォント設定
  \global\font\NA@normal=cmr10
  \global\font\NA@aho=cmfi10 at 12pt

  % 変数定義
  \global\countdef\NA@limit=100
  \global\countdef\NA@cnta =101
  \global\countdef\NA@cntb =102

  %% \NA@main
  % 1から \NA@limit までナベアツを出力した後ジョブを終了する.
  \gdef\NA@main{%
    \NA@normal % フォント設定
    % ナベアツする
    \par % 改段落
    \NA@cnta=1
    \NA@loop
    % ジョブを終了する
    \par \end
  }

  %% \NA@loop
  % ナベアツのループ処理.
  \gdef\NA@loop{%
    % 整数がアホかを判定する
    \chardef\NA@isaho=0
    \NA@cntb=\NA@cnta
    \divide\NA@cntb 3 \multiply\NA@cntb 3
    \ifnum\NA@cnta=\NA@cntb
      \chardef\NA@isaho=1
    \fi
    \expandafter\NA@has@three\the\NA@cnta3\relax
    % 整数を出力する
    \ifnum\NA@isaho=1
      {\NA@aho \the\NA@cnta}%
    \else
      \the\NA@cnta
    \fi
    \ % 区切りの空白
    % 末尾再帰
    \ifnum\NA@cnta<\NA@limit
      \advance\NA@cnta1
      \expandafter\NA@loop
    \fi
  }

  %% \NA@has@three
  % 文字列が3を含むかの判定の補助マクロ.
  \gdef\NA@has@three#13#2\relax{%
    \ifx!#2!\else
      \chardef\NA@isaho=1
    \fi
  }

  %% '\\'が無視されるようにする
  \gdef\\{}
  % ジョブ開始時に自動実行される処理
  \global\everyjob{%
    % 数字を読み取って \NA@main を呼ぶ
    \afterassignment \NA@main
    \NA@limit=%
  }
\endgroup

% おしまい
\dump

以下で使用法を説明する1。独自マクロパッケージなのでまずフォーマットを作成する必要があるが、これは以下のコマンドで行える。

tex -ini nabeazztex.tex

これでフォーマットファイルnabeazztex.fmtが生成されるが、以下ではこのファイルをカレントに置く2ことを前提とする。

NabeAzzTeXの入力ファイルは以下のように「ナベアツの入力となる整数値」だけが書かれたテキストファイルである。

[input.tex]
40

この場合、以下のコマンドで入力ファイルをタイプセットできる。

tex -fmt=nabeazztex input.tex

入力の整数値は(一般のTeXの仕様として)コマンド行(または対話モード)でも与えることができるが、この場合は「\から始まらない入力文字列はファイル名とみなされる」という問題がある。このため、NabeAzzTeXでは\\が無視される(空に展開される)ようになっている。

(コマンドプロンプトの場合)
tex -fmt=nabeazztex \\40
(bashの場合)
tex -fmt=nabeazztex '\\40'

何れの場合もナベアツの結果が書かれたDVIファイル3が出力される。

出力結果

というわけで、無事に「TeXが使える人」になることに成功した(あんしん🤯)

まとめ

今年も一年、ありがとうございました!

いつものやつ🙃

ZR「というわけで、来年も当(くだらない)ブログをよろしくお願いします!」
*「アレレ、いつの間にか『除夜のカントカ』が定番ネタ扱いになってる😲」


  1. TeX Live等の現代的なTeXシステムを前提とする。
  2. まあ多分、ちゃんと“インストール”して使いたい人はいないでしょう🙃
  3. 出力DVIファイルはA5判縦の用紙を前提としたレイアウトになっている。用紙サイズ設定の情報は含まれないので、例えばdvipdfmxでPDFに変換する場合には-p a5のオプションを指定する必要がある。

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

これは「TeX & LaTeX Advent Caleandar 2025」の8日めの記事です
(7日め→ Takashi Miyamoto さん/9日め→ Yarakashi Kikohshi さん)

2016年の「TeX & LaTeX Advent Calendar」において「TeX Live で使えるゆきだるま☃のまとめ」という記事がありました。

この記事では「TeX Liveの収録物の範囲でゆきだるま☃を出力する方法を網羅する」こと1を目的としています。

しかし皆さんもご存じの通り、TeX Liveは年々膨張を続けています。9年前と比べると今のTeX Liveはゆきだるま☃を出力する手段がもっともっと増えていることでしょう。

というわけで本記事では、現時点(2025-12-08)での「TeX Live で使えるゆきだるま☃」を改めて纏めてみました。

本記事中で例示したLaTeX文書については、その文書のタイプセットで前提となるワークフロー種別を先頭行にコメントで記載しました。なお、この前提条件は「パッケージの動作の前提条件」とは異なる場合があります。

OpenTypeフォント(フツー)でゆきだるま☃

Unicode TeXエンジン(XeTeX・LuaLaTeX)の普及に伴い、(La)TeXの世界でもOpenTypeフォント2が文字出力の中心的役割になりつつあります。それ以前からpTeXエンジンにおいては和文OpenTypeフォントが使われてきました。そこでまず「ゆきだるま☃のグリフ(字形)を含むOpenTypeフォント」から始めましょう。ただしカラー絵文字フォントは少し特殊なので別扱いにして、まずフツーのテキスト(モノクロ)フォントを扱います。

※ 同じファミリのウェイト・スラント違いの書体は、「そこに別のグリフがある」という事例3がなかったので省略した。
Unicodeのゆきだるま☃以外の符号位置にゆきだるま☃のグリフがある事例は(少しだけ調べたが)見つかっていない。
赤色のグリフは「全角幅である」ことを示している。

以降ではLaTeXOpenTypeフォントを利用してゆきだるま☃を出力する方法を紹介します。

Unicode LaTeXでfontspecする

LaTeXOpenTypeフォントを扱う場合は、やはりUnicode LaTeX(LuaLaTeX・XeLaTeX)を利用するのがカンタンです。fontspecパッケージの機能を用いて直接フォントを指定できます。

%% LuaLaTeX/XeLaTeX
\documentclass[a4paper]{article}
\usepackage{fontspec}% フォントを指定したい
% フォントファミリ名を指定する
\newfontfamily{\fNEmoji}{Noto Emoji}
% フォントファイル名での指定も可能
%\newfontfamily{\fNEmoji}{NotoEmoji-Regular.ttf}
% ↓"Noto Emoji"での出力を指定する命令
\newcommand*{\cNC}[1]{{\fNEmoji#1}}
\begin{document}
Today I'd like \cNC{} rather than \cNC{}.
\end{document}

上掲の表の中で「IBM Plex Math」と「STIX Two Math」は数式用フォントです。数式用フォントもOpenTypeフォントの一種なので普通にfontspecで扱えますが、せっかくの数式フォントなのだから、unicode-mathパッケージでゆきだるま☃を数式として出力する方が素敵かもしれません(えっ😲)

%% LuaLaTeX/XeLaTeX
\documentclass[a4paper]{article}
\usepackage{fontspec,unicode-math}% Unicodeで数式したい
% 数式出力用フォントを"IBM Plex Math"に変更
\setmathfont{IBM Plex Math}
\begin{document}
% 素敵な数式😊
\[ ☃ \lor= ⛇ \]
\end{document}

なお「キーボードに☃キーがない」などの不幸😥な理由でゆきだるま☃文字の入力が難しいという場合は、ASCII文字での入力方法を利用できます。

  • \symbol{"‹符号値16進数›}でその符号値のUnicode文字を版面に出力できます。例えば\symbol{"26C4}で「⛄️」(U+26C4)を出力します。この場合A~Fは大文字で書きます。
  • ^^^^‹符号値16進数4桁›または^^^^^^‹符号値16進数6桁›を書くとその符号値のUnicode文字を書いたのと同等の扱い4になります。例えば^^^^26c4は「⛄️」と同等です。この場合a~fは小文字で書きます。
%% LuaLaTeX/XeLaTeX
\documentclass[a4paper]{article}
\usepackage{fontspec}
\newfontfamily{\fNEmoji}{Noto Emoji}
\newcommand*{\cNC}[1]{{\fNEmoji#1}}
\begin{document}
% "\symbol"を使う例
\cNC{\symbol{"2603}} or \cNC{\symbol{"26C4}}?

% "^表記"を使う例
\cNC{^^^^2603} and \cNC{^^^^26c4}!
\end{document}

LuaTeX-jaで和文ゆきだるま☃する

LuaLaTeXで日本語するためにLuaTeX-jaパッケージを用いる場合は、ゆきだるま☃の文字は和文扱いになります。従って、ゆきだるま☃の書体を指定する際は和文のフォントを(luatexja-fontspecパッケージで)指定する必要があります。

なお、LuaTeX-jaの既定の和文フォントは「Harano Aji Mincho/Gothic」なので、特にフォントを指定しなくてもゆきだるま☃の文字が出力されます。

%% LuaLaTeX
\documentclass[a4paper]{ltjsarticle}% 和文文書です
\usepackage{luatexja-fontspec}% 和文フォントを指定したい
% "\newfontfamily"でなく"\newjfontfamily"を使う
\newjfontfamily{\jIXMin}{IPAexMincho}
\begin{document}
% これは"Harano Aji Mincho"の☃になる
☃はトッテモ素敵。

% これは"IPAexMincho"の☃になる
{\jIXMin}もなにげに素敵。
\end{document}

なお、LuaTeX-jaの既定設定では和文文字は全角幅をもつ想定になっていて、全角幅でないグリフを使うと不自然な組み方になります。そのため、ゆきだるま☃の文字についても全角幅のグリフ(前景の表で赤字のもの)を選ぶべきでしょう。

(u)pLaTeX和文ゆきだるま☃する

upLaTeXでもゆきだるま☃の文字は和文扱いになるので、ゆきだるま☃の書体の指定は和文のフォントで行うことになります。TeX Liveの既定の和文フォントは「Harano Aji Mincho/Gothic」です。

ちなみに、upLaTeXでもゆきだるま☃文字の入力の代わりに\symbol命令が使えます5

%% upLaTeX+dvipdfmx
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\begin{document}
% 既定の和文フォントで出力される
{\TeX}と☃は一切関係ありません。

% \symbol 命令を使う例
{up\TeX}\symbol{"2603}も一切関係ありません。
\end{document}

既定ではゆきだるま☃は「Harano Aji Mincho」で出力されます。

kanji-config-updmapやDVIドライバのマップ指定(dvipdfmxの-fオプション等)で和文をIPAex系に変更した場合はゆきだるま⛄も「IPAexMincho」で出力されます。

(u)pLaTeXでは「文書中で使う和文書体を自由に増やす」ことが難しい6ので、「ゆきだるま☃の書体だけ変更したい」という場合は、「deluxe指定のjapanese-otfパッケージで和文を7書体に増やした上で、その1つ(例えば丸ゴシック体)を『ゆきだるま☃専用書体』に充てる」みたいな手法がよく採られます。pxchfonパッケージを併用するのが手軽でしょう。

%% upLaTeX+dvipdfmx
\RequirePackage{plautopatch}
\documentclass[uplatex,dvipdfmx,a4paper,jis2004]{jsarticle}
\usepackage[deluxe]{otf}% いっぱい和文書体を使いたい
\usepackage{pxchfon}% 和文書体を文書中で指定したい
% 丸ゴシックを"ゆきだるま☃専用書体"として扱う
\setmarugothicfont{LXGWYozai-Regular.ttf}% LXGW Yozai
\begin{document}
% これは既定(Harano Aji Mincho)の☃になる
☃はトッテモ素敵。

% これは"LXGW Yozai"の☃になる
{\mgfamily}はやっぱり素敵。
\end{document}

なお、LuaTeX-jaと同様に、(既定設定では)使用可能なグリフは全角幅のものに限られます。さらに(u)pLaTeXの場合、誤って全角幅でないグリフを混入させると全体の出力が異常になる可能性があるので注意が必要です。

和文Unicodeで扱えるupLaTeXと異なり、pLaTeXで扱える和文JIS X 0208の範囲に限られる7ため、ゆきだるま☃の文字を直接扱えません。ゆきだるま☃も扱えないような大昔のざんねんなエンジンはさっさと捨てるべきですが、pLaTeXでゆきだるま☃を出力したい場合は、japanese-otfの文字入力命令を利用します。

  • \UTF{‹符号値16進数›}でその符号値のUnicode文字を(和文として)版面に出力できます。
  • \CID{8218}\ajSnowman\UTF{2603}と同じ文字、つまり「☃️」(U+2603)を出力します。
%% pLaTeX+dvipdfmx
\RequirePackage{plautopatch}
\documentclass[platex,dvipdfmx,a4paper,jis2004]{jsarticle}
\usepackage[deluxe]{otf}
\usepackage{pxchfon}
% 先と同じく丸ゴシックを"ゆきだるま☃専用書体"として扱う
\setmarugothicfont{LXGWXiaolai-Regular.ttf}% LXGW Xiaolai
\begin{document}
% これは既定(Harano Aji Mincho)の☃になる
{\ajSnowman}とか\UTF{2603}とか\CID{8218}とかは素敵。

% これは"LXGW Xiaolai"の☃になる
{\mgfamily\ajSnowman}は例によって素敵。
\end{document}

OpenTypeフォント(カラー絵文字)でゆきだるま☃

続いてカラー絵文字のOpenTypeフォントを取り上げます。

現状ではカラー絵文字フォントを扱えるTeXエンジンはLuaTeX系に限られます。fontspecパッケージのフォント定義命令(\setmainfontnewfontfamily等)でカラー絵文字フォントを指定する場合にはオプションにRenderer=Harfbuzzを与える必要がありますが、それ以外は普通のフォントと全く同様に扱えます。

%% LuaLaTeX
\documentclass[a4paper]{article}
\usepackage{fontspec}
% カラー絵文字フォントを指定する("Renderer"指定が必要)
\newfontfamily{\fNCE}{Noto Color Emoji}[Renderer=Harfbuzz]
\newfontfamily{\fTM}{Twemoji Mozilla}[Renderer=Harfbuzz]
\begin{document}
% "Noto Color Emoji"のゆきだるま☃
{\fNCE} and {\fNCE} are nice.

% "Twemoji Mozilla"のゆきだるま☃
{\fTM} and {\fTM} are nice too.
\end{document}

フォントを利用したパッケージでゆきだるま☃

ゆきだるま☃のグリフをもつフォントはOpenTypeフォント以外でもありますが、LaTeXの世界ではそういうフォントは(Unicodeでない独自のエンコーディングをもつため)「そのフォントを使うためのLaTeXパッケージ」と一体で提供されるのが普通8です。

ここではゆきだるま☃を出力できるフォントパッケージを「ゆきだるま☃を出力する命令を実際に使った例」とともに紹介します。

本節で紹介するパッケージはどのワークフローでも使用可能です。

fontawesome7パッケージ

Font Awesomeの7版のフォントを使うためのパッケージです。

%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{fontawesome7}
\begin{document}
% "\faSnowman"または"\faIcon{snowman}"でゆきだるま☃を出力
\begin{itemize}
\item[\faSnowman] Nice
\item[\faIcon{snowman}] Essential
\end{itemize}
\end{document}

fontawesome6パッケージ

Font Awesomeの6版のフォントを使うためのパッケージです。7版とはゆきだるま☃の字形が異なります。

なお、6版より前のFont Awesome9にはゆきだるま☃は含まれていないようです。

%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{fontawesome6}
\begin{document}
% "\faSnowman"または"\faIcon{snowman}"でゆきだるま☃を出力
\begin{itemize}
\item[\faSnowman] Nice
\item[\faIcon{snowman}] Essential
\end{itemize}
\end{document}

ipaex-type1パッケージ

IPAexフォントをCJKパッケージで利用可能にするためにType1のサブフォント群に変換したものです。

元のIPAexフォントのゆきだるま☃はU+2603しか含まれないのですが、こちらにはU+2603・U+26C4・U+26C7が全て揃っているのがチョット素敵なポイントです。

基本的にCJKパッケージと併用する(ipxm/ipxgファミリとして指定する)前提ですが、単体で使う用法もあります。

%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{ipaex-type1}
\begin{document}
% \ipxmsymbol{符号値} でUnicode文字を出力する
Today, the feeling is
\ipxmsymbol{"2603}\ipxmsymbol{"26C4}\ipxmsymbol{"26C7}.

% ゆきだるま☃専用の命令もある
Tomorrow, the feeling will be
\ipxmSnowman\ipxmvarSnowman\ipxmBlackSnowman.
\end{document}

CJKパッケージと併用する例も載せておきます。

CJKパッケージは通常はpdfLaTeXまたは欧文LaTeXで用いられます。Unicode LaTeXでは使えません。
%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{CJKutf8}
\begin{document}
\textit{Example:}
% "ipxm"ファミリが"IPAexMincho"に相当する
\begin{CJK}{UTF8}{ipxm}
気分は☃⛄⛇。
\end{CJK}
\end{document}

Unicode絵文字出力パッケージでゆきだるま☃

3つのゆきだるま☃文字のうちU+2603(☃️)とU+26C4(⛄️)の2つはUnicodeにおいて​「絵文字である」​と規定されています。

TeX LiveにはLaTeXで「Unicode絵文字」を扱うためのパッケージが多数収録されているので、それらを利用してカラー絵文字のゆきだるま☃を出力できます。字形を出す原理はパッケージにより異なり、先述のカラー絵文字フォントを利用するものや絵文字の画像を用意するものなどがあります。

諸般の都合(時間切れ🙃)のため、このカテゴリについては説明を割愛します🙇 詳細については以下の記事を参照してください。

ただ一点だけ補足しておきます。bxcoloremojiパッケージは当該の記事が最初に書かれた時点ではまだTeX Liveに収録されてなかったのですが、2024年11月に収録されました。つまり今ではbxcoloremojiもTeX Liveで使える状態になっています🙂

%% LuaLaTeX
\documentclass[a4paper]{ltjsarticle}
\usepackage{bxcoloremoji}
\begin{document}
今日は\coloremoji{}よりも\coloremoji{}の
方が好きです\coloremoji{🥶}
\end{document}

画像を利用したパッケージでゆきだるま☃

先ほどUnicode絵文字用のパッケージで画像を利用したものの話をしましたが、Unicode絵文字以外の記号出力系パッケージでも画像を利用したものがあります。その中でゆきだるま☃を出力できるものを取り上げます。

本節で紹介するパッケージはどのワークフローでも使えます。ただしDVI出力の場合はドライバオプションを適切に設定する必要があります。

% 例えばdvipdfmxの場合, グローバルに"dvipdfmx"を指定する
\documentclass[a4paper,dvipdfmx]{article}

tablericonsパッケージ

Tablericonsの記号をLaTeXで使うためのパッケージです。

%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{tablericons}
\begin{document}
% "\tablericon{snowman}"でゆきだるま☃を出力
\begin{itemize}
\item[\tablericon{snowman}] Nice
\end{itemize}
\end{document}

openmojiパッケージ

OpenMojiの記号をLaTeXで使うためのパッケージです。

これは「Unicode絵文字」の一種のような気がしますが、詳細を調べていません。
%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{openmoji}
\begin{document}
% "\openmoji"命令で記号を出力する
\begin{itemize}
% "snowman without snow"は⛄️
\item[\openmoji{snowman without snow}] Essential
% "snowman"は☃️
\item[\openmoji{snowman}] Nice
\end{itemize}
\end{document}

TikZ描画を利用したパッケージでゆきだるま☃

最後にTikZによる描画を利用してゆきだるま☃の絵(記号・絵文字)を出力するパッケージを取り上げます。

本節で紹介するパッケージはどのワークフローでも使えます。ただしDVI出力の場合はドライバオプションを適切に設定する必要があります。

tikzsymbolsパッケージ

これは例の2016年の記事にも登場する古参のTikZ系記号パッケージです。

%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{tikzsymbols}
\begin{document}
% "\Snowman"でゆきだるま☃を出力
Hello, {\Snowman} world!
\end{document}

utfsymパッケージ

対象としているのはUnicodeの特定の符号値範囲に含まれる記号であり、絵文字ではないものも含まれます。

%% pdfLaTeX
\documentclass[a4paper]{article}
\usepackage{utfsym}
\begin{document}
% "\usym{符号値16進数}"でUnicode文字を出力
But does \usym{2603} align with \usym{26C4} and \usym{26C7}?
\end{document}

tikzlingsパッケージ

皆さんお馴染みのtikzducksパッケージの親戚にあたる(同じ作者の)パッケージで、色々な生き物の素敵なイラストを出力するものです。

%% pdfLaTeX
\documentclass{standalone}
\usepackage{xcolor,tikz,tikzlings}
\pagecolor{blue!80!black!50}
\newcommand*{\cText}{\usefont{OT1}{cmss}{sbc}{n}}
\begin{document}
\begin{tikzpicture}[x=1bp, y=1bp]
\useasboundingbox (0,0) rectangle (400,160);
% 左に⛄、右に🦉を描く
\node at (70,80) {\tikz[scale=60]{\snowman}};
\node at (330,80) {\tikz[scale=60]{\owl}};
\node[scale=4, text=white, font={\cText}]
  at (200,90) {texadvent};
\end{tikzpicture}
\end{document}

scsnowmanパッケージ

もはや説明の必要がないですね😊😊😊

%% pdfLaTeX
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz,scsnowman}
\pagecolor{Orange!60!Red!4}
\begin{document}
\begin{tikzpicture}[x=1bp, y=1bp]
\useasboundingbox (0,0) rectangle (400,200);
% あったかそうな⛄⛄を描く
\node at (100,100) {\scsnowman[scale=20, muffler=Red,
    arms=Brown, buttons=Green, hat=Green]};
\node at (300,100) {\scsnowman[scale=20, muffler=Orange!60!Red,
    arms=Brown, buttons=Green, hat=Green]};
\end{tikzpicture}
\end{document}

トッテモあったかそうで素敵🥰

まとめ

やっぱり、scsnowmanのゆきだるま☃が一番素敵😍


  1. scsnowmanパッケージTeX Liveに収録されたことの報告という意図もあるでしょう。
  2. この記事ではTTFグリフのものも含めて「OpenTypeフォント」と呼ぶことにします。
  3. なお「Regularにはゆきだるま☃があるのに別シェープにはない」という事例は存在した。(FreeSerifなど)
  4. \symbolは飽くまで「文字を版面に出力する命令」であるのに対して^^^^表記は「文字そのものの代用」となるので、例えば\☃という命令の表記を\^^^^2603で代替させることも可能です。
  5. ただし\symbolの引数の符号値が255以下の場合は欧文側の指定になります。^^^^記法は(2.00版以降では少し話がヤヤコシイですが要するに)使えません。
  6. LaTeXレベルで「文書中で使う和文書体を自由に増やす」方法が確立されていないということです。
  7. ……のはず。今のpLaTeXはe-upTeXエンジン上で動いていて、そしてイマドキ(2.00版以降)のe-upTeXエンジンはなにもわからない😭のだけど。
  8. 中にはエンジンによってフォントの種別を変えていて「Unicode LaTeXの場合はOpenTypeフォントを使う」という動作をするパッケージもあります。例えばfontawesome7パッケージはUnicode LaTeX上ではFontAwesome7Free-Solid-900.otf(冒頭の表にあるOpenTypeフォント)を使用します。
  9. TeX Liveには番号無しの“fontawesome”というパッケージもありますが、これは4版に対応するものなので注意が必要です。

またもやアドベントがはじまった ― \begin{texadvent2025}


TeX & LaTeX Advent Calendar 2025

TeX界における年末の恒例イベントとなったということにまたもやしたいアドベントカレンダーが今年も始まりました。今年は14回目の開催となります。

重点テーマ

今年の重点テーマはコレです。

「(La)TeXをカンタンにする方法」

どうやらイマドキはカンタン😍な組版ソフトウェアが流行りのようです。これまでの(la)TeXはその複雑性を誇ってきた歴史がありますが、今年は少し視点を変えて、カンタン😍な(La)TeXの話をしてみましょう。

※例によって、重点テーマは「必須」ではありません。あらゆるTeXネタを歓迎しております。

で、初日のネタは

こちらになります。

blog.wtsnjp.com

まだ参加できます!

TeX & LaTeX Advent Calendar 2025(#texadvent2025)は

まだまだ参加者募集中です。

カンタンなLaTeX数式の話、カンタンなTeX環境構築の話、カンタンな展開制御の話、カンタンな新マクロパッケージ開発の話、カンタンな \expandafter シャウトの話、その他、お持ちの方はぜひぜひ、

ご参加おねがいします!

今ならまだ好きな日を選べます! 登録はお早めに!

* * *

Typst推し✨な人はこっち。

Typst Advent Calendar 2025

エッ、SATySFi……? そういえば、昔そんな名前のやつがありましたね……😐

またもや去年のアレ(アレ)を振り返ってみる


TeX & LaTeX Advent Calendar 2025

昨年(2024年)の「TeX & LaTeX Advent Calendar」はこんな感じでした。

12/01zr_tex8rLaTeXでもっと段落を継続できる件 #LaTeX
12/02津茶利休TeXの表組みで区切り文字をコンマにして読みやすく書く
12/03doraTeX共通テスト「情報Ⅰ」対策の計算練習帳をexpl3でランダム生成する
12/04ut獣を馴らす準備
12/05鴎海ねこTeX-MyTools/unicode-math-snippets at main
12/06ththTeX で限界を突破する
12/07CareleSmith9LaTeX だけ勉強しても周辺知識が足りないよねという話
12/08zr_tex8rLuaLaTeXを爆速にする方法(※ただし画期的)
12/09CareleSmith9hm Latain Modern—フォントをいじった話
12/10k16shikanoLaTeXでコードブロックの長い行を折り返せるfvextraを手なずける
12/11ut長い s と丸い r
12/12津茶利休一度きりのTeX実行で番号参照する試み
12/13zr_tex8r某ZR的徹底比較! LaTeXとTypstの数式記法
12/14TPKatoQA: 日本語版 chemfig マニュアル
12/15MatsuiOverleafのGit連携でGitHub上にバックアップ
12/16やまい行分割アルゴリズムの話。
12/17250kLuaTeXの数式用追加プリミティブについて
12/18zr_tex8rLaTeXで☃のマフラーの塗り潰しをもっともっと指定する方法
12/19doraTeX共通テスト「情報Ⅰ」対策教材の組版技法
12/20tasusuTikZを使って文書内の好きな位置に注釈をつける
12/21_MadChemiker_(8) mol2chemfig でお手軽に分子を描いてみる
12/22hid_alma1026LaTeXに触れられなくなってきた人間の『TikZによるLaTeXグラフィックス』読書
12/23wtsnjpもうLaTeX文書は生成AIに書かせよう
12/24k16shikanoTeXの「エンコーディング」とは何だったのか
12/25zr_tex8r重点解説! イマドキのLaTeXの“命令フック機能”

というわけで、今年はこれを1Qも参考にせずに、自分が素敵だと思うネタを全力でぶつけていきましょう!

今年もまたもやTeXでAdvent Calendarする件について

またもや!!


TeX & LaTeX Advent Calendar 2025

TeXLaTeX Advent Calendar 2025

とっておきのTeXLaTeXネタを皆で持ち寄って楽しむ
TeX & LaTeX Advent Calendar」
今年は 14回目 の開催となります。
皆さんの、心をこめた素敵なネタを例によってお待ちしております!
ハッシュタグは「 #texadvent2025 」
TeXLaTeX初心者大歓迎。 ←重要
TeXLaTeX非初心者大歓迎。

今年の重点テーマはコレです!

(La)TeXをカンタンにする方法

今年の重点テーマ

今年の重点テーマはコレです。 「(La)TeXをカンタンにする方法」

よく言われているようにTeXは“奥が深い”ソフトウェアで、極めれば極めるほど膨大な可能性を手にすることができます。しかしそのせいか、(La)TeXの話はどうしても「もっと難しくする」方向に発展しがちです。でも現実を鑑みると、(La)TeXのユーザの大多数は初心者であり、その人たちの多くは(La)TeXカンタンに使いたいと思っているはずです。

「スゴイ(La)TeXの話」は一旦脇に置いて「カンタンな(La)TeXの話」をして(La)TeXの裾野を拡げていきましょう。

参加方法

(前略)……以下のいずれかテーマに該当する何かを書きます。

  • 「(La)TeXをカンタンにする方法」に大いに関連するTeXLaTeXネタ。
  • 「(La)TeXをカンタンにする方法」にチョット関連するTeXLaTeXネタ。
  • 「(La)TeXをカンタンにする方法」にサッパリ関連しないTeXLaTeXネタ。

このように、以前と同じく、TeXに関連するもの(\expandafter 睡眠法😴とか、\futurelet 快眠法😴😴とか、\afterassignment 熟睡法😴😴😴とか、……)なら何でも構いません。

皆さんの、心温まるTeXネタで寒い冬を乗り越えましょう☃️!