l’uso di \mathstrut

  • Creatore
    Topic
  • #14235
    OldClaudio
    Partecipante
      Up
      0
      Down
      ::

      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.

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #14236
        Up
        0
        Down
        ::

        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 “pi” è più in basso, nel secondo caso, rispetto alla linea di base, a causa del \mathstrut. L’altezza relativa della “i” rispetto alla freccia è identica nei due casi. Lo puoi vedere mettendo \mathstrut fuori: con il codice
        `\[\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

      • #14237
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Be’, il belo delle esperienze altri è che non si finisce mai di imparare qualche cosa.

          Grazie mille

      Visualizzazione 1 filone di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top