带 cfr-lm 的无衬线字体

带 cfr-lm 的无衬线字体

cfr-lm包支持拉丁现代的旧式数字。它基于nfssext-cfr定义\lnstyle宏切换回衬线数字的包。通常我通过使用切换到无衬线字体\renewcommand{\familydefault}{\sfdefault},但在这种情况下,受影响的文本\lnstyle不会切换到无衬线字体。

\documentclass{article}
% \usepackage{nfssext-cfr} % defines \lnstyle, does not cause problems on its own
\usepackage{cfr-lm} % switches to Latin Modern with old style numerals
\renewcommand{\familydefault}{\sfdefault} % switch to sans serif
% \renewcommand{\lnstyle}{\fontfamily{clm2s}\selectfont} % hard coded fix    
\begin{document}
test 123 % sans serif old style numerals
\lnstyle test 123 % should be sans serif lining numerals
\end{document}

这种行为是一个错误还是我犯了一个错误?

答案1

一张图片也许能有所帮助。

字体

这只是\rmfamily直立形状。粗体、斜体、粗体斜体、小写字母。乘以\sffamily\ttfamily……并非所有字体特征都会存在于所有排列中,因此会搜索“最接近”的那个……

这只是处理旧的 7 位和 8 位字体时所需复杂性的冰山一角。

据我了解,在传统字体世界中,要激活字体功能或停用字体功能,软件包nfssext-cfr会使用一组开关,这些开关会逐渐增加或减少之前上游打开/关闭的功能。因此,开关的效果在很大程度上取决于上下文。

该软件包假定 (1) 字体文件使用 Berry 方案命名;(2) 使用 NFSS 字母代码,如图所示j2(3) 默认字体设置尚未重新定义。

平均能量损失

\documentclass{article}
\usepackage{cfr-lm} % calls nfssext-cfr
\newcommand\testtext{123,456,789 \fontname\font }

\begin{document}
%=======================
\begin{tabular}{lll}
Setting & Sample + font used & Code\\
\hline Package Default & \testtext& \\
+j & \ostyle\testtext& \verb|\ostyle|\\
-j & \lstyle\testtext& \verb|\lstyle|\\
+2 & \pstyle\testtext& \verb|\pstyle|\\
-2 & \tstyle\testtext& \verb|\tstyle|\\
+j+2 & \postyle\testtext& \verb|\postyle|\\
-j-2 & \tlstyle\testtext& \verb|\tlstyle|\\
+j-2 & \tostyle\testtext& \verb|\tostyle|\\
-j+2 & \plstyle\testtext& \verb|\plstyle|\\
No style & \regstyle\testtext& \verb|\regstyle|\\
No style +j & \regstyle\ostyle\testtext& \verb|\regstyle\ostyle|\\
No style +2 & \regstyle\pstyle\testtext& \verb|\regstyle\pstyle|\\
\end{tabular}

\end{document}

添加

以下 MWE 显示了三种字体系列,分别为普通字体、粗体、粗体斜体、斜体、小型大写字母和小型大写字母粗体;以及在字体功能不可用时选择的最近的字体。

平均能量损失

\documentclass{article}
\usepackage{cfr-lm} % calls nfssext-cfr
\newcommand\testtext{123,456,789 \fontname\font }
\newcommand\tv[1]{\regstyle\normalfont\texttt{\textbackslash #1}}
\newcommand\thesample[1]{%
\noindent #1

\begin{tabular}{lll}
Setting & Sample + font used & Code\\
\hline Package Default & \testtext& \\
+j & \ostyle\testtext& \tv{ostyle}\\
-j & \lstyle\testtext& \tv{lstyle}\\
+2 & \pstyle\testtext& \tv{pstyle}\\
-2 & \tstyle\testtext& \tv{tstyle}\\
+j+2 & \postyle\testtext& \tv{postyle}\\
-j-2 & \tlstyle\testtext& \tv{tlstyle}\\
+j-2 & \tostyle\testtext& \tv{tostyle}\\
-j+2 & \plstyle\testtext& \tv{plstyle}\\
No style & \regstyle\testtext& \tv{regstyle}\\
No style +j & \regstyle\ostyle\testtext& \tv{regstyle}\tv{ostyle}\\
No style +2 & \regstyle\pstyle\testtext& \tv{regstyle}\tv{pstyle}\\
\end{tabular}
\par\bigskip
}
\begin{document}
%=======================
\rmfamily
\thesample{rmfamily normal}

\bfseries
\thesample{rmfamily bold}

\itshape
\thesample{rmfamily bold italics}


\mdseries
\thesample{rmfamily italics}

\upshape
\scshape
\thesample{rmfamily small caps}

\bfseries
\thesample{rmfamily small caps bold}
\upshape
\mdseries


%=======================
\sffamily
\thesample{sffamily normal}

\bfseries
\thesample{sffamily bold}

\itshape
\thesample{sffamily bold italics}


\mdseries
\thesample{sffamily italics}

\upshape
\scshape
\thesample{sffamily small caps}

\bfseries
\thesample{sffamily small caps bold}
\upshape
\mdseries



%=======================
\ttfamily
\thesample{ttfamily normal}

\bfseries
\thesample{ttfamily bold}

\itshape
\thesample{ttfamily bold italics}


\mdseries
\thesample{ttfamily italics}

\upshape
\scshape
\thesample{ttfamily small caps}

\bfseries
\thesample{ttfamily small caps bold}
\upshape
\mdseries


\end{document}

相关内容