本文中で参照されている式のみに式番号を付与したい

本文中で参照されている式のみに式番号を付与したい

- Masatoshi TSUCHIYA の投稿
返信数: 3
修論予備審査で、本文中で「式 (#.##) のように○○する」等の形で参照している式だけに式番号を付与すべき派と、全ての式に式番号を付与すべき(複数式を一度に書き下している等の自明な場合に限って省略すべき)派の戦いが発生しました。

前者をとても強力に主張されている教員がいらっしゃるので、そのように対応せざるを得ないのですが、折角 LaTeX を使っているのでマクロで対応したいと思って実装しました。

https://gist.github.com/tsuchm/5260a4ef942c29178ee9ccefcc755176

しかし、hyperref パッケージと共存できません。共存できるように改良するには、どうしたら良いでしょうか?
Masatoshi TSUCHIYA への返信

Re: 本文中で参照されている式のみに式番号を付与したい

- 前田 一貴 の投稿
実装されたコードを見ている時間がないので既製品の紹介のみになりますが,
mathtools という amsmath の拡張版パッケージがあり,
これの showonlyrefs という機能を使うと対応できます.
ただし,参照は \ref ではだめで \eqref を使う必要があるのと,
式番号が更新された際はタイプセットが3回必要になります.

\documentclass[dvipdfmx]{jarticle}
\usepackage{hyperref}
\usepackage{mathtools}
\mathtoolsset{showonlyrefs=true}
\begin{document}
式\eqref{referred_label}は,本文中で参照されている式の例である.
\begin{equation}
  A + B = C \label{referred_label}
\end{equation}
次式は,本文から参照されていないが \verb+\label+ 命令は存在する式の例である.
\begin{equation}
  D + E = F \label{unreferred_label}
\end{equation}
次式は,本文から参照されていないし \verb+\label+ 命令も存在しない式の例である.
\begin{equation}
  G + H = I
\end{equation}
\begin{equation}
  A + B = C \label{referred_label2}
\end{equation}
式\eqref{referred_label2}は,本文中で参照されている2つ目の式の例である.
\end{document}
前田 一貴 への返信

Re: 本文中で参照されている式のみに式番号を付与したい

- 北見 けん の投稿
以前やってみたことがあるのですが、
同じ目的のパッケージがあるのですね。
(追記:hyperref のことは全く考慮していません)

(拙作)→ https://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/44211.html
(上記を含む投稿一覧)→ https://oku.edu.mie-u.ac.jp/~okumura/texfaq/qa/44001-44500.html

amsmath の内部マクロに細工して実現していたのですが、
amsmath はバージョンごとに内部マクロもころころ変わるので、
それで動いたり動かなかったり、厄介だった気がします。
ちゃんとしたパッケージがあるならそのほうが安心ですね。

ところで(というか、こちらが本題です - 追記)、
言及した数式だけに番号をつけるのはストイックでかっこいいですが、
著者が言及していない数式でも読者が言及したいこともあるでしょうから、
その時のためにすべての数式に番号を振っておくのは、
人類の学究活動を進める上での良いマナーだともいえそうです。

例えば、論文にはページ番号なども振られますが、
その論文において自己言及されるページにだけ番号を振ることはないですから、
それを認めるのであれば数式番号をすべてに振るのも納得してもらえそうです。
これらのことが説得材料になればよいのですが。
Masatoshi TSUCHIYA への返信

Re: 本文中で参照されている式のみに式番号を付与したい

- Masatoshi TSUCHIYA の投稿
本件ですが,hyperref パッケージは,AtBeginDocument マクロで ref コマンドを書き換えていることが原因だと分かりました.mathtools パッケージなどが正常動作しているのは,ref コマンドではなく eqref コマンドを用いているためと思われます(その代わり,eqref コマンド使用時には相互リンクがつかない).

かなり強引なのですが,添付のように \begin{document} 以後に ref コマンドを上書きすれば,hyperref パッケージと共存できるようです.