如何在没有宏或全局默认值的情况下提供 \href 的不同选项?

如何在没有宏或全局默认值的情况下提供 \href 的不同选项?

我试图让\href下面代码中的两个函数使用不同的选项无需调用宏或全局默认值

\documentclass{article}
\usepackage{hyperref}

\begin{document}

\href{www.overleaf.com}{link1}
\href{www.overleaf.com}{link2}

\end{document}

我们的想法是,其中一个将继续采用默认值,并通过第二个,我相信,选项hidelinks = true保留可点击属性但删除默认蓝框。我已经看到很多例子展示了如何使用宏来实现这一点,但由于我只想在极少数情况下使用非默认行为,所以我更喜欢使用选项范围\href直接

这在精神上与@CephBirk 给出的答案非常相似如何对不同的 \href 命令使用不同的颜色?但我不知道如何让它移除盒子而不是改变颜色。

答案1

您传递的选项\href将传递到href选项组,但处理链接外观的选项属于Hyp选项组。如果您不想将界面保留到选项href组,那么这就足够了:

\documentclass{article}

\usepackage{hyperref}

\makeatletter
\DeclareRobustCommand*{\Myhref}[1][]{% definition copied form hyperref.sty
  \begingroup
  \setkeys{Hyp}{#1}% Changed href to Hyp
  \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}%
}
\makeatother

\begin{document}

\Myhref{www.overleaf.com}{link1}

\Myhref[hidelinks]{www.overleaf.com}{link2}

\Myhref{www.overleaf.com}{link3}

\end{document}

打印结果为:

在此处输入图片描述

如果您仍要使用标准选项,\href那么您需要做更多的事情:

\documentclass{article}

\usepackage{hyperref}

\makeatletter
\DeclareRobustCommand*{\Myhref}[1][]{%
  \begingroup
  \hypersetup{#1}%
  \inner@href % Call an "inner href"
}
\DeclareRobustCommand*{\inner@href}[1][]{%
  \setkeys{href}{#1}%
  \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}%
}
\makeatother

\begin{document}

\Myhref{www.overleaf.com}{link1}

\Myhref[hidelinks]{www.overleaf.com}{link2}

\Myhref{www.overleaf.com}{link3}

\end{document}

然后\Myhref命令有可选参数:

\Myhref[<Hyp-options>][<href-options>]{<link>}{<text>}

相关内容