带有 # 的 URL 超链接的自定义命令

带有 # 的 URL 超链接的自定义命令

我使用自定义命令 \blink马丁·沙勒的代码在 beamer 演示文稿中显示带蓝色下划线的链接。 \blink 在 \href 命令中使用其命令 \blurl。它可以工作,但是,我无法将自定义命令 \blink 与包含 # 的 URL 一起使用。编译时出现错误:

\documentclass{beamer}

\usepackage{ulem}
% Colored links https://tex.stackexchange.com/questions/23208/i-cannot-get-a-properly-underlined-hyperlink-in-blue
\useunder{\uline}{\ulined}{}%
\DeclareUrlCommand{\blurl}{\def\UrlFont{\color{blue}\ulined}}
\providecommand{\blink}[2]{\href{#1}{\blurl{#2}}}

\begin{document}

\begin{frame}[fragile]
    \frametitle{Nasty Link}
    \blink{https://docs.python.org/3.7/library/stdtypes.html#string-methods}{string methods}
\end{frame}

\end{document}

错误:

! Illegal parameter number in definition of \Hy@tempa.
<to be read again> 
                   s
l.2 ...dtypes.html#string-methods}{string methods}

我曾尝试将 URL 中的 # 替换为 %23(我在 latetex 代码中转义了 % 符号)。该版本编译得很好,但我链接到的网站似乎不接受 %23 代替 #,因此结果文档中的可点击链接不符合目标。

当我不使用自定义命令 \blink 并像

\href{https://docs.python.org/3.7/library/stdtypes.html#string-methods}{\blurl{href with blurl}}

然后文档就可以顺利编译,并且链接可以正常工作。我该如何改进 \blink 命令,以便它可以处理带有 # 和其他 Latex 控制字符的 URL?

答案1

我尝试制作你的代码的通用版本,这引发了这个问题:宏字符“#”在变成字母时会加倍吗?,这反过来让我能够在下面给出答案。它基本上将 -character 变成#字母,然后读取链接及其描述。然后它返回#到宏 char(通过作用域)

\documentclass{beamer}
\usepackage{ulem}
% Colored links https://tex.stackexchange.com/questions/23208/i-cannot-get-a-properly-underlined-hyperlink-in-blue
\useunder{\uline}{\ulined}{}%
\DeclareUrlCommand{\blurl}{\def\UrlFont{\color{blue}\ulined}}
\def\blink{%
  %% We want the #-sign only to be a letter (catcode 11) temporarily, so begin the scope group
  \bgroup%
  % Below, # is made a letter until \egroup is called
  \catcode`\#=11\relax%
  % Trigger the URL-reader
  \makeblinkurl%
}
\def\makeblinkurl#1#2{%
  % This will read the link and link description
  % after the # is made a letter by the \blink macro
  \href{#1}{\blurl{#2}}%
  % We want the #-sign only to be a letter up til here, so we group it.
  % the broup will start in the below \blink macro,
  % and we wnd it here:
  \egroup%
}


\begin{document}

\begin{frame}[fragile]
    \frametitle{Nice Link}
    \blink{https://docs.python.org/3.7/library/stdtypes.html#string-methods}{string methods}
\end{frame}

\end{document}

相关内容