下标中的上标太低

下标中的上标太低

代码

%\RequirePackage{fix-cm}%%% makes no difference
\documentclass{standalone}
\usepackage{amsfonts}
%\usepackage{lmodern}%%% makes no difference
\begin{document}
\({}_{N_n^m}\) \({}_{\mathbb{N}_n^m}\)
\end{document}

生产

生成的结果

该术语的含义是 {1,2,...,n} × ... × {1,2,...,n} (m 次),即 {1,2,...n}^m。我在 中使用这个术语\[\bigcup_{b\in\mathbb{N}_n^m} \prod_{i=1}^n \mleft(A_i\setminus\mleft(\bigcup_{\substack{1\le j\le m\\b_j=i}}P^j_i\mright)\mright)\]

对我来说,这个字母的m位置太低了,显然与前面的高度无关N。如何m在所有可能的上下文中自动放置在合适的高度?也就是说,我想要一个宏(比如,在 LaTeX3 中),例如

\NewDocumentCommand{\cubeOfNaturals} 
{ m m } 
{\mathbb{N}\c_math_subscript_token{#1}^{#2}}

除非它#2自动放置在适当的高度。

答案1

一个技巧可能是强制 TeX 不使用狭窄的风格:

\documentclass[border=4]{standalone}
\usepackage{amsfonts}

\makeatletter
\newcommand{\cubeOfNaturals}[2]{%
  \mathpalette\cube@of@naturals{{#1}{#2}}%
}
\newcommand{\cube@of@naturals}[2]{%
  \cube@of@naturals@{#1}#2%
}
\newcommand{\cube@of@naturals@}[3]{%
  #1\mathbb{N}_{#2}^{#3}%
}
\makeatother

\begin{document}

\({}_{\cubeOfNaturals{n}{m}}\) \({}_{\mathbb{N}_n^m}\)

\end{document}

在此处输入图片描述

答案2

有个想法:\mathstrut在上标位置插入“top-smashed”。具体来说,插入\mathstrut一个基线以上高度已被粉碎。粉碎对象的顶部(通过\smash[t]{...}指令)不会改变其在基线以下的深度。(Aside:\mathstrut定义为\vphantom{)},即,它是一个具有圆括号高度和深度的不可见对象。)

在此处输入图片描述

\documentclass{article}
\usepackage{amsfonts,mathtools} % mathtools loads amsmath, which provides '\smash[t]' macro
\newcommand{\Nnm}{N_n^{m\smash[t]{\mathstrut}}} % smash away the top of '\mathstrut'
\newcommand{\NNnm}{\mathbb{N}_n^{m\smash[t]{\mathstrut}}}
\begin{document}
$N_n^m$ $\mathbb{N}_n^m$ vs.\ $\Nnm$ $\NNnm$

\bigskip
$\displaystyle \bigcup_{b\in\NNnm} \prod_{i=1}^n \biggl(A_i \setminus 
   \biggl(\,\smashoperator[r]{\bigcup_{\substack{1\le j\le m\\b_j=i}}}P^j_i\biggr)\biggr)$
\end{document}

相关内容