Jeg har brug for at konvertere et bogstav til dets indeks i alfabetet og til dets ASCII / Unicode-indeks. Og vil gerne have mere end én måde at opnå hver af sagerne (fordi jeg husker, at der er mere end en), hvis det er muligt.

Først ville jeg konvertere et bogstav til dets alfabetindeks (jeg husker nogle af brugerne her viste mig, hvordan man laver konverteringen for et stykke tid siden [enten i chatten eller i kommentarfeltet til et af spørgsmålene], men jeg kopierede ikke eksempler og glemte, hvordan man gør det [jeg kan ikke synes for at finde noget i arkiverne]), men så besluttede jeg at tilføje ASCII- / Unicode-relateret indeks for et bogstav i blandingen, da dette må være en helt lignende procedure.

Jeg husker noget som "\a for at henvise til tegnet a men kan ikke synes at få det til at fungere eller huske nøjagtigt hvad det bruges til. Jeg læser vejledninger kort tid, men i i mellemtiden var det fornuftigt at stille spørgsmålet, da det kan være hurtigere.

Tak.

Kommentarer

  • Syntaksen er <backtick><character> for at få karakterkoden for lett er. For alfabetindekset kan du bare trække indekset for a (eller henholdsvis A).

Svar

TeXBook siger:

Et tal på TeXs sprog kan begynde med et ", i hvilket tilfælde det betragtes som oktalt eller med et ", når det betragtes som hexadecimalt. Således \char"142 og \char"62 svarer til \char98.

og

Tokenet ` 12 (venstre citat), efterfulgt af et hvilket som helst tegntegn eller af et hvilket som helst kontrolsekvens-token, hvis navn er et enkelt tegn, står for TeXs interne kode til den pågældende karakter. For eksempel svarer \char`b og \char`\b til \char98.

Og disse interne koder er (fra Appendiks C til TeXBook ):

indtast billedebeskrivelse her

(oktale tal er repræsenteret i kursiv og hexadecimale tal i skrifttypefont), hvilket er det samme som ASCII-tabellen.

Så for TeX er alt 98, "142, "62 og `b er gyldige og repræsenterer det samme nummer .

TeXBook fortæller dig også, hvad \number primitiv gør:

  • \number. Når TeX udvider \number, læser det antallet der følger (udvider tokens som det går); den endelige udvidelse består af den decimale repræsentation af dette tal, efterfulgt af “-” hvis det er negativt.

Så du kan tilføje begge dele og få det, du vil have! I \number`b læser \number tallet `b og udvides til dets decimalrepræsentation, 98, som er ASCII-koden til b.

Hvis du vil have det alfabetiske indeks for et sådant bogstav, kan du gøre som siracusa foreslog, og træk fra indekset for a (eller A, hvis der er tale om store bogstaver):

\the\numexpr`z-`a+1\relax % prints 26 

(du skal tilføje 1, fordi `a-`a ville resultere i nul). Her behøver du ikke nummer, fordi \numexpr allerede ved, at `z og `a er tal ; du skal bare bruge \the for at udvide \numexpr.

Det samme gælder for Unicode-tegn. \number`₢ (tilfældigt valgt) udskriver 8354, hvilket er decimalrepræsentationen af unicode-punktet U + 20A2. Naturligvis har du brug for XeTeX eller LuaTeX for at bruge disse.

Kommentarer

  • Ærlig omtale: \lccode og \uccode.
  • @ bp2017 Nå, ja, de kan også fungere. Bemærk dog, at du kan (men burde ' t naturligvis) indstille \lccode`b=`a, derefter \the\lccode`b vil være 97, ikke 98. Også \lccode`b er (normalt) lig \lccode`B, mens \number`b og \number`B er forskellige. Også \lccode ikke-bogstaver (f.eks. \lccode`!) er nul, ikke ASCII-indekset. Det samme gælder for \uccode.
  • Der er ' også \@arabic. (Det kan tage et bogstav som `CHAR og udvides til ciffer.)
  • @ bp2017 Ja, fordi \@arabic{<stuff>} udvides til \number <stuff>. Og for TeX ‌`CHAR er ikke ' t et bogstav (selvom det ligner et), men et nummer . At ' derfor \number (og \@arabic) fungerer.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *