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

LaTeX:从命令变量中提取数字和字母,并转换为罗马数字,latex,numbers,roman-numerals,xelatex,Latex,Numbers,Roman Numerals,Xelatex,我正在写一篇论文,在很多场合都在寻找解决我编程问题的方法。基本上,我的研究数据中有一系列我区分的项目,如“A1”、“A2”、“A3”、…、“A13”、“B1”、“B2”等等。顺便说一句,这些数据标签我现在不能更改,因为它在我的论文中一直被使用。它们的格式总是[大写字母][数字(长度为1到2个字符)],例如,X20或L9。对于每个数据项,我想指定一个特定的名称。由于LaTeX不允许在命令中使用数字,我已经创建了一个包含以下类型命令的长列表,用于为每个数据标签指定名称: \newcommand{\D

我正在写一篇论文,在很多场合都在寻找解决我编程问题的方法。基本上,我的研究数据中有一系列我区分的项目,如“A1”、“A2”、“A3”、…、“A13”、“B1”、“B2”等等。顺便说一句,这些数据标签我现在不能更改,因为它在我的论文中一直被使用。它们的格式总是[大写字母][数字(长度为1到2个字符)],例如,X20或L9。对于每个数据项,我想指定一个特定的名称。由于LaTeX不允许在命令中使用数字,我已经创建了一个包含以下类型命令的长列表,用于为每个数据标签指定名称:

\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}
现在,我想分配一个latex命令,它可以只接受一个变量,即数据标签(无论是“Q30”和“A3”),并使用\GotoData命令,以及在\DataName***命令中调出相应的数据名称。例如,键入\CompleteData{E10},然后让latex加载如下内容:

\newcommand{\CompleteData}[1]%
{This is [\GotoData{#1}] named [\DataNameEx].}

\CompleteData{E10} % <--- this should look like "This is [Data E10] named [Data name for E10]."
“这是名为[E10的数据名称]的[Data 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]."
\newcommand{\CompleteData}[1]%
{这是名为[\DataNameEx]。}

\CompleteData{E10}%以下是一个适合我的示例:

\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}
\def\FormatDataName#1#2${\setcounter{DataNumber}{#2}\csname DataName#1\roman{DataNumber}\endcsname}

\begin{document}
\section{Data A2}\label{dataA2}
\CompleteData{A2}
\end{document}

\formataname
将第一个字符提取到
#1
中,将数字提取到
#2
中。它使用
\formataname
接受带分隔符的参数(由最后的
$
分隔)的事实来实现。之后,只需构造要调用的宏名称(使用
\csname
),并使用
\roman
将数字格式化为罗马数字。(我认为您无法使其工作的原因是您没有传递
\roman
计数器).

您可能会更幸运地询问。很抱歉,这不是一个答案,但latex有一个特殊的stackexchange站点:也许更高的权限可以将您的问题转移到那里。嗨,汤姆,非常感谢您的回复。您的代码对我的目的非常有效。我只是希望我。不知道它是如何工作的,但它确实有效。我现在正试图弄清楚如何“汤姆,接受你的回答,给你应得的15分。再次感谢你。)