Enrico ha scritto
Approfitto per ripetere anche qui una questione TeXnica che coinvolge l’unità immaginaria: se vuoi scriverla come operatore matematico (cosa che io non farei mai, ma capisco che per voi sia così), basta
`
\DeclareMathOperator{\uimm}{i}
`
Il \mathstrut che metti è, in effetti, non solo ridondante, ma “sbagliato”, perché aumenta l’altezza del simbolo: confronta`\[\lim_{p\to\operatorname{i}\omega}f(p)\]
\[\lim_{p\to\operatorname{i\mathstrut}\omega}f(p)\]
`
e vedrai che nel secondo il gruppo sotto “lim” è leggermente più in basso. Come sai \operatorname{x} è equivalente a ciò che si ottiene scrivendo \DeclareMathOperator{\xxx}{x} e usando \xxx.Ho controllato quanto egli dice, ma ritengo che il \mathstrut sia necessario.
Se si compilano le due righe precedenti si osserva che nel primo caso il limite sotto l’operatore \lim risulta un pelo più alto che nel caso della seconda equazione; in questo Enrico ha perfettamente ragione.
Ma se toglie \omega e ricompone, guardando con attenzione vedrà che la linea di base della i nel primo caso è ribassata, mentre nel secondo l’asse matematico della i è perfettamente allineato con l’asse matematico della freccia.
Se lascia \omega,questo effetto non si vede perché nell’”atomo” matematico costituito dalla sottoespressione dopo la freccia compaiono altri termni che consentono l’allineamento dell’asse matematico. Solo quando i è isolato e usato non come operatore ma come numero (o come operatore agente sull’unità) questa capacità di TeX di allineare gli assi matematici viene a cadere. Ho sperimentato questo difetto in diverse circostanze e non so se sia un bug o una feature di TeX. Per altro, a spese di un leggero ingrandimento dell’ “atomo” matematico in questione, lo strut matematico (che aggiusta le sue dimensioni anche al corpo degli indici di primo e di secondo livello) risolve il problema.
Diogene (o forse era Antistene) confutò le asserzioni di Zenone sull’impossibilità del moto mettendosi a camminare: Solvitur ambulando 😀
E allora, camminiamo. Componendo
`\[\lim_{p\to\operatorname{i}}\lim_{p\to\operatorname{i\mathstrut}}\]`
l’unica differenza è che il gruppo “p
`\[\lim_{\mathstrut p\to\operatorname{i}}\lim_{p\to\operatorname{i\mathstrut}}\]`
i risultati sono identici.
Il comportamento che descrivi avviene con il codice
`\[\lim_{p\to\mathop{\mathrm{i}}}\lim_{p\to\mathop{\mathrm{i}\mathstrut}}\]`
ed è proprio per questo che si usa \operatorname{?} e non \mathop{\mathrm{?}}. Infatti per un carattere come “i” l’allineamento deve essere rispetto alla linea di base e non all’asse delle formule: con
`\[\lim_{p\to\mathop{\mathrm{i}}\omega}\lim_{p\to\mathop{\mathrm{i}\mathstrut}\omega}\]`
appare evidente come la prima “i” sia abbassata e allineata con il suo centro (verticale) sull’asse delle formule. Le regole nell’appendice G del TeXbook implicano che, se ciò che risulta nell’argomento di \mathop è un unico carattere, questo viene centrato rispetto all’asse delle formule, come accade per \sum, per esempio.
Il comando \operatorname{x} è essenzialmente equivalente a
`\mathop{\kern0pt\mathrm{x}}`
che rende impossibile usare quella regoletta, visto che l’argomento di \mathop non è un singolo carattere. Per un’illustrazione della regola e del \kern0pt, vedi la definizione di \buildrel in plain.tex:
`\def\buildrel#1\over#2{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}`
Siccome #2 può essere un solo carattere, Knuth si cautela mettendo un \kern0pt nell’argomento di \mathop. La definizione di \operatorname in amsopn.sty si basa sul comando interno \qopname:
`\DeclareRobustCommand{\qopname}[3]{%
\mathop{#1\kern\z@\operator@font#3}%
\csname n#2limits@\endcsname}`
Anche qui si vede il \kern0pt. Qui #1 è sempre \newmcodes@, che cambia certi \mathcode e non è rilevante, #2 è “m” oppure “o” se si vuole avere i limiti sopra e sotto oppure no; #3 è il nome dell’operatore, composto nel font \operator@font, che equivale, più o meno, a richiedere \mathrm.
Rimango sempre dubbioso dello spazio sottile fra la “i” e la \omega. 😀 E nota la pseudocitazione in basso. 😉
Ciao
Enrico