将输入参数传递给超链接

将输入参数传递给超链接

我有一篇包含许多缩写的文本,我想要一个简单的命令,让读者找到每个缩写的原始定义。

我可以按照以下标准方式执行此操作:

\documentclass{article}
\usepackage{hyperref}

\begin{document}
   Text on page 1. 
   \newpage

   Defining \hypertarget{abbv:cg}{center of gravity} on page 2.
   \newpage

   Text on page 3
   \newpage

   Link on page 4 - \hyperlink{abbv:cg}{CG}
\end{document}

但是,我希望有一个类型的命令\ablink{abbreviation},它接受缩写并使用它来形成标签\hyperlink{}{}。我尝试这样做:

\newcommand{\ablink}[1]{\hyperlink{abbv:\lowercase{#1}}{#1}}

\begin{document}
   Text on page 1. 
   \newpage

   Defining \hypertarget{abbv:cg}{center of gravity} on page 2.
   \newpage

   Text on page 3
   \newpage

   Link on page 4 - \ablink{CG}

\end{document}

希望\lowercase{#1}在缩写非小写的情况下具有一定的稳健性。此命令将我发送到第 1 页。

我尝试删除\lowercase

\newcommand{\ablink}[1]{\hyperlink{abbv:{#1}}{#1}}
\begin{document}
   Text on page 1. 
   \newpage

   Defining \hypertarget{abbv:cg}{center of gravity} on page 2.
   \newpage

   Text on page 3
   \newpage

   Link on page 4 - \ablink{CG}
\end{document}

但这也不起作用,所以问题似乎来自动态指定标签。

答案1

假设你只是使用 ASCII 字符作为缩写,

\documentclass{article}
\usepackage{hyperref}

\newcommand{\abdef}[2]{\lowercase{\hypertarget{abbv:#1}}{#2}}
\newcommand{\ablink}[1]{\lowercase{\hyperlink{abbv:#1}}{#1}}

\begin{document}
Text on page 1.
\newpage

Defining \abdef{CG}{center of gravity} on page 2.
\newpage

Text on page 3
\newpage

Link on page 4 - \ablink{CG}

Link on page 4 - \ablink{cg}

\end{document}

你能看到吗?\lowercase将仅对 起作用,在评估或#1之前重新插入修改后的标记。\hypertarget\hyperlink

答案2

不要在 #1 周围添加括号,并且在目标中使用大写字母:

\documentclass{article}
\usepackage{hyperref}

\newcommand{\ablink}[1]{\hyperlink{abbv:#1}{#1}}
\begin{document}
   Text on page 1.
   \newpage

   Defining \hypertarget{abbv:CG}{center of gravity} on page 2.
   \newpage

   Text on page 3
   \newpage

   Link on page 4 - \hyperlink{abbv:CG}{CG}

   Link on page 4 - \ablink{CG}
\end{document}

相关内容