# amsmath: How can I use the equation numbering and label manually and anywhere?

I want to use the accustomed equation numbering and label manually and anywhere; for example in an array.

With the command
\newcommand{\tagx}[1][]{\refstepcounter{equation}(\theequation)\label{#1}}
can I create custom tags \tagx or \tagx[eq:bar] and reference them as usual \eqref{eq:bar}.

But in a tag with an own figure
still works \mytag[eq:bar1]{***}, but not the referencing \eqref{eq:bar1}.

What can I do?

\documentclass[12pt]{scrreprt}
\usepackage{amsmath, amsfonts, amssymb}

\newcommand{\tagx}[1][]{\refstepcounter{equation}(\theequation)\label{#1}}

\newcommand\mytag[2][]{\begingroup
\renewcommand{\theequation}{#2}% ändern
(\theequation)\label{#1} % ausschreiben
\endgroup
}

% \renewcommand{\theequation}{\refstepcounter{equation}(\theequation)}

\begin{document}
\chapter{First Chapter}
An equation for counting:
$$a+b=c\label{eq:foo1}$$
The tag of the equation is \eqref{eq:foo1}.

\section{Putting a tag in the text}
A normal tag in the text \tagx[eq:bar0] and an own tag \mytag[eq:bar1]{***} is showing correct.

The referencing of the normal tag in the text \eqref{eq:bar0} is correct; but the own tag \eqref{eq:bar1} is wrong - here should be "(***)".
\bigskip

Another equation:
$$1+1=2\label{eq:foo2}$$
The tag of the equation is \eqref{eq:foo2}.

\end{document}

• why are you using \theequation in \mytag ? also shouldn't the argument to \tagx be mandatory not optional? If you omit the argument then you will execute \label{} which doesn't really work (and will give errors if done more than once) – David Carlisle May 19 at 15:41
• @DavidCarlisle I thought it would be better to keep the label name optional. So \tagx gives (1.2) e.g. And \tagx[eq:foo] gives (1.2) and sets \label{eq:foo}. I do not think I have to label all tagx'es there ever will be. – cis May 19 at 17:20
• in that case you would only want to do the \label in the case the argument was provided, as it is above if you don't supply the option you end up with \label{} which is an error. – David Carlisle May 19 at 17:22
• @DavidCarlisle I changed your solution to % \tagx[<label, optional>] % normal tag inline \newcommand{\tagx}[1][]{\refstepcounter{equation}(\theequation)\label{#1}} That is wrong? – cis May 19 at 17:38
• yes that is wrong as you do \label{} if the argument is not provided. – David Carlisle May 19 at 17:49

Your \mytag command doesn't set \@currentlabel.

\makeatletter
\newcommand\mytag[2][]{%
\def\@currentlabel{#2}%
(#2)\label{#1}% ausschreiben
}
\makeatother


I'm not sure why the “label” argument is optional: you need it, don't you?

\documentclass[12pt]{scrreprt}
\usepackage{amsmath, amsfonts, amssymb}

\newcommand{\tagx}[1][]{\refstepcounter{equation}(\theequation)\label{#1}}

\makeatletter
\newcommand\mytag[2][]{%
\def\@currentlabel{#2}%
(#2)\label{#1} % ausschreiben
}
\makeatother

% \renewcommand{\theequation}{\refstepcounter{equation}(\theequation)}

\begin{document}
\chapter{First Chapter}
An equation for counting:
$$a+b=c\label{eq:foo1}$$
The tag of the equation is \eqref{eq:foo1}.

\section{Putting a tag in the text}
A normal tag in the text \tagx[eq:bar0] and an own tag \mytag[eq:bar1]{***} is showing correct.

The referencing of the normal tag in the text \eqref{eq:bar0} is correct; but the own tag \eqref{eq:bar1} is wrong - here should be "(***)".
\bigskip

Another equation:
$$1+1=2\label{eq:foo2}$$
The tag of the equation is \eqref{eq:foo2}.

\end{document}


I'd implement it differently: the label should be mandatory and the personal tag optional.

\documentclass[12pt]{scrreprt}
\usepackage{amsmath, amsfonts, amssymb, xparse}

\makeatletter
\NewDocumentCommand{\tagx}{om}{%
\IfNoValueTF{#1}
{% normal equation number
\refstepcounter{equation}(\theequation)\label{#2}%
}
{% personal tag
(#1)\def\@currentlabel{#1}\label{#2}%
}%
}
\makeatother

\begin{document}
\chapter{First Chapter}
An equation for counting:
$$a+b=c\label{eq:foo1}$$
The tag of the equation is \eqref{eq:foo1}.

\section{Putting a tag in the text}
A normal tag in the text \tagx{eq:bar0} and an own
tag \tagx[***]{eq:bar1} is showing correct.

The referencing of the normal tag in the text \eqref{eq:bar0}
is correct; the own tag \eqref{eq:bar1} is correct as well.

Another equation:
$$1+1=2\label{eq:foo2}$$
The tag of the equation is \eqref{eq:foo2}.

\end{document}


• Ah, I see: you put both commands together. – cis May 19 at 16:56
• @ egreg Is it possible, to make the label-name ('eq:bar1' e.g.) an optional argument too? – cis May 19 at 17:14

I think you want something like

\documentclass[12pt]{scrreprt}
\usepackage{amsmath, amsfonts, amssymb}

\newcommand{\tagx}[1]{\refstepcounter{equation}(\theequation)\label{#1}}

\makeatletter
\newcommand\mytag[2]{{%
#2%
\def\@currentlabel{#2}%
\label{#1}%
}}
\makeatother
% \renewcommand{\theequation}{\refstepcounter{equation}(\theequation)}

\begin{document}
\chapter{First Chapter}
An equation for counting:
$$a+b=c\label{eq:foo1}$$
The tag of the equation is \eqref{eq:foo1}.

\section{Putting a tag in the text}
A normal tag in the text \tagx{eq:bar0} and an own tag \mytag{eq:bar1}{***} is showing correct.

The referencing of the normal tag in the text \eqref{eq:bar0} is correct; but the own tag \eqref{eq:bar1} is wrong - here should be "(***)".
\bigskip

Another equation:
$$1+1=2\label{eq:foo2}$$
The tag of the equation is \eqref{eq:foo2}.

\end{document}