Át kell alakítanom egy betűt az ábécé indexébe és az ASCII / Unicode indexévé. És szeretném, ha az esetek mindegyikének egynél több módja lenne (mert emlékszem, hogy több is van).
Először egy betűt akartam átalakítani ábécé indexévé (emlékszem néhány itteni felhasználó megmutatta nekem, hogyan kell elvégezni az átalakítást [a chaten vagy az egyik kérdéshez fűzött megjegyzés részben], de nem másoltam példákat, és elfelejtettem, hogyan kell csinálni hogy bármit megtalálhassak az archívumokban]), de aztán úgy döntöttem, hogy hozzáadom a betűk ASCII- / Unicode-hoz kapcsolódó indexét a keverékhez, mivel ennek meglehetősen hasonló eljárásnak kell lennie. id = “dfaf9297a9″>
a a karakter hivatkozására, de úgy tűnik, hogy nem tudja működni, vagy nem emlékszik pontosan arra, amire használják. Rövidesen, de a időközben volt értelme feltenni a kérdést, mivel gyorsabb lehet.
Köszönöm.
Megjegyzések
Válasz
A TeXBook azt mondja:
A TeX nyelvű szám kezdődhet
"
-vel, amely esetben oktálisnak tekinthető, vagy"
-vel, amikor hexadecimálisnak tekintik. Tehát\char"142
és\char"62
egyenértékűek a\char98
-vel.
és
A token
`
12 (bal oldali idézet), amelyet bármely karakterjel vagy bármely vezérlősorozat-token követ, amelynek neve egyetlen karakter, a TeX belső kódját jelenti a kérdéses szereplő. Például a\char`b
és a\char`\b
is egyenértékű a\char98
És ezek a belső kódok a következők: (a The TeXBook C. függelékéből):
(az oktális számokat dőlt betűvel, a hexadecimális számokat írógépes betűtípussal ábrázoljuk), amelyek megegyeznek az ASCII táblával.
Tehát a TeX esetében az összes 98
, "142
, "62
és `b
érvényesek és ugyanazt a számot képviselik .
A TeXBook azt is elmondja, hogy mit csinál a \number
primitív:
\number
. Amikor a TeX kibővül\number
, beolvassa a következő számot (a tokenek kibővülnek menet közben); a végső bővítés ennek a számnak a tizedesjegyű ábrázolásából áll, amelyet “-
” előz meg, ha negatív.
Tehát felveheti mindkettőt, és meglesz, amit szeretne! A \number`b
mappában a \number
beolvassa a (z) `b
számot, és tizedesre, 98
, amely a b
ASCII kódja.
Ha egy ilyen betű ábécé szerinti indexét szeretné megtenni, megteheti ahogy Siracusa javasolta, és vonja le a a
(vagy A
indexből, ha nagybetűvel foglalkozik):
\the\numexpr`z-`a+1\relax % prints 26
(hozzá kell adnia 1-et, mert a `a-`a
nulla értéket eredményezne). Itt nincs szükség számra, mert \numexpr
már tudja, hogy `z
és `a
számok ; csak \the
szükséges a \numexpr
kibontásához.
Ugyanez vonatkozik az Unicode karakterekre is. (véletlenszerűen kiválasztva) 8354-et nyomtatja ki, ami az U + 20A2 unicode pont tizedes ábrázolása. Természetesen XeTeX vagy LuaTeX szükséges ezek használatához.
Megjegyzések
- Megtisztelő megemlítés:
\lccode
és\uccode
. - @ bp2017 Nos, igen, ezek is működhetnek. Ne feledje azonban, hogy beállíthatja a (z)
\lccode`b=`a
, majd iv beállítást (de nyilván nem szabad, hogy ' t). Az id = “2ea0190dcd”>
97, nem 98 lesz. A \lccode`b
is (általában) egyenlő \lccode`B
, míg \number`b
és \number`B
különböznek. Emellett a \lccode
a nem betűs karakterek (például \lccode`!
) nulla, nem az ASCII index. Ugyanez vonatkozik a \uccode
fájlra is.
\@arabic
. (Ez betűket vehet igénybe, mint „CHAR”, és kibővíthető számjegyűre.) \@arabic{<stuff>}
kibővül \number <stuff>
. A TeX `CHAR
esetében pedig nem ' t kell betű (bár annak látszik), hanem egy szám . Ez ' s miért működik \number
(és \@arabic
).
<backtick><character>
hogy megkapja a lett karakterkódját er. Az ábécéindexhez egyszerűen kivonhatja aa
(vagyA
) indexet.