MathJax の TeX で割り算の筆算を表示する

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/232067/2f4cf8c5-2de9-d8d3-45bf-35cfcba659ec.png)

Qiita 等では MathJax によって数式を表示できます。

TeX で割り算の筆算を表示する従来の方法として `array` 環境を使われることがありますが、MathJax では `array` 環境で `\cline` が使えない等の理由で扱いにくかったため、他の方法で表示することにします。

参考「[MathJax | Beautiful math in all browsers.](https://www.mathjax.org/)」
参考「[TeX Commands available in MathJax](https://onemathematicalcat.org//MathJaxDocumentation/TeXSyntax.htm)」
参考「[Supported TeX/LaTeX commands — MathJax 3.2 documentation](https://docs.mathjax.org/en/latest/input/tex/macros/index.html)」

# 1. 筆算の除算記号

MathJax では `enclose` 拡張機能を用いて `\enclose{longdiv}` で筆算の除算記号を表示可能です。

例:

```tex
\require{enclose}
12 \enclose{longdiv}{345}
```

```math
\require{enclose}
12 \enclose{longdiv}{345}
```

参考「[enclose — MathJax 3.2 documentation](https://docs.mathjax.org/en/latest/input/tex/extensions/enclose.html)」

# 2. 割り算の筆算の記述例

## 2.1. 正の整数の割り算

### 2.1.1. 単純に記述する場合

除算記号は `\enclose{longdiv}`、横線を `\underline` で記述することで筆算を表示することができます。

各行の数字は右に多く出現するため右寄せとし、空白部分は `\phantom` で作ります。

例:

```tex
\require{enclose}
\begin{align}
	28 \\
	12 \enclose{longdiv}{345} \\
	\underline{24} \phantom{0} \\
	105 \\
	\underline{96} \\
	9
\end{align}
```

```math
\require{enclose}
\begin{align}
	28 \\
	12 \enclose{longdiv}{345} \\
	\underline{24} \phantom{0} \\
	105 \\
	\underline{96} \\
	9
\end{align}
```

### 2.1.2. ズレを修正する場合

MathJax では右寄せした場合に `\underline` や `\enclose` 等を使用すると**ズレが発生する**ことがあります。

`\rlap` を用いて除算記号や横線を重ねて表示することでこのズレを修正できます。

(`\llap` でも数のズレは修正できますが、その場合は除算記号や横線でズレが発生します。)

(厳密にはこの方法でも除算記号と被除数の相対的な位置でズレが発生します。)

例:

```tex
\require{enclose}
\begin{align}
	28 \\
	12 \rlap{\enclose{longdiv}{\phantom{ 345 }}} \hspace{0.5em} 345 \\
	\rlap{\underline{\phantom{ 24 }}} 24 \phantom{0} \\
	105 \\
	\rlap{\underline{\phantom{ 96 }}} 96 \\
	9
\end{align}
```

```math
\require{enclose}
\begin{align}
	28 \\
	12 \rlap{\enclose{longdiv}{\phantom{ 345 }}} \hspace{0.5em} 345 \\
	\rlap{\underline{\phantom{ 24 }}} 24 \phantom{0} \\
	105 \\
	\rlap{\underline{\phantom{ 96 }}} 96 \\
	9
\end{align}
```

## 2.2. 多項式の割り算

### 2.2.1. 単純に記述する場合

除算記号は `\enclose{longdiv}`、横線を `\underline` で記述することで筆算を表示することができます。

各行の数式の文字は右に多く出現するため右寄せとし、空白部分は `\phantom` で作ります。

例:

```tex
\require{enclose}
\begin{align}
	4 x^\phantom{3} - 3 \phantom{x^2} \phantom{{} + 00 x + 0} \\
	x^2 + 2 x + 3 \enclose{longdiv}{ 4 x^3 + 5 x^2 } \phantom{{} + 00 x + 0} \\
	\underline{ 4 x^3 + 8 x^2 + 12 x } \phantom{{} + 0} \\
	{} - 3 x^2 - 12 x \phantom{{} + 0} \\
	\underline{ {} - 3 x^2 - \phantom{0}6 x - 9 } \\
	{} - \phantom{0}6 x + 9
\end{align}
```

```math
\require{enclose}
\begin{align}
	4 x^\phantom{3} - 3 \phantom{x^2} \phantom{{} + 00 x + 0} \\
	x^2 + 2 x + 3 \enclose{longdiv}{ 4 x^3 + 5 x^2 } \phantom{{} + 00 x + 0} \\
	\underline{ 4 x^3 + 8 x^2 + 12 x } \phantom{{} + 0} \\
	{} - 3 x^2 - 12 x \phantom{{} + 0} \\
	\underline{ {} - 3 x^2 - \phantom{0}6 x - 9 } \\
	{} - \phantom{0}6 x + 9
\end{align}
```

見やすくするために数式の項の間に `\hspace` 等の空白を入れることもできます。

例:

```tex
\require{enclose}
\begin{align}
	\hspace{0.5em} 4 x^\phantom{3} \hspace{0.5em} - 3 \phantom{x^2} \hspace{0.5em} \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	x^2 \hspace{0.5em} + 2 x \hspace{0.5em} + 3 \hspace{0.5em} \enclose{longdiv}{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 5 x^2 \hspace{0.5em} } \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	\underline{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 8 x^2 \hspace{0.5em} + 12 x \hspace{0.5em} } \phantom{{} + 0 \hspace{0.5em}} \\
	\hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - 12 x \hspace{0.5em} \phantom{{} + 0 \hspace{0.5em}} \\
	\underline{ \hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - \phantom{0}6 x \hspace{0.5em} - 9 \hspace{0.5em} } \\
	\hspace{0.5em} {} - \phantom{0}6 x \hspace{0.5em} + 9 \hspace{0.5em}
\end{align}
```

```math
\require{enclose}
\begin{align}
	\hspace{0.5em} 4 x^\phantom{3} \hspace{0.5em} - 3 \phantom{x^2} \hspace{0.5em} \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	x^2 \hspace{0.5em} + 2 x \hspace{0.5em} + 3 \hspace{0.5em} \enclose{longdiv}{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 5 x^2 \hspace{0.5em} } \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	\underline{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 8 x^2 \hspace{0.5em} + 12 x \hspace{0.5em} } \phantom{{} + 0 \hspace{0.5em}} \\
	\hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - 12 x \hspace{0.5em} \phantom{{} + 0 \hspace{0.5em}} \\
	\underline{ \hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - \phantom{0}6 x \hspace{0.5em} - 9 \hspace{0.5em} } \\
	\hspace{0.5em} {} - \phantom{0}6 x \hspace{0.5em} + 9 \hspace{0.5em}
\end{align}
```

### 2.2.2. ズレを修正する場合

前述の通り、MathJax では右寄せした場合に `\underline` や `\enclose` 等を使用すると**ズレが発生する**ことがあるため、`\rlap` を用いて除算記号や横線を重ねて表示してこのズレを修正します。

(`\llap` でも数のズレは修正できますが、その場合は除算記号や横線でズレが発生します。)

(厳密にはこの方法でも除算記号と被除数の相対的な位置でズレが発生します。)

例:

```tex
\require{enclose}
\begin{align}
	4 x^\phantom{3} - 3 \phantom{x^2} \phantom{{} + 00 x + 0} \\
	x^2 + 2 x + 3 \rlap{\enclose{longdiv}{\phantom{ 4 x^3 + 5 x^2 }}} \hspace{0.5em} 4 x^3 + 5 x^2 \phantom{{} + 00 x + 0} \\
	\rlap{\underline{\phantom{ 4 x^3 + 8 x^2 + 12 x }}} 4 x^3 + 8 x^2 + 12 x \phantom{{} + 0} \\
	{} - 3 x^2 - 12 x \phantom{{} + 0} \\
	\rlap{\underline{\phantom{ {} - 3 x^2 - \phantom{0}6 x - 9 }}} {} - 3 x^2 - \phantom{0}6 x - 9 \\
	{} - \phantom{0}6 x + 9
\end{align}
```

```math
\require{enclose}
\begin{align}
	4 x^\phantom{3} - 3 \phantom{x^2} \phantom{{} + 00 x + 0} \\
	x^2 + 2 x + 3 \rlap{\enclose{longdiv}{\phantom{ 4 x^3 + 5 x^2 }}} \hspace{0.5em} 4 x^3 + 5 x^2 \phantom{{} + 00 x + 0} \\
	\rlap{\underline{\phantom{ 4 x^3 + 8 x^2 + 12 x }}} 4 x^3 + 8 x^2 + 12 x \phantom{{} + 0} \\
	{} - 3 x^2 - 12 x \phantom{{} + 0} \\
	\rlap{\underline{\phantom{ {} - 3 x^2 - \phantom{0}6 x - 9 }}} {} - 3 x^2 - \phantom{0}6 x - 9 \\
	{} - \phantom{0}6 x + 9
\end{align}
```

見やすくするために数式の項の間に `\hspace` 等の空白を入れることもできます。

例:

```tex
\require{enclose}
\begin{align}
	\hspace{0.5em} 4 x^\phantom{3} \hspace{0.5em} - 3 \phantom{x^2} \hspace{0.5em} \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	x^2 \hspace{0.5em} + 2 x \hspace{0.5em} + 3 \hspace{0.5em} \rlap{\enclose{longdiv}{\phantom{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 5 x^2 \hspace{0.5em} }}} \hspace{0.5em} \hspace{0.5em} 4 x^3 \hspace{0.5em} + 5 x^2 \hspace{0.5em} \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	\rlap{\underline{\phantom{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 8 x^2 \hspace{0.5em} + 12 x \hspace{0.5em} }}} \hspace{0.5em} 4 x^3 \hspace{0.5em} + 8 x^2 \hspace{0.5em} + 12 x \hspace{0.5em} \phantom{{} + 0 \hspace{0.5em}} \\
	\hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - 12 x \hspace{0.5em} \phantom{{} + 0 \hspace{0.5em}} \\
	\rlap{\underline{\phantom{ \hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - \phantom{0}6 x \hspace{0.5em} - 9 \hspace{0.5em} }}} \hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - \phantom{0}6 x \hspace{0.5em} - 9 \hspace{0.5em} \\
	\hspace{0.5em} {} - \phantom{0}6 x \hspace{0.5em} + 9 \hspace{0.5em}
\end{align}
```

```math
\require{enclose}
\begin{align}
	\hspace{0.5em} 4 x^\phantom{3} \hspace{0.5em} - 3 \phantom{x^2} \hspace{0.5em} \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	x^2 \hspace{0.5em} + 2 x \hspace{0.5em} + 3 \hspace{0.5em} \rlap{\enclose{longdiv}{\phantom{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 5 x^2 \hspace{0.5em} }}} \hspace{0.5em} \hspace{0.5em} 4 x^3 \hspace{0.5em} + 5 x^2 \hspace{0.5em} \phantom{{} + 00 x \hspace{0.5em} + 0 \hspace{0.5em}} \\
	\rlap{\underline{\phantom{ \hspace{0.5em} 4 x^3 \hspace{0.5em} + 8 x^2 \hspace{0.5em} + 12 x \hspace{0.5em} }}} \hspace{0.5em} 4 x^3 \hspace{0.5em} + 8 x^2 \hspace{0.5em} + 12 x \hspace{0.5em} \phantom{{} + 0 \hspace{0.5em}} \\
	\hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - 12 x \hspace{0.5em} \phantom{{} + 0 \hspace{0.5em}} \\
	\rlap{\underline{\phantom{ \hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - \phantom{0}6 x \hspace{0.5em} - 9 \hspace{0.5em} }}} \hspace{0.5em} {} - 3 x^2 \hspace{0.5em} - \phantom{0}6 x \hspace{0.5em} - 9 \hspace{0.5em} \\
	\hspace{0.5em} {} - \phantom{0}6 x \hspace{0.5em} + 9 \hspace{0.5em}
\end{align}
```