在排版内联方程式时,我曾经强制显示样式以获得以下限制,因为我认为带有下标/上标限制的内联样式绝对令人震惊,我仍然这么认为,而且因为我完全不知道该命令\limits
。现在,我仍然这样做,因为它会放大像 这样的符号\sum
,使它们看起来更好。然而,有人向我指出这会扭曲行距,我同意这种效果几乎和内联样式一样难看。我现在正在处理的一个例子是以下,带有\bigoplus
:
因此,我的想法是使用\underset
,通过 减少限制的大小\scriptscriptstyle
,然后提高它,以便\oplus
尽可能地将其限制在一定范围内,而不会因限制而产生太多“副作用”。使用代码:
Va bene. Per quanto riguarda il viceversa, è chiaro\vsp{-8.5pt} che se
$M\simeq\!\!\!\raisebox{3pt}{$\underset{\raisebox{6pt}{\scb{0.9}[0.9]{$\ssst t\text{ volte}$}}}{\raisebox{-2pt}{$\bigoplus$}}$}\!\!_RR=(_RR)^t$,
poi scriveremo anche $R^t$, la somma diretta di $t$ copie di $_RR$ è libera sulla base
$\br{e_i:i\leq t}$, perché? Ad esempio
其中\scb
是\scalebox
,\vsp
是\vspace
,\ssst
是\scriptscriptstyle
和\br{…}
是\left\lbrace…\right\rbrace
,我得到以下结果:
我确信你会同意它已经好多了,但我想让它变得更好。问题是:
提高限额实际上会降低以下界限;
尝试降低加号然后提高整体会增加“Va bene”线和上方内容之间的空间。
上面的代码就是这样的,只是因为我尝试过,将整体提高 3pt 并将降低\bigoplus
2 会得到\bigoplus
我喜欢的稍高一点的值,而删除限制的提高将需要修复\vspace
,所以我将代码排版与图片完全一致。所以自然而然的问题是:为什么会发生第 1) 点和第 2) 点中的情况,我如何才能使限制实际上更接近\bigoplus
?
PS:我完全清楚,如果上升器低于限制值,整个事情就会变得混乱,但这是我以后要讲到的事情。
答案1
当然,下标可以移动到符号上,但这仍然会影响行距,因为深度仍然太大。以下示例比较了三种变体:
- 下方带有
\limits
, 下标, - 下方下标之间无空格,
- 默认使用右侧下标。
\documentclass{article}
\usepackage{amsmath}
\newcommand*{\lipsum}{ %
\noindent
Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu
libero, nonummy eget, consectetuer id, vulputate a, magna. %
}
\newcommand*{\formula}[1]{$M\simeq #1 {}_RR=({}_RR)^t$}
\newcommand*{\scriptbelow}[3][0pt]{%
\begingroup
\renewcommand*{\arraystretch}{0}%
\begin{array}[t]{@{}c@{}}%
#2\\[{#1}]%
\scriptstyle #3%
\end{array}%
\endgroup
}
\begin{document}
\lipsum\formula{\bigoplus\limits_{\text{$t$ volte}}}\lipsum
\bigskip
\lipsum\formula{\scriptbelow{\bigoplus}{\text{$t$ volte}}}\lipsum
\bigskip
\lipsum\formula{\bigoplus_{\text{$t$ volte}}}\lipsum
\end{document}
评论:
\arraystretch
tabular
是插入和环境中的垂直支柱的一个因子array
。它用于模拟均匀的行距。但在宏中,\scriptbelow
对两条线的高度和深度的额外贡献是不可取的,并且违背了运算符和其下标之间没有空格的目的。由于的更改应保持在本地,因此将代码与和
\arraystretch
放在一组。\begingroup
\endgroup
\renewcommand*{\arraystretch}
和之间的区别\renewcommand{\arraystretch}
在这里并不重要,因为定义没有参数。没有星号,参数可以包含\par
(空行)标记。内部\renewcommand*
映射到\def
,\renewcommand
没有开头的映射到\long\def
。使用哪种形式更多的是个人喜好问题。t
环境的可选选项array
将第一行的基线作为整个数组的参考线。这样\bigoplus
第一行就保持在与没有 时相同的垂直位置array
。