Re: Ingrandimento simbolo

#23464
Up
0
Down
::

Prof,
C’è un errore. O scrivi
`\edef\@sum#1{\vcenter{\hbox{#1$\mathchar\number\sum@$}}}`
o
`\edef\@sum#1{\vcenter{\hbox{#1$\mathchar”1350$}}}`

Nessuna delle due, perché mai? Quella che ho scritto funziona benissimo. 🙂

Ora vediamo di capirci qualcosa. Con questa dichiarazione definisci e espandi (\edef) \@sum il quale crea una scatola centrata verticalmente con \vcenter con al suo interno una scatola orizzontale. Dentro questa c’è l’argomento della dimensione (#1) e poi il simbolo di sommatoria.
Con la seconda definizione dichiari (o meglio ridefinisci) il comando \sum; specifichi che vuoi un operatore matematico (\mathop) e poi con \mathchoiche fai le varie scelte a seconda dello stile. Se si dà \sum dentro un ambiente matematico \scriptscriptstyle il comando \sum chiama \@sum\normalsize, se è \scriptstyle chiama \@sum\large, sa è \textstyle chiama \@sum\Large e se è \displaystyle chiama \@sum\LARGE.

Ci ho preso?

Tutto tranne il commento a \edef. L’originale è
`\edef\@sum#1{\vcenter{\hbox{#1$\mathchar\number\sum$}}}`
senza altri @ che nel nome del comando. Funziona perché l’unico comando espandibile dentro al testo della definizione è \number. Siccome \sum è definito tramite \mathchardef, si può usare \number\sum per ottenere il codice usato (in forma decimale, ma a \mathchar va benissimo lo stesso). Così anche senza sapere che codice è stato assegnato a \sum, posso usarlo e, cosa più importante, nel testo di sostituzione di \@sum non compare il comando \sum.

Con LaTeX senza alcun pacchetto aggiuntivo, \meaning\@sum restituisce
`macro:#1->\vcenter {\hbox {#1$\mathchar 4944$}}`
che è esattamente ciò che volevo (e in effetti 4944 è “1350, cioè esadecimale in TeXspeak). Con \edef si definisce un comando espandendo tutto ciò che è espandibile nel testo di sostituzione. Non lo sono i caratteri (ovviamente), \vcenter, \hbox e \sum. Ma \number sì e l’espansione di \number comincia cercando un numero: \sum va bene come numero, in questo contesto, come ogni cosa definita tramite \chardef o \mathchardef. Per esempio la costante \@ne che si usa spesso è definita con
`\chardef\@ne=1`
In questo caso è un bieco trucco per evitare di andare a guardare la definizione di \sum con \mathchardef. Ma più generale, in fin dei conti. Certo, se \sum fosse definito in altro modo andremmo nei pasticci. Non farei lo stesso con \notin, per esempio.

Ciao
Enrico

Go to top