我想隐藏hyperref
通过 建立的链接中的一个字符\url
,但文本表示应保留该字符。例如,如果字符是*
,我想\url{http://tex.stackexchange*.com}
将其用作\href{http://tex.stackexchange.com}{http://tex.stackexchange*.com}
。
\hyper@linkurl
MWE 中给出了一次令人尴尬的破解宏的失败尝试,只是为了展示一些努力。
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\makeatletter
\renewcommand\hyper@linkurl{%
\begingroup
\lccode`\~=`\*\relax
\lowercase{\def~}{}%
\catcode`\*\active
\lccode`\~=0\relax
\my@hyper@linkurl
}
\def\my@hyper@linkurl#1#2{%
\edef\x{\toks0={#2}}\x
\Hy@pstringdef\Hy@pstringURI{\the\toks0}%
\hyper@chars
\leavevmode
\pdfstartlink
attr{%
\Hy@setpdfborder
\ifx\@pdfhightlight\@empty
\else
/H\@pdfhighlight
\fi
\ifx\@urlbordercolor\relax
\else
/C[\@urlbordercolor]%
\fi
}%
user{%
/Subtype/Link%
\ifHy@pdfa /F 4\fi
/A<<%
/Type/Action%
/S/URI%
/URI(\Hy@pstringURI)%
\ifHy@href@ismap
/IsMap true%
\fi
\Hy@href@nextactionraw
>>%
}%
\relax
\Hy@colorlink\@urlcolor#1\Hy@xspace@end
\close@pdflink
\endgroup
}
\makeatother
\url{http://tex.stackexchange*.com}
\end{document}
这是试图使星号处于活动状态,并在分配给 时将其替换为空组toks0
,但不起作用。从 复制这么多代码也感觉不对hyperref
。有什么更好的方法可以实现这一点?
答案1
使用该etoolbox
软件包,修补\hyper@linkurl
似乎很容易,而且比我的自定义\URL
定义更可靠(参见此答案的先前版本)。
这允许在 URL 中使用#
和。&
代码
\documentclass{article}
\usepackage{hyperref}
\usepackage{etoolbox}
\makeatletter
\def\strip@star#1*#2\@strip@star{%
\expandafter\def\expandafter\strip@star@result\expandafter{\strip@star@result#1}%
\if\relax\detokenize{#2}\relax\else
\def\strip@star@temp{#2}%
\expandafter\expandafter\expandafter\strip@star\expandafter\strip@star@temp
\expandafter\@strip@star
\fi
}
\patchcmd{\hyper@linkurl}{\Hy@pstringdef\Hy@pstringURI{#2}}{%
\def\strip@star@result{}%
\expandafter\strip@star#2*\@strip@star
\Hy@pstringdef\Hy@pstringURI{\strip@star@result}%
}{}{}
\makeatother
\begin{document}
\url{http://tex*.stack*exchange*.com#anchorwithfun:$&}
\end{document}