有一个很棒的分数宏这里* 适用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}
答案1
我第一次写作时 TeX 就支持 OpenTypexfrac
2004 年初,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}