\mathcode, a altri codenames

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


      Il potente comando \the può estrarre il valore numerico di qualunque cosa sia definito nelle viscere diTeX (pdftex, nel nostro caso). la sintassi è

      \the<codename><8-bit number>

      I codename possono essere vaie cose, tipo \catcode, \mathcode, \lccode, ecc. L’<8-bit number> può essere rappresentato dal segno preceduto dal backtik (noi generalmente, quando l’abbiamo in tastiera, lo usiamo per l’accento grave e lo chiamiamo così). UN esempio del TeX book: \the\mathcode`/ permette di stmapre il codice matematico della barra diritta.

      Fin qui è tutto semplice.

      Se però vogliamo spare, per esempio, il numero corrispondente al codice matematico di un carattere implicito? Un carattere implicito è una macro a cui è stato assegnato il codice e la categoria di un carattere esplicito mediante il comando \let: \let\bgroup{ dice che \bgroup è una graffa implicita, mentre, ovviamante { è una graffa esplicita.

      Bene, o meglio male: L’<8-bit number> NON può essere rappresentato da un carattere implicito.

      Come si fa a trasformare un carattere implicito nel suo corrispondente carattere esplicito, magari ricorrendo a \scantokens di eTeX (pdfetex) o a qualche magia del pacchetto xparse anche solo per ricavarne le sue codifiche?

      Grazie Enrico; solo tu lo puoi sapere!

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


        Quello che mi viene in mente è una tabellona del genere:

        `\def\getcode#1{%
        % …
        \if\noexpand#1a\number`a \fi
        \if\noexpand#1b\number`b \fi
        \if\noexpand#1c\number`c \fi
        \if\noexpand#1d\number`d \fi
        % …
        \if\noexpand#1\bgroup\number`\{ \fi
        % …
        }

        \let\xa=a
        \let\xd=d

        \getcode\xa

        \getcode\xd

        \getcode\bgroup

        \bye`
        Una nota TeXnica: dopo \let\xa=a, \xa non è una macro (il TeXbook usa sempre “macro” per indicare un token espandibile).

        Ciao
        Enrico

      • #68739
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Grazie mille, Enrico; la tua soluzione va oltre a quello che a me servirebbe; nello stesso tempo può essere adattata per saper se un dato carattere implicito cade in un certo range di cui si conoscono gli estremi.

          Quello che avrei voluto fare sarebbe stato realizzare quello che Knuth afferma nel secondo capoverso dell’appendice C del TeXbook: “… the fact that `b always denotes that the integer 98 means that we can write machine-independent macros that decide, for instance, whether a given charachter is a digit between 0 and 9.”

          Se il given character è un implicit character, la cosa è molto difficile; se è l’argomento di una macro non sembra così difficile. Infatti la tua soluzione è lunga, ma può funzionare; bisogna solo ripetere la definizione per il centinaio di caratteri ASCII che TeX può usare, come gli spazi, il ^^M, il ^^I e simili.

          Per quel che riguarda “macro”, lo so che indica qualcosa frutto di una definizione, quindi espandibile; ma Knuth chiama “control sequence” ogni cosa che cominci con un backslash; onestamente in italiano sarebbe farraginoso; non sono mai riuscito a trovare un altro nome né a creare un neologismo (pratica da evitare, ma talvolta necessaria) per indicare con una parola semplice l’equivalente di “sequenza di controllo” ; anche “token complesso” è troppo lungo e si può riferire a molte cose.

          Ciao e grazie
          Claudio

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

      Go to top