[TeX] [LaTeX] LaTeX の数式でイイ感じに惑星記号を使う [mathabx]
2020年12月07日 (月) 18:28
この記事は TeX & LaTeX Advent Calendar 2020 の 7 日目の記事です。 6 日目は kn1cht さんの 学振特別研究員申請のための科研費 LaTeX Tips でした。 8 日目は kyy_writing さんです。
今回のテーマは「このパッケージもスゴイ!」なので、パッケージ紹介をしようと思います。
この記事のタイトルには「惑星記号」とありますが、様々な記号が含まれる mathabx パッケージの紹介と、 それに関する Tips の話なので、惑星科学をやっていない人でも参考になる内容かと思います。 具体的には、標準の LaTeX に含まれていない数学記号を、別のフォントから探して取ってくる手順に関して紹介します。
導入
さて、皆さんは地球質量を数式で表現するために、地球記号🜨を数式中に記述しようとしたことがあろうかと思います。 そこで、🜨を LaTeX に収録されている数学記号から探すと、⊕ (\opuls) を見つけたので、これを使う、という人が多いかと思います。 しかし、\oplus は「理論和」の「二項演算子」の記号なので、「地球」を表す「通常記号」の代用とするにはふさわしくありません。
と、いうことで、探してみると mathabx というパッケージがあって、mathabx パッケージを読み込んだうえで、\Earth とすれば地球記号が出ることがわかります。 さらに、他にも mathabx パッケージには多くの記号が含まれており、標準の記号では足りなかった人に嬉しい内容となっています。
つかってみる
さて、便利なパッケージを見つけたからには、使うしかありません。使ってみましょう。 まず、mathabx を読み込んでいない状態で、適当に数式を組んみましょう。
— えっち 3 (@CareleSmith9) December 7, 2020
美しいオイラーフォントですね。
次に、mathabx を導入して、地球記号を使ってみましょう。
— えっち 3 (@CareleSmith9) December 7, 2020
アレッ! 偏微分の記号の字形が変わってしまいました。mathabx のドキュメントを読むと、mathabx も \partial を定義しているため、そちらの字形に上書きされてしまったようです。これはパッケージの読み込む順序を入れ替えても解決しません。 \partial はオイラーフォントのグリフを使いたいとしたら、一体どうやって解決したら良いのでしょうか。
どうにかしたい
ところで、mathabx は初期の配布が matha, mathb, mathx の 3 シリーズからなるものだったことから由来して名付けられました。 そして、mathabx のドキュメントを読むと、惑星記号の横に “mathb”、偏微分記号の周辺に “matha” とあるのが確認できます。 そう、すなわち惑星記号と偏微分記号は別シリーズのフォントに由来するのです。ということはすなわち、 mathabx パッケージを読み込むに際して、惑星記号を含む mathb シリーズだけを読み込ませれば問題は解決しそうです。
そして、実は mathabx パッケージにはそれを実現させるための機能があります。 それは、パッケージオプションに、読み込ませたいシリーズを記述することです。 例えば、\usepackage[mathb]{mathabx} とすれば、mathb シリーズだけを読み込みます。
— えっち 3 (@CareleSmith9) December 7, 2020
はい、mathb オプション付きで mathabx パッケージを読み込むことで、問題が解決しました! めでたしめでたし。
もっと mathabx
しかし、このパッケージオプションによる解決方法では、「利用したい文字と、上書きされたくない文字が、 同じシリーズに含まれている」というときには解決策に使えません。
さらに、mathabx のドキュメントを読みすすめると、意味深な文字列に遭遇します。
意味深な文字列。 pic.twitter.com/0pHZWLTuk4
— えっち 3 (@CareleSmith9) December 7, 2020
本文がセリフかサンセリフかに合わせて、惑星記号の字形が選べるようです (なんか黎ミングラデーションファミリーみを感じる)。 せっかく用意されているんだから使わない手はありません。 しかし、標準ではコマンド一発でこれらの文字を出す方法はないようです。
ということで、mathabx パッケージを読み込まずに、mathabx パッケージで配布されているグリフを利用する方法をとります。 この方法ならば、必要な文字だけを利用可能にすれば、上書きされたくない文字は上書きされませんし、 標準で出力するためのコマンドが用意されていないものも出力できます。
その方法は、マクロツイーター に譲る……、のは無責任なので、すこし説明をします。ただし、内容はこれまでと比して一段とレベルアップします。 前提知識が多くなるので、前掲の記事や、美文書によって、ある程度 LaTeX のフォントの扱いについて調べるのをおすすめします。 また、texdoc fntguid として表示される 文書 の内容も多用します。
試しに、\earth でセリフが最も強い地球記号が出るようにしましょう。
まず、mathabx のドキュメントに見える、mathastrotest10 ですが、これは TFM 名です。 LaTeX では、フォントを TFM 名ではなく、ファミリー名で管理するので、適当にファミリー名をつけます。 適当に ast とでもしておきましょう。エンコーディングは、通常なエンコーディングじゃないので U でいいと思います (よくわかってない)。
\DeclareFontFamily{U}{ast}{}
次に、シリーズやウェイトといった属性値から、TFM への対応を書く必要があります。 ウェイトやシリーズはひとつしか用意しないので、それぞれ m, n でよいでしょう。 ちなみに、<-> はオプティカルサイズなときにいろいろ変化するのですが、オプティカルサイズなものを使わない限り、 第 5 引数のTFM 名の前に <-> をいつもつけるとおぼえておけばよいです。
\DeclareFontShape{U}{ast}{m}{n}{<->mathastrotest10}{}
次に、数式で ast シリーズのフォントを使えるように、シンボルフォントを定義します。 astro という名前のシンボルフォントを定義しましょう。そして、astro というシンボルフォントは U/ast/m/n のフォントを参照するように設定します。
\DeclareSymbolFont{astro}{U}{ast}{m}{n}
あとは、地球記号を出力するように、\earth を定義するだけです。 出したい地球記号は、'343 の位置にあることが、ドキュメントからわかります。
\DeclareMathSymbol{\earth}\mathord{astro}{'343}
さて、試してみましょう。
— えっち 3 (@CareleSmith9) December 7, 2020
うまくいってますね。
ということで、mathabx パッケージの紹介と、mathabx パッケージによる期待しない結果の回避法、 および、数式フォントの追加法でした。