仅格式化第一级嵌套下标的命令?

仅格式化第一级嵌套下标的命令?

我想创建一个仅针对索引的第一个“级别”的命令。我将通过一些示例进行说明,使用\qq第一行中的命令以及下面一行中的“真实”LaTeX 代码:

d\qq{SA}
d_{\mathrm{SA}}

d\qq{SA_j}
d_{\mathrm{SA_{\mathit{j}}}}

d\qq{S_{j,k} A_j}
d_{\mathrm{S_{\mathit{j,k}} A_{\mathit{j}}}}

d\qq{S_{j,k} A_{j,k}}
d_{\mathrm{S_{\mathit{j,k}} A_{\mathit{j,k}}}}

编译后的代码应如下所示:

图片

我完全不知道该如何解决这个问题,或者是否可以仅使用来完成\newcommand

请帮忙,手动做这件事让我发疯:)

答案1

在此处输入图片描述

\documentclass{article}
\def\qq#1{_{\mathchoice
{\hbox{$\displaystyle#1$}}%
{\hbox{$\textstyle#1$}}%
{\hbox{\scriptfont1=\scriptfont0$\scriptstyle#1$}}%
{\hbox{$\scriptscriptstyle#1$}}%
}}
\usepackage{amsmath}

\begin{document}

$d\qq{SA}$
$d_{\mathrm{SA}}$


$d\qq{SA_j}$
$d_{\mathrm{SA_{\mathit{j}}}}$

$d\qq{S_{j,k} A_j}$
$d_{\mathrm{S_{\mathit{j,k}} A_{\mathit{j}}}}$

$d\qq{S_{j,k} A_{j,k}}$
$d_{\mathrm{S_{\mathit{j,k}} A_{\mathit{j,k}}}}$

\end{document}

间距并不完全相同,因为您在带框的 S 上加下标而不是直接在 S 上加下标,因此您会失去对下标定位的一些精细调整。

答案2

我认为你的出发点是错误的。如果你说

$d_{\mathrm{SA}_{j}}$

你不会遇到这些问题。也许你想使用简写\mathrm

\newcommand{\qq}[1]{\mathrm{#1}}

并输入

$d_{\qq{SA}_{j}}$

保持适当隔离的不同语义。

答案3

以下内容改编自 David Carlisle 的回答,以及相关问题的答案:创建_一个宏,并使用该\sb宏(保留的旧行为_)根据周围的数学风格定义新的行为。

代码:

\documentclass{minimal}

\catcode`_=\active
\def_#1{\mathchoice
  {\sb{\mathrm{#1}}}{\sb{\mathrm{#1}}}{\sb{\mathit{#1}}}{\sb{\mathit{#1}}}%
}

\begin{document}

$d_{SA}  \;\;  d_{SA_j}  \;\;  d_{S_{j,k} A_j}  \;\;  d_{S_{j,k} A_{j,k}}$

\end{document}

结果:

罗马化一级下标

你可以使用宏随意打开或关闭此行为

\def\romansuboff{\catcode`_=8}
\def\romansubon{\catcode`_=active}

然后使用\romansuboff它关闭自定义行为,然后\romansubon再将其重新打开。

相关内容