TeX capacity exceeded, sorry [input stack size=10000] と言われた

タイトルのエラーによりコンパイルできなくなり困った。

結局原因は分からずじまいだったが、とりあえず解消はしたので一応備忘録。

# TL;DR

中間生成ファイル（`.dvi`とか`.aux` とか）をとりあえず消す。

# 環境
簡単に言うと WSL 上の Ubuntu で TeXLive インストールして upLaTeX 動かしてるだけです。

- OS: Windows 11 Home 23H2
- CPU: Intel Core i5-13400
- WSL: WS2 (ver.2.2.4.0)
    - Ubuntu 22.04.4 LTS 
    - Linux kernel (WSL): ver.5.15.153.1-2
- LaTeX: e-upTeX 3.141592653-p4.1.1-u1.30-230214-2.6 (utf8.uptex) (TeX Live 2024)

ちなみにコンパイルは Neovim から [VimTeX](https://github.com/lervag/vimtex) で実行しているのだが、`latexmk` を走らせているだけなのでまあ関係ないだろう。

# 経緯
以下の内容は試したけどダメだった内容を念のためメモしているだけなので読まなくて大丈夫です。

卒研の研究ノートを LaTeX でつけており、ある時コンパイルしたら次のようなエラーが発生した。

```
note.tex|41 error| TeX capacity exceeded, sorry [input stack size=10000].
```

ただし、41行目にはただのコマンド定義しかなく、このコマンドも今まで使って問題が発生したことはない。

```latex:note.tex
41 \newcommand{\Natural}{\mathord{\mathbb{N}}}
```

LaTeX のエラーメッセージが大嘘なんてことは日常茶飯事なので、とりあえずログを見る。

```:note.log
! TeX capacity exceeded, sorry [input stack size=10000].
<inserted text> 
                \relax
l.41 ...{\end  }{{2.34}{9}{System Fの性質}{}{}}
                                                   
Here is how much of TeX's memory you used:
 43854 strings out of 474762
 1079387 string characters out of 5758588
 1919338 words of memory out of 5000000
 65768 multiletter control sequences out of 15000+600000
 562099 words of font info for 63 fonts, out of 8000000 for 9000
 934 hyphenation exceptions out of 8191
 10000i,0n,10000p,425b,1025s stack positions out of 10000i,1000n,20000p,200000b,200000s
```

`TeX capacity exceeded, sorry [hoge=fuga]` は TeX が用意したメモリを使い潰したときに発生するエラーで、間違って循環定義などをしてしまったときに出がちである。

ちなみに該当部分の周辺はこんな感じ。`dfn` は `amsthm` パッケージで導入される `\newtheorem` により定義された環境（のラップ）である。

```latex:note.tex
\begin{dfn}
    \label{dfn:beta_reduction_sequence}
    $M_0, \ldots, M_k, \ldots$を項とする．
    \begin{equation*}
        M_0 \to_\beta \cdots \to_\beta M_k \to_\beta \cdots
    \end{equation*}
    が成り立つとき，上の列を$M_0$から始まる$\beta$リダクション列と呼ぶ．
    特に$\beta$正規形$M_n$が含まれるときには，$\beta$リダクション列
    \begin{equation*}
        M_0 \to_\beta \cdots \to_\beta M_n
    \end{equation*}
    は停止するといい，これを$M_0$から$M_n$への$\beta$リダクション列と呼ぶ．\qed
\end{dfn}

\subsection{System Fの性質}

前節までにSystem F（ないしより広範に型付きラムダ計算）の基礎概念を紹介し，体系の定義を終了した．ここからはその性質について述べていく．

\begin{dfn}
    \label{dfn:normalization}
    以下，項$M$はある文脈において型付け可能であるとする．
    \begin{enumerate}
        \item $M$から始まって停止する$\beta$リダクション列が存在するとき，$M$は弱正規化可能であるという．
        \item $M$から始まる任意の$\beta$リダクション列が停止するとき，$M$は強正規化可能であるという．\qed
    \end{enumerate}
\end{dfn}
```

```latex
\newcounter{general}[section]

\theoremstyle{definition}
\newtheorem{dfnn}{定義}[section]

\newenvironment{dfn}[1][]{\begin{dfnn}[#1]}{\end{dfnn}\stepcounter{general}}
```

内容はともかく、気になる点は

- dfn とかの使い方が悪い？
- BibTeX が悪い？

くらいか。

## 失敗した試行

- `dfn` の中身をコメントアウトする
- `\subsection` をコメントアウトする
- 41行目をコメントアウトする
- `\begin{document}` から `\end{document}` まで全部コメントアウトする

とか色々やってみたけど、相変わらず同じエラーが表示されてコンパイルできない。

## 解消

試しに `note.tex` （と BibTeX とか）だけ別ディレクトリに移して改めてコンパイルしたら通った。よって

```sh
rm note.aux  note.bbl  note.blg  note.dvi  note.fdb_latexmk  note.fls  note.log
```

とすれば、原因は何も分からない[^1]ものの目先の作業はとりあえず進められた。

[^1]:何かの拍子によくない状態でコンパイルしてしまい（VimTeX はバッファ保存で自動コンパイルする設定にしている）、それがauxファイルに残り続けたとかそんなところだろうが。

# おわりに

内容がカス過ぎるので、もし原因が分かった方がいれば是非ともご一報ください。