未引用的方程式中未显示引用的方程式编号

未引用的方程式中未显示引用的方程式编号

我非常喜欢这个mathtools选项showonlyrefs,它允许仅在有对方程的引用时才显示方程的标签。问题是,如果方程有一个从未被引用的标签,方程中的引用将被抑制。以下 MWE 更容易理解:

\documentclass{article}

\usepackage{mathtools}
\mathtoolsset{showonlyrefs}

\begin{document}

CASE A: equation with reference has no label
\begin{equation}
    1 = 1 \label{eq1a}
\end{equation}
\begin{equation} 
    1 = 1 \qquad \text{(see \eqref{eq1a})}
\end{equation}

\hrulefill

CASE B: equation with reference has label and is referenced itself \eqref{eq2b}
\begin{equation}
    1 = 1 \label{eq1b}
\end{equation}
\begin{equation} \label{eq2b}
    1 = 1 \qquad \text{(see \eqref{eq1b})}
\end{equation}

\hrulefill

CASE C: equation with reference has label but is not referenced itself
\begin{equation}
    1 = 1 \label{eq1c}
\end{equation}
\begin{equation} \label{eq2c}
    1 = 1 \qquad \text{(see \eqref{eq1c})}
\end{equation}

\end{document}

经过足够的编译运行后,结果如下:

mwe 的输出

情况 A 和 B 的行为与预期一致,但在情况 C 中却没有参考 (4)。

尽管如果没有对方程的引用就很容易找到解决方法(只需删除标签),但我更愿意有一个自动解决方案。

答案1

建议使用

\mathtoolsset{showonlyrefs,showmanualtags}

当你使用showonlyrefs

我不太确定什么是避免添加的最佳解决方案showmanualtags(原作者始终建议同时使用两者)。


这里的问题最终在于内部逻辑。该showonlyrefs功能与排版方程编号。这在两个地方使用:

  1. 在显示的数学公式中排版方程编号,
  2. \eqref

这里的问题是,它\eqref实际上是在显示的数学环境中使用的,因此最终针对环境标签而不是给定的标签进行测试。

发行showmanualtags可以规避这一点。


一个更好的解决方案可能是简单地修补\eqref正在使用的版本showonlyrefs,使用以下命令:

\MHInternalSyntaxOn
\def\MT_extended_eqref:n #1{
  \protected@write\@auxout{}
  {\string\MT@newlabel{#1}}
  \textup{\let\df@label\@empty\MT_prev_tagform:n {\ref{#1}}}
}
\MHInternalSyntaxOff

诀窍在于,\df@label只要在上下文中使用标记形式,就将其清空\eqref

我想我会将其添加到下一个mathtools版本中。

相关内容