我正在写论文,并在许多场合都在搜索试图找到解决我的编程问题的解决方案。基本上,我在研究数据中有一系列项目为“ A1”,“ A2”,“ A3”,…,“ A13”,“ B1”,B2“等等。 ,顺便说一句,我现在无法更改,因为它在整个论文中都被使用。它们总是格式化为[caps-letter] [digit(长度为1至2个字符)],例如,例如,x20或l9。对于每个数据项目,我想分配一个特定的名称。由于乳胶不允许在命令中数字,所以我已经创建了以下类型的命令类型的长列表,以将名称分配给每个数据标签:

\newcommand{\DataNameAi}[]%
 {Data name for A1}
\newcommand{\DataNameAii}[]%
 {Data name for A2}
% …
\newcommand{\DataNameXxi}[]%
 {Data name for X11}
% …

等等。基本上,正如您所看到的那样,我将命令称为“ dataname”,然后是字母(caps),然后是写入罗马数字的数字。这一切都是手动完成的,我之所以这样做,是因为乳胶似乎不喜欢命令名称中的任何阿拉伯号码。如果允许这一点,我将使用 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 ***命令中列出相应的数据名称。也就是说,例如,type pleasteData {e10},然后将乳胶加载类似:

“这是[数据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变量来生成必要的 dataname ***命令在 pleasteData newCommand中。

因此,基本上,我看到实现此结果的唯一方法是将代码提取并将最后一个数字(一到两个数字)转换为罗马数字。具体来说,我一直在努力弄清楚如何做一些事情:

  1. 如何仅从新命令中的参数末端提取数字(例如我的“ Q31”或“ A1”参数中的数字)。
  2. 类似地从参数的第一个字符中提取字母
  3. 如何将数字转换为数字

我尝试以多种不同的方式进行搜索,但似乎从未找到我需要回答这两个问题的问题……我以为我发现我很接近 这个 网站,但后来意识到这不是我所追求的。 Etextools乳胶软件包看起来也很有希望,但是我的新手(甚至没有程序员),无法从我的Texlive(2010)安装带来的帮助PDF中有意义。我还读过有关 roman和 romanmeral的信息(例如, 这里)但是,这两个命令出于某种原因进行编译时会导致错误。在我的计算机上, roman {2}变成“罗马”,而 romanmeral {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}
\def\FormatDataName#1#2${\setcounter{DataNumber}{#2}\csname DataName#1\roman{DataNumber}\endcsname}

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

\FormaDataName 将第一个字符提取到 #1, ,以及数字 #2. 。这样做的事实是 \FormatDataName 进行划界论点(由决赛界定 $)。之后,这只是构造要调用的宏名称的情况(使用 \csname),并使用 \roman 将数字格式化为罗马数字。 (我认为您无法工作的原因是因为您没有通过 \roman 柜台)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top