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

  • De syntaxis is <backtick><character> om de tekencode van het lett eh. Voor de alfabetindex kun je gewoon de index van a (of A) aftrekken.

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 ):

voer de afbeeldingsbeschrijving hier in

(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.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *