plain. attributi delle font open type, category code 11 e 12

  • Creatore
    Topic
  • #83246
    Up
    0
    Down
    ::


    Salve a tutti. Se voglio sostituire un certo testo con un altro all’interno di una frase posso usare una macro simile alla seguente:

    `
    \def\changebird#1fringuello#2.{#1tordo#2}
    \changebird Stamattina un fringuello inseguiva una folaga.
    \bye
    `

    Funziona.
    La cosa però sembra non funzionare se in input c’è una sequenza di tokens di categoria 12, ad esempio:

    `
    \def\changenumstyle#1+onum#2;{#1-onum#2}
    \edef\tmp{\fontname\font} % \fontname\font espande a ”Castellar Bellini Pro:mapping=tex-text,+onum,+liga,+kern”
    \expandafter\changenumstyle\tmp;
    % qui restituisce l'errore ! Paragraph ended before \changenumstyle was complete.
    \bye
    `

    Dunque, come è possibile implementare una macro per modificare a runtime gli attributi opentype delle font senza incappare in questo problema?

    Grazie, ciao.

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

      Sam Qasbah” post=82586Salve a tutti. Se voglio sostituire un certo testo con un altro all’interno di una frase posso usare una macro simile alla seguente:

      `
      \def\changebird#1fringuello#2.{#1tordo#2}
      \changebird Stamattina un fringuello inseguiva una folaga.
      \bye
      `

      Funziona.
      La cosa però sembra non funzionare se in input c’è una sequenza di tokens di categoria 12, ad esempio:

      `
      \def\changenumstyle#1+onum#2;{#1-onum#2}
      \edef\tmp{\fontname\font} % \fontname\font espande a ”Castellar Bellini Pro:mapping=tex-text,+onum,+liga,+kern”
      \expandafter\changenumstyle\tmp;
      % qui restituisce l'errore ! Paragraph ended before \changenumstyle was complete.
      \bye
      `

      Dunque, come è possibile implementare una macro per modificare a runtime gli attributi opentype delle font senza incappare in questo problema?

      Le stringhe prodotte da [tt]\the[/tt] o [tt]\fontname[/tt] sono tutte di caratteri con categoria 12.

      La strategia tradizionale sarebbe
      `\begingroup\catcode`O=12 \catcode`N=12 \catcode`U=12 \catcode`M=12
      \lowercase{\endgroup\def\changenumstyle#1+ONUM#2;}{#1-onum#2}`
      Con le estensioni e-TeX (che XeTeX possiede), puoi fare, forse più semplicemente, con
      `\begingroup\edef\x{\endgroup\def\noexpand\changenumstyle##1\detokenize{+onum}##2;}\x{#1-onum#2}`
      Funziona anche
      `\expandafter\def\expandafter\changenumstyle\expandafter#\expandafter1\detokenize{+onum}#2;{#1-onum#2}`
      Hai da scegliere. 🙂

      Ciao
      Enrico

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

Go to top