如何使 amsmath 中的 \dots 与省略号协同工作

如何使 amsmath 中的 \dots 与省略号协同工作

amsmath软件包会根据上下文更改\dots命令,使其具有不同的垂直对齐方式(我不确定它是否做了其他事情)。该ellipsis软件包会更改\dots命令以确保在某些文本上下文中间距正确。但是,它似乎撤消了所做的更改amsmath。有没有办法让这些功能同时发挥作用?

以下是 mwe:

\documentclass[a4paper]{book}

\usepackage{amsmath}
\usepackage{ellipsis}

\begin{document}

a \dots{} b

a\dots{}b
\[a + \dots + b\]

\end{document}

如果使用省略号包,数学中的省略号不会垂直居中。如果不使用省略号包,文本中的省略号后面会有一个额外的(细的?)空格。 的顺序\usepackage似乎无关紧要。

答案1

ellipsis包确实

\AtBeginDocument{%
   \DeclareRobustCommand{\dots}{%
     \ifmmode\mathellipsis\else\expandafter\textellipsis\fi}%
}

这是错误的,因为它恢复了 LaTeX 内核定义,而没有考虑到其他包可能已经重新定义了它。包作者的目的是确保在文本模式下\textellipsis使用重新定义的。唉,这破坏了amsmath机制。

amsmath解决方案:恢复给出的正确定义 \textellipsis用于文本模式。

\documentclass[a4paper]{book}

\usepackage{letltxmacro} % for saving and reinstating the correct macro
\usepackage{amsmath}
% save the definition of \dots by amsmath
\LetLtxMacro{\amsmathdots}{\dots}

\usepackage{ellipsis}

% this must go after \usepackage{ellipsis}
\AtBeginDocument{\LetLtxMacro{\dots}{\amsmathdots}}

\begin{document}

a \dots{} b

a\dots{}b
\[a + \dots + b\]

\end{document}

在此处输入图片描述

答案2

这是我前段时间用过的解决方案。它添加了\ellipsisbeforegap\ellipsisaftergap只是因为我需要它。你可以删除它。

\documentclass{scrartcl}

\usepackage{mathtools}
\usepackage{ellipsis}

\makeatletter
\renewcommand*{\mathellipsis}{%
    \mathinner{%
        \kern\ellipsisbeforegap%
        {\ldotp}\kern\ellipsisgap%
        {\ldotp}\kern\ellipsisgap%
        {\ldotp}\kern\ellipsisaftergap%
    }%
}
\renewcommand*{\dotsb@}{%
    \mathinner{%
        \kern\ellipsisbeforegap%
        {\cdotp}\kern\ellipsisgap%
        {\cdotp}\kern\ellipsisgap%
        {\cdotp}\kern\ellipsisaftergap%
    }%
}
\renewcommand*{\@cdots}{%
    \mathinner{%
        \kern\ellipsisbeforegap%
        {\cdotp}\kern\ellipsisgap%
        {\cdotp}\kern\ellipsisgap%
        {\cdotp}\kern\ellipsisaftergap%
    }%
}
\renewcommand*{\ellipsis@default}{%
    \ellipsis@before
    \kern\ellipsisbeforegap
    .\kern\ellipsisgap
    .\kern\ellipsisgap
    .\kern\ellipsisgap
    \ellipsis@after\relax}
\renewcommand*{\ellipsis@centered}{%
    \ellipsis@before
    \kern\ellipsisbeforegap
    .\kern\ellipsisgap
    .\kern\ellipsisgap
    .\kern\ellipsisaftergap
    \ellipsis@after\relax}
\AtBeginDocument{%
    \DeclareRobustCommand*{\dots}{%
        \ifmmode\@xp\mdots@\else\@xp\textellipsis\fi}}
\def\ellipsisgap{.1em}
\def\ellipsisbeforegap{.05em}
\def\ellipsisaftergap{.05em}
\makeatother

\begin{document}

a \dots\ b

a\dots b

\[ a + \dots + b \]

\end{document}

你的问题的相关部分(虽然我的代码更完整)是

\AtBeginDocument{%
    \DeclareRobustCommand*{\dots}{%
        \ifmmode\@xp\mdots@\else\@xp\textellipsis\fi}}

在此处输入图片描述

相关内容