为什么 docstrip 会将额外的宏调用放在带有波浪号的脚注内的超链接中?

为什么 docstrip 会将额外的宏调用放在带有波浪号的脚注内的超链接中?

\href这是一个最简单的示例,当 URL 带有波浪符号时,Docstrip 将额外的宏位放入脚注内的调用中:


% \iffalse
\documentclass[a4paper]{ltxdoc}
\usepackage{hyperref}
\begin{document}
\DocInput{foo.dtx}
\end{document}
% \fi

% \title{The foo package\thanks{This document corresponds to
%     foo version, dated date.}}
%
% \author{The Author\thanks{Author's website with bad link:
%     \href{http://example.com/~user/} {foo}. Working link:
%     \href{http://example.com/user}{foo}} }
%
% \maketitle
%
% \section{Introduction}
%
% a link that works: \href{http://example.com/~user}
%     {foo}.

在生成的 PDF 中,脚注中 URL 的波浪号包含一些 TeX 宏:

http://example.com/\protect \unhbox \voidb@x \penalty \@M \ {}user/

所以波浪号有问题。我该如何修复它?

答案1

\href和朋友们必须施展一些魔法才能使特殊字符(如#或 )~起作用。只有当命令在任何其他命令之外使用时,此魔法才有效。但该hyperref包也接受“转义”版本:\#\~等等。它们在任何情况下都有效,并且比 等命令更容易记住\textasciitilde

这实际上与无关docstrip,以下示例表现出相同的行为:

\documentclass{article}
\usepackage{hyperref}
\title{Test}
\author{Me\footnote{\url{http://example.com/~}}}
\begin{document}
\maketitle
\url{http://example.com/~}
\end{document}

答案2

我必须承认我不知道为什么会发生这种情况。但是,用 替换文字波浪号\textasciitilde可以解决您的问题。

% \author{The Author\thanks{Author's website with bad link:
%     \href{http://example.com/\textasciitilde user/}{foo}. Working link:
%     \href{http://example.com/user}{foo}} }

相关内容