将字符串坐标转换为数字坐标(例如 ab -> 1 和 2)

将字符串坐标转换为数字坐标(例如 ab -> 1 和 2)

我正在尝试在网格上绘制石头,我的宏 API 有两种方法可以做到这一点:要么给出 X 和 Y 坐标,要么给出坐标字符串。因此,例如,ab应该是X = 1Y = 2

下列的此答案来自@PhelypeOleinik,我现在正在尝试这个:

\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}

但它给了我这个错误信息:

Improper alphabetic constant.
<to be read again> 

有人知道原因吗?输出是\StrRight不是因为没有产生被视为单个字符的东西?我该如何解决这个问题?

答案1

在此处输入图片描述

这只是通过扩展来实现的,因此可以在任何需要数字的地方使用。

我展示了两个版本,一个使用经典的 latex2e\@firstoftwo\expandafter,另一个使用更简单的 L3 版本。

\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}

相关内容