Ik moet een letter converteren naar zijn index in het alfabet en naar zijn ASCII / Unicode-index. En zou graag meer dan één manier hebben om elk van de gevallen te bereiken (omdat ik me herinner dat er meer dan één zijn), indien mogelijk.
Eerst wilde ik een letter converteren naar de alfabetische index (ik herinner me een aantal van de gebruikers hier lieten me een tijdje geleden zien hoe ik de conversie moest doen [in de chat of in de commentaarsectie op een van de vragen] maar ik heb geen voorbeelden gekopieerd en ben vergeten hoe ik het moest doen [ik kan niet lijken om iets in de archieven te vinden]), maar toen besloot ik om ASCII- / Unicode-gerelateerde index van een letter in de mix toe te voegen, aangezien dit een vrij vergelijkbare procedure moet zijn.
Ik herinner me zoiets als "\a
om naar het teken a te verwijzen, maar “lijkt het niet te laten werken of precies te onthouden waarvoor het wordt gebruikt. Ik zal binnenkort handleidingen lezen, maar in de ondertussen was het logisch om de vraag te stellen, omdat deze misschien sneller gaat.
Dank je.
Opmerkingen
Answer
The TeXBook zegt:
Een getal in de taal van TeX kan beginnen met een
"
, in welk geval het wordt beschouwd als octaal, of met een"
, wanneer het als hexadecimaal wordt beschouwd. Dus\char"142
en\char"62
zijn equivalent aan\char98
.
en
Het token
`
12 (linker aanhalingsteken), wanneer gevolgd door een karaktertoken of door een controlereeks token waarvan de naam een enkel karakter is, staat voor TeX s interne code voor het personage in kwestie.\char`b
en\char`\b
zijn bijvoorbeeld ook gelijk aan\char98
.
En deze interne codes zijn (uit bijlage C van The TeXBook ):
(octale getallen worden cursief weergegeven en hexadecimale getallen in typemachine-lettertype), wat hetzelfde is als de ASCII-tabel.
Dus voor TeX alle 98
, "142
, "62
en `b
zijn geldig en vertegenwoordigen hetzelfde getal .
Het TeXBook vertelt je ook wat de \number
primitief doet:
\number
. Wanneer TeX zich uitbreidt\number
, leest het het nummer dat volgt (tokens uitbreiden terwijl het bezig is); de laatste uitbreiding bestaat uit de decimale weergave van dat getal, voorafgegaan door “-
” indien negatief.
U kunt dus beide toevoegen en krijgen wat u wilt! In \number`b
leest \number
het getal `b
en breidt het uit naar de decimale weergave, 98
, wat de ASCII-code is voor b
.
Als je de alfabetische index van zon letter wilt, kun je dat doen zoals Siracusa suggereerde en trek af van de index van a
(of A
, als het om hoofdletters gaat):
\the\numexpr`z-`a+1\relax % prints 26
(je moet er 1 toevoegen omdat `a-`a
zou resulteren in nul). Hier heb je geen nummer nodig omdat \numexpr
al weet dat `z
en `a
cijfers zijn ; je hebt alleen \the
nodig om \numexpr
uit te breiden.
Hetzelfde geldt voor Unicode-tekens. \number`₢
(willekeurig gekozen) drukt 8354 af, wat de decimale weergave is van het unicode-punt U + 20A2. Je hebt natuurlijk XeTeX of LuaTeX nodig om deze te gebruiken.
Opmerkingen
- Eervolle vermelding:
\lccode
en\uccode
. - @ bp2017 Ja, die kunnen ook werken. Houd er echter rekening mee dat u (uiteraard niet ' t, uiteraard)
\lccode`b=`a
kunt instellen en vervolgens\the\lccode`b
zal 97 zijn, niet 98. Ook\lccode`b
is (meestal) gelijk aan\lccode`B
, terwijl\number`b
en\number`B
zijn verschillend. Ook de\lccode
van niet-lettertekens (\lccode`!
, bijvoorbeeld) is nul, niet de ASCII-index. Hetzelfde geldt voor\uccode
. - Daar ' s ook
\@arabic
. (Het kan een letter bevatten, zoals `CHAR, en uitbreiden naar een cijfer.) - @ bp2017 Ja omdat
\@arabic{<stuff>}
wordt uitgebreid naar\number <stuff>
. En voor TeX`CHAR
isn ' t een letter (hoewel het er zo uitziet), maar een cijfer . Dat ' is waarom\number
(en\@arabic
) werkt.
<backtick><character>
om de tekencode van het lett eh. Voor de alfabetindex kun je gewoon de index vana
(ofA
) aftrekken.