![定义一个二元运算符,使得 displaymath 中的下标如下所示](https://linux22.com/image/375210/%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E4%BA%8C%E5%85%83%E8%BF%90%E7%AE%97%E7%AC%A6%EF%BC%8C%E4%BD%BF%E5%BE%97%20displaymath%20%E4%B8%AD%E7%9A%84%E4%B8%8B%E6%A0%87%E5%A6%82%E4%B8%8B%E6%89%80%E7%A4%BA.png)
目前我针对张量积分别使用以下命令完成张量积:
\documentclass{article}
\newcommand{\tensor}{\otimes}
\newcommand{\comptensor}{\mathbin{\hat{\otimes}}}
\newcommand{\testline}{V \tensor_k W \qquad V \tensor W \qquad V \comptensor_k W \qquad V \comptensor W}
\begin{document}
\[
\testline
\]
\[
\textstyle \testline
\]
\end{document}
两行看起来都像这样:
我想改变\tensor
和的定义\comptensor
,使得在textstyle中没有任何变化,但在displaystyle中我希望打印下标以下操作员而不是除了它之外的人。
答案1
使用自然的语法,这样您就可以改变主意并避免使用下划线符号。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newcommand{\tens}{\gen@tens{\otimes}}
\newcommand{\comptens}{\gen@tens{\hat{\otimes}}}
\newcommand{\gen@tens}[1]{%
\@ifnextchar_{\gen@@tens{#1}}{\mathbin{#1}}%
}
\def\gen@@tens#1_#2{%
\mathpalette\gen@@@tens{{#1}{#2}}%
}
\newcommand\gen@@@tens[2]{\mathbin{\gen@@@@tens#1#2}}
\newcommand\gen@@@@tens[3]{%
\ifx#1\displaystyle
\mathop{#2}\limits_{#3}%
\else
{#2}_{#3}%
\fi
}
\makeatother
\begin{document}
\[
A\tens B\comptens C \quad A\tens_{k}B\comptens_{k}C
\]
\begin{center}
$A\tens B\comptens C \quad A\tens_{k}B\comptens_{k}C$
\end{center}
\end{document}
答案2
我确实需要稍微改变一下语法,这样它就\comptensor
采用一个可选参数作为其下标,而不是使用下划线符号。
不能使用\limits
样式方法,因为它仅适用于\mathop
类,而不适用于\mathbin
。因此,我使用堆栈来获取\displaystyle
下限。
\documentclass{article}
\usepackage{stackengine}
\newcommand{\tensor}{\otimes}
\newcommand{\comptensor}[1][]{
\ifx\relax#1\relax\mathbin{\hat\otimes}\else\mathchoice
{\mathbin{\ensurestackMath{\stackunder[1pt]{\hat{\otimes}}{\scriptstyle#1}}}}
{\mathbin{\hat{\otimes}_{#1}}}
{\mathbin{\hat{\otimes}_{#1}}}
{\mathbin{\hat{\otimes}_{#1}}}
\fi
}
\newcommand{\testline}[1][]{$#1 V \tensor W \qquad V \tensor_k W $\par
$#1 V \comptensor W \qquad V \comptensor[k] W$}
\begin{document}
\testline[\displaystyle]
\testline
\end{document}