我希望能够使用 $...$ 为内联方程式添加标签,以便以后在论文中引用它。
我的伪代码目标是:
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%
}%
}
编辑:对于其他方程标签的对齐,请尝试(它适用align
于amsmath
-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}