- Questo topic ha 1 risposta, 2 partecipanti ed è stato aggiornato l'ultima volta 15 anni, 1 mese fa da .
-
Topic
-
`%%% 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
EnricoAh, dimenticavo! Questo è il messaggio numero 10000

- Devi essere connesso per rispondere a questo topic.