スポンサーリンク
LaTeXを書いていて、「LaTeX Error: Command \definition already defined.」というエラーが出ました。ただ、エラーの行が.texではなく.clsで示されたため、.texのどこが悪いのかすぐにはわかりませんでした。というわけでメモ。
スポンサーリンク
エラーの内容
今回のエラー内容はこちら
LaTeX Error: Command \definition already defined.
このエラーメッセージそのままでは情報が得られず、「\definition」という文字が.texファイルになかったので、困ってしまいました。
二分探索で原因を絞る
このようなさっぱりエラーの原因行が分からない場合は、深く考えすぎず調べすぎず、とりあえず原因となっている行を力業で特定します。
そのときに使えるのが二分探索です。
まず、きちんとバックアップをとってから、.texファイルの自分が書いた部分のうち、後半半分くらいを削除します。そして、コンパイルしてみます(あまり適当に分割しすぎず、エラーの原因が無ければちゃんと動くはず、という程度に分割すること)。
ここでもしエラーが出なかったら、エラーは削除した後ろ半分にあるはずです。そこで、今度は後半部分にターゲットを絞って、さらにその後半部分の半分だけ戻して再びコンパイルします。
最初にもしエラーが出たとしたら、この場合は少なくとも前半にエラーの原因がある、と考えられるので、次は前半部分にターゲットを絞って、前半部分の半分をさらに取り除いて再びコンパイルします。
必ず、とは言えませんが、こんな作業を繰り返すことで、あまり悩むことなくエラーの原因候補を見つけ出すことができます。
エラーがたくさん有る場合は、エラー数の減少をヒントにします。また、全く別のエラーが現れたら、それは領域を切り分ける場所が悪かった可能性が高いので、全体として必要な部分を消してしまっていないか、環境を2分割していないかなどを確認して、再度残す場所を調節してみてください。また、怪しさに応じて上手く分割場所を変えるとすぐ見つかるようになります。
原因行特定!
こんな考え方を使うと、すぐ問題の行が見つかりました。
\newdef{definition}{Definition}
この行でした。「\newdef」についてはあまり情報が見つからないのですが、この\newdefの行を複数書いてしまっていたのが原因だったようです(最初に「\」付きで「\definition」で検索してしまったのが悪かった)。
というわけで、\newdefの行を1行だけにすることで、無事コンパイルが成功するようになりました。
スポンサーリンク
スポンサーリンク