我需要创建一个宏,以便我得到一个带有凸起分数线的分数。在第一种方法中,我的意思是创建两个框(分子和分母),由一个固定的水平线分隔,该水平线贯穿分子和分母的整个宽度。但是,实际上我没有足够的 TeX 概念来做到这一点,因此我使用简单的 来排版我的文档\raisebox{.85pt}{$\displaystyle{\frac{#1}{#2}}$}
。
上图显示了问题所在:在这张图片中,左边是凸起的分数,右边是默认分数。如你所见,我的简单解决方案并没有解决整个分数高度过高的问题。
我必须告诉你,这个问题是由于使用非标准的 TeX 字体造成的:加号和减号符号属于数学 pi 字体,它们的中线与 TeX 基元不一致。
那么,有没有办法固定分数高度并仅提高其条形?
答案1
在这个修改后的解决方案中,分隔线上方有 2pt 的间隙,下方有 4 pt 的间隙,分别在\stackon
和 的可选参数中指定\stackunder
。显然,这些数字可以进行调整(甚至可以设置为负数)以处理字体的特定特征。如果您希望分隔线相对于水平数学轴升高,则可以更改 的.5ex
参数。\raisebox
已编辑以明确加载\ifthen
包,因为它不再由自动完成stackengine
。
\documentclass{article}
\usepackage{stackengine}
\usepackage{ifthen}
\newlength\testwida
\newlength\testwidb
\newlength\mywidth
\newcommand\newfrac[2]{%
\setlength\testwida{\widthof{$#1$}}%
\setlength\testwidb{\widthof{$#2$}}%
\ifthenelse{\lengthtest{\testwida>\testwidb}}%
{\mywidth=\testwida}%
{\mywidth=\testwidb}%
\raisebox{.5ex}{%
\stackunder[4pt]{\stackon[2pt]{\rule{\mywidth}{.4pt}}{$#1$}}{$#2$}}%
}
\parskip 1ex
\begin{document}
\(x^3 \, \newfrac{x + y^2}{\sqrt{xy}}\)
\end{document}
原始解决方案:
如果我理解了您的问题,您的字体会导致“不自然”的垂直间距。如果是这样,您可以使用包stackengine
将项目堆叠成任何特定间隙(在横线上方和下方)。在此示例中,我将间隙显示为默认值(3pt),然后显示为 1pt,最后显示为 4pt。编辑答案以使数学轴正确。
\documentclass{article}
\usepackage[oldsyntax]{stackengine}
\usepackage{ifthen}
\newlength\testwida
\newlength\testwidb
\newlength\mywidth
\newcommand\newfrac[2]{%
\setlength\testwida{\widthof{$#1$}}%
\setlength\testwidb{\widthof{$#2$}}%
\ifthenelse{\lengthtest{\testwida>\testwidb}}%
{\mywidth=\testwida}%
{\mywidth=\testwidb}%
\raisebox{.5ex}{%
\stackunder{\stackon{\rule{\mywidth}{.4pt}}{$#1$}}{$#2$}}%
}
\parskip 1ex
\begin{document}
\(x^3 \, \newfrac{x + y^2}{\sqrt{xy}}\)
\Sstackgap=1pt
\(x^3 \, \newfrac{x + y^2}{\sqrt{xy}}\)
\Sstackgap=4pt
\(x^3 \, \newfrac{x + y^2}{\sqrt{xy}}\)
\end{document}
[编辑:第二个 MWE 使用过时的 stackengine 语法来设置 stackgap 长度(例如,\Sstackgap=1ex),这阻止了可缩放长度在字体大小更改下缩放。该软件包的第 2 版(提交于 2013 年 7 月 11 日)通过小的语法更改解决了该问题。]
答案2
我认为我已经按照 egreg 的建议修改了,从而回答了我的问题\fontdimen22
。这是我所做的:
\DeclareFontShape{OMS}{cmsy}{m}{n}{%
<5><6><7><8><9><10>gen*cmsy%
<10.95><12><14.4><17.28><20.74><24.88>cmsy10%
}{\fontdimen22\font=1.25\fontdimen22\font}
所以我调整了分数线(和大分隔符)的位置。下图显示了结果。