\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}
如何使用\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
。