empheq 和方程式数字的位置变换

empheq 和方程式数字的位置变换

我正在使用 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。”

相关内容