![为什么 docstrip 会将额外的宏调用放在带有波浪号的脚注内的超链接中?](https://linux22.com/image/232817/%E4%B8%BA%E4%BB%80%E4%B9%88%20docstrip%20%E4%BC%9A%E5%B0%86%E9%A2%9D%E5%A4%96%E7%9A%84%E5%AE%8F%E8%B0%83%E7%94%A8%E6%94%BE%E5%9C%A8%E5%B8%A6%E6%9C%89%E6%B3%A2%E6%B5%AA%E5%8F%B7%E7%9A%84%E8%84%9A%E6%B3%A8%E5%86%85%E7%9A%84%E8%B6%85%E9%93%BE%E6%8E%A5%E4%B8%AD%EF%BC%9F.png)
\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}} }