panda大学習帳外伝

勝利の方程式の解き方。

メインページ | panda大学習帳 | 第三倉庫(仮) | 用語集📒 | 本サイトについて | プライバシーポリシー


LaTeXの平方根の記号の高さをいい感じに揃えるために、mathstrutコマンド及びsmashコマンドを追加してみた。

最終更新日: Sun Nov 29 18:11:44 2020 +0900

はじめに

この記事を$\LaTeX$で書く時にちょっと勘違いをしていて(本当は式として正しくないので、最終的にはこのような記述はしていないのですが)、コサイン類似度の式を誤って、 \begin{align} s_{ij} &= \frac{\boldsymbol{a}_i\cdot\boldsymbol{a}_j}{\sqrt{\boldsymbol{a}_i}\cdot\sqrt{\boldsymbol{a}_j}}\qquad (\mbox{←間違い}) \label{eq:cosine_similarity_not_correct} \end{align} と書いてしまっていたのですが…

(\ref{eq:cosine_similarity_not_correct})式の右辺の分母に現れている平方根の記号をよく見ると、平方根の記号の高さが(目の錯覚レベルですが、)わずかに揃っていません。また、文字の上端と平方根の記号の屋根の部分の幅が小さいために、バランスが悪くなっています。

繰り返しになりますが、コサイン類似度の正解の式はこの記事に書いてある通りですので、平方根の記号が登場することはありません。しかし、添え字を変えただけで平方根の記号の高さが揃わなかったり、見た目が悪くなることがあるというのはちょっと気になったので、調べてみることにしました。

スポンサーリンク

数式の例

問題を簡単にするためと、比較のために以下の2つの数式を用意しました。 \begin{align} x_1 &= \sqrt{a} + \sqrt{b} \label{eq:testone} \cr x_2 &= \sqrt{a_i} + \sqrt{a_j} \label{eq:testtwo} \end{align} (\ref{eq:testone})式では右辺第1項よりも第2項の平方根の記号の高さが高くなっていて、(\ref{eq:testtwo})式では逆に右辺第1項よりも第2項の平方根の記号の高さが(わずかですが)低くなっています。

これを何とかして揃えます。



mathstrutコマンドを使ってみる。

平方根の記号の高さを揃える場合によく使われるのが、mathstrutコマンドです。

早速試してみます。

\sqrt{a}

のような感じで記述されている部分((\ref{eq:testone})式及び(\ref{eq:testtwo})式の2ヵ所ずつ)を

\sqrt{\mathstrut a}

のように書き換えてみます。

すると… \begin{align} x_1 &= \sqrt{\mathstrut a} + \sqrt{\mathstrut b} \label{eq:testonemathstrut} \cr x_2 &= \sqrt{\mathstrut a_i} + \sqrt{\mathstrut a_j} \label{eq:testtwomathstrut} \end{align} のように表示できます。

smashコマンドを追加してみた。

(\ref{eq:testonemathstrut})式の右辺及び(\ref{eq:testtwomathstrut})式の右辺ともに、平方根の記号の高さが揃いましたが、(\ref{eq:testtwomathstrut})式の右辺については、文字の周囲の隙間が空きすぎているようにも見えます。

そこで、、(\ref{eq:testtwomathstrut})式の右辺にのみsmashコマンドを追加で使ってみます。

\smash[b]と指定すると深さが0にできて\smash[t]を指定すると高さが0にできるそうです。

そこで、

\sqrt{\mathstrut a_i}

のような感じで記述されている部分(2ヵ所)を

\sqrt{\smash[b]{\mathstrut a_i}}

に変えます。

すると… \begin{align} x_2 &= \sqrt{\smash[b]{\mathstrut a_i}}+\sqrt{\smash[b]{\mathstrut a_j}} \label{eq:testb} \end{align} となって、平方根の記号の高さをいい感じに揃えることができました。$\blacksquare$

スポンサーリンク

まとめ

(\ref{eq:testb})式の添え字の$j$の深さの情報が平方根の記号の高さを決めるために使われてしまっているような動作になっているように見えます。

そこで、\smash[b]を使って明示的に深さを0に指定することで、平方根の記号をいい感じの大きさにできるようなのですが、いい感じの大きさにできる理由等の詳細については調べていません。(´・ω・`)

とりあえずは、平方根の記号の高さをいい感じに揃える方法を見出すことができて良かったです。

この記事は以上です。

リンク

matplotlibで描いた3Dグラフを動画を作って遊んでいるうちに、Python3のProcessPoolExecutorを使うと少し捗ることに気がついた話。🎥 | メインページ | panda大学習帳 | 第三倉庫(仮) | 用語集📒 | 本サイトについて | プライバシーポリシー


スポンサーリンク