我在书的来源“The Not So Short Introduction to LaTeX”中看到了这段代码:
\newcommand{\CTANref}{\begingroup \urlstyle{tt}\Url} %
\def\CTAN|#1|{\href{http://www.ctan.org/tex-archive/#1}{\CTANref|CTAN://#1|}}
\endgroup
为什么CTANref 中没有?\def\CTAN|#1|
和 一样吗\def\CTAN[#1]
?- 为什么要使用
\def
和\newcommand
两者?\newcommand
两个地方都行不通吗? - 如何仅使用一个宏来实现上述功能?
答案1
原因是\Url
将提供缺失的\endgroup
。
url.sty
在的定义中可以看到\url
:
\def\DeclareUrlCommand#1#2{\def#1{\leavevmode\begingroup #2\Url}}
% Sample (and default) configuration:
%
\DeclareUrlCommand\url{}
这意味着它确实
\leavevmode\begingroup\Url
您引用的代码以此为蓝本。实际\endgroup
来自\Url@z
特别。检查url.sty
源代码。