LaTeX:从命令变量中提取数字和字母,并转换为罗马数字

我正在撰写一篇论文,并一直在寻找解决我的编程问题的许多场合。基本上,我有一系列项目,我在研究数据中将其区分为“A1”,“A2”,“A3”,......,“A13”,“B1”,B2“等。这些数据标签顺便说一句,我现在无法改变,因为它在我的论文中被使用过。它们总是被格式化为[caps-letter] [数字(长度为1到2个字符)],例如,X20或L9。对于每个数据item,我想指定一个特定的名称。由于LaTeX不允许命令中的数字,我已经创建了以下类型命令的LONG列表,为每个数据标签分配名称:
newcommand{DataNameAi}[]%
 {Data name for A1}
newcommand{DataNameAii}[]%
 {Data name for A2}
% …
newcommand{DataNameXxi}[]%
 {Data name for X11}
% …
等等。基本上,正如您所看到的,我已将命令命名为“ DataName”,后跟字母(大写字母),后面跟着写为罗马数字的数字。这都是手动完成的,我这样做只是因为LaTeX似乎不喜欢命令名中的任何阿拉伯数字。如果它允许这个,我会使用 DataNameA1等。 在其他地方,我还有一个命令来具体引用数据:
newcommand{GotoData}[1]%
 {hyperref[data#1]{Data~#1}}
See data at Gotodata{E10} % this links to another location labelled label{dataE10}
现在,我想分配一个乳胶命令,只需要一个变量,数据标签(无论是“Q30”和“A3”),并使用 GotoData命令以及在中调出相应的数据名称DataName ***命令。也就是说,例如,键入 CompleteData {E10},然后让LaTeX加载如下: “这是[数据E10],名为[E10的数据名称]。” 这意味着该命令可能类似于:
newcommand{CompleteData}[1]%
{This is [GotoData{#1}] named [DataNameEx].}

CompleteData{E10} % <--- this should look like "This is [Data E10] named [Data name for E10]."
如您所见,上面的代码是不完整的:我一直坚持如何使用#1变量在 CompleteData newcommand中生成必要的 DataName ***命令。 因此,基本上,我看到实现此结果的唯一方法是将代码提取并将最后一个数字(一到两位数字长)转换为罗马数字。具体来说,我一直试图弄清楚如何做一些事情: 如何从newcommand中的参数末尾提取数字(例如我的“Q31”或“A1”参数中的数字)。 同样从参数的第一个字符中提取字母 如何将数字转换为数字 我尝试过很多不同的方式,但似乎从来没有找到我需要回答的这两个问题...当我找到这个网站时我觉得我很接近但后来意识到这不是我追求的。 etextools LaTeX软件包也看起来很有前景,但我太过新手(甚至不是程序员)从我的TexLive(2010)安装附带的PDF帮助中找到了解。我也读过关于 roman和 romannumeral(例如,这里)的内容,但是当我因某些原因编译时,这两个命令会导致错误。在我的电脑上, roman {2}变为“roman”,而 romannumeral {2}变为“2”。只是不明白他们是如何工作的。 任何指导,演示代码或提示将不胜感激!谢谢。     
已邀请:
这是一个适合我的例子:
documentclass{article}
usepackage{hyperref}

newcommand{DataNameAii}{Data name for A2}
newcommand{GotoData}[1]{hyperref[data#1]{Data~#1}}

newcommand{CompleteData}[1]{This is [GotoData{#1}] named [FormatDataName#1$].}
newcounter{DataNumber}
defFormatDataName#1#2${setcounter{DataNumber}{#2}csname DataName#1roman{DataNumber}endcsname}

begin{document}
section{Data A2}label{dataA2}
CompleteData{A2}
end{document}
FormaDataName
将第一个字符提取为
#1
,将数字提取为
#2
。它使用
FormatDataName
采用分界参数(由最终的ѭ8del分隔)这一事实。之后,只是构建您要调用的宏名称(使用
csname
),并使用
roman
将数字格式化为罗马数字。 (我认为你无法让这个工作的原因是因为你没有通过
roman
一个柜台)。     

要回复问题请先登录注册