41230


## 経緯

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 など)
に関しても「古い」「新しい」があるかと思いますが、ひとまずは気にしないこととします。この質問では、たとえば「このマクロは古いのかも……」「この文書クラスは古いのかも……」といった疑問に確証を持って答えたい、という主旨だとご理解ください。


CC BY-SA 3.0
2018-01-25T13:02:39.993
41211
2018-01-27T01:55:56.453
2018-01-26T16:57:40.387
19110
19110
question
latex
自分で書いた LaTeX コードが "良い" 書き方をしているのか確認する方法はある？


日ごろから行儀がいい書き方をしていない自覚があるので、きちんとした回答ができる立場ではないですが、自分の考えをコメントします。

「自分が書いた LaTeX
のコードが古くないか確認できる手段」については、LaTeX（LaTeX2e）そのものの記法はあまり変化がないので、きちんとした書籍やドキュメントで示されている書き方をすればよい（≒
Webの検索結果で見つけた書き方はしない）と思っています。  
クラスやパッケージについては、[CTAN](https://ctan.org/)で関連項目を検索し、より直近にメンテナンスされているものを探してドキュメントをあたる（利用上の注意点だけでなく推奨される代替手法が記載されている場合もあります）という方法しか思いつかないです。ただし、新しいものが正義というわけでもない（特にクラスについて）ので、話はちょっとややこしいです。

「美しさ」の問題は、LaTeXではなく「組版の基準」を問うことになるので、これはこれで輪をかけて話がややこしいです。

* * *

ここからは、いっそう個人的な意見であり、おそらく議論を呼ぶと思います。

[l2tabu](https://ctan.org/pkg/l2tabu)（翻訳されている「LaTeXべからず集」のオリジナル）にあるような内容は、あくまでも「ひとつの見解」と理解するのがいいと思います。
**どのような立場でLaTeX文書を作成するか** によって意識すべきことがけっこう変わると思うからです。

  1. PDFを作って終わりというケース
  2. 主に自分が継続的にソースとPDFをメンテナンスしたいケース
  3. 自分が編集したソースを他人がPDFにするケース

l2tabuが意味をもつのは、主に2のケースだと考えてます。このケースでは、l2tabuを参考にするほか、使うパッケージやコマンドのドキュメントを読む、もしくは、上述したように「CTANでより新しい手段を探す」ことになると思います。

一方、1や3の場合は、なんらかの意味で「良いLaTeXソースの書き方」を一概に推奨できないのが実情だと思います。

1については、望み通りの結果を得る方法が見つかったなら、それがl2tabuで推奨されないやり方であるという理由だけで問題視する必要はあまりないと思います。望み通りの結果が組版として適切かどうかという問題（2つめの質問に関する部分）はありますが、これは上述したとおり、LaTeXを適切に書くかどうかとは別な問題に思えます（たとえば、l2tabuのうちeqnarrayの話は組版として適切な結果が得られない状況が多いから使うなという話ですが、ひょっとしたら個人的にamsmathが使えなかったりalignではうまくいかなかったりする事情もあるかもしれず、それでも絶対に使うなというのも言い過ぎかなと思っています）。

3は、出版社とか学会のスタイルを使うケースを念頭においてます。この場合には、l2tabuなどではなく、当該の他人の流儀に従うことになるはずで、そこでは必ずしも新しいものやl2tabuなどで推奨されているクラスやパッケージが使われているとは限らないでしょう。たとえばgeometryやfancyhdr、jsclassesなどはあえて使わないことが少なくないと思いますし、書き手に対しても、verbatim環境は絶対に使わないでほしいといった個別の要請があると思います。


CC BY-SA 3.0
2018-01-26T01:41:02.463
41216
2018-01-27T01:55:56.453
2018-01-27T01:55:56.453
27053
27053
41211
answer


## “公式”に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言語のコードを作ろうとする」のは典型的な「コピペプログラミング」の一種で、これは批判されることが多いでしょう。


CC BY-SA 3.0
2018-01-26T13:45:56.300
41230
2018-01-26T13:45:56.300
27076
41211
answer