我想创建一个仅针对索引的第一个“级别”的命令。我将通过一些示例进行说明,使用\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
再将其重新打开。