如何在不复制命令代码的情况下制作现有命令的变体?

如何在不复制命令代码的情况下制作现有命令的变体?

我正在制作一些新命令,例如 的版本,\prod但用 代替\Psi\Pi但它非常复杂,因为上标和下标分别位于顶部和底部,以及 、 和 之间的变化\displaystyle以及其他一些东西\textstyle\scriptstyle\scriptscriptstyle

因此,我正在考虑一种复制命令的方法\prod,但要用 替换\Psi这存在吗?如果存在,如何使用它?

如果代码也适用于 KaTeX 那就太好了。

答案1

像这样的扩展\prod可能不是真正的解决方案,但差不多。

\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}

\makeatletter
\NewDocumentCommand{\Psiop}{}{%
  \DOTSB\mathop{%
    \vphantom{\prod}\mathpalette\Psiop@\relax
  }\slimits@
}
\newcommand{\Psiop@}[2]{%
  \begingroup
  \sbox\z@{\raisebox{\depth}{$#1\prod$}}%
  \vcenter{\hbox{\resizebox{!}{%
    \Psiop@adjust{#1}\ht\z@}{$\m@th#1\Psi$%
  }}}%
  \endgroup
}
\newcommand{\Psiop@adjust}[1]{%
  \ifx#1\displaystyle 0.88\else % 1 for newtx,newpx; 1.04 for kpfonts
  \ifx#1\textstyle 1\else
  \ifx#1\scriptstyle 1\else
  1\fi\fi\fi
}
\makeatother

\begin{document}

\[
\prod_{i=1}^{n} \Psiop_{i=1}^n
\]
\begin{center}
$\prod\Psiop\scriptstyle\prod\Psiop\scriptscriptstyle\prod\Psiop$
\end{center}

\end{document}

代码包含缩放因子的垂直调整。通过视觉实验,似乎只有 displaystyle 需要调整,但为了以防万一,我还留下了其他样式的因子。我发现

  • 0.88 适用于 Computer Modern 或 Latin Modern(在后一种情况下记得加载fixcmex
  • 1 适用于 NewTX 或 NewPX
  • 1.04 适用于 KpFonts

其他字体可能需要其他因素。

与现代计算机的图片

在此处输入图片描述

使用 KaTeX 你可以尝试

\mathop{\Psi}\limits_{n=1}^{2}

但效果很差。

答案2

这采用了 的垂直布局\prod,但改用\Psi。脚本样式被识别和遵循。如果这不是您需要的,请帮助我了解您需要的是什么。

\documentclass{article}
\usepackage{amsmath}
\usepackage{scalerel}
\DeclareMathOperator*{\foo}{\scalerel*{\Psi}{\prod}}
\begin{document}
\[
\foo_{i=3}^{6}(f^2(i))
\]

This is inline: \(\foo_{i=3}^{6}(f^2(i)) \)

\[
\foo_{i=3}^{6}(f^2(i))_{
\foo_{i=3}^{6}(f^2(i)) _
{\foo_{i=3}^{6}(f^2(i))}}
\]
\end{document} 

在此处输入图片描述

相关内容