Preciso converter uma letra em seu índice do alfabeto e em seu índice ASCII / Unicode. E gostaria de ter mais de uma maneira de atingir cada um dos casos (porque me lembro que há mais de um), se possível.

Primeiro eu queria converter uma letra para seu índice alfabético (lembro alguns dos usuários aqui me mostraram como fazer a conversão um tempo atrás [no chat ou na seção de comentários para uma das perguntas], mas eu não copiei exemplos e esqueci como fazer [não consigo para encontrar qualquer coisa nos arquivos]), mas então decidi adicionar índice relacionado a ASCII- / Unicode de uma carta na mistura, já que deve ser um procedimento bastante semelhante.

Lembro-me de algo como "\a para fazer referência ao caractere a , mas não consigo fazê-lo funcionar ou lembrar exatamente para que é usado. Estarei lendo os manuais em breve, mas no entretanto, faz sentido fazer a pergunta, pois pode ser mais rápido.

Obrigado.

Comentários

  • A sintaxe é <backtick><character> para obter o código do caractere da carta er. Para o índice alfabético, você pode simplesmente subtrair o índice de a (ou A respectivamente).

Resposta

O TeXBook diz:

Um número na linguagem TeX pode começar com ", caso em que é considerado octal ou com ", quando é considerado hexadecimal. Assim, \char"142 e \char"62 são equivalentes a \char98.

e

O token ` 12 (aspas à esquerda), quando seguido por qualquer token de caractere ou por qualquer token de sequência de controle cujo nome é um único caractere, representa o código interno do TeX para o personagem em questão. Por exemplo, \char`b e \char`\b também são equivalentes a \char98.

E esses códigos internos são (do Apêndice C do The TeXBook ):

insira a descrição da imagem aqui

(os números octais são representados em itálico e os números hexadecimais em fonte de máquina de escrever), que é o mesmo que a tabela ASCII.

Então, para TeX todos de 98, "142, "62 e `b são válidos e representam o mesmo número .

O TeXBook também informa o que o \number primitivo faz:

  • \number. Quando o TeX expande \number, ele lê o número seguinte (expandindo os tokens conforme avança); a expansão final consiste na representação decimal desse número, precedido por “-” se negativo.

Assim, você pode adicionar os dois e ter o que deseja! Em \number`b, \number lê o número `b e expande para sua representação decimal, 98, que é o código ASCII para b.

Se quiser o índice alfabético dessa letra, pode fazer conforme sugerido por siracusa e subtraia do índice de a (ou A, se estiver lidando com letras maiúsculas):

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

(você precisa adicionar 1 porque `a-`a resultaria em zero). Aqui você não precisa de número porque \numexpr já sabe que `z e `a são números ; você só precisa de \the para expandir \numexpr.

O mesmo vale para caracteres Unicode. \number`₢ (escolhido ao acaso) imprime 8354, que é a representação decimal do ponto unicode U + 20A2. Claro que você precisa de XeTeX ou LuaTeX para usá-los.

Comentários

  • Menção honrosa: \lccode e \uccode.
  • @ bp2017 Bem, sim, eles também podem funcionar. No entanto, observe que você pode (mas não deve ' t, obviamente) definir \lccode`b=`a e \the\lccode`b será 97, não 98. Além disso, \lccode`b é (normalmente) igual \lccode`B, enquanto \number`b e \number`B são diferentes. Além disso, o \lccode de caracteres diferentes de letras (\lccode`!, por exemplo) é zero, não o índice ASCII. O mesmo vale para \uccode.
  • Existem ' s também \@arabic. (Pode receber uma letra, como `CHAR, e expandir para um dígito.)
  • @ bp2017 Sim porque \@arabic{<stuff>} se expande para \number <stuff>. E para TeX ‌`CHAR isn ' t uma letra (embora pareça uma), mas um número . É ' por que \number (e \@arabic) funciona.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *