显示方程标签中的计数器值

显示方程标签中的计数器值

我正在尝试创建以下内容,但无法在这里或其他网上找到任何内容......

我想创建一个带有自定义计数器的方程式,然后在该方程式中使用计数器时调用计数器的值。例如,请考虑以下情况。

\newcounter{opt}
\[
    ax + b = c
\refstepcounter{opt}
\label{eq:1}
\]
\ref{eq:1}

正如我所期望的,最后的\ref调用产生了值1。但是,我想用非标准标签标记方程式,例如\tag*{$(P_1)$}。我可以按如下方式执行此操作。

\newcounter{opt}
\[
    ax + b = c
\refstepcounter{opt}
\label{eq:1}
\tag*{$(P_\theopt)$}
\]
\ref{eq:1}

这给出了正确的标签,但是现在\ref调用会产生(P_1),而不仅仅是1

我该如何调整才能得到想要的标签我可以参考方程式并得到计数器的值吗?


这, ”参考此时计数器的标签和值“,是一篇高度相关的帖子。它做的事情比我想做的更深入一些,我无法很好地理解发生了什么,无法适应它……


如果有帮助,上下文如下。我有一个优化问题,我想用同一个计数器标记两个方程(P_1)和。然后我想将其称为;我打算通过编写来做到这一点。(C_1)opt(P,C)_1(P,C)_\ref{eq:1}

我想,我实际上想要做的就是在()等式括号中写出与我\ref生成的值不同的内容。

如果有更好的方法可以做到这一点,我洗耳恭听!

答案1

使用受保护的命令,这样它将被写入.aux文件中,并且您可以定义它在不同上下文中执行不同的操作。

\documentclass{article}
\usepackage{amsmath,xparse}

\newcounter{xtag}
\NewDocumentCommand{\xtag}{sm}{%
  \IfBooleanF{#1}{\refstepcounter{xtag}}%
  \tag{\choosetag{#2}{\thextag}}%
}

\ExplSyntaxOn
\NewDocumentCommand{\choosetag}{mm}
 {
  \bool_if:NTF \l_samt_choosetag_ref_bool
   {
    #2
   }
   {
    $\mathrm{#1}\sb{#2}$
   }
 }
\NewDocumentCommand{\xref}{m}
 {
  \group_begin:
  \bool_set_true:N \l_samt_choosetag_ref_bool
  \ref{#1}
  \group_end:
 }
\NewDocumentCommand{\xeqref}{om}
 {
  \IfNoValueTF{#1}
   {
    \eqref{#2}
   }
   {
    \textnormal{(#1)}$\sb{\xref{#2}}$
   }
 }

\bool_new:N \l_samt_choosetag_ref_bool
\ExplSyntaxOff

\begin{document}

\begin{gather}
1=1 \xtag{P}  \label{a} \\
2=2 \xtag*{C} \label{b} \\
3=3 \xtag{P}  \label{c}
\end{gather}

\xeqref{a} or \xeqref[P,C]{a}

\xeqref{c}

\end{document}

命令\xtag使计数器前进,但是变体\xtag*却不前进。

在此处输入图片描述

相关内容