XeLaTeX e il circoletto dei gradi

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


      Questo è un problema risolto, ma vorrei condividerne la soluzione con i frequentatori del forum..

      Con (pdf)LaTeX per segnare i gradi angolari accanto al loro valore numerico in modo testo si usa \textdegree; in modo matematico si mette ad espenonente un circoletto con ^\circle.

      Con XelLaTeX ci sono tre vie: in modo testo si può usare \textdegree ma si può anche inserire il simbolo diretto º se la tastiera lo consente (malgrado tutti i difetti della tastiera italiana, questa ha il pregio di avere direttamente su un tasto il simbolo dei gradi; con altre tastiere magari ci vuole un qualche tasto intelligente; sul mio Mac con tastiera USA international scrivo il segno º premendo alt+0 (questa è la cifra zero)).
      Invece in modo matematico non esiste nessuna macro che permetta di inserire il simbolo dei gradi e il comando, sempre possibile, ^\circle produce un pallino talmente piccolo che non si sa dire nemmeno se il suo interno sia banco o se sia nero. In realtà i font matematici per XeLaTeX, XITS Math e Asana Math contengono il glifo giusto, ma non è reso accessibile nelle sue funzioni di segno matematico.

      Però con la seguente magia inserita nel preambolo:
      `
      \XeTeXmathcharnum`º = “2E000B0
      `
      si dice a XeLaTeX che quando si immette il simbolo dei gradi in modo matematico, questo segno, che ha posizione esadecimale “B0 nella famiglia di font numero “2, deve essere trattato come una lettera con tipo matematico 7; non ho idea di come il codice 7 diventi parte del byte “E, ma tant’è, questa è la magia, che mi è costata diverse ore di lavoro, data la lentezza con cui girano le mie rotelline, ma vorrei risparmiare ad altri un po’ di tempo prezioso.

      Non leggete il PostScriptum che segue, si tratta di considerazioni che dimostrano la mia incompetenza in certe cose e che probabilmente sono del tutto oscure.

      PS: lo so che l’esadecimale “E è costituito dai bit 1110, e che i primi tre bit da soli vogliono dire 7, ciò nonostante non ne vedo bene la logica; con il semplice TeX ogni cifra esadecimale era di interpretazione trasparente. Non sono riuscito a scoprire il significato del bit meno significativo, che forse ha a che vedere con l’ultima parte dei codici della tabella UNICODE. In ogni caso la documentazione su queste cose nel XeTeX Companion di Michel Goosens è assai poco chiara. Ho già segnalato la cosa a Will Robertson, il curatore di diverse parti di XeLaTeX, compresa la matematica.

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #58867
        Up
        0
        Down
        ::

        Questo è un problema risolto, ma vorrei condividerne la soluzione con i frequentatori del forum..

        Con (pdf)LaTeX per segnare i gradi angolari accanto al loro valore numerico in modo testo si usa \textdegree; in modo matematico si mette ad espenonente un circoletto con ^\circle.

        Con XelLaTeX ci sono tre vie: in modo testo si può usare \textdegree ma si può anche inserire il simbolo diretto º se la tastiera lo consente (malgrado tutti i difetti della tastiera italiana, questa ha il pregio di avere direttamente su un tasto il simbolo dei gradi; con altre tastiere magari ci vuole un qualche tasto intelligente; sul mio Mac con tastiera USA international scrivo il segno º premendo alt+0 (questa è la cifra zero)).
        Invece in modo matematico non esiste nessuna macro che permetta di inserire il simbolo dei gradi e il comando, sempre possibile, ^\circle produce un pallino talmente piccolo che non si sa dire nemmeno se il suo interno sia banco o se sia nero. In realtà i font matematici per XeLaTeX, XITS Math e Asana Math contengono il glifo giusto, ma non è reso accessibile nelle sue funzioni di segno matematico.

        Però con la seguente magia inserita nel preambolo:
        `
        \XeTeXmathcharnum`º = “2E000B0
        `
        si dice a XeLaTeX che quando si immette il simbolo dei gradi in modo matematico, questo segno, che ha posizione esadecimale “B0 nella famiglia di font numero “2, deve essere trattato come una lettera con tipo matematico 7; non ho idea di come il codice 7 diventi parte del byte “E, ma tant’è, questa è la magia, che mi è costata diverse ore di lavoro, data la lentezza con cui girano le mie rotelline, ma vorrei risparmiare ad altri un po’ di tempo prezioso.

        Non leggete il PostScriptum che segue, si tratta di considerazioni che dimostrano la mia incompetenza in certe cose e che probabilmente sono del tutto oscure.

        PS: lo so che l’esadecimale “E è costituito dai bit 1110, e che i primi tre bit da soli vogliono dire 7, ciò nonostante non ne vedo bene la logica; con il semplice TeX ogni cifra esadecimale era di interpretazione trasparente. Non sono riuscito a scoprire il significato del bit meno significativo, che forse ha a che vedere con l’ultima parte dei codici della tabella UNICODE. In ogni caso la documentazione su queste cose nel XeTeX Companion di Michel Goosens è assai poco chiara. Ho già segnalato la cosa a Will Robertson, il curatore di diverse parti di XeLaTeX, compresa la matematica.

        Il carattere che hai inserito non è il simbolo dei gradi, ma il carattere di posto U+00BA (MASCULINE ORDINAL INDICATOR). Il carattere ° (U+00B0, DEGREE SIGN) si ottiene con la tastiera US Extended con Alt+Shift+8.

        I codici Unicode sono a 21 bit e questo rende ostica e complicata un’interpretazione diretta come quella dei \mathcode di TeX. Il pacchetto unicode-math usa la famiglia matematica numero 4; il comando primitivo di XeTeX da usare è \XeTeXmathcode che prende tre argomenti: il tipo, la famiglia e il “code point”:
        `\XeTeXmathcode`°=”7 “4 “B0`
        Naturalmente è possibile assegnare a qualsiasi carattere il mathcode che si preferisce e quindi dare anche
        `\XeTeXmathcode`º=”7 “4 “B0`
        Tuttavia non mi pare normale che al carattere U+00B0 non venga cambiato il mathcode dall’originale che si otterrebbe con
        `\XeTeXmathcode`°=”0 “0 “B0`
        Non sono del tutto convinto che vada usato come tipo il “7 e non “0, anzi sarei propenso a usare “0.

        Ciao
        Enrico

      • #58868
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Per Bacco ai ragione a proposito dell’ordinale maschile! Pensare che sono anni che lo uso al posto del simbolo dei gradi e l’ho sempre ritenuto valido; si vede che con i font che usavo la mia acutezza visiva non mi permetteva di discernerlo.

          Invece a proposito di \XeTeXmathcode il testo di Goossens non ne parla, o io non sono riuscito a trovalo; ma le prove le ho fatte prima con \XeTeXmathchardef e usando la control sequence così definita; quel comando richiede i tre valori esadecimali come tu dici a proposito di \XeTeXmathchar; Invece \XeTeXmatcharnum vuole un solo numero che ho fatto fatica a determinare, appunto perché non riuscivo a rendermi conto dei 21 bit.

          Tuttavia famiglia 2 o famiglia 4 ti posso garantire che la famiglia 0 non funziona, per lo meno con me non ha funzionato; è la prima a cui ho pensato. Ci posso riprovare, ma ho dei dubbi che possa venire usato, come con TeX, il font di testo, lo stesso usato per gli operatori. Ora siccome il circoletto deve andare accanto a una cifra e le cifre di XITS Math sono più alte di quelle di Linux Libertine O, (due font citati a caso) il pallino di Libertine non starebbe bene di fianco ad una cifra di XITS. La famiglia 2 è la prima che mi ha dato un risultato accettabile, quindi mi sono fermato l’ì e non ho esplorato le successive famiglie.

          Sul MathType 0 oppure 7 si può discutere; probabilmente hai ragione.

          Grazie comunque per gli spunti di riflessione.

          PS: scusa dove hai trovato la descrizione di \XeTeXmathchar?

          Ciao
          Claudio

          EDIT: SCUSATEMI TUTTI IL DISTURBO, MA SE NON FOSSE STATO PER ENRICO NON MI SAREI MAI RESO CONTO CHE IL PALLINO DEI GRADI FUNZIONA BENISSIMO IN MATEMATICA SENZA NESSUNA ACROBAZIA, MENTRE L’ORDINALE MASCHILE EVIDENTEMENTE NO!

          ANCORA GRAZIE ENRICO

          Claudio

        • #58869
          Up
          0
          Down
          ::

          PS: scusa dove hai trovato la descrizione di \XeTeXmathchar?

          texdoc xetex

          Il documento è citato nell’Introduzione a XeLaTeX. 🙂

          Ciao
          Enrico

        • #58870
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Già il solito errore: quando c’è troppa documentazione si finisce con evitare di cosultare quella più utile. Mi ero messo in testa che il testo di Michel Goossens, xtexmain.pdf, fosse molto più approfondito di xetex.pdf, e ragionavo col il solito criterio “nel più sta il meno”; non è sempre vero.

            Grazie
            Claudio

        Visualizzazione 3 filoni di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top