Typstで数式中の文字を斜めにしない方法
はじめに
Typstでは$
で囲むことで数式を入力することができますが,数式中の文字は
いつ立体にするべき?
数学的操作を立体にすべきなのは分野に依らないと思いますが,その他の場合にいつ立体にするべきか?というのは分野や論文雑誌の規則などによって異なります. 例えば先ほど出てきた自然対数の底などの数学定数や
Typstの数式環境において文字を立体にするには以下の3つの方法があり,場合に応じて使い分ける必要があります.
- 数学的操作を表す場合はテキスト演算子を使う
- 2文字以上の文字列の場合は二重引用符
"
で囲む - 1文字の場合は
upright
命令を使う
以下では順に書き方と使い分けが必要な理由を説明していきます.
とりあえず使い方だけ知りたい方向けにまとめのフローチャートを本文を読んでいなくても分かるように書いたのでお急ぎの方はまとめに飛んでください.
Typst 0.12.0で動作確認しています.
本文中に表示されている数式に関して
Zennでは数式のTypst記法は未対応のため本文中に表示されている数式は
数学的操作を表す場合はテキスト演算子を使う
Typstでは正弦函数などよく用いられる函数や記号については立体になる命令があらかじめ多く定義されており,それらは(定義済み)text operatorと呼ばれます.以下ではテキスト演算子と呼びます.
定義済みテキスト演算子は arccos
,arcsin
,arctan
, arg
, cos
, cosh
, cot
, coth
, csc
, csch
, ctg
, deg
, det
, dim
, exp
, gcd
, hom
, id
, im
, inf
, ker
, lg
, lim
, liminf
, limsup
, ln
, log
, max
, min
, mod
, Pr
, sec
, sech
, sin
, sinc
, sinh
, sup
, tan
, tanh
, tg
, tr
です.
この他に厳密にはテキスト演算子ではありませんが[2]dif
とDif
という命令があります.この2つの命令はその名前からも予想されるように微分を表すための記号で,それぞれ$sin$
と書くと$s i n$
と書く必要があり[3],素直に書いていれば立体になる仕様になっています.
上記の定義済みテキスト演算子以外にも自分でテキスト演算子を定義することができます.
例えば
#let span = math.op("span")
と定義することで,$span$
と書くと$op("span")$
と書いても良いです.この場合math.
は省略できます.
math.opのオプションに関する補足
math.opは真偽値を取るlimits
というオプションを持っています.これを用いて
#let colim = math.op("colim", limits: true)
のように書くことができます.
limits
は数式のみを独立した行で表示するディスプレイモードで上付き添字と下付き添字が表示される位置を指定するためのオプションです. true
を指定すると上付き添字と下付き添字が演算子の上下に表示されます.
$ colim^u_d $
と書くと
のようになります.
false
を指定すると上付き添字と下付き添字が以下のようにテキスト演算子の右に表示されます.デフォルトは
false
です. limits
の意味は添字をlim
のように表示するのかどうかということだと思います.
"
で囲む
2文字以上の文字列の場合は二重引用符2文字以上の文字列を二重引用符"
で囲むことで立体にすることができます.
$D_"KL"$
と書くと
節の始めに強調したように1文字の場合は立体になりません.
試しに $k_"B"$
と書いてみましょう[5].下付き添字B
が立体になるように二重引用符で囲んで
なぜこのようになるのでしょうか?詳しい解説は見つけられていませんが,Typstの公式ドキュメントのVariablesの項目には
In math, single letters are always displayed as is.
と記載されています. 簡単に訳すと,数式環境では1文字は常にそのまま表示されるということを述べていると思います.
この説明だけでは今回の挙動の説明になっているとは思いませんが,とにかく1文字は特別扱いされていて2文字以上とは異なる処理をされていることが分かります.
文字数の違いで挙動が異なるのはTypstで数式を書いたときにすぐに分かります.例えば適当に$xy$
と書いてみるとerror: unknown variable: xy
と出てコンパイルに失敗します. これを$x y$
とするとコンパイルが通り,error: unknown variable: x
(もしくはerror: unknown variable: y
)とはならないことを意味しています.
2文字以上の文字列の取り扱いに関してはTypstの公式ドキュメントのVariablesの項目で
Multiple letters, however, are interpreted as variables and functions.
と述べられており,2文字以上の文字列は変数や函数として解釈されることが分かります. 逆の言い方をすると1文字は変数や函数として解釈されないということです. このことから前述の文字数で挙動が異なることは理解できると思います.
1文字の変数の参照方法
1文字を数式中に書いた場合,常に文字としてそのまま表示されると述べましたが,それでは1文字で定義した変数や函数はどのように参照すればよいでしょうか?
以下のように名前の前に#
を付けて#x
のようにすると呼び出しになり,変数の値が代入されます.
一部のプログラミング言語において文字を表すChar
型と文字列を表すString
型が区別されているように,Typstでも1文字と複数の文字から成る文字列が区別されていると考えると理解しやすいかもしれません.
それでは1文字を立体にするにはどうすればよいでしょうか?
そのためにupright
命令を用います.次節で説明します.
upright
命令を使う
1文字の場合は1文字の場合でも立体にするにはupright
命令を使います. $k_upright(B)$
と書くと
2文字以上の場合にupright
は使えないのかというと使えます. しかし$D_upright(KL)$
と書くと前節で説明した通りerror: unknown variable: KL
とコンパイルエラーになるため,$D_upright(K L)$
あるいは$D_upright("KL")$
と書く必要があります. 前者は意味を考えるとスペースを入れるのは不自然です.後者は$D_"KL"$
と書けば良いことは既に説明した通りですので冗長な書き方になっています.このように2文字以上の文字列にupright
命令を使うことはあまり意味がありません.
まとめ
Typstで入力した文字が自動的に斜体になる数式環境で文字をまっすぐ(立体)にする方法について説明しました. 使い分けをフローチャートの形にまとめると以下のようになります[6].
適切な命令を使い分けて素敵な美文書を作成しましょう.
[補足1]
より正確には「テキスト演算子として定義済みか?」ということです.ここでは本文を読まずに見に来た方向けの分かりやすい表現としたため例外がいくつかあります.
当然ですが有名かどうかは主観的なもので,有名だと思われるが定義されていない例として本文中に出てきた線形包を表すspan
や留数を表すres
があります. 逆に,分野や慣習の違いだと思いますが私は見たことがないものも定義されています.
また,大文字を含むテキスト演算子はほとんど定義されていませんが,例外として確率Pr
と物質微分Dif
が定義されています.
テキスト演算子や定義済みテキスト演算子一覧については本文の数学的操作を表す場合はテキスト演算子を使うやTypst公式ドキュメントの定義済みテキスト演算子一覧を参照してください.
テキスト演算子は要らないのでは?と思ったあなたへ
1文字ならupright
,2文字以上なら"sin"
のように二重引用符で囲めば良いと思うと以下のフローチャートのようになりテキスト演算子は不要と思うかもしれません.
実はテキスト演算子には立体にする以外の効果があります.以下の画像を見てください.
テキスト演算子を使わず二重引用符で囲んだ場合はその後に続く変数との間が詰まりすぎたり空きすぎたりしていることが分かります.また,スペースの有無によって表示される空白の大きさが変わっていることも分かります.
math.op
を使った場合についても確認してみましょう.
math.op
を使ってres
を定義すると定義済みのsin
と同じ大きさの空白が入っていることが分かります. また,math.op
を使った場合はその後に続く変数との間のスペースの有無に表示される空白の大きさが影響を受けていないことも分かります.ついでにupright
で無理やり定義した場合についても載せています.間が詰まりすぎていることが分かります.
1文字の場合はテキスト演算子を使わなくて良いのか?
数学的操作を表す場合は使った方が良いです.1文字の場合はop(upright(B))
という書き方になります. 以下のように違いが確認できます.
フローチャートが多少複雑化することと使うことはあまりなさそうなことから省略しました.
真実(?)が知りたい方向けに作成した完全版のフローチャートは以下のようになります.
-
正式なタイトルはSYMBOLS, UNITS, NOMENCLATURE AND FUNDAMENTAL CONSTANTS IN PHYSICSです. ↩︎
-
後に続く変数との間に空きが入らないためテキスト演算子とは異なる処理がなされているようです. ↩︎
-
italic(sin)
でも可です. ↩︎ -
はKullback-Leibler情報量です. ↩︎D_\mathrm{KL} -
はBoltzmann定数です. ↩︎k_\mathrm{B}
Discussion