月別アーカイブ: 2016年5月

\mathfrak と打つのがだるい

数学の一部の分野では、フラクトゥールが多用される。数式中でフラクトゥールな文字をLaTeXで書く際は \mathfrak{a} とか書くわけだが、たくさん出てくると入力するのがだるい。

短い名前をつける

幸い、LaTeXにはマクロ機能があるので、 \mathfrak のコマンド名が長いと思ったら、短い名前を与えてやれば良い。

\newcommand\mf{\mathfrak}
\mf{a} % → \mathfrak{a} になる
\mf a % → 上に同じ。コマンドの引数が1文字の場合は { } を省略できる

個々の文字にコマンドを割り当てるという手もある。

\newcommand\a{\mathfrak{a}}
\a % → \mathfrak{a} になる…はず

が、しかし、 \a という名前のコマンドは LaTeX によってすでに定義されているようで、 \newcommand でエラーが出る。\renewcommand を使えば定義を上書きできるが、副作用が怖い。

別の名前を試してみよう。

\newcommand\aa{\mathfrak{aa}}
\aa % → \mathfrak{a} になる…はず

が、しかし、\aa という名前のコマンドも LaTeX によってすでに定義されているのであった。

このように、「短い名前をつける」という戦略は「名前の衝突」によって阻まれる可能性がある。\renewcommand や、TeX primitive の \def によって上書きすることはできるが、既存のコマンドの不具合(副作用)を引き起こす可能性は否定できない。

ただ、上書きするスコープを限定してやれば、副作用を引き起こす可能性は小さくできるかもしれない。

{ % スコープを作る
\renewcommand\aa{\mathfrak{a}}
$\aa$ % → \mathfrak{a} になる
} % スコープを閉じる

\aa % → 元の意味(å)になる

\begin{center} % \begin{} 〜 \end{} は一つのスコープになる
\renewcommand\aa{\mathfrak{a}}
$\aa$ % → \mathfrak{a} になる
\end{center}

\aa % → 元の意味(å)になる

毎回 \renewcommand\aa{\mathfrak{a}} と打つのが面倒だったら、これもマクロにすると良いだろう。

\newcommand\UseMathFrak{%
  \renewcommand\aa{\mathfrak{a}}%
}

{ % スコープを作る
\UseMathFrak
$\aa$ % → \mathfrak{a} になる
} % スコープを閉じる

\aa % → 元の意味(å)になる

\begin{center} % \begin{} 〜 \end{} は一つのスコープになる
\UseMathFrak
$\aa$ % → \mathfrak{a} になる
\end{center}

\aa % → 元の意味(å)になる

短い名前をつける(亜種)

普通のコマンド名はバックスラッシュ \ から始まるが、コマンド名として使えるものはこれだけではない。TeX 標準では、半角チルダ ~ を単独で(バックスラッシュなしに)コマンド名として使うことができる。

知っての通り、半角チルダ ~ は標準では「改行しない空白」という意味を持つが、そこは\renewcommand で上書きしてやる。

\renewcommand~{\mathfrak}
~a % → \mathfrak a と等価

既存のコマンドを上書きすると副作用が怖い、とか、元のコマンドが使えなくなる、という場合は、スコープの中で \renewcommand することによって影響範囲を小さくできる。

Unicode の文字を使う

Unicode には、様々な字体の「数式用アルファベット」が用意されている。その中には、フラクトゥールもある。これらを LaTeX ソース中に直接記述すれば、\mathfrak といちいち書かなくても良くなるのではないか。

スクリーンショット 0028-05-26 19.24.28

unicode-math パッケージを使うと、 Unicode の数式用アルファベットで書いたものを LaTeX\mathfrak 等で書いたものと等価にしてくれる。

ただし、 unicode-math パッケージを使うには LuaTeXXeTeX が必要である(e-upTeX や pdfTeXでは使えない)。

注意点として、 unicode-math を使うと Unicode の数式用アルファベットのカテゴリーコードが変わるようだ。unicode-math を使わなければカテゴリーコード11 (letter) だが、unicode-math を使うとカテゴリーコード12 (other) になる。どう影響するかというと、 例えば

𝔞\to𝔟     % ← \to の後に空白がない

と書いた時に、 unicode-math を使わないと「文字 “𝔞”」「コマンド名 “\to𝔟”」として解釈されるのが、 unicode-math を使うと「文字 “𝔞”」「コマンド名 “\to”」「文字 “𝔟”」として解釈されるようになる。普通は前者の挙動の方が望まれるとは思うが。

unicode-math を使わない(使えない)場合、 Unicode の数式用アルファベットのカテゴリーコードを13 (active) にしてマクロを定義するという手がある。

\catcode`𝔞=\active % “𝔞” という文字を単独でコマンド名として使えるようにする
\newcommand{𝔞}{\mathfrak{a}}
𝔞 % → \mathfrak{a} に展開される

いずれにせよ、TeX エンジンの側で Unicode に対応している必要がある。

Unicode の数式用アルファベットを使う方法ならば、「短い名前をつける」方法にあった「コマンド名がかぶる」という問題は存在しない。ただし、デメリットとして、 Unicode の数式用アルファベットを入力するのは面倒くさいということが挙げられる。

結論

エディター側で入力支援的なものが欲しい。