Convertendo coordenadas de string em coordenadas numéricas (por exemplo, ab -> 1 e 2)

Convertendo coordenadas de string em coordenadas numéricas (por exemplo, ab -> 1 e 2)

Estou tentando desenhar pedras em uma grade, e minha API de macro terá duas maneiras de fazer isso: ou você fornece as coordenadas X e Y ou fornece uma sequência de coordenadas. Então, por exemplo, abdeveria ser X = 1e Y = 2.

Seguindoesta resposta de @PhelypeOleinik, agora estou tentando isso:

\documentclass{article}

\usepackage{xstring}

\newcommand\makeFromAlph[1]{ 
  \number\numexpr`#1-`a\relax % I should probably lowercase `#1` first...
}
% I've also tried this version:
% \ExplSyntaxOn
%   \NewExpandableDocumentCommand \makeFromAlph { m }
%     { \int_eval:n { \int_from_alph:n {#1} - 1 } }
% \ExplSyntaxOff

\begin{document}
  \StrRight{ab}{1} % This works
  \makeFromAlph{\StrRight{ab}{1}} % But this doesn't
\end{document}

Mas está me dando esta mensagem de erro:

Improper alphabetic constant.
<to be read again> 

Alguem sabe por quê? O resultado é \StrRightnão produzir algo que seja considerado um único caractere, talvez? Como faço para corrigir isso?

Responder1

insira a descrição da imagem aqui

Isso funciona apenas por expansão, portanto pode ser usado em qualquer lugar que um número seja esperado.

Mostro duas versões, uma usando o clássico latex2e \@firstoftwoe \expandafter, e a segunda, uma versão L3 mais simples.

\documentclass{article}

\makeatletter
\newcommand\foo[1]{%
  The first number is \the\numexpr \expandafter`\@firstoftwo#1-96\relax,
  The second number is \the\numexpr \expandafter`\@secondoftwo#1-96\relax.
  }
  \makeatother

  \ExplSyntaxOn
  \cs_generate_variant:Nn \int_from_alph:n {e}
  \newcommand\foob[1]{
    \int_from_alph:e{\use_i:nn#1}, ~\int_from_alph:e{\use_ii:nn#1}.
    }
  \ExplSyntaxOff
\begin{document}

\foo{ab}

\foob{ab}

\end{document}

informação relacionada