Jag behöver konvertera en bokstav till dess index i alfabetet och till dess ASCII / Unicode-index. Och skulle vilja ha mer än ett sätt att uppnå vart och ett av fallen (för jag minns att det finns fler än en), om möjligt.

Först ville jag konvertera en bokstav till dess alfabetindex (jag minns några av användarna här visade mig hur man gör konverteringen för ett tag sedan [antingen i chatten eller i kommentarsektionen till en av frågorna] men jag kopierade inte exempel och glömde hur man gjorde det [jag kan inte verka för att hitta något i arkiven]), men sedan bestämde jag mig för att lägga till ASCII- / Unicode-relaterat index för ett bokstav i mixen eftersom detta måste vara en ganska liknande procedur.

Jag minns något som "\a för att referera till tecknet a men kan inte tycka att det fungerar eller kommer ihåg exakt vad det används till. Jag kommer att läsa manualer inom kort men i under tiden var det vettigt att ställa frågan eftersom den kan gå snabbare.

Tack.

Kommentarer

  • Syntaxen är <backtick><character> för att få teckenkoden för lett er. För alfabetet kan du bara subtrahera indexet för a (eller A).

Svar

TeXBook säger:

Ett tal på TeXs språk kan börja med ett ", i vilket fall det betraktas som oktalt, eller med ett ", när det betraktas som hexadecimalt. \char"142 och \char"62 är likvärdiga med \char98.

och

Token ` 12 (vänster citat), när det följs av vilket tecken som helst eller av någon styrsekvens som har ett enda tecken, står för TeX: s interna kod för karaktären i fråga. Till exempel är \char`b och \char`\b också ekvivalenta med \char98.

Och dessa interna koder är (från bilaga C till TeXBook ):

ange bildbeskrivning här

(oktala siffror representeras med kursiv stil och hexadecimala siffror i skrivmaskinteckensnitt) vilket är detsamma som ASCII-tabellen.

Så för TeX alla 98

, "62 och `b är giltiga och representerar samma nummer .

TeXBook berättar också vad \number primitivt gör:

  • \number. När TeX expanderar \number läser det antalet som följer (expanderar tokens när det går); den slutliga expansionen består av decimalrepresentationen för det numret, föregås av ”-” om det är negativt.

Så du kan lägga till båda och få vad du vill! I \number`b läser \number siffran `b och expanderar till dess decimalrepresentation, 98, vilket är ASCII-koden för b.

Om du vill ha det alfabetiska indexet för en sådan bokstav kan du göra som siracusa föreslog och dra från indexet för a (eller A, om det handlar om stora bokstäver):

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

(du måste lägga till 1 eftersom `a-`a skulle leda till noll). Här behöver du inte nummer eftersom \numexpr redan vet att `z och `a är siffror ; du behöver bara \the för att expandera \numexpr.

Detsamma gäller Unicode-tecken. \number`₢ (slumpmässigt valt) skriver ut 8354, vilket är decimaltalet av unicode-punkten U + 20A2. Naturligtvis behöver du XeTeX eller LuaTeX för att använda dessa.

Kommentarer

  • Ärligt nämnt: \lccode och \uccode.
  • @ bp2017 Tja, ja, de kan också fungera. Observera dock att du kan (men borde ' t självklart) ställa in \lccode`b=`a, sedan \the\lccode`b blir 97, inte 98. Även \lccode`b är (vanligtvis) lika \lccode`B, medan \number`b och \number`B är olika. Dessutom är \lccode icke-bokstäver (till exempel \lccode`!) är noll, inte ASCII-index. Detsamma gäller för \uccode.
  • Där ' finns också \@arabic. (Det kan ta en bokstav, som `CHAR, och expandera till siffra.)
  • @ bp2017 Ja eftersom \@arabic{<stuff>} expanderar till \number <stuff>. Och för TeX ‌`CHAR är inte ' t en bokstav (även om den ser ut som en), men ett nummer . Det är ' varför \number (och \@arabic) fungerar.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *