我想重新定义\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}