Jeg må konvertere en bokstav til indeksen i alfabetet, og til ASCII / Unicode-indeksen. Og vil gjerne ha mer enn en måte å oppnå hver av tilfellene på (fordi jeg husker at det er flere enn én), hvis mulig.
Først ønsket jeg å konvertere et brev til dets alfabetindeks (jeg husker Noen av brukerne her viste meg hvordan jeg konverterte for en stund siden [enten i chatten eller i kommentarseksjonen til et av spørsmålene] men jeg kopierte ikke eksempler og glemte hvordan jeg skulle gjøre det [jeg kan ikke virke for å finne noe i arkivene]), men så bestemte jeg meg for å legge til ASCII- / Unicode-relatert indeks av et brev i blandingen, siden dette må være en ganske lik prosedyre.
Jeg husker noe sånt som "\a
for å referere til tegnet a men kan ikke synes å få det til å fungere eller huske nøyaktig hva det brukes til. Jeg vil lese håndbøker om kort tid, men i i mellomtiden var det fornuftig å stille spørsmålet siden det kan være raskere.
Takk.
Kommentarer
Svar
TeXBook sier:
Et tall på TeXs språk kan begynne med et
"
, i så fall blir det sett på som oktalt, eller med et"
, når det blir sett på som heksadesimalt. Dermed tilsvarer\char"142
og\char"62
\char98
.
og
Tokenet
`
12 (venstre sitat), etterfulgt av et hvilket som helst tegntegn eller av et hvilket som helst kontrollsekvenstegn med navnet et enkelt tegn, står for TeXs interne kode for karakteren det er snakk om. For eksempel\char`b
og\char`\b
tilsvarer også\char98
.
Og disse interne kodene er (fra vedlegg C til TeXBook ):
(oktale tall er representert i kursiv, og heksadesimale tall i skrivemaskinfont) som er det samme som ASCII-tabellen.
Så for TeX er alt 98
, "142
, "62
og `b
er gyldige og representerer samme nummer .
TeXBook forteller deg også hva \number
primitiv gjør:
\number
. Når TeX utvider\number
, leser det tallet som følger (utvider tokens mens det går); den endelige utvidelsen består av desimalrepresentasjonen av tallet, foran «-
» hvis det er negativt.
Så du kan legge til begge deler og ha det du vil! I \number`b
leser \number
tallet `b
og utvides til desimalrepresentasjon, 98
, som er ASCII-koden for b
.
Hvis du vil ha den alfabetiske indeksen til en slik bokstav, kan du gjøre som siracusa foreslo og trekk fra indeksen til a
(eller A
, hvis du har å gjøre med store bokstaver):
\the\numexpr`z-`a+1\relax % prints 26
(du må legge til 1 fordi `a-`a
vil resultere i null). Her trenger du ikke antall fordi \numexpr
allerede vet at `z
og `a
er tall ; du trenger bare \the
for å utvide \numexpr
.
Det samme gjelder Unicode-tegn. \number`₢
(valgt tilfeldig) skriver ut 8354, som er desimalrepresentasjonen av unicode-punktet U + 20A2. Selvfølgelig trenger du XeTeX eller LuaTeX for å bruke disse.
Kommentarer
- Ærlig omtale:
\lccode
og\uccode
. - @ bp2017 Vel, ja, de kan også fungere. Vær imidlertid oppmerksom på at du kan (men burde ikke ' t, åpenbart) angi
\lccode`b=`a
, deretter\the\lccode`b
vil være 97, ikke 98. Også\lccode`b
er (vanligvis) lik\lccode`B
, mens\number`b
og\number`B
er forskjellige. Også\lccode
tegn som ikke er bokstav (for eksempel\lccode`!
) er null, ikke ASCII-indeksen. Det samme gjelder\uccode
. - Der ' er også
\@arabic
. (Det kan ta en bokstav, som `CHAR, og utvides til siffer.) - @ bp2017 Ja fordi
\@arabic{<stuff>}
utvides til\number <stuff>
. Og for TeX`CHAR
er ikke ' t en bokstav (selv om den ser ut som en), men et nummer . At ' derfor\number
(og\@arabic
) fungerer.
<backtick><character>
for å få tegnkoden til lett er. For alfabetindeksen kan du bare trekke indeksen tila
(ellerA
).