情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

LaTeXで謎のエラーが出たけれど原因の行番号(.tex)がよくわからないときは

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行だけにすることで、無事コンパイルが成功するようになりました。

コメント(0)

新しいコメントを投稿




  • カテゴリ ナビ
  • 著者紹介

    ブログが趣味で、 月間1,000万PV を達成しました。

    自分が困ったことをブログに書けば、次に困る人の参考になって、みんながみんな同じ苦労をせずに済む、というのが原点です。

    最近の関心は、スマホやパソコンに詳しくない人の行動や思考、 そしてそんな人を手助けする方法や枠組み。 また、それに関連するような、"身近な"セキュリティ。

    ※SNS(特にTwitter)でシェアされた記事は、内容の追加・更新を行っています。 必ず、ではありませんが、気に入った記事は積極的にシェアしてみてください。

    RSS | Facebook | Twitter | About