Ecco, mi è venuta in mente una (mezza) idea. Si potrebbe dire a LaTeX, “quando sei in modo matematico, usa la definizione di \dots data da amsmath, mentre quando sei in modalità testuale, usa quella data da ellipsis”?
Si tratta di una costruzione fattibile?
(Ho spulciato il codice di amsmath.sty: la definizione di \dots è davvero impressionante…)
È esattamente quello che succede: la definizione di \dots data da amsmath è
`\DeclareRobustCommand{\dots}{%
\ifmmode \expandafter\mdots@\else \expandafter\textellipsis \fi
}`
che quindi in modo testo usa la ridefinizione di \textellipsis data dal pacchetto ellipsis. L’unico problema è che il pacchetto ellipsis pospone la ridefinizione di \dots in \AtBeginDocument. Soluzione
`\usepackage{ellipsis}
\usepackage{amsmath}
\makeatletter
\@xp\let\csname ams@dots\@xp\endcsname\csname dots \endcsname
\AtBeginDocument{\@xp\def\csname dots \@xp\endcsname\@xp{\ams@dots}}
\makeatother`
Spiegazione: \dots è definito da entrambi i pacchetti con \DeclareRobustCommand, quindi il vero comando da ridefinire è “\dots ” con lo spazio! Quindi definisco \ams@dots come “\dots ” ridefinito da amsmath; poi dico che al \begin{document} venga ridefinito “\dots ” come l’espansione di primo livello di \ams@dots.
Facile, no?
Naturalmente sarebbe più semplice scrivere
`\usepackage{ellipsis}
\usepackage{amsmath}
\makeatletter
\DeclareRobustCommand{\dots}{%
\ifmmode \@xp\mdots@\else \@xp\textellipsis \fi
}
\makeatother`
solo che questo potrebbe “rompersi” qualora l’AMS decidesse di cambiare la definizione di \dots.
L’autore di ellipsis potrebbe inserire un test prima di ridefinire \dots, prevedendo la possibilità che sia stato caricato amsmath. In questo modo sarebbe irrilevante l’ordine di caricamento.
Il pacchetto mi ha però sempre dato qualche perplessità e rimango del parere che una costruzione come […] abbia bisogno di una sua definizione a parte:
`\def\omissis{[\dots\unkern]}`
Ciao
Enrico