我正在尝试使用 TTF 字体来显示代码摘录,但希望对文档的其余部分使用标准 latex 字体。我使用以下代码,这是这个问题。
\usepackage{fontspec}
\newfontfamily\codefont{Andale Mono}
\usepackage[OT1]{fontenc}
\renewcommand\rmdefault{lmr}
\renewcommand\sfdefault{lmss}
\renewcommand\ttdefault{lmtt}
这种将字体恢复正常的方法可以正常工作,因为渲染的字体都是正确的,但文档已丢失所有粗体和斜体格式。我该如何恢复这些?
非常感谢。
答案1
您的要求和您指出的帖子之间的主要区别在于,他们在前言中使用\setmainfont
、\setsansfont
和更改了文档的主字体\setmonofont
,然后他们想在文档中重新定义这些字体。确实是这三个命令定义了文档字体,而不仅仅是使用fontspec
如果我理解正确的话,您的要求是在整个文档中使用普通字体,除了几个想要使用 TrueType 字体的地方。
广义上讲fontspec
,它使用新引擎方便在 LaTeX 中使用字体,并且与 XeTeX 和 LuaTeX 兼容。它还Fontspec
替换了fontenc
包(只能使用其中一个,不能同时使用,否则事情可能会变得相当有趣。fontspec
它默认使用 OTF 字体而不是 Type1 字体,并且默认使用 Latin Modern 字体集,它基本上是 Computer Modern type1 字体的 OTF 等价物。
从您提供的信息来看,很难确切知道您想要什么。Andale Mono 是一种等宽字体,因此人们可能会将您的问题解释为“如何替换 mono 字体?”。在这种情况下,类似这样的方法应该适合您:
\documentclass[12pt,preview]{standalone}
\usepackage{fontspec}
%\setmainfont{Latin Modern Roman} %this is not needed as this should be the default
%\setsansfont{Latin Modern Sans}
\setmonofont{Andale Mono}
\begin{document}
This text using the {\bfseries Latin} {\sffamily Modern} {\itshape Font}
{\ttfamily This text is using the \textbf{Andale} \textit{Mono} font}
The is now back to the latin Modern Font
\end{document}
为您提供:
请注意,Andale Mono 字体不带有粗体和斜体字形,因此它会恢复为正常字形。但是,fontspec
您可以使用字体定义命令的选项来伪造它:
\setmonofont[AutoFakeBold,AutoFakeSlant]{Andale Mono}
另一方面,如果您希望将默认字体(罗马字体、无字体和单字体)保留为默认字体,并在 Andale Mono 中添加段落或某些内容,则方法略有不同,您需要像示例代码一样声明一个新的字体系列:
\documentclass[12pt,preview]{standalone}
\usepackage{fontspec}
\newfontfamily\codefamily[AutoFakeBold,AutoFakeSlant]{Andale Mono}
\DeclareTextFontCommand{\codefont}{\codefamily}
\begin{document}
This text using {\ttfamily the} {\bfseries Latin} {\sffamily Modern} {\itshape Font}
{\codefamily This text is using the \textbf{Andale} \textit{Mono} font}
The is now back to the latin Modern Font
\end{document}
为您提供: