该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}}