使用 \mathclap 时正确对齐公式

使用 \mathclap 时正确对齐公式

我有一些公式,其中有大符号,例如\sum带有\bigvee索引的符号。由于索引太长,参数会向右移动太远:

\item[]\AL
\begin{flalign*}
%
&\bigvee\limits_{\substack{1\leqslant k\leqslant n\\
        1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

空间太大

我使用以下方法修复它\mathclap

\item[]\AL
\begin{flalign*}
%
&\bigvee\limits_{\mathclap{\substack{1\leqslant k\leqslant n\\
            1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

数学笔记

但它向左移动太多了。所以我尝试使用胶带:

\item[]\AL
\newlength{\mylll}%
\settowidth{\mylll}{${}_{1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}$}%
\begin{flalign*}
%
&\hspace{.5\mylll}\bigvee\limits_{\mathclap{\substack{1\leqslant k\leqslant n\\
            1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

在此处输入图片描述

一切看起来都很好,但事实并非如此。您可以看到公式向右移动了一点,比我预期的要多(多余的空格标记为蓝色):

在此处输入图片描述

我的问题是,如何在不使用标尺正确调整的情况下正确处理这种对齐\hspace{???}

我的 MWE (LuaLaTex):

\documentclass[10pt,twoside,a4paper]{book}
%\usepackage{showframe}
%\usepackage{layout}
\usepackage{geometry}
\geometry{margin=1in}
%
\usepackage{amsmath}
\usepackage{mathtools}
%
\usepackage{amsthm}
\usepackage{thmtools}
%
\usepackage{newtxmath}
%
\usepackage{lipsum}
%
\usepackage{enumitem}


%%%%%
%Definition of a new list type
\newcounter{qcounter}
\newenvironment{questions}{
    \begin{list}{ 
            \bfseries\upshape\arabic{qcounter}.
        }{
            \renewcommand{\makelabel}[1]{%
                \textbf{\refstepcounter{qcounter}\arabic{qcounter}##1.}}%
            \usecounter{qcounter}
            \setlength{\labelwidth}{0.5em}
            \setlength{\labelsep}{0.5em}
            \setlength{\leftmargin}{\labelwidth+\labelsep+0.5em}
            \setlength{\itemsep}{2pt}
            \setlength{\listparindent}{1em}
            \setlength{\parsep}{1pt}
            \setlength{\topsep}{6pt}
        } 
    }{    
    \end{list}
}

%Command to correctly align environments in the list
\newcommand{\AL}{%
    \setlength{\abovedisplayskip}{0pt}%
    \setlength{\belowdisplayskip}{0pt}%
    \setlength{\abovedisplayshortskip}{0pt}%
    \setlength{\belowdisplayshortskip}{0pt}%
    \setlength{\multlinegap}{0pt}%
    ~\vspace*{-\baselineskip}%
}


\begin{document}

\begin{questions}

%too big space
\item[]\AL
\begin{flalign*}
%
&\bigvee\limits_{\substack{1\leqslant k\leqslant n\\
        1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

%too left
\item[]\AL
\begin{flalign*}
%
&\bigvee\limits_{\mathclap{\substack{1\leqslant k\leqslant n\\
            1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

%not very nice looking one
\item[]\AL
\newlength{\mylll}%
\settowidth{\mylll}{${}_{1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}$}%
\begin{flalign*}
%
&\hspace{.5\mylll}\bigvee\limits_{\mathclap{\substack{1\leqslant k\leqslant n\\
            1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

\item[]\lipsum[2]

\end{questions}

\end{document}

答案1

你不需要同时加载amsmath mathtools,因为后者会加载前者。此外,还mathtools提供了不错的命令\smashoperator,它可以准确地完成您需要的操作:

\item[]\AL
\begin{flalign*}
%
&\smashoperator[r]{\bigvee_{\substack{1\leqslant k\leqslant n\\
            1\leqslant i_1<i_1<\ldots<i_{k}\leqslant n}}}
\enspace x_{i_1}x_{i_2}\cdots x_{i_{k}}.&\\ 
\end{flalign*}

您可以省略显式调用,\limits因为会\smashoperator自动使用它。

来自mathtools文档

[...]mathtools提供了一个\smashoperator命令,它只是忽略了下标和上标的宽度。它还带有一个可选参数,lrlr(默认),表示应忽略(粉碎)运算符的哪一侧。

请注意,只要您不需要对齐,flalign这里就没有必要了。只需使用$\displaymath ... $

相关内容