如何使用 2 个参数来执行 \renewcommand?

如何使用 2 个参数来执行 \renewcommand?

我在 LaTeX 中遇到了一个具体问题:当我输入 时\sqrt[3]{x},编译器应该将其解释为\sqrt[\text{\scriptsize{3}}]{x},这样数字的大小与幂的大小相同。一般问题是如何使用两个参数更新命令。

答案1

您对“如何使用两个参数更新命令”的一般要求取决于这些参数的定义方式。 在您的例子中,\sqrt需要两个参数,其中第一个是可选的。 在这种情况下,可能需要小心正确地复制原始命令的定义。 请参阅何时使用\LetLtxMacro. 在 的情况下\sqrt,您可以使用

\let\oldsqrt\sqrt
\renewcommand{\sqrt}[2][]{\oldsqrt[\text{\scriptsize{#1}}]{#2}}

但是,如果原始\sqrt定义是使用\newcommand(而不是\defwith\@ifnextchar条件),那么你需要

\usepackage{letltxmacro}
\LetLtxMacro\oldsqrt\sqrt
\renewcommand{\sqrt}[2][]{\oldsqrt[\text{\scriptsize{#1}}]{#2}}

如果没有可选参数,重新定义将是一个简单的复制和更新命令:

\let\oldmacro\macro
\renewcommand{\macro}[2]{%
  \oldmacro{#2}{#1}}% New handling of arguments in reverse order, say

答案2

不建议重新定义\sqrt。相反,定义一个新命令,例如\ssqrt

\documentclass{article}
\usepackage{amsmath,amssymb}
%If you do actually want to redefine \sqrt, then uncomment the following lines
%\let\oldsqrt\sqrt
%\renewcommand{\sqrt}[2][]{\oldsqrt[\text{\scriptsize{#1}}]{#2}}
\newcommand{\ssqrt}[2][]{\sqrt[\text{\scriptsize{#1}}]{#2}}
\begin{document}
$\ssqrt[text]{x^2}$
\end{document}

在此处输入图片描述

相关内容