![自动编号不等式](https://linux22.com/image/240916/%E8%87%AA%E5%8A%A8%E7%BC%96%E5%8F%B7%E4%B8%8D%E7%AD%89%E5%BC%8F.png)
我有一长串不等式,我想对这些不等式下的一些步骤添加一些解释。我见过有人这样做\stackrel{(i)}{\leq}
。这就是我想要的,但我希望有一个计数器可以帮我做这件事,所以 (i)、(ii) 等等具有自动递增功能,这样如果我添加一行,我就不必更改所有内容。
我能想到的最大问题(我不知道如何解决)是,当我在新的方程(或类似的东西)环境中再次使用该计数器时,必须重置该计数器。有什么建议吗?
答案1
尝试一下:
\documentclass{article}
\usepackage{amsmath}
\newcounter{hints}
\renewcommand{\thehints}{\roman{hints}}
\newcommand{\hintedrel}[2][]{%
\refstepcounter{hints}%
\if\relax\detokenize{#1}\relax\else\label{#1}\fi
\mathrel{\overset{\mathrm{(\thehints)}}{\vphantom{\le}{#2}}}%
}
\newcommand{\restarthintedrel}{\setcounter{hints}{0}}
\begin{document}
$a\hintedrel[lab1]{\le}b\hintedrel[lab2]{<}c$
(\ref{lab1}): because it's so.
(\ref{lab2}): I tell you it is.
$\restarthintedrel a\hintedrel[lab3]{\le}b\hintedrel[lab4]{<}c$
(\ref{lab3}): because it's so.
(\ref{lab4}): I tell you it is.
\end{document}
该\hintedrel
命令有一个可选参数,一个用于稍后引用不等式的标签。
在新的暗示不等式链之前,你可以写\restarthintedrel
从 1 重新开始。
不同的实现
\documentclass{article}
\usepackage{amsmath,etoolbox}
\AfterEndEnvironment{equation}{\restarthintedrel}
\AfterEndEnvironment{align}{\restarthintedrel}
\newcounter{hints}
\renewcommand{\thehints}{\roman{hints}}
\newcommand{\hintedrel}[2][]{%
\stepcounter{hints}%
\if\relax\detokenize{#1}\relax\else\csxdef{hint@#1}{\thehints}\fi
\mathrel{\overset{\textrm{(\thehints)}}{\vphantom{\le}{#2}}}%
}
\newcommand{\restarthintedrel}{\setcounter{hints}{0}}
\newcommand{\hintref}[1]{\csuse{hint@#1}}
\begin{document}
\begin{equation}
a\hintedrel[lab1]{\le}b\hintedrel[lab2]{<}c\overset{*}{\le}d
\end{equation}
(\hintref{lab1}): because it's so.
(\hintref{lab2}): I tell you it is.
\begin{align}
a&\hintedrel[lab3]{\le}b\\
&\hintedrel[lab4]{<}c
\end{align}
(\hintref{lab3}): because it's so.
(\hintref{lab4}): I tell you it is.
\end{document}
这假设提示仅在定义后才会被引用(使用标准\label
机制\ref
数学会引发错误)。您必须\AfterEndEnvironment
为使用的每个数学环境添加类似的内容。
答案2
\section
这可能就是您想要的,使用一个计数器,该计数器在每次使用时递增,并在文档开始时重置。当然,这可以修改:
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{chngcntr}% http://ctan.org/pkg/chngcntr
\newcounter{numrel}% Counter for numering relations
\counterwithin*{numrel}{section}% Counter resets at every section
\newcommand{\numrel}[1]{% Relation numbering
\stepcounter{numrel}% Increment numrel counter
\overset{(\roman{numrel})}{#1}% Print counter + relation
}
\begin{document}
\section{First section}
\begin{align*}
P(x) &= ax^2+bx+c \\
&\overset{(i)}{\leq} cx^3+dx^2+ex+f \\
&\overset{(ii)}{<} gx^4+hx^3+ix^2+jx+k
\end{align*}
\section{Second section}
\begin{align*}
P(x) &= ax^2+bx+c \\
&\numrel{\leq} cx^3+dx^2+ex+f \\
&\numrel{<} gx^4+hx^3+ix^2+jx+k
\end{align*}
\end{document}
在上面的例子中,第一部分使用\overset
而第二部分使用新定义的\numrel
命令,以显示相似之处。还可以修改代码以适应使用引用,这样您的文档文本就会根据在等式中添加/删除行的变化而变化。chngcntr
包裹用于更灵活地格式化计数器重置。
为了适应在文本中引用计数器的可能性,这里有一个经过修改的最小示例,它使用了etoolbox
包裹在环境结束时重置计数器align*
,以及amsmath
使用一些计数器操作使用 hyperref 定义多个标签。它使用两个计数器,全局计数器用于生成唯一的引用钩子(对 很重要hyperref
),以及一个本地计数器,该计数器实际上为每个方程显示和重置。\numrel{<rel>}{<lab>}
现在需要两个强制参数。第一个是关系,而第二个是可以在其他地方引用的<rel>
标签:<lab>
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\usepackage{hyperref}% https://ctan.org/pkg/hyperref
\newcounter{numrellocal}% Local counter for numering relations
\renewcommand{\thenumrellocal}{\roman{numrellocal}}% Counter numrellocal uses lowercase roman numerals
\newcounter{numrelglobal}% Global counter for numering relations
\renewcommand{\thenumrelglobal}{\roman{numrellocal}}% Counter numrelglobal uses lowercase roman numerals, but results in value from numrellocal
\makeatletter
\newcommand{\numrel}[2]{% Relation numbering
\stepcounter{numrellocal}% Increment local counter
\refstepcounter{numrelglobal}% Increment global counter and create correct reference hook, with label-text from local counter
\ltx@label{#2}% Label numrel counter
\overset{(\thenumrellocal)}{#1}% Print counter + relation
}
\makeatother
\AfterEndEnvironment{align*}{\setcounter{numrellocal}{0}}% Resets numrellocal at the end of align*
\begin{document}
\section{First section}
\begin{align*}
P(x) &= ax^2+bx+c \\
&\stackrel{(i)}{\leq} cx^3+dx^2+ex+f \\
&\stackrel{(ii)}{<} gx^4+hx^3+ix^2+jx+k
\end{align*}
\section{Second section}
\begin{align*}
P(x) &= ax^2+bx+c \\
&\numrel{\leq}{rel1} cx^3+dx^2+ex+f \\
&\numrel{<}{rel2} gx^4+hx^3+ix^2+jx+k
\end{align*}
If you look at (\ref{rel1}), you will notice it is different from (\ref{rel2}).
\begin{align*}
P(x) &= ax^2+bx+c \\
&\numrel{\leq}{rel3} cx^3+dx^2+ex+f \\
&\numrel{<}{rel4} gx^4+hx^3+ix^2+jx+k
\end{align*}
If you look at (\ref{rel3}), you will notice it is different from (\ref{rel4}).
\end{document}