数学模式下上标和下标的垂直定位

数学模式下上标和下标的垂直定位

这个问题可以找到,但没有令人满意的答案。我想将下标的位置放低一点,将上标的位置放高一点。

测试它的代码很简单:

$1.23_{-22.22}^{-1.23221}$

主要要求是,不要使用幻影框和其他丑陋的技巧。下标和上标必须按照上面的建议书写。此外,我想启用“改进的定位”,然后返回到标准定位(我有一张带有数字的大表格,如上所示)。有一个建议这里。但作者只对上标和下标分别做了这件事。对于同时使用上标和下标的情况,他参考了 tex 书的附录 G,我试着看了看,但我真的不知道如何将这些想法联系起来,我是 latex 用户,不是开发人员。提到的文本还提供了一个很好的例子,说明我希望上标和下标是什么样子。此外,如果可能的话,我希望上标和下标彼此左对齐。

答案1

您引用的文章\fontdimen14针对上标和\fontdimen16下标进行了更改。

\fontdimen17对于同时出现上标和下标的情况,您也需要进行更改(注意:\textfont2仅适用于显示和文本数学样式。对于脚本和脚本脚本样式,分别使用\scriptfont2\scriptscriptfont2)。

此外,如果您希望在狭窄模式下保留较高的上标(例如在根号下),您还需要更改\fontdimen15

\documentclass[10pt]{article}
\begin{document}
$1.23_{-22.22}^{-1.23221}$
$
\fontdimen14\textfont2=6pt
\fontdimen15\textfont2=6pt
\fontdimen16\textfont2=5pt
\fontdimen17\textfont2=5pt
1.23_{-22.22}^{-1.23221}
1.23_{-22.22}
1.23^{-1.23221}
\sqrt{1.23^{-1.23221}}$
\end{document}

在此处输入图片描述

\fontdimen暂时设置这些值,应该保存原始值并根据需要恢复它们。


跨字体大小并切换回原始尺寸的具体方法如下:

\documentclass{article}
\setbox0=\hbox{$%
\xdef\fdfourteen{\the\fontdimen14\textfont2}
\xdef\fdfifteen{\the\fontdimen15\textfont2}
\xdef\fdsixteen{\the\fontdimen16\textfont2}
\xdef\fdseventeen{\the\fontdimen17\textfont2}
$}
\newcommand\newss{\setbox0=\hbox{\(\)}%
\fontdimen14\textfont2=1.5ex
\fontdimen15\textfont2=1.5ex
\fontdimen16\textfont2=1.1ex
\fontdimen17\textfont2=1.1ex
}
\newcommand\origss{\setbox0=\hbox{\(\)}%
\fontdimen14\textfont2=\fdfourteen%
\fontdimen15\textfont2=\fdfifteen%
\fontdimen16\textfont2=\fdsixteen%
\fontdimen17\textfont2=\fdseventeen%
}
\parskip=1em% FOR THIS MWE ONLY
\def\test{$
  1.23_{-22.22}^{-1.23221}\quad
  1.23_{-22.22}\quad
  1.23^{-1.23221}\quad
  \sqrt{1.23^{-1.23221}}
$}
\begin{document}
\fdfourteen, \fdfifteen, \fdsixteen, \fdseventeen

\origss Orig: \test\par{\footnotesize Orig(footnotesize): \test}

\newss New: \test\par{\footnotesize\newss New(footnotesize): \test}

\origss Orig: \test\par{\footnotesize\origss Orig(footnotesize): \test}
\end{document}

在此处输入图片描述

答案2

由于您似乎还希望上标和下标处于正常位置,因此需要以某种方式标记您想要不同定位的位置。

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentCommand{\dn}{e{_^}}{%
  _{\IfValueT{#1}{#1}\vphantom{\smash[b]{|}}}
  ^{\IfValueT{#2}{#2}\vphantom{\smash[t]{\big|}}}
}

\begin{document}

\[
1.23\dn_{-22.22}^{-1.23221}
\qquad
1.23_{-22.22}^{-1.23221}
\]

\end{document}

使用比 更有意义的名称\dn

在此处输入图片描述

答案3

一款带有猫代码和数学代码的游戏。

\documentclass{article}
\usepackage{amsmath}

\begingroup
\catcode`_ \active
\catcode`^ \active
\gdef\newactiveunderscore
    {\def_##1{\sb{##1\vphantom{\smash[b]{|}}}}}
% default definition is \_
\gdef\restoreoldactiveunderscore{\def_{\_}}
\gdef^#1{\sp{#1\vphantom{\smash[t]{\big|}}}}
% (the definitions contents copied from @egreg's \dn)
\endgroup

\newcommand{\modifiedsubsuper}{%
    % _ is already math active
    \newactiveunderscore % give it new definition
    \catcode`_ 12 % don't forget to remove its special catcode
    % store current mathcode of ^
    \ifnum\mathcode`^="8000 \else\edef\currentspmathcode{\the\mathcode`^}\fi
    \mathcode`^ "8000
    \catcode`^ 12 % don't forget to remove its special catcode
}%

\newcommand{\normalsubsuper}{%
    \restoreoldactiveunderscore
    \catcode`_ 8 % don't forget its special catcode
    \mathcode`^ \currentspmathcode
    \catcode`^ 7 % don't forget its special catcode
}%

\AtBeginDocument{\xdef\currentspmathcode{\the\mathcode`^}}

\begin{document}

\[
1.23_{-22.22}^{-1.23221}
\]
\[\modifiedsubsuper
1.23_{-22.22}^{-1.23221}
\]
\[
1.23_{-22.22}^{-1.23221}
\]
\modifiedsubsuper
\[
1.23_{-22.22}^{-1.23221}
\]
\normalsubsuper
\[
1.23_{-22.22}^{-1.23221}
\]
\end{document}

在此处输入图片描述

相关内容