![更新:问题解决了!](https://linux22.com/image/318584/%E6%9B%B4%E6%96%B0%EF%BC%9A%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3%E4%BA%86%EF%BC%81.png)
roboto 字体的删除texlive 2015
线对于小写字母来说有点太高了。我认为原因可能是,1ex
这种字体的单位与我预期的单位大致相差 2 倍。我发现,我可以ex
用 \fontdimen5\font 重新定义,但它似乎只是更改当前字体大小的值。
\documentclass{article}
\usepackage[sfdefault]{roboto}
\usepackage{calc}
\usepackage[normalem]{ulem}
\begin{document}
\sout{hello world}
\newlength{\totalheightofex}
\setlength{\totalheightofex}{\totalheightof{x}}
Height of x \the\totalheightofex
\newlength{\oneex}
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
\fontdimen5\font=5.34pt
\sout{hello world}
\setlength{\totalheightofex}{\totalheightof{x}}
Height of x \the\totalheightofex
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
\large{
\sout{hello world}
\setlength{\totalheightofex}{\totalheightof{x}}
Height of x \the\totalheightofex
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
}
\end{document}
我想,可以定义自定义的删除线,但我更愿意更改单位ex
。有什么建议吗?
答案1
这显然是字体度量文件中的一个错误,我认为这是一个回归问题,因为 TeX Live 2014 中的参数很好。然而,在过渡到 TeX Live 2015 时字体发生了变化(参见为什么 Roboto 字体与 LaTeX 包一起使用时看起来不同?) 和新的度量文件存在错误。您可以通过更改每次加载该系列字体时执行的命令来解决这个问题,这样它就可以正确设置 x 高度。
\documentclass{article}
\usepackage[sfdefault]{roboto}
\usepackage[normalem]{ulem}
\AtBeginDocument{\normalfont % force loading of the fd file
% reset the x-height at each call of a font
\expandafter\gdef\csname\encodingdefault+Roboto-LF\endcsname{%
\fontdimen5\font=\fontcharht\font`x }%
% also for the normal font
\fontdimen5\font=\fontcharht\font`x
}
\newlength{\heightofex}
\newlength{\oneex}
\begin{document}
\sout{hello world}
\settoheight{\heightofex}{x}
Height of x \the\heightofex
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
\large
\sout{hello world}
\settoheight{\heightofex}{x}
Height of x \the\heightofex
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
\end{document}
然而,这只是一个临时解决方案,字体度量信息应该由软件包维护者在 TFM 文件中修复。
更新:问题解决了!
今天 (2015-09-18) 更新了 TeX Live,其中包含roboto
修订版 38386,以下文档
\documentclass{article}
\usepackage[sfdefault]{roboto}
\usepackage[normalem]{ulem}
\newlength{\heightofex}
\newlength{\oneex}
\begin{document}
\sout{hello world}
\settoheight{\heightofex}{x}
Height of x \the\heightofex
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
\large
\sout{hello world}
\settoheight{\heightofex}{x}
Height of x \the\heightofex
\setlength{\oneex}{1ex}
Height of 1ex \the\oneex
\end{document}
生产
“x”的高度与1ex不一样,但这是字体设计师的选择。