内联方程编号

内联方程编号

我希望能够使用 $...$ 为内联方程式添加标签,以便以后在论文中引用它。

我的伪代码目标是:

Some text $mc^2(eqn number)\label{some eqn}$ some more text

然后能够使用

some text \ref{some eqn} some more text

显然,上述方法不起作用,但我希望它能够达到我希望达到的目的。


我还将概述进行此项调查的原因,因为除了上述想法之外,我绝对愿意接受其他解决方案。

我经常会遇到一些不值得一提的小公式:

\begin{equation}...\end{equation}

或者

\begin{align} ... \end{align}

最好在线上提到。问题是,我也需要在后面的工作中引用这些小公式。

答案1

如果我的想法对你来说\marginpar可以的话,这将允许它:

\documentclass{scrartcl}

\usepackage{lipsum}
\usepackage{marginnote} % better placement than marginpar

%CODEBLOCK
\newcounter{inlinelabel}[section]
\let\theinlinelabelbak\theinlinelabel
\renewcommand{\theinlinelabel}{(\thesection.\theinlinelabelbak)}
\newcommand{\inlinelabel}[1]{%
    \marginnote{%
        \refstepcounter{inlinelabel}\label{#1}%
        \theinlinelabel%
    }%
}
%CODEBLOCK

\begin{document}
\section{first section}
$mc^2$\inlinelabel{ineq:mc2}
\lipsum[1]
also see equation \ref{ineq:mc2}.
\end{document}

为了避免混淆,也许您不应该使用自定义计数器,而应该使用方程计数器。为此,将上面的内容更改为%CODEBLOCK

\newcommand{\inlinelabel}[1]{%
    \marginnote{%
        \refstepcounter{equation}\label{#1}%
        \theequation%
    }%
}

编辑:对于其他方程标签的对齐,请尝试(它适用alignamsmath-package,但我没有测试任何其他的):

\makeatletter
\def\tagform@#1{\maketag@@@{\marginnote{#1}}}
\makeatother

关于另一个问题:您也可以将标签放在方程式旁边,就像 Werner 的回答一样。除此之外,我目前不知道其他的。

EDIT2:我刚刚注意到,\marginnote将两个调用的注释放在同一行上,并排放置。因此,我更改了命令\inlinelabel

\newcommand{\inlinelabel}[2][0]{%
    \refstepcounter{equation}\label{#2}%
    \marginnote{%
        \ifnum#1>0%
            \addtocounter{equation}{-#1}%
            \newcount\inlinecount%
            \inlinecount=0%
            \loop\ifnum\inlinecount<#1%
            \setbox0\hbox{\theequation}%
            \hskip\wd0,% This % was missing resulting in more space than 1ex
            \hskip1ex%
            \stepcounter{equation}%
            \advance\inlinecount by 1%
            \repeat%
        \fi%
        \theequation%
    }%
}

现在,你可以使用\inlinelabel可选参数调用,该参数是该行中先前方程的数量。结果如下所示:

结果

\begin{document}...\end{document}这是上图的内容:

$mc^2$\inlinelabel{ineq:mc2}$E=mgh$\inlinelabel[1]{ineq:emgh}$A=\pi
r^2$\inlinelabel[2]{ineq:apir}
\lipsum[1]
also see equation \ref{ineq:mc2}.
\begin{align}
    E = hf
    \label{eqn:ehf}
\end{align}

EDIT3:我再次更改了该函数(现在边注中的逗号只打印一次,而不是多次)。新的完整 MWE 显示了此代码的一些限制。

\documentclass{scrartcl}

\usepackage{lipsum}
\usepackage{marginnote} % better placement than marginpar
\usepackage{amsmath}

\makeatletter
\newcommand{\@commaskip}{%
    \setbox0\hbox{,}%
    \hskip\wd0\relax%
}
\newcommand{\@labelskip}{%
    \setbox0\hbox{\theequation}%
    \hskip\wd0%
    \stepcounter{equation}%
}
\newcommand{\@additionalspace}{\hskip1ex}

\newcommand{\inlinelabel}[2][0]{%
    \refstepcounter{equation}\label{#2}%
    \marginnote{%
        \ifnum#1>0%
            \addtocounter{equation}{-#1}%
            \newcount\@inlinecount%
            \@inlinecount=0%
            \@labelskip%
            \loop\ifnum\@inlinecount<\numexpr#1-1%
                \@commaskip%
                \@labelskip%
                \@additionalspace%
                \advance\@inlinecount by 1%
            \repeat%
            ,\@additionalspace%
        \fi%
        \theequation%
    }%
}

\def\tagform@#1{\maketag@@@{\marginnote{#1}}}
\makeatother

\begin{document}
\section{first section}
$E=mc^2$\inlinelabel{ineq:mc2}
nice
$E=mgh$\inlinelabel[1]{ineq:emgh}
equations
$A=\pi r^2$\inlinelabel[2]{ineq:apir}
being
$U=2\pi r$\inlinelabel[3]{i}
nice
$E=hf$\inlinelabel[4]{ii}. $H=ot$\inlinelabel[5]{iii}.
\lipsum[1]
also see equation \ref{ineq:mc2}.
\begin{align}
    E = hf
    \label{eqn:ehf}
\end{align}
Note that \verb|\eqref| doesn't work with this setup: \eqref{eqn:ehf}. This is
because of the changes made to \verb|\tagform@|
\end{document}

答案2

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath}
\newcommand{\inlineeqnum}{\refstepcounter{equation}~~\mbox{(\theequation)}}

\begin{document}

Some text $E = mc^2 \inlineeqnum\label{eqn:einstein}$ some more text.

Some text \eqref{eqn:einstein} some more text.

\end{document}

考虑将方程编号视为方程的可能元素时可能产生的混淆。

相关内容