使用 amsmath 时 \dots 等的间距不一致

使用 amsmath 时 \dots 等的间距不一致
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{2026}{\dots}% …
\usepackage{amsmath}
\begin{document}

\[\left\{a \dots \right\}\]
\[\left\{a … \right\}\]

\end{document}

上述文档中省略号周围的间距与 和 不一样\dots(第三种情况是如果我删除):\DeclareUnicodeCharacter{2026}{\dots}

使用 \DeclareUnicodeCharacter 后,unicode 省略号右侧的空间变小。不使用 \DeclareUnicodeCharacter 时,左侧没有空间(但我认为右侧的间距正确)

如何使用\dots和获得相同的间距?希望这可以在不改变公式本身的情况下完成,而只在代码中完成\DeclareUnicodeCharacter,否则我很可能大多数时候都会忘记这个技巧,而且公式不太简洁。

如果我不使用,问题就会消失amsmath

答案1

在此处输入图片描述

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}

%\DeclareUnicodeCharacter{2026}{\dots}% …
% \u8:… ->\IeC {\dots }
\expandafter\def\csname u8:\detokenize{…}\endcsname#1{\dots#1}


\begin{document}


$\left\{a \dots \right\}$\vline

$\left\{a … \right\}$\vline

\end{document}

\dots查看下一个标记以查看是否使用低点或居中点。 \DeclareUnicodeCharacter将其定义包装在\IeC{...}其中\IeC(此处)只是一个宏,它除了使用其参数外什么也不做。

但主要的问题是\dots使用\futurelet(而不是说\@ifnextchar),所以它在寻找下一个标记时不会跳过空格。这通常并不重要,因为\dots命令名称后的空格会被忽略,但不会忽略...之后的空格(这是要解决的问题\IeC,以确保输入的 enc 字符没有以标记结尾的定义,如果写入外部文件(如目录),则会强制忽略空格。

因此我在这里定义 ... 来接受一个参数并返回它,这是一种(或多或少安全的)强制忽略字符后空格的方法,因此测试\dots\}不到空格。 唯一不安全的部分是,这{…}将导致解析错误,因为参数解析器在查找时会到达组的末尾#1

相关内容