带有凸起分数线的特殊分数宏

带有凸起分数线的特殊分数宏

我需要创建一个宏,以便我得到一个带有凸起分数线的分数。在第一种方法中,我的意思是创建两个框(分子和分母),由一个固定的水平线分隔,该水平线贯穿分子和分母的整个宽度。但是,实际上我没有足够的 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}

所以我调整了分数线(和大分隔符)的位置。下图显示了结果。

现在二进制符号与分数线对齐

相关内容