`\cs_set_eq:NN` 不适用于 `\frac`

`\cs_set_eq:NN` 不适用于 `\frac`

梅威瑟:

\documentclass{article}


\begin{document}

\ExplSyntaxOn
\cs_set_eq:NN \__examzh_symbols_old_frac:nn \frac
\RenewDocumentCommand { \frac } { m m }
  {
    \__examzh_symbols_old_frac:nn {#1}{#2}
  }
\ExplSyntaxOff

$\frac{1}{2}$

\end{document}

我想重新定义\frac以进行“改进”。但我发现当我想“复制” a \fracby 时\cs_set_eq:NN,似乎\cs_set_eq:NN失败了,我不知道为什么。

平均能量损失

然后我用了\NewCommandCopy并且成功了:

\documentclass{article}


\begin{document}

\ExplSyntaxOn
% \cs_set_eq:NN \__examzh_symbols_old_frac:nn \frac
\NewCommandCopy { \oldfrac } { \frac }
\RenewDocumentCommand { \frac } { m m }
  {
    % \__examzh_symbols_old_frac:nn {#1}{#2}
    \oldfrac {#1}{#2}
  }
\ExplSyntaxOff

$\frac{1}{2}$

\end{document}

你能告诉我这个方法有什么问题吗\cs_set_eq:NN

在此处输入图片描述

答案1

% ltmath.dtx
\DeclareRobustCommand\frac[2]{{\begingroup#1\endgroup\over#2}}

将定义两个而不是一个新的宏:\frac\frac␣

\def\frac{\protect\frac␣}
\long\def\frac␣#1#2{{\begingroup #1\endgroup \over #2}}

这样,\frac它就会自动受到保护,因此用 LaTeX2e 的术语来说,就是强大的。另请参阅脆弱命令和坚固命令之间有什么区别?什么时候以及为什么我们需要 \protect?

因此,与浅复制命令相比,您需要一些“深”复制命令。

  • 深度复制:\NewCommandCopy自 LaTeX2e 2020-10-01 起或\LetLtxMacro来自letltxmacro包。
  • 浅拷贝:原始函数\let或 l3 函数\cs_set_eq:NN
    \cs_new_protected:Npn \cs_set_eq:NN #1 { \tex_let:D #1 =~ }
    

相关内容