そして最後は力技。
さて、約束通りencloseパッケージの話をしよう。
encloseは、仕様としてはMathMLの命令をJavaScriptで実装するパッケージだ。
前回はこれを表示してTikZの話をして終わったのだった。
$$\require{enclose} \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}$$
この円の中身はこうだ。
\require{enclose} \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}
種明かしとしては、
① まずencloseパッケージを呼び出し……
② circleを
③ その対象は、
④ ──中心から幅6em、上に3em伸び、下にも3em伸びる長方形(正方形)だ。
つまり、円を描こうとしてもencloseパッケージは
白状すると、このやり方はChatGPT 5.6 Solに聞いた。ChatGPT Plusに月3,000円課金した甲斐が増えたというものだ。
$$\smash{\rlap{\Rule{8em}{0.025em}{0.025em}}} \smash{\rlap{\hskip 4em\Rule{0.05em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}$$
こういうこともできる。
この中身は
\smash{\rlap{\Rule{8em}{0.025em}{0.025em}}} \smash{\rlap{\hskip 4em \Rule{0.025em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}
で、少しややこしいのだが、
それぞれsmashとrlapを使って、smashで要素をレイアウト上では幅0em高さ0emとみなしてrlapで重ねた表示を許している。そのうえで、
① 幅8em、高さが上と下にそれぞれ0.025emの長方形を描画(レイアウト上では幅0em高さ0em要素重ね可)
② 4em
③ そして、すべてがレイアウト上で0emだと本文に食い込むので、
ということをしている。
②の幅が0.05emなのは①の長方形の高さが上下にそれぞれ0.025emの合計0.05emだったからだ。
では、この2つを重ね合わせるとどうなる……?
$$\require{enclose} \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}} \smash{\rlap{\Rule{8em}{0.025em}{0.025em}}} \smash{\rlap{\hskip 4em \Rule{0.05em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}$$
\require{enclose} \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}} \smash{\rlap{\Rule{8em}{0.025em}{0.025em}}} \smash{\rlap{\hskip 4em \Rule{0.05em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}
ただそのまま2つを繋げるのではうまく機能しないことが分かった。
というか、さっき出ていた縦軸まで消えている。仕方がないので、線をちょっぴり太くしよう。
\require{enclose} \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}
$$\require{enclose} \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}$$
これで縦横軸が表示された。
円と縦横軸がズレている。そういえば、さっき縦軸と横軸が重なっていたのは、smashとrlapのおかげだった。
というわけで、
\require{enclose} \smash{\rlap{\enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}
というふうにsmashとrlapの恩恵を受ける形にすると、どうなるか。
$$\require{enclose} \smash{\rlap{\enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}$$
ところで、ちゃんと重ねたのに円と縦横軸がズレている。これはなぜか。
試しにphantomにしていた透明な正方形を表示してみよう。(phantomの正方形を
$$\require{enclose} \smash{\rlap{\enclose{circle,box}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \enclose{box}{\phantom{\Rule{8em}{4em}{4em}}}$$
そう。基準として置かれていたphantomの正方形の位置が円と縦横軸で一致していないことが原因だったのだ。
encloseの描画は左端中心を基準にして開始される。
したがって、さっき縦軸の描画を
$$\require{enclose} \smash{\rlap{\hskip 1em \enclose{circle,box}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \enclose{box}{\phantom{\Rule{8em}{4em}{4em}}}$$
\require{enclose} \smash{\rlap{\hskip 1em \enclose{circle,box}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \enclose{box}{\phantom{\Rule{8em}{4em}{4em}}}
まだズレているが、これは箱を描画していたencloseコマンドのせいだと考えて、取り除いておこう。
$$\require{enclose} \smash{\rlap{\hskip 1em \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}$$
\require{enclose} \smash{\rlap{\hskip 1em \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}
さあ!なぜまだズレるのか。
さっき
そして、
encloseはその性質上周囲に余白を形成し、その余白の幅はレンダラーに依存する。
というわけで、気合でhskipを調整してみよう。
$$\require{enclose} \smash{\rlap{\hskip 0.8em \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}$$
\require{enclose} \smash{\rlap{\hskip 0.8em \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}
0.2emずらしたら偶然うまくいった。
ここだけは本当に気合で合わせるしかない。
ちなみに……これまでの格闘はダークモードではうまく表示されないので、colorパッケージをrequireして、どちらのモードでもそこそこ見える色にしておこう。
$$\require{color} \color{#777777}{\require{enclose} \smash{\rlap{\hskip 0.8em \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}}$$
\require{color} \color{#777777}{\require{enclose} \smash{\rlap{\hskip 0.8em \enclose{circle}{\phantom{\Rule{6em}{3em}{3em}}}}} \smash{\rlap{\Rule{8em}{0.05em}{0.05em}}} \smash{\rlap{\hskip 4em \Rule{0.1em}{4em}{4em}}} \phantom{\Rule{8em}{4em}{4em}}}
すこし物足りない色だが、仕方がない。
次回は、さらに座標らしくする方法について書く。