以下是代码:
\documentclass{article}
\usepackage{mathtools}
\begin{document}
\newcounter{rule}
\newcommand\jrule{
\refstepcounter{rule}
\label{foo}
\text{R\ref{foo}}}
\section{Intro}
\subsection{Overview}
\begin{equation*}
\begin{split}
& \jrule \\
\end{split}
\end{equation*}
\end{document}
它打印R1.1
而不是R1
。
但是,如果我不使用split
环境,它会打印R1
。问题是什么?
答案1
这是你想要的吗?
\documentclass{article}
\usepackage{mathtools}
\newcounter{rule}
\makeatletter
\newcommand\jrule{%
\refstepcounter{rule}%
\ltx@label{R@\roman{rule}}%
(\mathrm{R}\ref{R@\roman{rule}})%
}
\makeatother
\begin{document}
\section{Intro}
\subsection{Overview}
\begin{equation*}
\begin{split}
x&=y \\
&=\jrule
\end{split}
\end{equation*}
\end{document}
请注意,我没有使用不起作用的固定标签。
如果你希望能够引用数字,你可以添加一个可选参数\jrule
;你不能\label
在此上下文中使用,因为amsmath
在其各种数学显示环境中重新定义它以获得正确的引用。
\documentclass{article}
\usepackage{mathtools}
\newcounter{rule}
\makeatletter
\NewDocumentCommand\jrule{o}{%
\refstepcounter{rule}%
\IfNoValueTF{#1}{% no optional argument, use a generated label
\ltx@label{R@\roman{rule}}%
(\mathrm{R}\ref{R@\roman{rule}})%
}{% optional argument, use it for the label
\ltx@label{#1}%
(\mathrm{R}\ref{#1})%
}%
}
\makeatother
\begin{document}
\section{Intro}
\subsection{Overview}
\begin{equation*}
\begin{split}
x&=y \\
&=\jrule \\
&=\jrule[foo]
\end{split}
\end{equation*}
\ref{foo}
\end{document}