修改内联文本和指数的分数宏

修改内联文本和指数的分数宏

有一个很棒的分数宏这里* 适用FontSpec于 LuaLaTeX(*:这将是该答案中的第二个宏,称为\unifrac,我比第一个“宏”/使用该frac功能更喜欢它),但它仅在您使用的字体具有 OpenType 功能dnom和时才有效numr。我使用的字体 MinionMath(与一起使用unicode-math,需要FontSpec),除了数字之外没有这些功能(许多字体没有),甚至具有这些字母功能的字体也没有希腊字母的功能。

说实话,这个宏对于我用于内联文本和指数的许多分数来说看起来非常漂亮,但我希望我能将它用于数字以外的东西。我知道\sfrac可以使用所有字母(以及\nicefrac和)的宏,但我喜欢这个宏\tfrac的外观\unifrac很多更多的。

有什么方法可以\unifrac修改表现就像我可以将它与非数字字符一起使用,但保留?\sfrac的外观。\unifrac

我将在这里提供 MWE 以及图片:

\documentclass{article}
\usepackage{xfrac}
\usepackage{fontspec} % Using unicode-math instead doesn't seem to make much difference 
    \setmainfont{EB Garamond 12 Regular} % this font has dnom and numr features; 
     % XITS Math, for example, doesn't

\newcommand{\unifrac}[2]{\mbox{% making sure we don't get a line break
    {\addfontfeatures{RawFeature=+numr}#1}%
    ⁄% That slash is U+2044 FRACTION SLASH, which has special spacing
    {\addfontfeatures{RawFeature=+dnom}#2}%
    }}

\begin{document}

This is \texttt{\unifrac:}\qquad
\unifrac{12}{14} \unifrac{31415}{27182} \unifrac{abc}{def} \unifrac{Foo!}{Bar?}
\unifrac{\#\$\%+/<>=}{?\@[]\textbackslash\_|\{\}§†} 
\[\left(\frac{3x}{2y}\right)^{\unifrac{3}{2}}=\unifrac{\lambda}{2x}\]\\

And this is \texttt{\sfrac:}\qquad
\sfrac{12}{14} \sfrac{31415}{27182} \sfrac{abc}{def} \sfrac{Foo!}{Bar?}
\sfrac{\#\$\%+/<>=}{?\@[]\textbackslash\_|\{\}§†}
\[\left(\frac{3x}{2y}\right)^{\sfrac{3}{2}}=\sfrac{\lambda}{2x}\]\\

\end{document}

dnom对于具有和特征(用于数字)的字体numr,例如 EB Garamond,其结果是: 在此处输入图片描述

对于不具备这些功能的字体(例如 XITS Math),其结果是: 在此处输入图片描述

答案1

我第一次写作时 TeX 就支持 OpenTypexfrac2004 年初,XeTeX 基本上不存在——当时 XeTeX 甚至还没有发布。因此,该软件包的设计从未考虑到这一点。此外,其根本目的是提供一种为不包含分数的字体编写漂亮分数的方法。

通过对字体选择方式进行一些更改,该软件包很可能能够识别 OpenType。但是,您还应该能够通过使用 numerator-format 键来选择字体,为相关字体定义一个实例。以下实例声明基本上会让 \sfrac 按照您希望的方式运行,以适应您选择的 Garamond 变体。这与手册中的 Janson 示例非常相似。

\DeclareInstance{xfrac}{EBGaramond12Regular(0)}{text}{
      numerator-format = {\fontspec{EBGaramond12Regular}[RawFeature=+numr]#1},
      scaling = false,
      numerator-bot-sep = 0pt,
      denominator-bot-sep = 0 pt,
      denominator-format = {\addfontfeatures{RawFeature=+dnom}#1}
}

希望这有帮助,莫滕

答案2

我在这里创建了\altfrac{}{}。它不需要fontspec,它遵循数学模式,其字体比 的字体大\sfrac,分母位于基线上,而分子的顶部则试图位于正常文本字体的顶部。数字以 表示\footnotesize。斜线是水平拉伸的,/以使其更像分数斜线。

它的缺点是,如果当前字体大小不是 ,它就无法正常工作\normalsize

\documentclass{article}
\usepackage{xfrac,graphicx}

\newcommand{\altfrac}[2]{\ifmmode\def\tmp{$}\else\def\tmp{}\fi\mbox{%
    {\footnotesize \raisebox{.24\ht\strutbox}{\tmp#1\tmp}}%
    \kern-2.2pt\scalebox{1.6}[1]{/}\kern-1.8pt%⁄% That slash is U+2044 FRACTION SLASH, which has special spacing
    {\footnotesize\tmp#2\tmp}%
    }}

\begin{document}
\parindent 0pt
This is \texttt{altfrac:}\qquad
\altfrac{12}{14} \altfrac{31415}{27182} \altfrac{abc}{def} \altfrac{Foo!}{Bar?}
\altfrac{\#\$\%+/<>=}{?\@[]\textbackslash\_|\{\}§†} 
\[\left(\frac{3x}{2y}\right)^{\altfrac{3}{2}}=\altfrac{\lambda}{2x}\]
\qquad And here is \altfrac{x}{y} versus $\altfrac{x}{y}$\\

And this is \texttt{sfrac:}\qquad
\sfrac{12}{14} \sfrac{31415}{27182} \sfrac{abc}{def} \sfrac{Foo!}{Bar?}
\sfrac{\#\$\%+/<>=}{?\@[]\textbackslash\_|\{\}§†}
\[\left(\frac{3x}{2y}\right)^{\sfrac{3}{2}}=\sfrac{\lambda}{2x}\]\\

\end{document}

在此处输入图片描述

相关内容