使用字符串键创建变量数组

使用字符串键创建变量数组

我想要一个宏,在其中可以插入一个键作为参数并获取我之前定义的值。这应该类似于创建变量数组但使用字符串/文本而不是数字。

用法应该是这样的:

\setprefix{foaf}{http://xmlns.com/foaf/0.1/}

然后

\getprefix{foaf}

它应该返回http://xmlns.com/foaf/0.1/。当我尝试使用前面提到的问题中的代码时,我得到了! Illegal parameter number in definition of

答案1

\def\setprefix#1#2{\expandafter\def\csname MY@#1\endcsname{#2}}

\def\getprefix#1{\csname MY@#1\endcsname}

应该就是您所需要的。MY@内部前缀是任意的,只需与其他前缀不同(因此,LT@除非您想破坏,否则不要使用longtable)。通过在那里使用不同的字符串,您可以拥有不同的宏数组。

答案2

您可以使用\csname...\endcsname

\documentclass{article}

\makeatletter
\newcommand\setprefix[2]{\global\@namedef{gecko@\detokenize{#1}}{#2}}
\newcommand{\getprefix}[1]{%
  \@ifundefined{gecko@\detokenize{#1}}
    {\@latex@warning{No prefix `\detokenize{#1}' defined}UNKNOWN}%
    {\@nameuse{gecko@\detokenize{#1}}}%
}
\makeatother

\setprefix{foaf}{http://xmlns.com/foaf/0.1/}
\setprefix{\just#stupid@input}{http://xmlns.com/foaf/0.1/}

\begin{document}

\getprefix{foaf}

\getprefix{fuaf}

\getprefix{\just#stupid@input}

\end{document}

在第一个参数中,\setprefix您基本上只能使用平衡括号。

答案3

\documentclass{article}
\newcommand\setprefix[2]{\expandafter\def\csname#1\endcsname{#2}}
\newcommand\getprefix[1]{\csname#1\endcsname}
\begin{document}
\setprefix{foaf}{http://xmlns.com/foaf/0.1/}
\getprefix{foaf}
\end{document}

\key还要注意,您可以在示例中使用 来调用前缀\foaf(只要键是字母即可)。

回滚到原始答案,删除警告。

相关内容