Necesito convertir una letra a su índice en el alfabeto y a su índice ASCII / Unicode. Y me gustaría tener más de una forma de lograr cada uno de los casos (porque recuerdo que hay más de uno), si es posible.
Primero quería convertir una letra a su índice alfabético (recuerdo algunos de los usuarios aquí me mostraron cómo hacer la conversión hace un tiempo [ya sea en el chat o en la sección de comentarios a una de las preguntas] pero no copié ejemplos y olvidé cómo hacerlo [no puedo para encontrar algo en los archivos]), pero luego decidí agregar el índice ASCII- / Unicode de una letra en la mezcla, ya que este debe ser un procedimiento bastante similar.
Recuerdo algo como "\a
para hacer referencia al carácter a pero parece que no puedo hacer que funcione o recordar exactamente para qué se usa. Leeré los manuales en breve, pero en el mientras tanto, tenía sentido hacer la pregunta, ya que puede ser más rápido.
Gracias.
Comentarios
Respuesta
El TeXBook dice:
Un número en el idioma de TeX puede comenzar con
"
, en cuyo caso se considera octal, o con"
, cuando se considera hexadecimal. Por lo tanto,\char"142
y\char"62
son equivalentes a\char98
.
y
El token
`
12 (comillas a la izquierda), cuando están seguidas de cualquier token de carácter o de cualquier token de secuencia de control cuyo nombre sea un solo carácter, representa el código interno de TeX para el personaje en cuestión. Por ejemplo,\char`b
y\char`\b
también son equivalentes a\char98
.
Y estos códigos internos son (del Apéndice C de The TeXBook ):
(los números octales están representados en cursiva y los números hexadecimales en letra de máquina de escribir) que es igual a la tabla ASCII.
Entonces, para TeX todo 98
, "142
, "62
y `b
son válidos y representan el mismo número .
El TeXBook también le dice lo que hace la \number
primitiva:
\number
. Cuando TeX expande\number
, lee el número que sigue (expandiendo tokens a medida que avanza); la expansión final consiste en la representación decimal de ese número, precedida por «-
» si es negativo.
¡Para que puedas agregar ambos y tener lo que quieras! En \number`b
, \number
lee el número `b
y se expande a su representación decimal, 98
, que es el código ASCII para b
.
Si desea el índice alfabético de dicha letra, puede hacerlo como sugirió siracusa y reste del índice de a
(o A
, si se trata de letras mayúsculas):
\the\numexpr`z-`a+1\relax % prints 26
(debe agregar 1 porque `a-`a
resultaría en cero). Aquí no necesita el número porque \numexpr
ya sabe que `z
y `a
son números ; solo necesita \the
para expandir \numexpr
.
Lo mismo ocurre con los caracteres Unicode. \number`₢
(elegido al azar) imprime 8354, que es la representación decimal del punto Unicode U + 20A2. Por supuesto, necesitas XeTeX o LuaTeX para usarlos.
Comentarios
- Mención de honor:
\lccode
y\uccode
. - @ bp2017 Bueno, sí, esos también pueden funcionar. Sin embargo, tenga en cuenta que puede (pero no debería ' t, obviamente) establecer
\lccode`b=`a
, luego\the\lccode`b
será 97, no 98. Además,\lccode`b
es (normalmente) igual a\lccode`B
, mientras que\number`b
y\number`B
son diferentes. Además, el\lccode
de Los caracteres que no son letras (\lccode`!
, por ejemplo) es cero, no el índice ASCII. Lo mismo ocurre con\uccode
. - Hay ' también
\@arabic
. (Puede tomar una letra, como `CHAR, y expandirse a un dígito). - @ bp2017 Sí porque
\@arabic{<stuff>}
se expande a\number <stuff>
. Y para TeX`CHAR
no es ' t una letra (aunque parece una), pero un número . Esa ' es la razón por la que\number
(y\@arabic
) funciona.
<backtick><character>
para obtener el código de carácter de la letra er. Para el índice alfabético, puede restar el índice dea
(oA
respectivamente).