重新定义 \url 不允许在 url 中使用 #

重新定义 \url 不允许在 url 中使用 #

我想重新定义\url以便它将消息写入日志文件。这会给下面的 MNWE 带来问题。

@egreg 在评论中解释了为什么会失败。我可以通过\url\myurl我的长篇多文件文档中用(以显而易见的方式定义)替换来解决我的问题。我会等一段时间,希望有人能在序言中找到可行的解决方案。

\documentclass{article}

\usepackage{hyperref}

\begin{document}

See ``Q3.4: Can RANDOM.ORG help me win the lottery?'' at 
\url{www.random.org/faq/#Q3.4}.

\let\realurl\url
\renewcommand{\url}[1]{%
\realurl{#1}
\wlog{URLX #1 }
}

\url{www.random.org/faq/}.

OK so far but the next invocation of \verb!\url! fails because it
contains a \verb!#!. 

\url{www.random.org/faq/#Q3.4}.

\end{document}

错误信息是

! Illegal parameter number in definition of \Hy@tempa.
<to be read again> 
                   Q
l.21 \url{www.random.org/faq/#Q3.4}

答案1

通常,简单的重新定义并不容易,因为\url想要读取其具有已更改 catcode 的参数。但是,重新定义\url一点以支持一些“转义”字符\#,例如,因此在这种情况下使用\#而不是#有效:

\documentclass{article}

\usepackage[colorlinks]{hyperref}

\begin{document}

See ``Q3.4: Can RANDOM.ORG help me win the lottery?'' at
\url{www.random.org/faq/#Q3.4}.

\let\realurl\url
\renewcommand{\url}[1]{%
  \realurl{#1}%
  \wlog{URLX #1 }%
}

\url{www.random.org/faq/}.

OK so far the next invocation of \verb!\url! works because it
uses \verb!\#! instead of \verb!#!.

\url{www.random.org/faq/\#Q3.4}.

\end{document}

结果

相关内容