我正在尝试创建一个在环境内部默认使用无衬线数学但外部不使用的环境。为此,我使用了包sansmath
。
问题是,当与\usepackage[libertine]{newtxmath}
以下是一个例子:
\documentclass[10pt]{article}
\usepackage[tt=false, type1=true]{libertine}
\usepackage[libertine]{newtxmath} %works if I remove this
\usepackage{sansmath}
\begin{document}
$(0 + 1) + 2$
\begin{sansmath}
$(3 + 4) + 5$
\end{sansmath}
\end{document}
非 sans 部分显示正常,但 sans 部分的括号根本不显示。如果我删除包,它们就会显示newtxmath
。
我能做些什么来让 sansmath 和 libertine 一起工作吗?
答案1
在 Unicode 引擎中
在 中unicode-math
,您可以加载 Libertinus Math 作为主数学字体,并使用 加载另一个version=sans
。这解决了传统 8 位字体编码的难题。
\documentclass[10pt]{article}
\usepackage{unicode-math}
\defaultfontfeatures{ Scale=MatchLowercase, Ligatures=TeX }
\setmainfont{Libertinus Serif}[Scale=1.0]
\setsansfont{Libertinus Sans}
\setmathfont{Libertinus Math}
\setmathfont{kpmath-sans}[version=sans]
\newenvironment{sansmath}{\mathversion{sans}}
\begin{document}
$(0 + 1) + 2$
\begin{sansmath}
$(3 + 4) + 5$
\end{sansmath}
\end{document}
在 PDFTeX 中
您可以尝试从包中修补数学字母newtxsf
。
\documentclass[10pt]{article}
\usepackage[T1]{fontenc}
\usepackage{libertinus}
\DeclareMathVersion{sans}
\SetSymbolFont{operators}{sans}{\encodingdefault}{\sfdefault}{m}{n}
\SetMathAlphabet{\mathit}{sans}{\encodingdefault}{\sfdefault}{m}{it}
\SetMathAlphabet{\mathsf}{sans}{\encodingdefault}{\sfdefault}{m}{n}
\SetMathAlphabet{\mathbf}{sans}{\encodingdefault}{\sfdefault}{b}{n}
\SetSymbolFont{letters}{sans}{OML}{ntxsfmi}{m}{it}
% \SetSymbolFont{lettersA}{sans}{U}{ntxsfmia}{m}{it}
\newenvironment{sansmath}{\mathversion{sans}}
\begin{document}
$(0 + 1) + 2$
\begin{sansmath}
$(3 + 4) + 5$
\end{sansmath}
\end{document}