pdfLaTeX 计算机现代西里尔字体在 XeLaTex 中吗?

pdfLaTeX 计算机现代西里尔字体在 XeLaTex 中吗?

我需要将用 pdfLaTeX 编写的文档转换为 XeLaTex,并且我希望保持其外观不变,但是,我不知道如何模拟默认的 pdfLaTeX Computer Modern 西里尔字体。据我所知,XeLaTeX 仅支持 CMU,但它看起来明显不同,如下面的 MWE 所示,这真的让我很恼火。这只是对应字体的问题,没有解决方法吗?

pdfLaTeX:

\documentclass[oneside,final,14pt]{extreport}

\usepackage{cmap}
\usepackage[T2A]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english, russian]{babel}

\begin{document}

\chapter{Глава}
\section{Секция}
Текст.

\end{document}

XeLaTeX:

\documentclass[oneside,final,14pt]{extreport}

\usepackage{fontspec}
\usepackage{polyglossia}
  \setdefaultlanguage{russian}
  \setotherlanguage{english}
  
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}

\begin{document}

\chapter{Глава}
\section{Секция}
Текст.

\end{document}

答案1

好吧,这不是最好的解决方案,因为还有很多工作要做,但也许有人会发现它很有用:

(1)文件夹中texmfs\install\fonts\type1\public\cm-super包含了.pfb编译时所使用的字体pdfLaTeX

(2).otf使用 FortForge 或其他应用程序将其转换为格式。(为获得最佳效果,请将.afm文件复制并提取到文件texmfs\install\fonts\afm\public\cm-super所在的同一文件夹中.pfb)。在此示例中,我仅使用了直立sfrm*.pfb和粗体sfbx*.pfb字体。现在我有字体SFRM0500.otfSFRM0600.otf...等等。

(3)如果生成的.otf字体与文件位于同一文件夹中.tex,请使用下一个代码:

\documentclass[oneside,final,14pt]{extreport}

\usepackage{fontspec}
\usepackage{polyglossia}
  \setdefaultlanguage{russian}
  \setotherlanguage{english}
  
\setmainfont[%
Extension = {.otf},
BoldFont = {SFBX1000},
UprightFont = {SFRM1000},
    UprightFeatures={
        SizeFeatures={ 
            {Size={-6.0},Font=SFRM0500},
            {Size={6.0-7.0},Font=SFRM0600},
            {Size={7.0-8.0},Font=SFRM0700},
            {Size={8.0-9.0},Font=SFRM0800},
            {Size={9.0-10.0},Font=SFRM0900},
            {Size={10.0-10.95},Font=SFRM1000},
            {Size={10.95-12.0},Font=SFRM1095},
            {Size={12.0-14.4},Font=SFRM1200},
            {Size={14.4-17.28},Font=SFRM1440},
            {Size={17.28-20.74},Font=SFRM1728},
            {Size={20.74-24.88},Font=SFRM2074},
            {Size={24.88-29.86},Font=SFRM2488},
            {Size={29.86-35.38},Font=SFRM2986},
            {Size={35.83-},Font=SFRM3583},
        },
    },
BoldFeatures={
        SizeFeatures={ 
            {Size={-6.0},Font=SFBX0500},
            {Size={6.0-7.0},Font=SFBX0600},
            {Size={7.0-8.0},Font=SFBX0700},
            {Size={8.0-9.0},Font=SFBX0800},
            {Size={9.0-10.0},Font=SFBX0900},
            {Size={10.0-10.95},Font=SFBX1000},
            {Size={10.95-12.0},Font=SFBX1095},
            {Size={12.0-14.4},Font=SFBX1200},
            {Size={14.4-17.28},Font=SFBX1440},
            {Size={17.28-20.74},Font=SFBX1728},
            {Size={20.74-24.88},Font=SFBX2074},
            {Size={24.88-29.86},Font=SFBX2488},
            {Size={29.86-35.38},Font=SFBX2986},
            {Size={35.83-},Font=SFBX3583},
        },
    }
]
{SFRM1000}

\begin{document}

\chapter{Глава}
\section{Секция}
Текст.

\end{document}

当然,为了获得最佳解决方案,必须创建所有字体(斜体、小写字母等)。我只使用了直立和粗体来展示如何做到这一点。结果: XeLaTeX 和 pdfLaTeX 的区别

(4) 但是,我不推荐这种解决方案,因为它会占用大量资源,而且.otf以这种方式生成的字体会遗漏很多功能;也许有更简单的方法。也许有一天有人会创建一个类似于 Latin Modern 的字体包,其中包含不同光学尺寸的西里尔字母。

答案2

还没有什么用处,所以很抱歉,但我在想:

(1) 必须有一个可以调用的旧字体文件。pdflatex 的日志列出了正在创建的一堆 metafont 文件,但我无法找出 NFSS 名称。我尝试使用cgr粗体(通过 Google 建议),但它被转换为gab1014.4pt,然后被放大到 14.4pt。

放大

有一个“larm1440”(来自日志洪水),但随后暴露了第二件事。

(2)编码。在 T2A 编码中,西里尔小写字母 A 位于位置 224(在 Unicode 中为拉丁字母 à):

编码

因此,如果 T2A 编码和 Unicode 编码文本像挂毯中的线一样交织在一起,则需要某种映射/包装。

映射

我认为旧式安装可以编译旧式文档。我认为现代安装需要一层代码绝缘层(或环境气泡)来隔离编码。

平均能量损失

\documentclass[oneside,final,14pt]{extreport}
\usepackage{cmap}
\usepackage[T2A,OT2]{fontenc}
\usepackage{fontspec}
\usepackage{polyglossia}
  \setdefaultlanguage{russian}
  \setotherlanguage{english}
  
\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}
\newfontfamily\cyrillicfont{Noto Serif}

\usepackage{xcolor}

%=============== font table labels
\newcommand\ftlabel[1]{{\usefont{T1}{lmr}{m}{n}\scriptsize#1}}
%------------------- font table: - 8-bit
\newcommand\displayglyphs[4]{%
{\usefont{#1}{#2}{#3}{#4} %\usefont{T1}{uncl}{m}{n}
\count255 = 0
\loop  
\iffontchar\font\number\count255{%*
\ftlabel{[\number\count255 =}\colorbox{yellow!50}{\textcolor{red!90!blue}{{\large\char\number\count255}}}\ftlabel{]} %need space for line-breaking
}\fi
\ifnum\count255 < 256
\advance\count255 by 1
\repeat
}\ \par\bigskip}

\begin{document}

\chapter{Глава \usefont{OT2}{cgr}{b}{n} Glava}
\section{Секция}
Текст.

xxx


%\usefont{OT2}{cgr}{b}{n}
%OT2 cgr Glava xx Глава
%Секция
%Текст.
%\fontname\font
%\displayglyphs{OT2}{cgr}{b}{n}


\usefont{T2A}{cgr}{b}{n}
T2A cgr Glava xx Глава
Секция
Текст.
\fontname\font 

\char195\char235\char224\char226\char224

\displayglyphs{T2A}{cgr}{b}{n}


%\usefont{OT2}{larm}{bx}{n}
%OT2 larm Glava xx Глава
%Секция
%Текст.
%\fontname\font
%\displayglyphs{OT2}{larm}{bx}{n}

\usefont{T2A}{larm}{bx}{n}
T2A larm Glava xx Глава
Секция
Текст.
\fontname\font

{\usefont{T1}{lmr}{m}{n} In T2A encoding,\\
 \textbackslash char195\textbackslash char235\textbackslash char224\textbackslash char226\textbackslash char224 \\
 produces}\\
\char195\char235\char224\char226\char224

\displayglyphs{T2A}{larm}{bx}{n}

\end{document}

相关内容