我在 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
(而不是\def
with\@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}