有反向的 \alph 吗?

有反向的 \alph 吗?

是否有一个命令可以执行相反的操作\alph,即获取一个字母并给出该字母在字母表中对应的数字?

如果有,那么\Alph\roman或怎么样\Roman


语境:

我有一个分段命令\subtask,用于排版练习表的解决方案,有时我不会按照“正确”的顺序回答子任务。子任务使用小写拉丁字母进行编号\alph

我调整了命令,这样\subtask[4]当我想跳转到子任务“d”时就可以写入。这很好,但\subtask[d]会更加方便用户使用。因此,问题来了。

答案1

数字上下文中的反引号可用于获取字母的字符代码。这可用于计算字母在字母表中的位置。

  • 的参数的定义范围为到\inversalph,并且对于到。azAZ\inverseAlph

  • 该字母可以隐藏在宏(甚至是嵌套的宏)中。

\documentclass{article}
\newcommand*{\inversalph}[1]{%
  \the\numexpr(\expandafter`\romannumeral-`\x#1-`a+1)\relax
}
\newcommand*{\inversAlph}[1]{%
  \the\numexpr(\expandafter`\romannumeral-`\x#1-`A+1)\relax
}
\begin{document}
  a: \inversalph{a},
  b: \inversalph{b},
  k: \inversalph{k},
  z: \inversalph{z}

  A: \inversAlph{A},
  B: \inversAlph{B},
  K: \inversAlph{K},
  Z: \inversAlph{Z}

  \def\lettera{a}
  \def\letterz{z}
  \def\letteraa{\lettera}
  \def\letterzz{\letterz}
  \lettera: \inversalph{\lettera} = \inversalph{\letteraa},
  \letterz: \inversalph{\letterz} = \inversalph{\letterzz}

   Page: \inversalph{\alph{page}}
\end{document}

结果

评论:

  • \numexpr用于计算。
  • \romannumeral-`\x是一个将以下标记扩展多次的技巧。

答案2

\int_from_alph:n使用或\int_from_roman:n的快速解决方案expl3。请注意,aA在这里并不重要,并且这里的大写和小写罗马数字也是相同的。

\setcounter{section}{\alphtonumber{w}}示例用于表明宏是可扩展的。

\documentclass{article}


\usepackage{xparse}

\ExplSyntaxOn
\newcommand{\alphtonumber}[1]{%
  \int_from_alph:n{#1}
}


\newcommand{\romantonumber}[1]{%
  \int_from_roman:n{#1}
}

\ExplSyntaxOff

\usepackage{pgffor}


\begin{document}


\alphtonumber{a} -- \alphtonumber{z}

And \alphtonumber{M}\ is a pretty number and \romantonumber{MMXVI} is a good year (more or less), as well as \romantonumber{mdcccclxxiv} was a good year. 


\setcounter{section}{\alphtonumber{w}}

\section{Foo}

\end{document}

在此处输入图片描述

答案3

数字始终存储在计数器中,\alph而 等仅用于显示值。

例如如果你定义

\newcounter{foo}
\renewcommand{\thefoo}{\alph{foo}}

\thefoo

你得到 a,b,c,…

\value{foo}

您始终可以访问计数器的整数值。

相关内容