マクロツイーター

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

”pLaTeXがヤバい”問題を一気に解決する話(※ただし画期的)

一昨年に始まったコロナ禍は今も終わりが見えず、日々の生活に薄暗い影を落とし続けています。そこに加えて、最近では世界情勢が……(中略)……ゆきだるま☃!

というわけで、すっかり夏の風物詩として定着したと強弁したい気もする「ゆきだるま☃の日」が今年もやってきました!

pLaTeXがヤバい話

先に述べた通り不穏な世界情勢が続いているわけですが、それとは別に、日本語LaTeXの界隈では最近、ある不穏な言説がとみに聞かれるようになりました。それは

pLaTeX滅亡の危機」

の話です。

acetaminophen.hatenablog.com

なんだかトッテモムズカシイ話ですが、要点をまとめると以下の通りです:

  • 最近ではLaTeXの開発チームがLaTeXカーネルに対する大規模な改修を強力に推し進めている。
  • その改修の中で大きな役割を果たすのが「文字列に対する処理」である。
  • ところが、(u)pTeX「欧文と和文の文字空間が分離している」という異質な特徴を持っている。このため、(u)pTeXをサポートするためにそれ専用の特別な実装が必要になるという事態が往々にして発生する。
  • 海外のTeX開発者は日本の(u)pTeXの仕様に関する知識をほとんど持ち合わせていないため、(u)pTeXのサポートが円滑に行われるためには、何らかの形で日本の開発コミュニティから相当のコミットを行う必要がある。
  • しかし現状の日本の開発コミュニティではその「相当のコミット」を行うだけの余力がない

TeX界隈全体において開発が継続する中で「(u)pLaTeXが正常に使える状態を維持する」ためには相応のリソースが必要になるというのは当然である一方で、最近のLaTeXカーネルの開発の規模と影響範囲を考慮する限り、日本の開発コミュニティにはリソースが全く足りていないというわけです。このまま日本のコミュニティが海外のLaTeXの開発の進捗に追随できない状態が続くと、やがては「(u)pLaTeXに不具合が多発して使い物にならなくなる」という事態に陥ることは容易に想像がつきます。

※ここでは詳細は省きますが、「ヤバさの度合い」でいうとupLaTeXに比べてpLaTeXの方が圧倒的にヤバい状態です。(これはpLaTeXの内部漢字コードがUnicodeでないことに起因します。)従って以下ではpLaTeXの方に話題を絞ることにします。

pLaTeXがやっぱりヤバい話

さて、この話が出たのが昨年の6月のことで、それから1年余りの時が経ちました。現時点で「pLaTeXが滅亡している」のか、というと、そのような様子には見えません。pLaTeXは今でも不具合を特に頻繁に起こすことなく動作し続けています。もっと言えば、今年に入ってpLaTeXに対象を絞ったLaTeXの入門書が出版されていたりさえします。

ということは、「pLaTeXが滅亡する」という話は単なる杞憂だったのでしょうか? あるいは、話の前提となっている「日本の開発コミュニティのリソース不足」の問題がこの1年の間に解決したということでしょうか?

残念ながらどちらも違っていて、今でも「滅亡の危機」は緩慢に続いています。

LaTeXカーネルの大規模な改修は非常に長い期間(恐らく3~5年ほど)を見積もって行われいて、その成果が現実のLaTeXに反映されるのはかなり先のことになります。つまり、それまではたとえpTeXと非互換な改修が開発されていたとしても現実に影響が出ることはないのです。

翻って日本の開発コミュニティの現在での状況を考えてみると、自分が観察した限りでは、メンバー各々の個人的な事情などがあって、1年前に比べて状況はむしろ悪化しているようにもみえます。以下のリンクは「今年6月のLaTeXカーネル改修への対策」を扱うGitHubのイシューです。

これを見ると「既にいくつかの細かい不具合が判明しているのに、何も動きがないまま2ヶ月が経過している」ことがわかります。ある意味で、pLaTeXは現時点で既にチョット壊れているわけです。同様の状況が続いたまま「LaTeXカーネルの大規模改修の本番リリース」の日を迎えることを考えると、pLaTeXの将来について悲観的に考えざるを得ないところでしょう。

pLaTeXがヤバくなっても大丈夫な話

ところで、この「pLaTeXがヤバい」話に関して、世の中には「別に大した問題ではない」と主張する人もいます。

実は私自身も「pLaTeXユーザ(文書作成者を指す)この問題について今からあまり心配する必要はない」と考えています。先述の経緯を考えると、もしLaTeXカーネルの大改修のリリースが実際に(半年後などに)スケジュールされたとなると、その時点での日本の開発コミュニティ側での対応状況は判明しているはずです。そうであれば「pLaTeXが滅亡するのでupLaTeXに移行すべし」あるいは「upLaTeXも滅亡するのでLuaLaTeXに移行すべし」というアドバイスが開発コミュニティから出されるはずです。「古いTeX Liveを容易にインストールできるようにする」などの緩和策も取られるでしょう。ユーザ(文書作成者)の立場では実際にアドバイスが出てから行動したとしても十分に間に合うはずです。

※私の考えでは、むしろこの問題について「今からもっと心配してほしい」のは「pLaTeX専用の文書クラスで運用している組織(学会など)」だったりします。「文書クラスの他エンジン対応の改修」というのは一般に相当の時間と労力がかかるものだからです。

一方で、この問題について別の画期的な観点から「今のpLaTeXがヤバくなっても大した問題にはならない」と主張する人もいます。

そうです。「ゆきだるま☃の日」の某ZR氏のネタの大ファンであれば既におわかりだと思いますが、一般に「LaTeXの問題は“出力を☃に変える”と一気に解決する」ということが経験則として知られています。そうであれば「今のpLaTeXのサポートが困難でヤバい」という問題も

pLaTeXの全ての出力を☃に変更する

ことで一気に解決できることが大いに期待されます。

pLaTeXがヤバくなると素敵になる話

というわけで、pLaTeXがいよいよヤバくなった時に備えて、つくってみました

これらのファイルには“pLaTeXの新しい画期的な実装”が記されています。本来はインストールして使うものですが、今はまだpLaTeXがヤバくなってないので、カレントディレクトリで試しに使うことにします。以下の手順に従ってください。

  1. platex.iniとsclatex.texをカレントディレクトリに置く。
  2. eptex -ini -etex platex.ini を実行する。

すると、以下のような表示が出て、ファイルplatex.fmtが生成されます。

>eptex -ini -etex platex.ini
This is e-pTeX, Version 3.141592653-p4.0.0-220214-2.6 (utf8.sjis) (TeX Live 2022) (INITEX)
 restricted \write18 enabled.
entering extended mode
(./platex.ini (./sclatex.tex
(c:/texlive/2022/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
macros, math definitions, output routines, hyphenation
(c:/texlive/2022/texmf-dist/tex/generic/hyphen/hyphen.tex))
scLaTeX <2022-08-08>
(c:/texlive/2022/texmf-dist/tex/generic/iftex/ifluatex.sty
……(中略)……
181 for language 0
No pages of output.
Transcript written on platex.log.

このplatex.fmtをカレントディレクトリに置いた状態platexコマンドを起動すると、pLaTeX画期的な実装を使うことができます。

platex.logのファイルは以降の操作では不要です。

早速、簡単なテスト用のpLaTeX文書をコンパイルしてみましょう!

[test1.tex]
\documentclass[dvipdfmx,a4paper]{article}
\usepackage{xcolor}
\begin{document}
Hello, \textcolor{red}{p\LaTeX} world!
\end{document}

※なお、この新しいpLaTeXにおいては\documentclass命令以降の記述は(例によって全く本質的でないため)全く読み込まれず無視されます。そのためドライバ指定dvipdfmxなどのオプション)はグローバルオプション\documentclass命令のオプション)として書く必要があります。とはいっても、イマドキのLaTeXではそれが常識であるため、特に不思議な話ではないですね。

このファイルをいつもの手順でPDFに変換しましょう。

※ptex2pdfコマンドを使うこともできます。

platex test1.tex
dvipdfmx test1.dvi

生成されたtest1.pdfを開くと……。

test1.tex組版結果(素敵😊)

ちゃんと本質的☃な出力(赤マフラー)が得られていますね(素敵😊)

今度は日本語や数式(非本質的😑)を含むpLaTeX文書をコンパイルしてみましょう!

[test2.tex]
\RequirePackage{plautopatch}
\documentclass[dvipdfmx,a4paper,12pt,fleqn]{jsarticle}
\usepackage{xcolor}
\usepackage{amsmath}
\newcommand*{\cAho}{\textbf{\textcolor{red}{アホ}}}
\begin{document}$n$が3の倍数であるかまたは$n$の十進表記に数字3を含む」
という性質を満たす正整数$n$のことを「{\cAho}な整数」
と呼ぶことにする。
「{\cAho}\textbf{ない}正整数全体からなる集合」を$N$と
するとき、以下の式が成立する。
\begin{equation}
  \sum_{k\in N} \frac{1}{k} = 14.273065\cdots
\end{equation}
\end{document}

先ほどと同じ手順でPDFに変換します。

platex test2.tex
dvipdfmx test2.dvi

test2.tex組版結果(素敵😊)

やっぱり本質的☃な出力(赤マフラー)が得られました!(素敵😊)

素敵なpLaTeXはヤバくない話

ところで、“出力を☃に変更する”ことで確かに出力が素敵になりましたが、しかしいまの目的は「LaTeXカーネルが使えなくなる」問題に対処することだったはずです。“出力を☃に変更する”ことで本当に問題は解決されているのでしょうか?

platex.fmtの生成の様子をもう一度見てみましょう。

>eptex -ini -etex platex.ini
This is e-pTeX, Version 3.141592653-p4.0.0-220214-2.6 (utf8.sjis) (TeX Live 2022) (INITEX)
 restricted \write18 enabled.
entering extended mode
(./platex.ini (./sclatex.tex
(c:/texlive/2022/texmf-dist/tex/plain/base/plain.tex
Preloading the plain format: codes, registers, parameters, fonts, more fonts,
……(以下略)

なんと、plain.texが読まれています! つまり、この新しい画期的なpLaTeXLaTeXカーネルlatex.ltx)を全く読み込んでいないわけです。これだとLaTeXカーネルにどんな改修が行われても大丈夫ですね!

素敵なpLaTeXをもうチョット使ってみる話

新しいpLaTeXでは文書の内容やレイアウトは(やっぱり本質的でないため)無視されますが、例外的に、出力用紙サイズ(a5paperなど)と段組設定(twocolumnなど)だけは有効になります。

二段組のpLaTeX文書をコンパイルしてみましょう。

[test3.tex]
\RequirePackage{plautopatch}
% B5判横置き, 2段組
\documentclass[uplatex,dvipdfmx,b5paper,landscape,twocolumn]{jsarticle}
\usepackage{tikzducks,tikzlings-owls}
\begin{document}
例によって、アヒルは最高!
\begin{center}\tikz[scale=3]{\duck}\end{center}
\newpage
いややっぱり、フクロウこそ最高!
\begin{center}\tikz[scale=3]{\owl}\end{center}
\end{document}

test3.tex組版結果(素敵😊)

例によって本質的な出力(赤マフラーと青マフラー)が得られました(素敵😊)

jsarticleクラスを使った場合は用紙サイズは決まった値(a4paperb5varなど)の中から選ぶことしかできませんが、jlreqクラスを使うと自由に長さを指定して用紙サイズを設定できます。jlreqクラスを指定して正方形の用紙に出力してみましょう。

[test4.tex]
% jlreqクラスでは'paper={横,縦}'で自由に設定できる
\documentclass[dvipdfmx,paper={200mm,200mm}]{jlreq}
\begin{document}
% どうせ書いても無視されるでしょ;)
\end{document}

test4.tex組版結果(素敵😊)

素敵!😊

まとめ

というわけで、pLaTeXがいよいよヤバくなったとしても対策はもう万全なので、pLaTeXの大ファンであるという人も「ヤバくなる」ことへの心配は無用です! むしろ「pLaTeXがヤバくなる日」が待ち遠しくなってきましたね🙃(えっ)

2022年のパズル年賀状

今年の年賀状。

f:id:zrbabbler:20220101152105j:plain

以前に述べたとおり、年賀状にはその年の数に関連した数学パズルを載せるのが通例である1。しかし去年はパズルを作っている時間が6時間しかなかったので2、何だかよくわからない虫食い算で済ませた。

肝心のパズル問題の部分の文字が小さくで読みづらい(というか注釈の部分は小さすぎて読めない🙁)が、以下のように書かれている。

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

  • 4は(表出の)2か所しかない。
  • 4の上下左右にある数字は全て同じである。
  • 3は1か所にしか入らない。
  • 3の上下左右にある“もの”は全て異なっている。

※“もの”とは数字または余白を指す。つまり、3の周囲のうち高々1か所は余白(マス無し)かもしれない。

(問題の図)
f:id:zrbabbler:20220101150922p:plain

一番上にあるのはアムハラ語3での新年の挨拶。


  1. SATySFi用のパッケージの開発に時間を取られている人が多いためか、年を追うごとに年賀状で数学パズルを見ることが少なくなっているようで感じる。

  2. そのうち本腰を入れて数学パズルを作れたらよかったのに。

  3. テフをオフチョベットしたりする言語。

LaTeXで「源暎ブライス」も使いたい話

これは「TeX & LaTeX Advent Caleandar 2021」の31日めの記事です(うわぁ)
(30日めは zr_tex8r さん でした。)

TeX & LaTeX Advent Caleandar 2021」もいよいよ最終日となりました。……いやまあ、2021年が終わってしまうので、流石に終わりでしょ🙃

「源暎ブライス」を語ってみる

昨日の記事では「源暎ノンブル」フォントとそれをLaTeXで使うための「gennomパッケージ」を紹介しました。

ところで、「源暎ノンブル」の配布元のページを見ると……。

f:id:zrbabbler:20211231201405p:plain
「源暎ノンブル」の隣にあるやつ

「源暎ノンブル」の隣にも面白そうなフォントがありますね😃

genbrosパッケージを紹介してみる

というわけで、この「源暎ブライス」もLaTeXで使えるようにしてみました。

github.com

genbrosパッケージの機能はこんな感じ。

  • \genbros{‹テキスト›}とすると「源暎ブライス」で出力する。
    • \genbros*{‹テキスト›}とすると和文(”円”など)が縮小される。
    • \genbrosstyle{skscale=‹値›}和文の縮小率を指定する(既定値=0.5)。

細かい話はおいといて、実際に「源暎ブライス」を使った例を見てみましょう。

%#!uplatex
% standaloneクラスはdvipdfmxとの相性が悪いので
% 代わりにpreview+prdvipdfmxを利用する
\documentclass[uplatex,dvipdfmx]{jsarticle}
\usepackage[active,dvipdfmx,tightpage]{preview}
\usepackage{tikz,xcolor}
\colorlet{myred}{red!80!yellow}
\colorlet{myback}{yellow!70!black!8}
\usepackage{textcomp}% '\textyen'のため(最近は不要)
\usepackage{pxchfon}% (源暎以外の)和文フォント設定
\setminchofont{MochiyPopOne-Regular.ttf}% モッチーポップ
\setgothicfont{HaranoAjiGothic-heavy.otf}% 原ノ味ゴシックHeavy
\usepackage{genbros}% 源暎ブライスしたい!
\begin{document}
\begin{preview}
\begin{tikzpicture}[x=1bp, y=1bp]
\fill[myred, use as bounding box]
  (0,0) rectangle (400,320);
\fill[myback, rounded corners=20bp]
  (20,20) rectangle (380,240);
\node[xscale=6, yscale=8, text=white, font={\gtfamily}]
  at (200,280) {歳末感謝セール};
\node[right, scale=3, text=black]
  at (30,200) {ラバーダック\scalebox{0.7}{(3個セット)}};
\draw[black, line width=2bp, dashed]
  (30,170)--(370,170);
\node[above right, scale=3, text=myred, align=left]
  at (20,40) {税込\\[-6pt]特価};
\node[above left, scale=6, text=myred]
  % \genbros で源暎ブライスで出力
  at (380,25) {\genbros*{\textyen 1,280円}};
\end{tikzpicture}%
\end{preview}
\end{document}

f:id:zrbabbler:20211231205720p:plain
カントカ大売出し!

いい感じですね!😊

まとめ

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

f:id:zrbabbler:20211231223702p:plain
除夜のカントカ

*「なんだ、この『いらすとや』を雑に改変した雑な絵は……?」
ZR「というわけで、来年も当(くだらない)ブログをよろしくお願いします!」

LaTeXで「源暎ノンブル」を使いたい話

これは「TeX & LaTeX Advent Caleandar 2021」の30日めの記事です(うわぁ)
(29日めは zr_tex8r さん でした。)

「源暎ノンブル」を語ってみる

「源暎ノンブル」とは……。

要するに、小説などの文庫本のページ番号表記でよく見かける1”あの書体”が使えるフリーフォントです。(ちなみに「ノンブル」とはページ番号表記のことを指します。)

f:id:zrbabbler:20211230235325p:plain
あの書体

gennomパッケージを使ってみる

github.com

gennomパッケージを読み込むと、欧文フォントとして「源暎ノンブル」を使えるようになります。

  • 欧文フォントファミリ名gennomが「源暎ノンブル」を表す。
  • \gennomfamily命令で「源暎ノンブル」に切り替えられる。
  • \textgennom{<テキスト>}で引数のテキストを「源暎ノンブル」で出力する。

※gennomパッケージは「欧文LaTeXpLaTeX/upLaTeX+dvipdfmx」で使えます。一応LuaLaTeXでも使えますが、LuaLaTeXの場合は普通にfontspecで「源暎ノンブル」が使えるためあまり有用でないでしょう。

%#!uplatex
\documentclass[uplatex,dvipdfmx,a4paper]{jsarticle}
\usepackage{gennom}%源暎ノンブルしたい!
\begin{document}
\textgennom{1234567890}%源暎ノンブルで出力
\end{document}

f:id:zrbabbler:20211230235325p:plain
upLaTeXで「あの書体」した例

「源暎ノンブル」でノンブルしてみる

実際にjlreqクラスの縦書きの文書でノンブル書体を「源暎ノンブル」にしてみましょう。

%#!uplatex
\documentclass[uplatex,dvipdfmx,book,tate,paper=a5]{jlreq}
\usepackage{gennom}
\usepackage{bxjalipsum}%「猫」
\NewPageStyle{gennom}{%ページスタイルの定義
  nombre_font={\gennomfamily},
  nombre_position=bottom-left}
\pagestyle{gennom}%ページスタイル指定
\begin{document}
\chapter{例によって『猫』である}
\jalipsum{wagahai}
\end{document}

f:id:zrbabbler:20211230235710p:plain
ノンブルを「あの書体」にしてみた

いい感じですね!😊

まとめ

いつまでもクリスマス気分でいるのはやめましょう🙃


  1. 最近ではよく見かけない、という説もある。

scsnowmanでもっと簡単にサンタ☃する話

これは「TeX & LaTeX Advent Caleandar 2021」の29日めの記事です(ええっ)
(28日めは zr_tex8r さん でした。)

まだまだクリスマス!(えっ😲)

scsnowmanだけででサンタ☃できるかもしれない話

昨日の記事では「scsnowmanの帽子をサンタ帽に変える」ための拡張ライブラリzrchristmasを紹介しましたが、なんと、puripuri2100さんが「scsnowmanでsantaオプションをサポートするための改修」のプルリクを出してくれています。

github.com

現時点のものをとりあえず試してみましょう。

%#!pdflatex
\documentclass[margin=10pt]{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{scsnowman}
\begin{document}
\scsnowman[scale=10, santa=Red,% santaオプション!
  muffler=Red, arms=Brown, buttons=Green, note=RoyalBlue]
\end{document}

f:id:zrbabbler:20211229233015p:plain
メリーゆきだるま!

素敵😊

まとめ

TeX以外アドベントカレンダーのほうにも早くクリスマスが来るといいですね🙃

scsnowmanで☃にサンタ帽をかぶせる話

これは「TeX & LaTeX Advent Caleandar 2021」の28日めの記事です(えっ)
(27日めは CareleSmith9 さん でした。)

TeX言語者の間でトッテモ有名なクリスマスソングとして「Twelve Days of Christmas」というものがあります。この歌のテーマである「クリスマスの12日」(“Twelvetide”とも呼ばれる)というのはクリスマスの日(12月25日)から始まる12日間のことを指し、欧米においてはこれをもって「クリスマス期間」とするのが一般的です。

カントカでサンタ帽する方法

というわけで、まだクリスマス期間中なので、欧米のTeX者たちはアヒルにサンタ帽を被せたいかもしれません。tikzducksパッケージ\duck命令にはsantaオプションがあり、これを使えば“santa ducks”を簡単に実現できます。

%#!pdflatex
\documentclass[margin=10pt]{standalone}
\usepackage{xcolor,tikzducks}
\pagecolor{green!95!red!30!black}
\begin{document}
\tikz{\duck[santa]}% santaオプションを指定するだけ
\end{document}

f:id:zrbabbler:20211228235432p:plain
サンタアヒル

※余談ですが、今年も例のアヒル者たちが例のアレを公開してますね🦆

ナントカでサンタ帽する方法

さて、日本のTeX者としてはやはりscsnowmanの素敵なゆきだるま☃にサンタ帽を被せたいところです。ところが\scsnowmanにはsantaオプションがありません。「サンタアヒル」はあるのに「サンタゆきだるま」がないのは由々しき事態ですね。

実は、scsnowman本体ではサポートされていないものの、「帽子(hat)をサンタ帽に変える」ための拡張ライブラリzrchristmasどっかの誰かによって既に作られています。なので、現状ではこのzrchristmasを利用するのが最も手軽に「サンタゆきだるま」を出力する方法になるでしょう。

※scsnowman-zrchristmas.defのファイルは「TeXから見える場所」に置けばOKです。
※サンタ帽のデザインはpuripuri2100氏のSATySFi用の画期的な文書クラスの出力用のものに従っています。

%#!pdflatex
\documentclass[margin=10pt]{standalone}
\usepackage{scsnowman}
\usescsnowmanlibrary{zrchristmas}% 拡張ライブラリ読込
\begin{document}
\scsnowman[scale=10, muffler=red, arms, buttons, note,
  shape=zrchristmas,%shapeにzrchristmasを指定
  hat=red]%hatでサンタ帽を描く
\end{document}

f:id:zrbabbler:20211228235457p:plain
サンタゆきだるま

素敵😊

もうチョット素敵な例

%#!pdflatex
\documentclass[margin=0]{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{graphicx,scsnowman,pgfmath,bxcoloremoji}
\usescsnowmanlibrary{zrchristmas}
\colorlet{mydgreen}{green!95!red!30!black}
\begin{document}
\begin{tikzpicture}[x=1bp, y=1bp]
\fill[mydgreen, use as bounding box]
  (0,0) rectangle (400,400);
 % stars
\foreach \pos in {
  (33,289),(312,210),(200,189),(156,96),(256,249),(361,361),(338,131),(221,330),(351,40),(23,377),(129,310),(65,134),(122,222),(122,41),(370,234),(85,151)
} {\node[scale=4] at \pos {\coloremojicode{2728}};}
% the merry snowman
\node at (200,200) {\scsnowman[scale=45,
  body=white, mouth=false]};
\node at (200,200) {\scsnowman[scale=45,shape=zrchristmas,
  hat=Red,muffler=Red,arms=DarkOrange,buttons=Green]};
\end{tikzpicture}
\end{document}

f:id:zrbabbler:20211228235515p:plain
メリーゆきだるま!

まとめ

日本では25日を過ぎればクリスマスでなくなる感じですが、クリスマスであろうがなかろうが、とにかく「メリーゆきだるま☃」はトッテモ素敵😊

(つづく)

今年も Merry TeXmas! ― \end{texadvent2021}

f:id:zrbabbler:20211112160938g:plain
TeX & LaTeX Advent Calendar 2021
*  *  *

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

\expandafter \let  \expandafter \ехраndаftеr  \let  \let \nоехраnd \expandafter  \ехраndаftеr \nоеxраnd
\ехраndаftеr \ехраndаftеr  \еxраndаftеr  \noexpand \expandafter  \ехраndаftеr \expandafter \ехpаndаftеr
\chardef \noexpand  \nоеxраnd \ехраndаfter \advance  \nоеxраnd   \eхраndаftеr \escapechar  \ехраndаftеr
\ехрandаftеr  \endcsname \nоеxраnd \ехраndaftеr \toks \ехраndаftеr \сsnаmе  \ехраndаftеr   \expandafter
\сsnаmе  \expandafter  \еxpаndаftеr \csname  \string \string  \ехрandаftеr  \ехраndаftеr   \exраndаftеr
\csname    \сsnаmе \еxраndаfter \string  \nоеxраnd \еxрandаftеr \catcode \noexpand \сsnаmе \еxраndaftеr
\the \сsnаmе  \eхpаndаftеr  \meaning   \ехpаndаftеr \ехpаndаfter  \deadcycles \countdef    \ехpandаftеr
\ехpаndаfter \ехpаndаftеr \ехpаndaftеr \ехpandаftеr \ехpаndаftеr \eхраndаfter \eхраndаftеr \eхраndаftеr
\ехpаndaftеr \ехраndаfter \eхраndаftеr \ехpаndaftеr \ехpаndаftеr \eхрandаftеr \eхраndаftеr \eхраndаftеr
\еxрandаftеr \еxрandаftеr \eхрandаftеr \еxpаndаftеr \ехpаndаftеr \eхраndaftеr \еxрandаftеr \eхраndаftеr
\еxpаndаftеr \еxpаndаftеr \еxpаndаftеr \еxрandаftеr \eхраndаftеr \ехpаndaftеr \ехраndаftеr \ехрandаfter
\еxрandаftеr \eхраndаftеr \eхрandаftеr \noexpand \noexpand \ехраndaftеr \ехpаndаfter \ехрandаfter \char
\ехраndaftеr \ехpаndaftеr \ехрandаfter \eхраndаftеr \ехраndаfter \eхраndаftеr \ехpаndaftеr \ехpаndаftеr
\ехраndaftеr \eхрandаftеr \ехрandаfter \ехраndafter \еxраndaftеr \ехpаndaftеr \еxраndaftеr \ехpаndаfter
\еxрandаftеr \eхраndаftеr \eхраndaftеr \eхраndаftеr \eхрandаftеr \eхраndаftеr \еxраndaftеr \ехраndaftеr
\ехpаndaftеr \ехрandaftеr \еxраndaftеr \ехраndaftеr \ехpаndaftеr \expаndаftеr \еxраndaftеr \ехраndaftеr
\ехpаndaftеr \еxpаndаfter \еxраndaftеr \ехраndaftеr \ехpаndaftеr \еxpandаftеr \еxраndaftеr \ехраndaftеr
\ехpаndaftеr \еxpаndaftеr \еxраndaftеr \ехраndaftеr \ехpаndaftеr \exраndаfter \еxраndaftеr \ехраndaftеr
\ехpаndaftеr \exрandаftеr \eхраndаftеr \eхраndаftеr \еxраndaftеr \exраndаfter \еxраndaftеr \еxpаndаfter
\еxpаndаftеr \expandafter \ехраndаftеr \expandafter \ехраndafter \exраndаftеr \expandafter \еxраndаfter
\еxраndaftеr \ехраndaftеr \ехpаndаfter \ехрandаftеr \eхраndаftеr \еxраndaftеr \exраndаfter \еxраndaftеr
\eхрandаftеr \еxраndaftеr \ехpаndаfter \еxраndaftеr \ехрandaftеr \еxрandаftеr \eхраndаftеr \еxpandаftеr
\ехраndаfter \eхраndаftеr \ехpаndaftеr \еxрandаftеr \eхраndаftеr \ехpаndaftеr \ехраndаfter \eхраndаftеr
\ехpаndaftеr \еxрandаftеr \eхраndаftеr \eхрandаftеr \ехpаndаftеr \exраndaftеr \еxраndaftеr \ехрandaftеr
\еxраndaftеr \eхрandаftеr \eхраndаftеr \ехраndafter \еxраndaftеr \expаndаftеr \еxраndaftеr \еxpаndаfter
\ехраndafter \exраndaftеr \ехpаndaftеr \expandafter \ехраndаftеr \expandafter \еxрandаfter \exраndаftеr
\еxраndaftеr \ехраndaftеr \eхрandаftеr \еxраndaftеr \ехpаndаfter \ехраndafter \exраndaftеr \еxраndaftеr
\ехраndaftеr \eхрandаftеr \еxраndaftеr \ехpаndaftеr \ехраndafter \exраndaftеr \еxраndaftеr \ехраndaftеr
\eхрandаftеr \еxраndaftеr \eхрandаftеr \ехраndafter \exраndaftеr \ехрandаftеr \expandafter \ехраndаftеr
\expandafter \еxраndafter \exраndаftеr \еxраndaftеr \ехраndaftеr \eхрandаftеr \еxраndaftеr \ехpаndaftеr
\ехраndafter \exраndaftеr \eхpаndаftеr \еxрandаfter \ехрandаftеr \еxраndafter \eхpаndаfter ‌\ехраndafter
\exраndaftеr ‍\еxраndafter \еxрandaftеr ‌\еxраndaftеr \ехpаndaftеr ‍\еxраndafter \eхpandаftеr ‌\еxраndaftеr
\eхрandаftеr ‍\еxраndafter \eхраndaftеr ‌\еxрandаfter \еxраndаftеr \eхpаndaftеr ​​\еxрandaftеr ​​\eхpandаftеr
‌\еxраndаftеr \ехраndafter \еxраndаftеr \еxраndaftеr ​​\еxрandaftеr \еxраndаftеr \еxраndaftеr ​​\eхpandаftеr
\eхpаndаfter ‍\еxрandаfter \еxраndаftеr \ехpandаfter ​​\еxрandaftеr ​​\eхpandаftеr ‌\еxраndаftеr \ехраndafter
\еxрandaftеr \еxраndаftеr \еxраndaftеr ​​\еxрandaftеr \еxраndаftеr \еxраndaftеr ​​\eхpandаftеr \eхpаndаfter
‍‍\eхраndaftеr \ехpаndаftеr \ехpаndafter \еxраndaftеr \exрandаftеr \еxраndaftеr \еxpаndaftеr \еxраndaftеr
\ехрandaftеr \еxрandaftеr \еxраndafter \ехpandaftеr ‌\ехpandаfter \ехpаndaftеr \eхрandаftеr \ехpandаfter
\ехpаndаfter \ехpаndаfter \ехpandаfter \ехpаndаfter \eхрandаftеr \ехpandаfter \ехpаndaftеr \eхрandаftеr
\eхpаndaftеr \exрandаftеr \еxpаndaftеr \ехpandаfter \ехpаndаfter \ехрandaftеr \ехpandаfter \ехpаndаfter
\ехpаndaftеr ‍\expandafter \ехраndаftеr \expandafter \eхрandаfter \exраndаftеr \ехpandаfter \ехpаndaftеr
\еxpаndаfter \ехpandаfter \ехpаndaftеr \eхрandаftеr \ехpandаfter \ехpаndаfter \ехpаndaftеr \eхpаndaftеr
\exрandаftеr \exрandаftеr \ехpandаfter \ехpаndаfter \еxpаndаfter \eхpаndaftеr \exрandаftеr \еxpаndaftеr
\ехpandаfter \ехpаndаfter \exраndаfter \ехрandаftеr \eхраndаftеr \eхраndаfter \exраndаftеr \ехpandaftеr
\ехpandаfter \ехpаndaftеr \exрandаftеr \ехpandаfter \ехpаndаfter \еxpаndаfter \ехpandаfter \ехpаndаfter
\ехpаndаfter \ехpandаfter \ехpаndaftеr \еxpandаftеr \ехpandаfter \ехpаndаfter \expаndаftеr \ехрandаftеr
\еxраndaftеr \еxpаndаfter \еxраndaftеr \еxpandаftеr \еxраndaftеr \еxpаndаfter \ехpandаfter \ехpаndaftеr
\eхрandаftеr \ехpandаfter \ехpаndaftеr \еxpandаftеr \exраndаftеr \ехpandaftеr \ехpandаfter \ехpаndаfter
\expаndаftеr \ехpandаfter \ехpаndаfter \ехpаndaftеr \ехpandаfter \ехpаndаfter \еxpаndаfter \ехpandаfter
\ехpаndаfter \ехрandaftеr \ехpandаfter \ехpаndаfter \expаndаftеr \ехpandаfter \ехpаndaftеr \еxpandаftеr
\ехрandаftеr \еxрandaftеr \еxраndaftеr \exраndаfter \еxраndaftеr \ехpаndаfter \ехpandаfter \ехpаndaftеr
\eхрandаftеr \ехpandаfter \ехpаndaftеr \еxpandаftеr \eхрandаfter ‌\eхpаndaftеr \exрandаftеr \exраndаfter
\eхpаndaftеr \exрandаftеr \еxpаndaftеr \eхpаndaftеr \exрandаftеr \exрandаftеr \ехpandаfter \ехpаndаfter
\еxpаndaftеr \ехpandаfter \ехpаndаfter \ехрandaftеr \ехpandаfter \ехpаndaftеr \expаndаftеr \ехpandаfter
\ехpаndaftеr \ехpаndaftеr \ехpandаfter \ехpаndaftеr \еxpаndaftеr \ехpandаfter \ехpаndaftеr \ехpаndаfter
\ехpandаfter \ехpаndаfter \ехpаndаfter \eхpаndаfter \ехpandаfter \ехpаndaftеr \expаndаftеr \ехpandаfter
\ехpаndаfter \ехрandaftеr \eхpаndaftеr \exрandаftеr \exраndаfter \eхpаndаfter \еxраndaftеr \ехpаndаfter
\eхpаndaftеr \expаndаftеr \еxpandаftеr \еxраndaftеr \ехpаndаfter \eхpandаftеr \eхpаndаfter \еxраndaftеr
\ехpаndаfter \eхpаndaftеr \expаndаftеr \еxpandаftеr \eхpandаftеr \еxраndaftеr \exраndаfter \eхpаndаfter
\еxраndaftеr \ехpаndаfter ‍\eхрandаfter ‌\eхpаndaftеr \exрandаftеr \exрandаftеr \ехpandаfter \ехpаndaftеr
\ехpаndaftеr \ехpandаfter \ехpаndаfter \exраndаfter \ехpandаfter \ехpаndaftеr \ехpаndaftеr \ехpandаfter
\ехpаndaftеr \expаndаftеr \eхpаndаfter \ехpandаfter \ехpаndaftеr \expаndаftеr \ехpandаfter \ехpаndаfter
\ехрandaftеr \eхpаndaftеr \exрandаftеr \exраndаfter \eхpаndаfter \еxрandaftеr \eхpаndаfter \еxрandaftеr
\eхpаndаfter \еxраndaftеr \ехpаndаfter \eхpаndaftеr \expаndаftеr \еxpandаftеr \еxраndaftеr \еxpandаftеr
‍\exраndаftеr \ехpandаfter \ехpаndаfter \eхрandаftеr \ехpandаfter \ехpаndaftеr \ехpаndaftеr \ехpandаfter
\ехpаndaftеr \ехpаndаfter \ехpandаfter \ехpаndaftеr \еxpandаftеr \ехрandаftеr \eхраndafter \eхpаndaftеr
\ехрandaftеr \expаndаftеr \eхpаndaftеr \exрandаftеr \ехpаndaftеr \eхpаndaftеr \еxpаndaftеr \eхрandаftеr
\eхpаndaftеr \exрandаftеr \еxpаndaftеr \ехpandаfter \ехpаndaftеr \expаndаftеr \eхpаndaftеr \exрandаftеr
\еxpаndaftеr \ехpandаfter \ехpаndaftеr \ехpаndаfter \ехpandаfter \ехpаndaftеr \ехpаndaftеr \eхpаndaftеr
\еxpandаftеr \еxpаndаfter \ехpandаfter \ехpаndаfter \еxpandаftеr \ехpandаfter \ехpаndаfter \еxpаndаfter
\eхpаndaftеr \еxpаndaftеr \еxpаndaftеr \ехpandаfter \ехpаndаfter \еxpаndаfter \ехpandаfter \ехpаndaftеr
\ехpаndаfter \eхpаndaftеr \exрandаftеr \exрandаftеr \ехpandаfter \ехpаndаfter \expаndаftеr \ехpandаfter
\ехpаndaftеr \ехpаndaftеr \eхpаndaftеr \expаndаftеr \еxpаndаfter \eхpаndaftеr \еxpandаftеr \еxpandаftеr
\ехpandаfter \ехpаndaftеr \ехpаndaftеr \ехpandаfter \ехpаndаfter \exраndаfter \ехpandаfter \ехpаndаfter
\ехpаndаfter \eхpаndaftеr \expаndаftеr \еxpandаftеr \ехpandаfter \ехpаndaftеr \ехpаndaftеr \ехpandаfter
\ехpаndaftеr \еxpandаftеr \ехpandаfter \ехpаndаfter \eхрandаftеr \eхpаndaftеr \exрandаftеr \ехрandaftеr
\eхpаndaftеr \ехрandaftеr \expаndаftеr \eхpаndаfter \eхpаndaftеr \exрandаftеr \еxpаndaftеr \ехpandаfter
\ехpаndaftеr \еxpandаftеr \eхpаndаfter \еxраndaftеr \ехрandaftеr \eхpandаftеr \ехpandаfter \ехpаndaftеr
\eхрandаftеr \ехpandаfter \ехpаndaftеr \еxpandаftеr \eхраndafter \ехpаndafter \eхpаndаfter \eхpаndaftеr
\exраndаfter \ехрandaftеr \ехpandаfter \ехpаndаfter \ехpаndaftеr \ехpandаfter \ехpаndаfter \ехpаndaftеr
\eхpаndаfter \eхpаndaftеr \exраndаfter \exрandаftеr \ехpandаfter \ехpаndaftеr \ехpаndaftеr \ехpandаfter
\ехpаndaftеr \еxpаndaftеr \eхpаndаfter \eхpаndaftеr \еxpаndaftеr \exраndаfter \ехpandаfter \ехpаndаfter
\ехpаndaftеr \ехpandаfter \eхрandаftеr \ехpаndаfter \ехpandаfter \ехpаndaftеr \еxpandаftеr \eхpаndаfter
\eхpаndaftеr \exраndаfter \exрandаftеr \ехpandаfter \ехpаndаfter \ехpаndaftеr \eхpаndaftеr \exрandаftеr
\еxpаndaftеr \ехpandаfter \ехpаndaftеr \expаndаftеr \eхpаndaftеr \ехрandaftеr \ехрandaftеr \exраndаftеr
\eхpаndаfter \ехрandаftеr \ехpаndafter \еxpаndаftеr \еxpаndаftеr \exраndаftеr \eхpаndaftеr \exрandаftеr
\exраndаfter \ехpandаfter \eхрandаftеr \ехpаndaftеr \ехpandаfter \ехpаndаfter \ехpаndaftеr \ехрandаftеr
(↑xetexでコンパイル)

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

今年の重点テーマはTeX言語(とか)しましょう!」でした。改めて見返すと、以下に挙げる通り、多種多様なプログラム言語が登場1したとても華やかなアドベントカレンダーとなりました。

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

ありがとう!

そして


  1. あまり(La)TeXと絡んでいないものもありますが、とにかく登場したものを全て列挙しました。

  2. TikZ単体ではプログラム言語と言えるか微妙ですが、tikzmathまで使えばもうプログラム言語といって問題ないですね! なお、tcolorboxはまだプログラム言語になっていないようです🙃