Devo convertire una lettera nel suo indice alfabetico e nel suo indice ASCII / Unicode. E vorrei avere più di un modo per ottenere ciascuno dei casi (perché ricordo che ce ne sono più di uno), se possibile.
Per prima cosa volevo convertire una lettera nel suo indice alfabetico (ricordo alcuni utenti qui mi hanno mostrato come eseguire la conversione qualche tempo fa [nella chat o nella sezione dei commenti a una delle domande] ma non ho copiato esempi e ho dimenticato come farlo [non posso sembrare per trovare qualsiasi cosa negli archivi]), ma poi ho deciso di aggiungere lindice ASCII / Unicode di una lettera nel mix poiché questa deve essere una procedura abbastanza simile.
Ricordo qualcosa come "\a
per fare riferimento al carattere a ma “non riesco a farlo funzionare o non ricordo esattamente per cosa è usato. Leggerò i manuali a breve ma in nel frattempo aveva senso porre la domanda poiché potrebbe essere più veloce.
Grazie.
Commenti
Risposta
The TeXBook dice:
Un numero nella lingua di TeX può iniziare con
"
, nel qual caso è considerato ottale o con"
, quando è considerato esadecimale. Pertanto,\char"142
e\char"62
equivalgono a\char98
.
e
Il token
`
12 (virgoletta a sinistra), quando seguito da qualsiasi segno di carattere o da qualsiasi segno di sequenza di controllo il cui nome è un singolo carattere, sta per il codice interno di TeX per il personaggio in questione. Ad esempio,\char`b
e\char`\b
equivalgono anche a\char98
.
E questi codici interni sono (dallAppendice C di The TeXBook ):
(i numeri ottali sono rappresentati in corsivo e i numeri esadecimali nel carattere della macchina da scrivere) che è lo stesso della tabella ASCII.
Quindi per TeX tutti i 98
, "142
, "62
e `b
sono validi e rappresentano lo stesso numero .
TeXBook ti dice anche cosa fa la \number
primitiva:
\number
. Quando TeX espande\number
, legge il numero che segue (espandendo i token man mano che procede); lespansione finale consiste nella rappresentazione decimale di quel numero, preceduta da “-
” se negativa.
Quindi puoi aggiungere entrambi e avere quello che vuoi! In \number`b
, \number
legge il numero `b
e si espande nella sua rappresentazione decimale, 98
, che è il codice ASCII per b
.
Se vuoi lindice alfabetico di tale lettera, puoi farlo come suggerito da siracusa e sottrarre dallindice di a
(o A
, se si tratta di lettere maiuscole):
\the\numexpr`z-`a+1\relax % prints 26
(devi aggiungere 1 perché `a-`a
risulterebbe zero). Qui non è necessario il numero perché \numexpr
sa già che `z
e `a
sono numeri ; è sufficiente \the
per espandere \numexpr
.
Lo stesso vale per i caratteri Unicode. \number`₢
(scelto a caso) stampa 8354, che è la rappresentazione decimale del punto unicode U + 20A2. Ovviamente hai bisogno di XeTeX o LuaTeX per usarli.
Commenti
- Menzione donore:
\lccode
e\uccode
. - @ bp2017 Beh, sì, anche quelli possono funzionare. Tuttavia, tieni presente che puoi (ma non dovresti ' t, ovviamente) impostare
\lccode`b=`a
, quindi\the\lccode`b
sarà 97, non 98. Inoltre\lccode`b
è (di solito) uguale a\lccode`B
, mentre\number`b
e\number`B
sono diversi. Inoltre,\lccode
di i caratteri non composti da lettere (\lccode`!
, ad esempio) è zero, non lindice ASCII. Lo stesso vale per\uccode
. - Ci sono ' anche
\@arabic
. (Può richiedere una lettera, come “CHAR, ed espandersi in cifre.) - @ bp2017 Sì perché
\@arabic{<stuff>}
si espande in\number <stuff>
. E per TeX`CHAR
non è ' t una lettera (sebbene sembri una), ma un numero . Ecco perché '\number
(e\@arabic
) funziona.
<backtick><character>
per ottenere il codice carattere della lettera er. Per lindice alfabetico puoi semplicemente sottrarre lindice dia
(oA
rispettivamente).