![将数字转换为 \alpha 数字](https://linux22.com/image/269939/%E5%B0%86%E6%95%B0%E5%AD%97%E8%BD%AC%E6%8D%A2%E4%B8%BA%20%5Calpha%20%E6%95%B0%E5%AD%97.png)
是否有可能有一个简单命令\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
需要数字输入而不是计数器。