.png)
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, ab
deveria ser X = 1
e 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 é \StrRight
não produzir algo que seja considerado um único caractere, talvez? Como faço para corrigir isso?
Responder1
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 \@firstoftwo
e \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}