将数字转换为 \alpha 数字

将数字转换为 \alpha 数字

是否有可能有一个简单命令\makeAlph可以执行以下操作:

  • a当收到时返回1
  • b当收到时返回2
  • ETC。
  • 在其他情况下不返回任何内容(或者其他内容;实际上这对我来说并不重要)?

谢谢。

附言:我知道如何做counters但这不是我想要的。

答案1

\documentclass{article}%
\newcommand*\makeAlph[1]{\symbol{\numexpr96+#1}}
\begin{document}

\makeAlph{10}
\makeAlph{22}

This is the first letter of the alphabet : \makeAlph{1}

\end{document}

如果您想允许所有号码,请使用:

\documentclass{article}%
\newcommand*\makeAlph[1]{%
  \ifnum#1<1\else% do nothing if < 1
    \ifnum#1>26 a\makeAlph{\numexpr#1-26}% start loop
    \else\symbol{\numexpr96+#1}\fi\fi}
\begin{document}

This is the first letter of the alphabet : \makeAlph{1}

\makeAlph{10}  \makeAlph{44}
\makeAlph{-3}
\end{document}

答案2

LaTeX 内核已经有了它:

\makeatletter
\newcommand{\makeAlph}[1]{\@alph{#1}}
\makeatother

但是,如果参数大于 26,则会返回错误。如果您希望超出范围的输入不返回任何内容,只需复制\@alph不带错误消息的定义:

\newcommand{\makeAlph[1]{%
  \ifcase #1\or a\or b\or c\or d\or e\or f\or g\or h\or
    i\or j\or k\or l\or m\or n\or o\or p\or q\or r\or
    s\or t\or u\or v\or w\or x\or y\or z\fi}

如果你想返回?超出范围的情况,

\newcommand{\makeAlph[1]{%
  \ifcase #1?\or a\or b\or c\or d\or e\or f\or g\or h\or
    i\or j\or k\or l\or m\or n\or o\or p\or q\or r\or
    s\or t\or u\or v\or w\or x\or y\or z\else ?\fi}

与其他答案中显示的方法相比,其优势在于最后两个定义仅使用完全可扩展的函数。\int_to_alph:n当然也是完全可扩展的。

答案3

还有一个很好的 expl3 实现

\documentclass{article}%
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand \makealph { m }
 {
  \int_to_alph:n { #1 }
 }
\ExplSyntaxOff
\begin{document}

\makealph{1}

\makealph{5}

\makealph{35}

\end{document}

正如指出的那样,应该通过的定义\makealph来完成\DeclareExpandableDocumentCommand,以便它可以在扩展上下文中使用。

如果你想使用 LaTeX2e 解决方案,你可以使用包alphalph

\documentclass[12pt]{article}%
\newcounter{mycounter}
\usepackage{alphalph}
\begin{document}

\setcounter{mycounter}{2}
\alph{mycounter}

\setcounter{mycounter}{35}

\alphalph{\value{mycounter}}

\alphalph{17}
\end{document}

请注意,该包alphalph需要数字输入而不是计数器。

相关内容