自分で書いた LaTeX コードが "良い" 書き方をしているのか確認する方法はある？


## 経緯

LaTeX のコードを書くとき、ある種の「べからず集」が存在します。たとえば以下の wiki ページやブログ記事にいくつか例が挙がっています。

  * [古い情報](https://texwiki.texjp.org/?%E5%8F%A4%E3%81%84%E6%83%85%E5%A0%B1#nc0a5e50) \-- TeX Wiki
  * [表記の哲学](https://texwiki.texjp.org/?%E8%A1%A8%E8%A8%98%E3%81%AE%E5%93%B2%E5%AD%A6) \-- TeX Wiki
  * [使ってはいけない LaTeX のコマンド・パッケージ・作法](http://ichiro-maruta.blogspot.jp/2013/03/latex.html) \-- /* Ichiro Murata Homepage */ (2013年3月13日投稿)
  * [卒論/修論/博論のためのモダンな LaTeX の書き方](http://webmem.hatenablog.com/entry/how-to-write-a-modern-latex-for-academic-papers) \-- 情報系大学院生のWebメモ (2015年11月20日投稿)

このような "悪い" 書き方は、いくつかに分けられると思います。

  * LaTeX と TeX を不用意に混同している。
  * 単に古い書き方である (obsolete/deprecated である)。
  * 古い書き方とまでは言わないが、出力が _(ある意味において)_ 美しくない。

この類型のうち、3つ目はいささか主観的な基準ですが、1つ目と2つ目については "悪い" と言える基準になっていると思います。

そのため、私自身 LaTeX のコードを読み書きしているときは、それがなるべく "良い" 書き方となるよう調べながら書いているつもりですが、正直それが本当に
"良い" のかに自信が持てません。上に書いた類型に照らし合わせると、3つ目はともかくとして、1つ目や2つ目に陥っていないか心配になります。

なぜ心配になるのか考えたところ、他のプログラミング言語でコードを書くときと違い、公式のリファレンスのようなものを知らないからではないか、と思い至りました。今時の言語のリファレンスには「昔こういう関数があったけど、バージョン
XXX からは deprecated だよ」という風な記述がありますが、LaTeX
に関してはそもそも公式のリファレンスが存在しているのかどうかも知りません。

そこで、質問です。

## 質問

  1. 自分が書いた LaTeX のコードが古くないか確認できる手段はありますか？ 
    * たとえば TeX Wiki の[「古い情報」](https://texwiki.texjp.org/?%E5%8F%A4%E3%81%84%E6%83%85%E5%A0%B1#nc0a5e50)ページのように、参考となる資料はありませんか？ より公式に近い資料であると、より嬉しいです。
    * あるいは [nag](https://ctan.org/tex-archive/macros/latex/contrib/nag) や [onlyamsmath](https://ctan.org/tex-archive/macros/latex/contrib/onlyamsmath) のように、自動的にある程度確認してくれる仕組みはありませんか？
  2. 「美しさ」の問題についても、ある程度よく知られた基準について知ることができる資料はありませんか？ かなり広く知られた基準は存在しないということであれば、そのように回答して頂ければと思います。

※ この質問では、LaTeX のコードを書くときの問題にフォーカスを当てています。使用するツール (dvipdfmx など)
に関しても「古い」「新しい」があるかと思いますが、ひとまずは気にしないこととします。この質問では、たとえば「このマクロは古いのかも……」「この文書クラスは古いのかも……」といった疑問に確証を持って答えたい、という主旨だとご理解ください。




## “公式”にobsoleteなパッケージの情報

「公式にobsoleteなパッケージの一覧」に非常に近いものとして、[「CTANのobsoleteカテゴリ」](https://ctan.org/topic/obsolete)があります。ここに挙げられたものの大半は「作者によってobsoleteと宣言されたもの」、つまり“公式”の情報といえます。（残りは“大昔のもの”で多分誰も使っていない。）

## LaTeX本体には“公式”にdeprecatedな機能は無い

LaTeX2e本体および標準クラスの範囲に限ると、（LaTeX2eの歴史の途中で）deprecatedとされた機能はありません。eqnarray環境については、確かに標準クラスのeqnarrayは醜い出力になるので多くの人に嫌われていますが、そもそも「eqnarrayの体裁は各文書クラスが定めるべきもの」であるため、一般的に「eqnarrayが醜い」ともいえないはずです。

ただし、「LaTeX
2.09の機能で、LaTeX2eにおいて廃止されたが、（パッケージレベルの）互換性の目的で残っている」ものは存在します。その最たるものが、標準クラスのいわゆる「二文字フォント命令（`\bf`や`\it`など）」です。他にも、`\samepage`命令が“実質的にdeprecated”になっています（[usrguide](http://mirror.ctan.org/macros/latex/doc/usrguide.pdf)の3.18節参照）。もちろん、これらは「LaTeX2eでは最初から存在しない扱い」のものなので、真っ当なLaTeX2eの解説の中で登場することはないはずです。

## LaTeX中でTeXを使うのは“悪く”はない

「LaTeX文書中でTeX言語のコードを直接記述する」ことの是非は、完全に個人のポリシーの問題だと、私は考えています。従って、ポリシーによっては、それは「全く“悪い”書き方ではない」といえるでしょう。

もちろん、「TeX言語を全く知らないのにTeX言語のコードを作ろうとする」のは典型的な「コピペプログラミング」の一種で、これは批判されることが多いでしょう。




## “公式”にobsoleteなパッケージの情報

「公式にobsoleteなパッケージの一覧」に非常に近いものとして、[「CTANのobsoleteカテゴリ」](https://ctan.org/topic/obsolete)があります。ここに挙げられたものの大半は「作者によってobsoleteと宣言されたもの」、つまり“公式”の情報といえます。（残りは“大昔のもの”で多分誰も使っていない。）

## LaTeX本体には“公式”にdeprecatedな機能は無い

LaTeX2e本体および標準クラスの範囲に限ると、（LaTeX2eの歴史の途中で）deprecatedとされた機能はありません。eqnarray環境については、確かに標準クラスのeqnarrayは醜い出力になるので多くの人に嫌われていますが、そもそも「eqnarrayの体裁は各文書クラスが定めるべきもの」であるため、一般的に「eqnarrayが醜い」ともいえないはずです。

ただし、「LaTeX
2.09の機能で、LaTeX2eにおいて廃止されたが、（パッケージレベルの）互換性の目的で残っている」ものは存在します。その最たるものが、標準クラスのいわゆる「二文字フォント命令（`\bf`や`\it`など）」です。他にも、`\samepage`命令が“実質的にdeprecated”になっています（[usrguide](http://mirror.ctan.org/macros/latex/doc/usrguide.pdf)の3.18節参照）。もちろん、これらは「LaTeX2eでは最初から存在しない扱い」のものなので、真っ当なLaTeX2eの解説の中で登場することはないはずです。

## LaTeX中でTeXを使うのは“悪く”はない

「LaTeX文書中でTeX言語のコードを直接記述する」ことの是非は、完全に個人のポリシーの問題だと、私は考えています。従って、ポリシーによっては、それは「全く“悪い”書き方ではない」といえるでしょう。

もちろん、「TeX言語を全く知らないのにTeX言語のコードを作ろうとする」のは典型的な「コピペプログラミング」の一種で、これは批判されることが多いでしょう。

