仅在文档的部分内容中使用自定义数学字体

仅在文档的部分内容中使用自定义数学字体

非常类似于问题 我想在文档的(小)部分使用不同的无衬线数学字体。正如建议的那样回答上述问题,这可以通过使用\DeclareMathAlphabet以下计算机现代字体来实现。

\documentclass{article}

\DeclareMathVersion{sans}
\SetSymbolFont{operators}{sans}{OT1}{cmbr}{m}{n}
\SetSymbolFont{letters}{sans}{OML}{cmbrm}{m}{it}
\SetSymbolFont{symbols}{sans}{OMS}{cmbrs}{m}{n}
\SetMathAlphabet{\mathit}{sans}{OT1}{cmbr}{m}{sl}
\SetMathAlphabet{\mathbf}{sans}{OT1}{cmbr}{bx}{n}
\SetMathAlphabet{\mathtt}{sans}{OT1}{cmtl}{m}{n}
\SetSymbolFont{largesymbols}{sans}{OMX}{iwona}{m}{n}

\begin{document}

1234 CQ $1234 CQ$

\sffamily\mathversion{sans}
1234 CQ $1234 CQ$

\end{document}

计算机现代示例


但是,在我的文档中,我想使用 Roboto 作为无衬线字体。这样做会导致文档和数学字体之间出现明显的差异。

\documentclass{article}

\usepackage[light,medium]{roboto}

\DeclareMathVersion{sans}
\SetSymbolFont{operators}{sans}{OT1}{cmbr}{m}{n}
\SetSymbolFont{letters}{sans}{OML}{cmbrm}{m}{it}
\SetSymbolFont{symbols}{sans}{OMS}{cmbrs}{m}{n}
\SetMathAlphabet{\mathit}{sans}{OT1}{cmbr}{m}{sl}
\SetMathAlphabet{\mathbf}{sans}{OT1}{cmbr}{bx}{n}
\SetMathAlphabet{\mathtt}{sans}{OT1}{cmtl}{m}{n}
\SetSymbolFont{largesymbols}{sans}{OMX}{iwona}{m}{n}

\begin{document}

1234 CQ $1234 CQ$

\sffamily\mathversion{sans}
1234 CQ $1234 CQ$

\end{document}

Roboto 示例 1

例如,请注意数字 1 或字母 Q 的不同形状。显然,我希望数学和文档无衬线字体尽可能相似。对于特殊符号,这当然不会(轻易)起作用,但从 Roboto 字体中获取数字、字母和理想的希腊字母已经很棒了。


改变第一个\SetSymbolFont,我已经可以更进一步了。

\documentclass{article}

\usepackage[light,medium]{roboto}

\DeclareMathVersion{sans}
\SetSymbolFont{operators}{sans}{OT1}{Roboto-LF}{l}{n}
\SetSymbolFont{letters}{sans}{OML}{cmbrm}{m}{it}
\SetSymbolFont{symbols}{sans}{OMS}{cmbrs}{m}{n}
\SetMathAlphabet{\mathit}{sans}{OT1}{cmbr}{m}{sl}
\SetMathAlphabet{\mathbf}{sans}{OT1}{cmbr}{bx}{n}
\SetMathAlphabet{\mathtt}{sans}{OT1}{cmtl}{m}{n}
\SetSymbolFont{largesymbols}{sans}{OMX}{iwona}{m}{n}

\begin{document}

1234 CQ $1234 CQ$

\sffamily\mathversion{sans}
1234 CQ $1234 CQ$

\end{document}

Roboto 示例 2

现在数字都来自正确的字体!\SetSymbolFont但是,尝试使用同样的方法处理第二个却失败了。

\SetSymbolFont{letters}{sans}{OML}{Roboto-LF}{l}{it}

结果是

LaTeX Font Warning: Font shape `OML/Roboto-LF/l/it' undefined
(Font)              using `OML/cmm/m/it' instead on input line 19.

并且从输出中可以明显看出缺少的字体。

Roboto 示例 3

有什么方法可以让我获得正确字体的字母(和希腊字母)?


如果有同时使用pdflatexxelatex/ 的方法lualatex,我主要对 感兴趣pdflatex,因为我也在使用microtype包,众所周知它与xelatex/不完全兼容lualatex。如果后者可以做到这一点,但pdflatex不能,我可能仍然会考虑放弃microtype

相关内容