Espaciado inconsistente de \dots y... con amsmath

Espaciado inconsistente de \dots y... con amsmath
\documentclass{article}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{2026}{\dots}% …
\usepackage{amsmath}
\begin{document}

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

\end{document}

El espacio alrededor de los puntos suspensivos no es el mismo para \dotsy en el documento anterior (el tercer caso es si elimino \DeclareUnicodeCharacter{2026}{\dots}):

Los puntos suspensivos Unicode tienen menos espacio a la derecha con \DeclareUnicodeCharacter. No tiene espacio a la izquierda (pero creo que el espaciado correcto a la derecha) sin el \DeclareUnicodeCharacter

¿Cómo puedo obtener el mismo espacio con \dotsy ? Con suerte, esto se puede hacer sin cambiar nada en la fórmula en sí, solo en el \DeclareUnicodeCharactercódigo, ya que de lo contrario es probable que olvide el truco la mayor parte del tiempo y las fórmulas sean menos concisas.

El problema desaparece si no lo uso amsmath.

Respuesta1

ingrese la descripción de la imagen aquí

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

\dotsmira hacia adelante a la siguiente ficha para ver si usar puntos bajos o centrados. \DeclareUnicodeCharacterenvuelve su definición en \IeC{...}donde \IeC(aquí) hay solo una macro que no hace más que usar su argumento.

Pero el principal problema es que \dotsusa \futurelet(en lugar de decir \@ifnextchar), por lo que no salta el espacio en blanco mientras busca el siguiente token. Por lo general, esto no importa, \dotsya que los espacios en blanco se ignoran después de un nombre de comando, pero no después de... (que es el problema que \IeCse soluciona, para asegurarse de que los caracteres enc de entrada no tengan definiciones que terminen con un token que fuerce el uso del blanco). espacio que se ignorará si se escribe en un archivo externo, como una tabla de contenido.

Así que aquí defino... tomar un argumento y devolverlo, lo cual es una forma (más o menos segura) de forzar que se ignore el espacio después del carácter, para que las \dotspruebas \}no vean un espacio. La única parte insegura de esto es que {…}daría un error de análisis ya que el analizador de argumentos llegaría al final del grupo mientras buscaba #1.

información relacionada