Inkonsistenter Abstand von \dots und … mit amsmath

Inkonsistenter Abstand von \dots und … mit amsmath
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{2026}{\dots}% …
\usepackage{amsmath}
\begin{document}

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

\end{document}

\dotsDer Abstand um die Auslassungspunkte ist für und im obigen Dokument nicht derselbe (der dritte Fall ist, wenn ich das entferne \DeclareUnicodeCharacter{2026}{\dots}):

Die Unicode-Ellipse hat mit \DeclareUnicodeCharacter weniger Platz nach rechts. Ohne \DeclareUnicodeCharacter hat sie keinen Platz nach links (aber den richtigen Abstand nach rechts, denke ich).

\dotsWie kann ich mit und den gleichen Abstand erreichen ? Hoffentlich geht das, ohne etwas an der Formel selbst zu ändern, nur am \DeclareUnicodeCharacterCode, denn sonst vergesse ich den Hack wahrscheinlich die meiste Zeit und die Formeln sind weniger prägnant.

Das Problem verschwindet, wenn ich nicht verwende amsmath.

Antwort1

Bildbeschreibung hier eingeben

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

\dotsschaut sich das nächste Token an, um zu sehen, ob tiefe oder zentrierte Punkte verwendet werden sollen. \DeclareUnicodeCharacterumschließt seine Definition in „ \IeC{...}wobei \IeC(hier) nur ein Makro ist, das nichts anderes tut, als sein Argument zu verwenden.“

Das Hauptproblem besteht jedoch darin, dass (anstatt zu sagen ) \dotsverwendet wird , damit beim Suchen nach dem nächsten Token keine Leerzeichen übersprungen werden. Dies spielt normalerweise keine Rolle, da Leerzeichen nach einem Befehlsnamen ignoriert werden, aber nicht nach ... (dies ist das Problem, das behoben werden muss, um sicherzustellen, dass Eingabecodierungszeichen keine Definitionen haben, die mit einem Token enden, das das Ignorieren von Leerzeichen erzwingt, wenn sie in eine externe Datei wie ein Inhaltsverzeichnis geschrieben werden).\futurelet\@ifnextchar\dots\IeC

Also definiere ich hier ..., um ein Argument anzunehmen und zurückzugeben, was eine (mehr oder weniger sichere) Möglichkeit ist, das Leerzeichen nach dem zu ignorierenden Zeichen zu erzwingen, sodass die \dotsTests kein Leerzeichen sehen \}. Der einzige unsichere Teil daran ist, dass dies {…}zu einem Analysefehler führen würde, da der Argumentparser beim Suchen nach auf das Ende der Gruppe stoßen würde #1.

verwandte Informationen