其中有 % 的超链接?

其中有 % 的超链接?

我需要一个包含超链接的引用%。如果使用url 中的\usepackage{hyperref} 格式, \href{https://www.wikibooks.org}{Wikibooks home} 则会出现问题%。如何避免此问题?

答案1

如果其他宏的参数中没有使用\href或,那么就可以起作用,因为逐字读取 URL 参数。\url%hyperref

但是,如果在其他命令的参数中使用 或 ,则逐字类别代码的类别更改来得太晚,字符串已被 TeX 读取。在这种情况下,一些有问题的字符(如\href或)可以通过使用反斜杠转义来保护。\url%#

例子:

\documentclass{article}
\usepackage{hyperref}
\begin{document}
  \url{http://example.org/a%20b.html}

  \href{http://example.org/a%20b.html}{a b}

  \textbf{\url{http://example.org/a\%20b.html}}

  \textbf{\href{http://example.org/a\%20b.html}{a b}}
\end{document}

PDF 文件包含正确的 URL:

/Subtype/Link/A<</Type/Action/S/URI/URI(http://example.org/a%20b.html)>>
/Subtype/Link/A<</Type/Action/S/URI/URI(http://example.org/a%20b.html)>>
/Subtype/Link/A<</Type/Action/S/URI/URI(http://example.org/a%20b.html)>>
/Subtype/Link/A<</Type/Action/S/URI/URI(http://example.org/a%20b.html)>>

答案2

三条评论,三个可行的解决方案:全部有效,至少对于pdftex驱动程序而言。

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\usepackage{hyperref}

\urldef{\MYurl}\url{http://www.w3.org/file%query}



\begin{document}

See \url{http://www.w3.org/file\%query}.

See \MYurl.

See
\begingroup
    \catcode`\% = 12
    \url{http://www.w3.org/file%query}.
\endgroup

\showboxbreadth = 1000
\showboxdepth = 10
\showlists

\end{document}

\showlists命令将在转录文件中写入由 pdfTeX 生成的内部列表的描述:您可以检查链接是否始终正确编码。

编辑:作为Heiko Oberdiek 评论道,上述内容并不是特别令人兴奋;更有趣的是,所有这三种解决方案(包括基于的解决方案\urldef)也在命令的参数中起作用。

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\usepackage{hyperref}

\urldef{\MYurl}\url{http://www.w3.org/file%query}

\newcommand*{\WrapInArgument}[1]{%
    \typeout{}%
    \typeout{\unexpanded{#1}}%
    \typeout{}%
    #1%
}



\begin{document}

See \WrapInArgument{\url{http://www.w3.org/file\%query}}.

See \WrapInArgument{\MYurl}.

See
\begingroup
    \catcode`\% = 12
    \WrapInArgument{\url{http://www.w3.org/file%query}}.
\endgroup

\showboxbreadth = 1000
\showboxdepth = 10
\showlists

\end{document}

相关内容