从超链接中删除字符

从超链接中删除字符

我想隐藏hyperref通过 建立的链接中的一个字符\url,但文本表示应保留该字符。例如,如果字符是*,我想\url{http://tex.stackexchange*.com}将其用作\href{http://tex.stackexchange.com}{http://tex.stackexchange*.com}

\hyper@linkurlMWE 中给出了一次令人尴尬的破解宏的失败尝试,只是为了展示一些努力。

\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}

输出

在此处输入图片描述

相关内容