为什么没有“\endgroup”?

为什么没有“\endgroup”?

我在书的来源“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|}}
  1. \endgroup为什么CTANref 中没有?
  2. \def\CTAN|#1|和 一样吗\def\CTAN[#1]
  3. 为什么要使用\def\newcommand两者?\newcommand两个地方都行不通吗?
  4. 如何仅使用一个宏来实现上述功能?

答案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源代码。

相关内容