Trebuie să convertesc o literă la indexul său din alfabet și la indexul ASCII / Unicode. Și aș dori să existe mai multe modalități de a realiza fiecare dintre cazuri (pentru că îmi amintesc că există mai multe), dacă este posibil.
Mai întâi am vrut să convertesc o literă în indexul alfabetic al acesteia (îmi amintesc unii dintre utilizatorii de aici mi-au arătat cum să fac conversia cu ceva timp în urmă [fie în chat, fie în secțiunea de comentarii la una dintre întrebări], dar nu am copiat exemple și am uitat cum să o fac [nu pot să par pentru a găsi ceva în arhive]), dar apoi am decis să adaug un index ASCII- / Unicode al unei litere în mix deoarece acesta trebuie să fie o procedură destul de similară.
Îmi amintesc ceva de genul "\a
pentru a face referire la caracterul a , dar nu poate să-l facă să funcționeze sau să-mi amintesc exact pentru ce este folosit. Voi citi manualele în scurt timp, dar în între timp, avea sens să punem întrebarea, deoarece poate fi mai rapidă.
Vă mulțumim.
Comentarii
Răspuns
Cartea TeX spune:
Un număr în limba TeX poate începe cu un
"
, caz în care este considerat octal sau cu un"
, atunci când este considerat hexadecimal. Astfel,\char"142
și\char"62
sunt echivalente cu\char98
.
și
Jetonul
`
div. personajul în cauză. De exemplu,\char`b
și\char`\b
sunt, de asemenea, echivalente cu\char98
.
Și aceste coduri interne sunt (din Anexa C din TheXBook ):
(numerele octale sunt reprezentate cu caractere italice și numerele hexazecimale în fontul de mașină de scris) care este același cu tabelul ASCII.
Deci pentru TeX toate 98
, "142
, "62
și `b
sunt valide și reprezintă același număr .
TeXBook vă spune, de asemenea, ce face primitivul \number
:
\number
. Când TeX extinde\number
, citește numărul care urmează (extinderea jetoanelor pe măsură ce merge); extinderea finală constă din reprezentarea zecimală a acelui număr, precedată de „-
” dacă este negativă.
Deci, le puteți adăuga pe ambele și puteți obține ceea ce doriți! În \number`b
, \number
citește numărul `b
și se extinde la reprezentarea sa zecimală, 98
, care este codul ASCII pentru b
.
Dacă doriți indexul alfabetic al unei astfel de litere, puteți face după cum a sugerat siracusa și scădeți din indexul a
(sau A
, dacă este vorba de litere mari):
\the\numexpr`z-`a+1\relax % prints 26
(trebuie să adăugați 1 deoarece `a-`a
ar avea ca rezultat zero). Aici nu aveți nevoie de număr deoarece \numexpr
știe deja că `z
și `a
sunt numere ; aveți nevoie doar de \the
pentru a extinde \numexpr
.
Același lucru este valabil și pentru caracterele Unicode. \number`₢
(ales la întâmplare) imprimă 8354, care este reprezentarea zecimală a punctului unicode U + 20A2. Desigur, aveți nevoie de XeTeX sau LuaTeX pentru a le utiliza.
Comentarii
- Mențiune de onoare:
\lccode
și\uccode
. - @ bp2017 Ei bine, da, pot funcționa și acestea. Cu toate acestea, rețineți că puteți (dar nu ar trebui ' t, evident) să setați
\lccode`b=`a
, apoi\the\lccode`b
va fi 97, nu 98. De asemenea,\lccode`b
este (de obicei) egal\lccode`B
, în timp ce\number`b
și\number`B
sunt diferite. De asemenea,\lccode
din caracterele care nu sunt litere (\lccode`!
, de exemplu) este zero, nu indexul ASCII. Același lucru este valabil și pentru\uccode
. - Există și ' și
\@arabic
. (Poate lua o literă, ca `CHAR și să se extindă la cifră.) - @ bp2017 Da, deoarece
\@arabic{<stuff>}
se extinde la\number <stuff>
. Și pentru TeX`CHAR
nu este ' o literă (deși pare una), ci un număr . ' este motivul pentru care funcționează\number
(și\@arabic
).
<backtick><character>
pentru a obține codul de caractere al literei er. Pentru indexul alfabetului puteți scădea indexula
(sau respectivA
).