该\textsuperscript
命令使上标文本位于大写字母的上方。下面是一个例子来说明我的意思:
\textsuperscript{3} И сказ
如您所见,上标 3 位于大写字母高度之上。
我想要类似上标的东西,但它受到大写字母高度的限制,如下所示。
在 TeX 中是否有相对简单的方法可以做到这一点?
答案1
\Textsuperscript
您可以按照与内核类似的方式定义命令\textsuperscript
,但使用适当的命令\raise
代替原始的命令^
;类似这样的操作:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\makeatletter
\newlength\mylen
\DeclareRobustCommand*\Textsuperscript[1]{%
\@Textsuperscript{\selectfont#1}}
\def\@Textsuperscript#1{%
\settoheight\mylen{\fontsize\f@size\z@ A}%
{\m@th\ensuremath{\raise.3\mylen\hbox{\fontsize\sf@size\z@#1}}}}
\makeatother
\begin{document}
\textsuperscript{3}И сказ
\Textsuperscript{3}И сказ
\Large
\textsuperscript{3}И сказ
\Textsuperscript{3}И сказ
\Huge
\textsuperscript{3}И сказ
\Textsuperscript{3}И сказ
\end{document}
以下是原始定义:
\DeclareRobustCommand*\textsuperscript[1]{%
\@textsuperscript{\selectfont#1}}
\def\@textsuperscript#1{%
{\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
答案2
您提出的约束并不容易实现,因为它是矛盾的:一些大写字母(甚至数字)不会覆盖整个大写字母的高度。一些字形低于这个高度,而另一些字形则高于这个高度。因此,必须接受妥协。下面我使用来获取高度;如果您的上标只有数字,则在第二次测量中A
使用 是明智的。0
\fontcharht
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\makeatletter
\DeclareRobustCommand*\lowsuperscript[2][\sf@size]{%
\@lowsuperscript{#1}{#2}}
\newcommand\@lowsuperscript[2]{%
{\check@mathfonts % be sure \sf@size is defined
\dimen0=\fontcharht\font`A
\fontsize{#1}\z@\selectfont
\advance\dimen0-\fontcharht\font`A % might be \fontcharht\font`0
\raisebox{\dimen0}{#2}%
}%
}
\makeatother
\begin{document}
\textsuperscript{3AI}И сказ \quad\lowsuperscript{3AI}И сказ
\Huge\textsuperscript{3AI}И сказ \quad\lowsuperscript{3AI}И сказ
\Huge\textsuperscript{3AI}И сказ \quad\lowsuperscript[10]{3AI}И сказ
\end{document}
该\lowsuperscript
命令有一个可选参数,用于为某些情况提供明确的字体大小,例如LaTeX 确定的\Huge
下标大小 ( \sf@size
) 太大的情况。我以 10 为例,但它可能太小了。
答案3
这种方式适用于不同的字体比例(经过几次编辑)。
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{stackengine}
\newcommand\myss[1]{\belowbaseline[0pt-\heightof{И}]{\scriptsize#1}}
\begin{document}
\myss{3} И сказ
\LARGE
\myss{3} И сказ
\end{document}
对于具有上标比例的版本,我使用\scalebox
,在这种情况下,比例设置为 60%
\documentclass{article}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{stackengine}
\usepackage{graphicx}
\newcommand\myss[1]{\belowbaseline[0pt-\heightof{И}]{\scalebox{.6}{#1}}}
\begin{document}
\myss{3} И сказ
\LARGE
\myss{3} И сказ
\end{document}