\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 \dots
y …
en el documento anterior (el tercer caso es si elimino \DeclareUnicodeCharacter{2026}{\dots}
):
¿Cómo puedo obtener el mismo espacio con \dots
y …
? Con suerte, esto se puede hacer sin cambiar nada en la fórmula en sí, solo en el \DeclareUnicodeCharacter
có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
\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
mira hacia adelante a la siguiente ficha para ver si usar puntos bajos o centrados. \DeclareUnicodeCharacter
envuelve 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 \dots
usa \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, \dots
ya que los espacios en blanco se ignoran después de un nombre de comando, pero no después de... (que es el problema que \IeC
se 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 \dots
pruebas \}
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
.