使用 \href 和列表中的参数

使用 \href 和列表中的参数

我想定义一个命令,它接受输入,通过列表生成另一个变量,然后将其输入以\href提供链接。如以下示例所示:

\documentclass[11pt, a4paper]{article}

\usepackage{hyperref}
\usepackage{forarray}


\DefineArrayVar{Names}{@}
{,}{aaa,bbb,ccc}
{,}{Einstein,Newton,Leibnitz}

\newcommand{\links}[1]
{\csname Names@#1\endcsname\
}

\newcommand*{\newhref}[1]{\href{http://en.wikipedia.org/wiki/\links{#1}}{\links{#1}}}

\begin{document}

Here is a page about \newhref{aaa}.

\end{document}

但是我获得的链接突出显示,但没有链接到任何内容。出了什么问题?谢谢!

答案1

问题出在\该行末尾。

\newcommand{\links}[1]{\csname Names@#1\endcsname}

就能解决这个问题。

不过,我会采用一种更友好的方式。

\documentclass[11pt, a4paper]{article}

\usepackage{xparse}
\usepackage{hyperref}

\ExplSyntaxOn

% define the array
\NewDocumentCommand{\definearray}{mm}
 {% #1 = array name, #2 = items
  \prop_new:c { g_francesco_array_#1_prop }
  \prop_gset_from_keyval:cn { g_francesco_array_#1_prop } { #2 }
 }
% generic command for retrieving a value
\NewExpandableDocumentCommand{\getarrayvalue}{mm}
 {% #1 = array name, #2 = array item
  \prop_item:cn { g_francesco_array_#1_prop } { #2 }
 }

\ExplSyntaxOff

\definearray{Names}{
  aaa=Einstein,
  bbb=Newton,
  ccc=Leibnitz,
}

\newcommand*{\newhref}[1]{%
  \href{http://en.wikipedia.org/wiki/\getarrayvalue{Names}{#1}}{\getarrayvalue{Names}{#1}}%
}

\begin{document}

Here is a page about \newhref{aaa}.

\end{document}

相关内容