有没有办法在 XeLaTeX 编译的文档中使用 T1 字体作为数学字体和主字体(带有一些 T2A 西里尔字母)?

有没有办法在 XeLaTeX 编译的文档中使用 T1 字体作为数学字体和主字体(带有一些 T2A 西里尔字母)?

这是我的代码(utf8):

\documentclass{article}
\usepackage[no-math]{fontspec}
\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage{anttor}
\begin{document}
text $math$

Russian: Щ
\end{document}

问题是,“数学”仍然是 CM 字体;而西里尔字体并没有出现。

答案1

Antykwa Toruńska 字体支持西里尔文和数学;如果您想使用 XeLaTeX,那么您可以这样做

\documentclass{article}
\usepackage[math]{anttor}
\usepackage[no-math]{fontspec}
\setmainfont[Ligatures=TeX]{Antykwa Torunska}

\begin{document}
text $math$

Russian: Щ
\end{document}

你可能需要了解如何在你的机器上加载 AT 字体,可能需要

\setmainfont[
  Ligatures = TeX,
  Extension = .otf,
  UprightFont = *-Regular,
  BoldFont = *-Bold,
  ItalicFont = *-Italic,
  BoldItalicFont = *-Italic
]{AntykwaTorunska}

这应该适用于 TeX Live 发行版。如果您已经在系统中安装了 Antykwa Toruńska 字体,那么上述更简单的声明就足够了。

在此处输入图片描述

如果您想使用pdflatex,那么使用字体编码的方法是必要的:

\documentclass{article}
\usepackage[T2A,T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[math]{anttor}

\DeclareRobustCommand{\cyr}[1]{%
  {\fontencoding{T2A}\selectfont#1}%
}

\begin{document}
text $math$

Russian: \cyr{Щ}
\end{document}

不幸的是,如果不改变字体编码就不可能书写西里尔字符,而且这需要大量的工作。

答案2

您不必使用XeLaTeXinputencfontenc软件包,因为它已经适用于 Unicode。因此,您首先必须删除以下行:

\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}

那么你必须使用包含Unicode字形的字体。Computer Modern(CM)对应的是Computer Modern Unicode(CMU)。

如果你将 MWE 更改为

\documentclass{article}
\usepackage[no-math]{fontspec}

\setmainfont{CMU Serif}
\setsansfont{CMU Sans Serif}
\setmonofont{CMU Typewriter Text}

\begin{document}
text $math$

Russian: Щ
\end{document}

并使用 XeLaTeX 进行编译,它应该可以工作。

答案3

一般来说,inputenc与 XeTeX 一起使用是错误的。XeTeX 将其Щ视为一个 Unicode 字符 (U+0429),而 pdfTeX 将其视为 UTF-8 编码中的两个字符 (0xD0, 0xA9)。这是一个很大的区别。

如果要在 XeTeX 中排版西里尔字母,最好使用 Unicode 字体(TrueType 或 OpenType)fontspec包,正如 karlkoeller 所说。并非所有字体都支持西里尔字母。对于 CM 字体,CMU 系列是不错的选择。


但是,仍然可以使用旧T2A字体。

\XeTeXinputencoding "byte"
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1,T2A]{fontenc}
\usepackage{anttor}
\begin{document}
text $math$

Russian: Щ
\end{document}

但在这种情况下,fontspec根本就用不到,为什么不直接使用 pdfTeX?

答案4

如果您只是需要数学中的西里尔字母,请尝试使用包\text{}中的命令amsmath。它适用于任何引擎,无论是 (pdf)latex 还是 xelatex。

\documentclass{article}
\usepackage{ifxetex}
\ifxetex
  \usepackage{fontspec}
  \setmainfont{CMU Serif}
  \setsansfont{CMU Sans Serif}
  \setmonofont{CMU Typewriter Text}
\else
  \usepackage[T1,T2A]{fontenc}
  \usepackage[utf8]{inputenc}
\fi
\usepackage[english,russian]{babel}% you need babel 3.9

\begin{document}
\[
\text{Щ}
\]
Russian: Щ
\end{document}

相关内容