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}):

unicode 省略號在 \DeclareUnicodeCharacter 右邊的空間較小。如果沒有 \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

相關內容