动态长度名称

动态长度名称

我想创建类似对象的东西,保存它在 latex 中的自身位置。因为我不知道如何在 latex 中创建对象,所以我想为每个对象创建一个带有分隔名称的长度。就像这样:(别担心\umlPositionX\umlPositionY之前已经定义过了)

\newcommand{\umlClass}[1]{
    \newlength{\umlPositionX#1}
    \setlength{\umlPositionX#1}{\umlPositionX}
    \newlength{\umlPositionY#1}
    \setlength{\umlPositionY#1}{\umlPositionY}
}

现在我想获得这样的物体的位置:

\newcommand{\umlXPositionOf}[1]{\setlength{\umlPositionX}{\umlPositionX#1}
\newcommand{\umlYPositionOf}[1]{\setlength{\umlPositionY}{\umlPositionY#1}

但是,创建具有这种动态名称的长度是不可能的。我总是得到错误:

命令 \umlPositionX 已定义。

我认为这是因为#1不属于长度的名称。

答案1

要以您想要的方式将宏修补在一起,可以使用\csname ...\endcsname

\documentclass[12pt]{article}
\newlength{\umlPositionX}
\newlength{\umlPositionY}
\setlength{\umlPositionX}{1pt}
\setlength{\umlPositionY}{2pt}
\newcommand{\umlClass}[1]{%
    \edef\temp{\noexpand\newlength{\csname umlPositionX#1\endcsname}%
     \noexpand\setlength{\csname umlPositionX#1\endcsname}{\umlPositionX}%
     \noexpand\newlength{\csname umlPositionY#1\endcsname}%
     \noexpand\setlength{\csname umlPositionY#1\endcsname}{\umlPositionY}}%
\temp%
}
\begin{document}
\umlClass{A}\the\umlPositionXA \the\umlPositionYA
\end{document}

在此处输入图片描述

相关内容