我想知道是否有一个包或方法可以在不更改命令名称的情况下在精细命令周围添加内容。例如,假设我想将\sqrt[#1]{#2}
命令更改为收益\displaystyle{\sqrt[#1]{#2}}
,而不必更改文档正文中的任何内容。我希望可选参数和标准参数都像它们已经做的那样工作……我只想让每个平方根都采用显示样式。有没有一种好的方法可以将其添加到现有的宏中?如果宏不可扩展,或者它可能在文档的后面重新定义(但我希望我的更改保持不变),这也可以做到吗?
编辑:我显然选了一个奇怪的例子,那么如果我想编辑 \log 来呈现 \displaystyle\log 怎么办?实际的命令并不重要,我所关心的是将内容附加和/或添加到现有宏中而不更改文档主体中该宏的语法。
答案1
仅出于学术兴趣:
\documentclass{article}
\usepackage{amsmath}
\usepackage{letltxmacro} % see https://tex.stackexchange.com/questions/88001/
\LetLtxMacro{\latexsqrt}{\sqrt}
\renewcommand{\sqrt}[2][]{%
{%
\displaystyle
\if\relax\detokenize{#1}\relax
\latexsqrt{#2}%
\else
\latexsqrt[#1]{#2}
\fi
}%
}
\begin{document}
$a\sqrt[3]{\frac{x}{y}}+\frac{x}{y}$
$a\latexsqrt[3]{\frac{x}{y}}+\frac{x}{y}$ % for comparison
$a\displaystyle\latexsqrt[3]{\frac{x}{y}}+\frac{x}{y}$
\end{document}
请注意,这\displaystyle
是一个声明,其效果扩展到当前范围,这就是重新定义中附加括号的原因。您可以在最后一个示例中看到它。
但是,从输出结果可以清楚地看出,你不想这样做。而且,一般来说,你不想要添加\displaystyle
任何东西。