我正在使用 empheq/tcolorbox 包在我的方程式周围放置彩色框,但想将方程式编号放在右边距。
过去,我曾使用以下代码将方程编号放在右边距中,并且它在 empheq 环境之外有效。如果我在 empheq 中使用它,则不会得到方程编号,但引用存在。
\makeatletter
\let\mytagform@=\tagform@
\def\tagform@#1{\maketag@@@{\hbox{\rlap{\hspace{0.5in}(\ignorespaces#1\unskip\@@italiccorr)}}}\kern1sp}
\renewcommand{\eqref}[1]{{\mytagform@{\ref{#1}}}}
\makeatother
下面是 MWE。 \margtrue
将方程编号放在边缘,同时\margfalse
将表现出“正常”行为。
\documentclass{article}
\usepackage{showframe}
\usepackage{amsmath}
\usepackage{empheq}
\usepackage[most]{tcolorbox}
\newif\ifmarg
\margtrue
\ifmarg
\makeatletter
\let\mytagform@=\tagform@
\def\tagform@#1{\maketag@@@{\hbox{\rlap{\hspace{0.5in}(\ignorespaces#1\unskip\@@italiccorr)}}}\kern1sp}
\renewcommand{\eqref}[1]{{\mytagform@{\ref{#1}}}}
\makeatother
\fi
\begin{document}
An equation with number in the right margin.
\begin{gather}
F = ma.
\end{gather}
And now an equation within an \verb|empheq| environment.
\begin{empheq}[box=\tcbhighmath]{gather}
F = ma.
\end{empheq}
\end{document}
行为\margtrue
如下所示。请注意,第二个方程没有显示任何方程编号。
行为\margfalse
如下所示。请注意,第二个方程确实显示了方程编号(但不在边距中)。
答案1
最初不确定为什么(见跟进在初步讨论之后),但我发现在 的定义中将\mbox{~}
(甚至只是一个~
)放在 之前可以使其工作。但是,并不能解决问题(这排除了垂直模式与水平模式之间的问题)。\hbox
\maketag@@@
\mbox{}
\documentclass{article}
\usepackage{showframe}
\usepackage{amsmath}
\usepackage{empheq}
\usepackage[most]{tcolorbox}
\newif\ifmarg
\margtrue
\ifmarg
\makeatletter
\let\mytagform@=\tagform@
\def\tagform@#1{\maketag@@@{\mbox{~}\hbox{\rlap{\hspace{0.5in}(\ignorespaces#1\unskip\@@italiccorr)}}}\kern1sp}
\renewcommand{\eqref}[1]{{\mytagform@{\ref{#1}}}}
\makeatother
\fi
\begin{document}
An equation with number in the right margin.
\begin{gather}
F = ma.
\end{gather}
And now an equation within an \verb|empheq| environment.
\begin{empheq}[box=\tcbhighmath]{gather}
F = ma.
\end{empheq}
\end{document}
跟进
该行为似乎取决于\maketag@@@
定义是否具有非零宽度。例如,\makebox[0.001pt]{}
甚至\kern1pt
在作品之前\hbox
也是如此,但\makebox[0pt]{}
事实并非如此。我怀疑\ifdim...>0pt
某处有一个测试。
和这里,为什么数学模式下的零宽度框没有与基线对齐?其中,David 说“零宽度方程式编号被用作获得特殊处理的标志”,然后引用了 TeXbook (p.189):“这些规则的一个结果是,您可以通过将方程式编号的宽度设为零来强制其独自出现在一行上。”
我怀疑是这种“特殊处理”干扰了 OP 的最初尝试,因为该\margtrue
设置强制标签宽度为零,因为它是一个\rlap
。
事实上,TeXbook 在第 188 页的讨论中定义了埃作为方程式的宽度数:
“让问和埃如果没有方程数,则为零;否则设埃是方程数的宽度
...
“如果埃[不等于] 0,并且如果显示的公式 h 中有足够的收缩性,可以将其宽度减小到是−问,然后列出H包装在一个hbox
b宽度是−问。 否则埃设置为零,并列出H包装在(可能过满)hbox
b宽度min
(瓦_0,是)。
...
“如果有一个\eqno
并且如果埃= 0,无限惩罚放在垂直列表上,后面跟着方程数字框A右移s+是减去它的宽度,后面跟着一个惩罚项,其成本是 的值\postdisplaypenalty
。”