我可以在 skmath 中写 $\log^2{x}$ 吗?

我可以在 skmath 中写 $\log^2{x}$ 吗?

标准 LaTeX 有机会编写类似 的内容$\log^2{x}$。然而,在加载包时,这不再可能skmath,因为skmath期望输入对数$\log[<base>]{<expression>}$

我是否遗漏了什么,或者是否只能通过重新定义来实现这一点\log

PS:我知道这在$\log{<expression>}^2数学上是相同的,并且目前已将其设置为相同,但上述方法对我来说似乎更易于阅读。

答案1

如果您愿意接受此语法作为解决方案,则可以对语法进行一种可能的重新定义:

\log[<base>][<exponent>]{<expression>}

所需的重新定义:

\ExplSyntaxOn
\RenewDocumentCommand\log{oom}{%
  \IfNoValueTF{#1}
    {\ensuremath{\__skmath_log:\IfNoValueTF{#2}{}{\c_math_superscript_token{#2}}\__skmath_parens:n{#3}}}
    {\ensuremath{\__skmath_log:\c_math_subscript_token{#1}\IfNoValueTF{#2}{}{\c_math_superscript_token{#2}}\__skmath_parens:n{#3}}}%
}
\ExplSyntaxOff

完整的文档,其中有大量测试用例展示省略/空参数的行为:

\documentclass{article}
\usepackage{skmath}

\ExplSyntaxOn
\RenewDocumentCommand\log{oom}{%
  \IfNoValueTF{#1}
    {\ensuremath{\__skmath_log:\IfNoValueTF{#2}{}{\c_math_superscript_token{#2}}\__skmath_parens:n{#3}}}
    {\ensuremath{\__skmath_log:\c_math_subscript_token{#1}\IfNoValueTF{#2}{}{\c_math_superscript_token{#2}}\__skmath_parens:n{#3}}}%
}
\ExplSyntaxOff

\begin{document}
\begin{gather}
  \log[10][2]{x} \\
  \log[10][]{x} \\
  \log[10]{x} \\
  \log[][2]{x} \\
  \log[][]{x} \\
  \log[]{x} \\
  \log{x} \\
  \log[10][2]{} \\
  \log[10][]{} \\
  \log[][2]{} \\
  \log[][]{}
\end{gather}
\end{document}

其输出如下:

在此处输入图片描述

答案2

这是一篇旧帖子,但我认为我应该提供一种替代方法来对比已接受的答案。

使用 xparser,您可以使用修饰来实现如下语法:

\log*{x}^{yy}_{zzz} % with parentheses
\log{x}^{yy}_{zzz}  % without

日志

它会像下面这样,请注意,使用这些装饰可能存在一些我不熟悉的技术原因

\let\oldlog\log
\RenewDocumentCommand{\log}{s m e{_^}}{%
    \ensuremath{%
        \mathrm{log}%
        \IfValueT{#3}{_{#3}}%
        \IfValueT{#4}{^{#4}}%
        \IfBooleanTF{#1}{\!\left(#2\right)}{#2}%
    }%
}

相关内容