DMW\n
egreg9\n
[quote][quote]Ora avviene il miracolo: si può fare tutto senza alcun calcolo!`\newcommand{\bigcupdot}{%
\mathop{%
\vphantom{\bigcup}%
\mathpalette\setbigcupdot\cdot}\displaylimits}
\newcommand{\setbigcupdot}[2]{\ooalign{\hfil$#1\bigcup$\hfil\cr\hfil$#2$\hfil\crcr}}`Purtroppo quei comandi non so nemmeno cosa fanno. Se me lo spieghi di sicuro ci capisco qualcosa.
Voglio chiederti un’altra cosa collegata a questo topic, ho usato il pacchetto exscale e relsize per mettere una sommatoria un po’ più grandicella, però noto che il simbolo è spostato un po’ in alto rispetto alla linea della frazione. Mi portresti dire,se esistono, i comandi, simili a kern o mkern, che spostano i simboli in verticale?
Risposta all’ultima domanda: no, bisogna farlo a manina. Forse però non usi correttamente i comandi relativi; bisognerebbe vedere un esempio.
Veniamo a \bigcupdot: il primo comando serve a dire che il simbolo che costruiamo è un operatore, del tipo della sommatoria, per mettere a posto le spaziature.
Poi dico che il simbolo deve avere altezza e profondità (rispettivamente quanto va sopra e sotto la linea di base) almeno come \bigcup; altrimenti bisognerebbe fare un paio di giochetti in più dopo.
A questo punto chiamo la macro miracolosa: \mathpalette\setbigcup\cdot. \mathpalette vuole due argomenti, e viene espanso come`\mathchoice{#1\displaystyle{#2}}{#1\textstyle{#2}}
{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}`A sua volta, \mathchoice è una primitiva di TeX che sceglie l’argomento numero n (n=1,2,3,4) se la formula da comporre è in \displaystyle (1), \textstyle (2), eccetera.
Supponiamo di essere in \displaystyle, per gli altri è analogo: TeX “vede” la sequenza \setbigcupdot\displaystyle{\cdot}.
Ma \setbigcupdot è una macro con due argomenti! Quindi il tutto è espanso come`\ooalign{\hfil$\displaystyle\bigcup$\hfil\cr\hfil$\cdot$\hfil\crcr}`Che fa \ooalign? Be’, in soldoni costruisce un array di una sola colonna, ma le varie celle sono tutte sovrapposte. Con gli \hfil prima e dopo posso centrare il contenuto di ciascuna cella, che è esattamente ciò che desideravo. Qui non si può usare \\ per finire le righe, ma occorre il comando primitivo che è \cr; il \crcr è una finezza stilistica 😀
A questo punto occorrerebbe spiegare com’è definito \ooalign, ma direi che per oggi può bastare.8)
Ciao
Enrico