catcode 用于定义超几何函数

catcode 用于定义超几何函数

这也许不是一个非常聪明的问题,因为我不(很聪明)也不精通原始文本,更不用说,\catcode但在给出的代码中先前的答案有以下用途\catcode

\newcommand*\pFqskip{8mu}
\catcode`,\active
\newcommand*\pFq{\begingroup
        \catcode`\,\active
        \def ,{\mskip\pFqskip\relax}%
        \dopFq
}
\catcode`\,12
\def\dopFq#1#2#3#4#5{%
        {}_{#1}F_{#2}\biggl[\genfrac..{0pt}{}{#3}{#4};#5\biggr]%
        \endgroup
}

为什么第一个

\catcode`,\active

没有反斜杠,而后面的有吗?前面的答案解释说反斜杠代表“特殊的 catcode”字符,无论它是什么,但为什么在第一个实例中省略了它而在第二个实例中没有省略呢?

那么,我真正的问题是,\catcode那里的目的是什么?我大致理解什么是活动字符,但不知道它在代码中的作用。当我使用以下命令时,它是否能解释原因:

\pFq{3}{2}{a,b,c}{d,e}{z}

正如我希望的那样,a、b 和 c 或 d 和 e 之间没有逗号?[更新,我想我刚刚发现第一部分将逗号重新定义为小跳跃,由给出\pFqskip{8mu},但我不确定为什么,但我明白为什么这会导致逗号消失。]

再次,这可能是一些基本的问题,但我对 TeX 很着迷。

答案1

没有理由\catcode`,=\active在第一种情况下和\catcode`\,=\active第二种情况下都这样。两者都可以是\,,。只有 (以及其他不太重要的情况)才需要转义字符\%但转义也不会造成任何损害。

宏的作者可能担心如果不逃脱,活跃的角色可能会做一些奇怪的事情。

逗号消失的原因是,当一个字符处于活动状态时,它就像一个宏,并且被替换文本所取代,在本例中是这样的\mskip\pFqskip\relax

实际上,这不是定义用于排版超几何函数参数的宏的最佳方法。

一种更简洁的方法\pFq是,允许作为另一个命令的参数

\usepackage{amsmath} % for \genfrac

\newmuskip\pFqskip
\pFqskip=6mu
\mathchardef\pFcomma=\mathcode`, % keep a copy of the comma

\newcommand*\pFq[5]{%
  \begingroup
  \begingroup\lccode`~=`,
    \lowercase{\endgroup\def~}{\pFcomma\mkern\pFqskip}%
  \mathcode`,=\string"8000
  {}_{#1}F_{#2}\biggl[\genfrac..{0pt}{}{#3}{#4};#5\biggr]%
  \endgroup
}

逗号被设为“数学激活”,其含义变为:“打印逗号并插入空格”(如果您不想要逗号,请\pFcomma从定义中删除)。我减少了间距,因为逗号后面会增加一些。

线条

  \begingroup\lccode`~=`,
    \lowercase{\endgroup\def~}{\pFcomma\mkern\pFqskip}%

为活动逗号局部定义一个含义,然后这个含义由 触发\mathcode`,=\string"8000(在使用 的\string情况下可能是必要的babel)。其余与上一版本相同。

相关内容