我遇到了一些无法理解的事情。我读到过,当我使用 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}