Codice interessante

  • Creatore
    Topic
  • #61941
    Up
    0
    Down
    ::


    `%%% Unicode engine detection with ASCII
    \newif\ifunicodeengine
    \begingroup
    \catcode94=7 \catcode0=9 % ASCII 94 is ^
    \def\empty{}
    \def\next{^^^^0000}
    \expandafter\endgroup
    \ifx\next\empty\unicodeenginetrue\else\unicodeenginefalse\fi`
    Con questo codice si definisce un condizionale che è vero se il motore usato per la compilazione adopera UTF come base (XeTeX o LuaTeX) oppure no (TeX, pdfTeX).

    Spiegazione.

    Nei motori tradizionali, esiste la convenzione che ^^ seguito da un carattere non in {0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f} produce il carattere di codice ASCII di posto 64 di più o di meno; per esempio ^^J indica il carattere ASCII 10 (J è di posto 74; invece ^^? è ASCII 127, perché ? è di posto 63. Se invece ^^ è seguito da due caratteri dell’insieme visto prima, il gruppo è interpretato come se fosse il carattere del posto dato dai due caratteri come cifre esadecimali: ^^7f è esattamente come ^^?. Ciò che conta però è che ^ abbia codice di categoria 7.

    Nei motori UTF (XeTeX e LuaTeX) vale la stessa convenzione, ma ce n’è una estesa: quattro caratteri ^ seguiti da quattro caratteri nell’insieme delle cifre esadecimali indicano il carattere con quel posto in Unicode.

    Dunque ^^^^0000 è interpretato come sei caratteri in TeX e pdfTeX: ^^^•^•0•0•0•0, ma come un solo carattere (quello di posto 0) in XeTeX e LuaTeX. Con \catcode0=9 si insegna al motore di composizione che il carattere di posto 0 deve essere ignorato. Dunque in XeTeX e LuaTeX la definizione di \next equivale a quella di \empty.

    Possibili impieghi.

    `\documentclass[a4paper]{article}
    \newif\ifunicodeengine
    \begingroup
    \catcode94=7 \catcode0=9 % ASCII 94 is ^
    \def\empty{}
    \def\next{^^^^0000}
    \expandafter\endgroup
    \ifx\next\empty\unicodeenginetrue\else\unicodeenginefalse\fi

    \ifunicodeengine
    \usepackage{fontspec}
    \else
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \fi`

    Una versione leggermente diversa si trova nelle TeX Pearls presentate al BachoTeX 2011

    Ciao
    Enrico

    Ah, dimenticavo! Questo è il messaggio numero 10000 :mrgreen:

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


      Complimenti!

      sono onorato di rispondere per primo al tuo messaggio numero 10000 😀

      Intravedo già alcune applicazioni del codice…

      Ciao
      Ivan

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

Go to top