更新:问题解决了!

更新:问题解决了!

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}

texlive 2015 中 pdflatex 的输出

我想,可以定义自定义的删除线,但我更愿意更改单位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不一样,但这是字体设计师的选择。

相关内容