需要帮助重新定义基本三角函数

需要帮助重新定义基本三角函数

我想定义自己的命令来替换、、\sin等......我希望能够用来表示,并且只表示。\cos\tan\tan[a]{x}\tan^{a}{(x)}\tan{x}\tan{(x)}

我尝试根据在线找到的内容为带有可选参数的命令建模一个解决方案,但似乎无法使其工作。

\let\sin\oldsin

\def\sin{\@ifnextchar[{\@with}{\@without}}
\def\@with[#1]#2{\oldsin^{#1}{(#2)}}
\def\@without#1{\oldsin{(#1)}}

它抱怨 \oldsin 不是一个命令。

我还希望它能够与我创建的另一个命令结合使用:

\renewcommand\arcsin[1]{\sin[-1]{(#1)}}

答案1

如果你使用amsmath(我建议你这样做),则定义\sin

\renewcommand\sin{\qopname\relax o{sin}}

所以你只需要类似

\renewcommand\sin[1][]{\qopname\relax o{sin}%
  \ifx\relax#1\relax\else^{#1}\fi % test if the argument is empty
}

对所有函数都这样做确实很烦人,所以你可以通过以下方式抽象它

\newcommand{\changefunction}[1]{%
  \expandafter\renewcommand\csname#1\endcsname[1][]%
    {\qopname\relax o{#1}\ifx\relax##1\relax\else^{##1}\fi}}

进而

\changefunction{sin}
\changefunction{cos}
\changefunction{tan}

最后,你可以这样做

\renewcommand{\arcsin}{\sin[-1]}

完整示例:

\documentclass{article}
\usepackage{amsmath}

\newcommand{\changefunction}[1]{%
  \expandafter\renewcommand\csname#1\endcsname[1][]%
    {\qopname\relax o{#1}\ifx\relax##1\relax\else^{##1}\fi}}
\changefunction{sin}
\changefunction{cos}
\changefunction{tan}

\renewcommand{\arcsin}{\sin[-1]}

\begin{document}
$\sin\alpha+\sin[2]\alpha\ne\arcsin(1/2)$
\end{document}

在此处输入图片描述

从 LaTeX 的角度来看,我认为这些定义不会给你带来任何好处:

\sin^{2}

一样容易输入,\sin[2]而且更清晰。

从数学角度来看,我发现你想使用的反正弦符号含糊不清且令人困惑。如果指数“2”表示“正弦的平方”,那么指数“-1”对学生来说就意味着“正弦的倒数”。

答案2

该序列将的定义\let\csA\csB复制到,因此您需要使用\csB\csA

\let\oldsin\sin

此外,原文\sin没有参数。我将在两者中都删除后一个参数,因此您仍然可以写\sin\phi为显示为“sinφ”而不是“罪(φ )”。

如果你使用 LaTeX,你可以简单地

\renewcommand*{\sin}[1][]{\oldsin\if\relax\detokenize{#1}\relax\else^{#1}\fi}

而无需创建自己的辅助宏即可获得相同的效果。

不过,如果你真的想要第二个参数,可以使用

\renewcommand*{\sin}[2][]{\oldsin\if\relax\detokenize{#1}\relax\else^{#1}\fi (#2)}

但这样你就无法控制括号的大小了(比如\frac在显示模式下)。在这种情况下,你还需要在定义中删除括号\arcsin(以避免出现双括号)。

代码

\documentclass{article}
\let\oldsin\sin

\renewcommand*{\sin}[1][]{\oldsin\if\relax\detokenize{#1}\relax\else^{#1}\fi}

\begin{document}
$ \sin \phi $

$ \sin[2] \phi $

$ \sin (\phi + 2\pi) $

$ \sin[2] (\phi +2\pi) $
\end{document}

输出

在此处输入图片描述

答案3

我同意 egreg 的观点,这个界面实际上并没有为您节省任何工作,而且实际上会降低源代码的清晰度。以下是我处理这些三角函数幂的方法。

我用cool包。它提供了像\Sin\Cos这样的命令,可以自动添加正确大小的括号。它还提供了它们的逆等\ArcSin,可以配置为“弧”样式或“逆”样式。\arc但是,由于 LaTeX 只为正弦、余弦和正切提供了 -macros,因此您必须提供其他的。

对于权力,我希望能够输入\Sin{x}^2并看到它,就像我输入的一样\sin^2(x)。所以我重新定义了\Sin寻找^和适应。

\documentclass{article}
\newcommand{\arccot}{\operatorname{arccot}}
\newcommand{\arcsec}{\operatorname{arcsec}}
\newcommand{\arccsc}{\operatorname{arccsc}}
\usepackage{cool}
\makeatletter
\newcommand{\COOL@switch@arctrig}[2]{%
    \ifthenelse{\equal{\COOL@notation@ArcTrig}{inverse}}{#1}{%
        \ifthenelse{\equal\COOL@notation@ArcTrig{arc}}{#2}{%
            \PackageError{cool}{Invalid ArcTrig option: can be only `arc' or `inv'}%
        }%
    }
}
\renewcommand{\ArcCot}[1]{%
    \COOL@switch@arctrig{\cot^{-1}}{\arccot}%
    \COOL@decide@paren{ArcTan}{#1}%
}
\renewcommand{\ArcSec}[1]{%
    \COOL@switch@arctrig{\sec^{-1}}{\arcsec}%
    \COOL@decide@paren{ArcSec}{#1}%
}
\renewcommand{\ArcCsc}[1]{%
    \COOL@switch@arctrig{\csc^{-1}}{\arccsc}%
    \COOL@decide@paren{ArcCsc}{#1}%
}

\let\COOL@Sin@Nopower\Sin
\let\COOL@Cos@Nopower\Cos
\let\COOL@Tan@Nopower\Tan
\let\COOL@Cot@Nopower\Cot
\let\COOL@Sec@Nopower\Sec
\let\COOL@Csc@Nopower\Csc

\def\Sin#1{\@ifnextchar^{\COOL@Sin@Power{#1}}{\COOL@Sin@Nopower{#1}}}
\def\Cos#1{\@ifnextchar^{\COOL@Cos@Power{#1}}{\COOL@Cos@Nopower{#1}}}
\def\Tan#1{\@ifnextchar^{\COOL@Tan@Power{#1}}{\COOL@Tan@Nopower{#1}}}
\def\Cot#1{\@ifnextchar^{\COOL@Cot@Power{#1}}{\COOL@Cot@Nopower{#1}}}
\def\Sec#1{\@ifnextchar^{\COOL@Sec@Power{#1}}{\COOL@Sec@Nopower{#1}}}
\def\Csc#1{\@ifnextchar^{\COOL@Csc@Power{#1}}{\COOL@Csc@Nopower{#1}}}

\def\COOL@Sin@Power#1^#2{\sin^{#2}\COOL@decide@paren{Sin}{#1}}
\def\COOL@Cos@Power#1^#2{\cos^{#2}\COOL@decide@paren{Cos}{#1}}
\def\COOL@Tan@Power#1^#2{\tan^{#2}\COOL@decide@paren{Tan}{#1}}
\def\COOL@Cot@Power#1^#2{\cot^{#2}\COOL@decide@paren{Cot}{#1}}
\def\COOL@Sec@Power#1^#2{\sec^{#2}\COOL@decide@paren{Sec}{#1}}
\def\COOL@Csc@Power#1^#2{\csc^{#2}\COOL@decide@paren{Csc}{#1}}

\makeatother
\begin{document}
\begin{minipage}{0.4\textwidth}
\[
       \Style{ArcTrig=arc}
       \begin{aligned}
         \ArcSin{1} &= \frac{\pi}{2}  \\
         \ArcCos{1} &= 0              \\
         \ArcTan{1} &= \frac{\pi}{4}  \\
         \ArcCot{1} &= \frac{\pi}{4}  \\
         \ArcSec{1} &= 0              \\
         \ArcCsc{1} &= \frac{\pi}{2}  \\
       \end{aligned}
\]
\end{minipage}
\begin{minipage}{0.4\textwidth}
\[
       \Style{ArcTrig=inverse}
       \begin{aligned}
         \ArcSin{1} &= \frac{\pi}{2}  \\
         \ArcCos{1} &= 0              \\
         \ArcTan{1} &= \frac{\pi}{4}  \\
         \ArcCot{1} &= \frac{\pi}{4}  \\
         \ArcSec{1} &= 0              \\
         \ArcCsc{1} &= \frac{\pi}{2}  \\
       \end{aligned}
\]
\end{minipage}
\[
\Sin{x}^2 = \frac{1}{2}\left(1 - \Cos{2x}\right)
\]
\end{document}

示例代码输出

我猜一个缺点是,如果你输入,\Sin x^2你得到的\sin^2(x)可能是你想要的\sin(x^2)。但cool方法是接受这些论点。

相关内容