Á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

  • A szintaxis <backtick><character> hogy megkapja a lett karakterkódját er. Az ábécéindexhez egyszerűen kivonhatja a a (vagy A) indexet.

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

írja ide a kép leírását

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

  • Vannak ' is \@arabic. (Ez betűket vehet igénybe, mint „CHAR”, és kibővíthető számjegyűre.)
  • @ bp2017 Igen, mert a \@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).
  • Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük