我有一篇包含许多缩写的文本,我想要一个简单的命令,让读者找到每个缩写的原始定义。
我可以按照以下标准方式执行此操作:
\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}