在 fontspec 中将字体缩放到所需的 x-height/em/cap-height/etc

在 fontspec 中将字体缩放到所需的 x-height/em/cap-height/etc

在从印刷品中复制印刷版式时,我经常遇到字体“点大小”在页面上不易测量的常见困难。另一方面,x 高度和大写高度等特征很容易测量,但 fontspec 不接受它们作为尺寸规范(据我所知)。

换句话说,有类似的东西\newfontface[xheight=<dim>]{EB Garamond}可用吗?

答案1

我假设您使用的是 LuaTeX。如果是这样,可以设置一个名为的宏并将其与的选项\Setxheight一起使用。请注意,该宏使用 Lua 的除法例程而不是 TeX 自己的内置例程,因为缩放因子可能不是整数值。fontspecScale

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
%% x-height of font is stored in \fontdimen5
\newcommand\Setxheight[1]{\directlua{%
    tex.sprint(#1/(\the\numexpr\dimexpr 
    \the\fontdimen5\font\relax\relax/65536))}}

\begin{document}
\setmainfont{EB Garamond}
\the\fontdimen5\font  % show value of x-height

\setmainfont[Scale=\Setxheight{4.78}]{EB Garamond} % reload the font

\the\fontdimen5\font % show value of x-height
\end{document}

编辑:XeLaTeX 版本

% !TEX TS-program = xelatex
\documentclass{article}
\usepackage{fontspec}
%% x-height of font is stored in \fontdimen5
\ExplSyntaxOn
\newcommand\Setxheight[1]{
\fp_eval:n{(#1/(\the\numexpr\dimexpr 
\the\fontdimen5\font\relax\relax/65536))}}
\ExplSyntaxOff

\begin{document}
\setmainfont{EB Garamond}
\the\fontdimen5\font  % show value of x-height

\setmainfont[Scale=\Setxheight{4.78}]{EB Garamond} % reload the font

\the\fontdimen5\font % show value of x-height
\end{document}

相关内容