我想定义一个命令,它接受输入,通过列表生成另一个变量,然后将其输入以\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}