我有一个函数可以重新定义给定的三角函数,以便
\cos[2]{\frac{1}{2}}
和
\cos^2\!\pqty{\frac{1}{2}}
最后看起来就像这样:
,我使用\pqty
(来自physics
包)来自动缩放括号中的内容。我创建了以下命令来执行此操作:
\newcommand{\makeold}[1]{
\expandafter\let\csname old#1\expandafter\endcsname \csname#1\endcsname
}%This makes it so that \makeold{cos} would call \let\oldcos\cos
\newcommand{\changetrig}[1]{
\makeold{#1}
\expandafter\renewcommand\csname#1\endcsname[2][]
{\qopname\relax o{#1}
\ifx\relax##1\relax\else^{##1}\fi\!\pqty{##2}}
}
当我调用时,它工作得很好\changetrig{cos}
。但是,我想添加功能,以便它也可以\renewcommand\arccos\cos[-1]
在此命令中调用(如果\changetrig{cos}
需要调用)。但是在我的\changetrig
命令中添加这个
\expandafter\renewcommand\csname arc#1\expandafter\endcsname\csname#1\endcsname[-1]
根本不起作用。我在添加时遗漏了什么?
编辑:我意识到顶部的示例代码与我的图片不匹配,并且我忘了提及相关的包。
答案1
如果#1
是cos
,那么你想构造
\renewcommand\arccos{\cos[-1]}
所以
\expandafter\renewcommand\csname arc#1\expandafter\endcsname\expandafter{\csname#1\endcsname[-1]}
答案2
如果太多的\csname
..\endcsname
让您感到困惑,您可以通过{
-delimited 宏来使用它们,例如\MakeTokenFromCsname
:
\documentclass{article}
\usepackage{physics}
\usepackage{letltxmacro}
\makeatletter
%%
%% \MakeTokenFromCsname<stuff not nested in braces and without braces>{Csname}
%% ->
%% <stuff not nested in braces and without braces>\Csname
%%
%% E.g.,
%%
%% \MakeTokenFromCsname\foo{bar} -> \foo\bar
%% \MakeTokenFromCsname{bar} -> \bar
%% \MakeTokenFromCsname\let\foo={bar} -> \let\foo=\bar
%% \MakeTokenFromCsname\MakeTokenFromCsname\let{foo}={bar}
%% -> \MakeTokenFromCsname\let\foo={bar}
%% -> \let\foo=\bar
%%
%% \MakeTokenFromCsname requires the triggering of _two_ expansion-steps/_two_
%% "hits" by \expandafter to deliver the result.
%%
\@ifdefinable\MakeTokenFromCsname{%
\long\def\MakeTokenFromCsname#1#{%
\romannumeral0\@MakeTokenFromCsname{#1}%
}%
}%
\newcommand\@MakeTokenFromCsname[2]{%
\expandafter\@@@MakeTokenFromCsname\expandafter{\csname#2\endcsname}{ #1}%
}%
\newcommand\@@@MakeTokenFromCsname[2]{#2#1}%
\makeatother
\newcommand{\changetrig}[1]{%
\MakeTokenFromCsname\MakeTokenFromCsname{@ifdefinable}{old#1}{%
\MakeTokenFromCsname\MakeTokenFromCsname\LetLtxMacro{old#1}{#1}%
}%
\MakeTokenFromCsname\DeclareRobustCommand{#1}[2][]{%
\qopname\relax o{#1}%
\ifx\relax##1\relax\else^{##1}\fi\!\pqty{##2}%
}%
\MakeTokenFromCsname
\expandafter\expandafter\expandafter\renewcommand
\expandafter\expandafter\expandafter{arc#1}%
\expandafter\expandafter\expandafter{\MakeTokenFromCsname{#1}[-1]}%
}
\changetrig{cos}
\show\oldcos
\show\cos
\show\arccos
\begin{document}
$\oldcos^{2}\!\pqty{\frac{1}{2}}$
$\cos[2]{\frac{1}{2}}$
\end{document}