fontenc 与 fontspec 与 XeLaTeX

fontenc 与 fontspec 与 XeLaTeX

我遇到了一些无法理解的事情。我读到过,当我使用 XeLaTeX 时,我应该使用 fontspec 而不是 fontenc,但这在我使用 cochineal 字体包时给我带来了一些问题。

当我使用以下代码时:

\documentclass[a4paper, english]{article}

\usepackage{polyglossia}
\setmainlanguage{english}
\usepackage{fontspec}
\usepackage[p,osf]{cochineal} 

\title{Some title}

\begin{document}
    \maketitle
    some text
\end{document}

我在日志中收到消息Font shape TU/Cochineal-OsF/m/n undefined(Font) using TU/lmr/m/n instead,标题的字体默认为 Latin Modern。但是当我改为使用:

\documentclass[a4paper, english]{article}

\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage[p,osf]{cochineal} 

\title{Some title}

\begin{document}
    \maketitle
    some text
\end{document}

我没有收到该消息,标题使用的是 Cochineal 字体。我使用 fontspec 时设置错误了吗?将 fontenc 与 XeLaTex 一起使用有什么缺点吗?我真的很想在标题中使用 Cochineal。

我在 Windows 10 机器上使用 MikTex。

祝一切顺利,理查德

答案1

cochineal软件包仅适用于pdflatex。如果您已将 Cochineal 的 OpenType 版本安装为系统字体,则可以按如下方式模拟该软件包

\documentclass[a4paper]{article}

\usepackage{fontspec}
\usepackage{polyglossia}

\setmainfont{Cochineal}[
  Numbers={Proportional,OldStyle},
]
\setmainlanguage{english}

\DeclareRobustCommand{\lfstyle}{\addfontfeatures{Numbers=Lining}}
\DeclareTextFontCommand{\textlf}{\lfstyle}
\DeclareRobustCommand{\tlfstyle}{\addfontfeatures{Numbers={Tabular,Lining}}}
\DeclareTextFontCommand{\texttlf}{\tlfstyle}

\title{Some title}

\begin{document}

\maketitle

some text 1234567890\par
some text {\lfstyle 1234567890} \textlf{1234567890}\par
some text {\tlfstyle 1234567890} \texttlf{1234567890}\par

\end{document}

在此处输入图片描述

如果由于某些原因,您只依赖 TeX Live 发行版,则字体设置会略有不同。

\documentclass[a4paper]{article}

\usepackage{fontspec}
\usepackage{polyglossia}

\setmainfont{Cochineal}[
  Extension=.otf,
  UprightFont=*-Roman,
  ItalicFont=*-Italic,
  BoldFont=*-Bold,
  BoldItalicFont=*-BoldItalic,
  Numbers={Proportional,OldStyle},
]
\setmainlanguage{english}

\DeclareRobustCommand{\lfstyle}{\addfontfeatures{Numbers=Lining}}
\DeclareTextFontCommand{\textlf}{\lfstyle}
\DeclareRobustCommand{\tlfstyle}{\addfontfeatures{Numbers={Tabular,Lining}}}
\DeclareTextFontCommand{\texttlf}{\tlfstyle}

\title{Some title}

\begin{document}

\maketitle

some text 1234567890\par
some text {\lfstyle 1234567890} \textlf{1234567890}\par
some text {\tlfstyle 1234567890} \texttlf{1234567890}\par

\end{document}

答案2

使用 xetex 时,您需要使用默认的 TU(Unicode)编码,并通过以下方式直接访问字体的 OpenType 版本fontspec

在此处输入图片描述

pdffonts 实用程序确认 pdf 中使用的字体是:

name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
FXMMJJ+Cochineal-Roman-Identity-H    CID Type 0C       Identity-H       yes yes yes      5  0

这来自

\documentclass[a4paper, english]{article}

\usepackage[english]{babel}
\usepackage{fontspec}
\setmainfont{Cochineal}

\title{Some title}

\begin{document}
    \maketitle
    some text
\end{document}

相关内容