我需要将用 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.otf
,SFRM0600.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}
当然,为了获得最佳解决方案,必须创建所有字体(斜体、小写字母等)。我只使用了直立和粗体来展示如何做到这一点。结果:
(4) 但是,我不推荐这种解决方案,因为它会占用大量资源,而且.otf
以这种方式生成的字体会遗漏很多功能;也许有更简单的方法。也许有一天有人会创建一个类似于 Latin Modern 的字体包,其中包含不同光学尺寸的西里尔字母。
答案2
还没有什么用处,所以很抱歉,但我在想:
(1) 必须有一个可以调用的旧字体文件。pdflatex 的日志列出了正在创建的一堆 metafont 文件,但我无法找出 NFSS 名称。我尝试使用cgr
粗体(通过 Google 建议),但它被转换为gab10
14.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}