DeclareMathOperator 并调整环境

DeclareMathOperator 并调整环境

最小工作示例:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
    \begin{align}
        &s + t &\text{foo}\\
        &\sin x &\text{bar}
    \end{align}
\end{document}

这里,\sin(或用 声明的任何其他运算符\DeclareMathOperator)未与 对齐s,它在 前面有一些空格。我知道数学运算符会插入一些空格,这样 就x \sin y可以按预期工作,但由于这里 前面没有任何内容\sin,所以我不认为这会适用。段落排版\noindent\(s + t\)\\\(\sin x\)也可以按预期工作,那么为什么在 align 环境中使用时无法正确对齐?

答案1

由于问题已经回答了空格的原因。在某些情况下,定义为的宏\DeclareMathOperator被定义为带有附加空格。\mathop

这里添加了一个空的数学普通原子,以获得二进制或关系符号的正确间距。和align之间还添加了一个空格。\mathord\mathop

\mathopen在这种情况下,可以在 前面使用一个空字符来避免出现空格\sin。TeX 不会在\mathord和之间以及和\mathopen之间插入空格:\mathopen\mathop

\documentclass{article}
\usepackage{amsmath}
\begin{document}
    \begin{align}
        &s + t &\text{foo}\\
        &\mathopen{}\sin x &\text{bar}
    \end{align}
\end{document}

结果

答案2

环境align期望在 之后有一个关系符号&作为对齐点,因此{}在第二列(以及所有其他偶数列)的开头有一个隐式的。

这会带来一个不良后果,即如果后面跟有数学运算符&,则会添加一个细小的空格,这是 TeX 的间距规则造成的:当数学运算符跟在普通原子后面时,会添加一个细小的空格,例如

$3\sin x$

结果是

3<thin space><thin space>X

解决方案:

\documentclass{article}
\usepackage{amsmath}
\begin{document}

\begin{align}
  &s + t    &&\text{foo}\\
  &\!\sin x &&\text{bar}
\end{align}

\end{document}

由于会自动添加一个细空格,根据上面解释的规则,它\!会取消它,因为它与细空格完全相反。

注意&&之前\text,因此条件是左对齐。


以下是一组未添加自动空组的变体环境:

\documentclass{article}
\usepackage{amsmath,etoolbox}

\makeatletter
\newcommand{\patch@align@preamble}{\patchcmd{\align@preamble}{{}}{}{}{}}
\newenvironment{varalign}
 {\patch@align@preamble\start@align\@ne\st@rredfalse\m@ne}
 {\endalign}
\newenvironment{varalign*}
 {\patch@align@preamble\start@align\@ne\st@rredtrue\m@ne}
 {\endalign}
\newenvironment{varalignat}
 {\patch@align@preamble\start@align\z@\st@rredfalse}
 {\endalign}
\newenvironment{varalignat*}
 {\patch@align@preamble\start@align\z@\st@rredtrue}
 {\endalign}
\makeatother

\begin{document}

\begin{varalign}
  &s + t    &&\text{foo}\\
  &\sin x &&\text{bar}
\end{varalign}
text in between
\begin{varalign*}
  &s + t    &&\text{foo}\\
  &\sin x &&\text{bar}
\end{varalign*}
text in between
\begin{varalignat}{2}
  &s + t\qquad  &&\text{foo}\\
  &\sin x &&\text{bar}
\end{varalignat}
text in between
\begin{varalignat*}{2}
  &s + t\qquad    &&\text{foo}\\
  &\sin x &&\text{bar}
\end{varalignat*}

\end{document}

在此处输入图片描述

相关内容