我是一名长期pdflatex
用户。偶尔我想lualatex
尝试一下(例如,尝试一下最近的 TikZ 图形布局引擎)。tex.se 上有几个不错的答案描述了在这种情况下该怎么做。例如,使用 LuaLaTeX 时如何编写 TeX 文档?给出了以下配方(本身引用自 Manuel Pégourié-Gonnard 的LuaLaTeX 指南):
- 不要加载
inputenc
;只需以 UTF-8 编码您的源。- 不要加载
fontenc
或textcomp
;加载fontspec
。babel
与 LuaLaTeX 兼容,但您polyglossia
也可以加载。- 不要使用任何改变字体的包;
fontspec
而是使用命令。
我发现所有这些建议都很容易遵循,除第 4 点外。fontspec
文档相当吓人,没有给出任何提示如何翻译现有的字体设置fontspec
。例如,上次我尝试切换时,我在序言中有以下字体设置:
\usepackage{lmodern}
\renewcommand{\sfdefault}{cmbr}
\usepackage{charter}
\usepackage[scaled=0.85]{beramono}
这只是一个例子,我通常从中选择字体设置LaTeX 字体目录,另外加载microtype
,就这样。大多数字体包对所有细节都有合理的设置,因此结果对我来说已经足够好了。
然而,有了fontspec
,我感觉我必须成为一名真正的字体专家。在大多数情况下,我已经无法确定要使用的字体名称,更不用说所有其他细节了。
那么现有字体包有没有翻译表?
字体包不支持开箱即用,是否存在技术原因,lualatex
因此人们不必处理令人生畏的fontspec
命令?
答案1
该软件包的用户指南fontspec
确实很长。但是,我不会说它令人生畏。OpenType 和 TrueType 字体相关的世界非常庞大,非常精彩,而解释如何探索这个世界的手册并不简短(至少对我来说)并不奇怪。
在下文中,我将假设您的 tex 文档是按照 UTF8 标准编码的。另外:如果您的文档仅使用 ASCII,则它自动符合 UTF8 标准。
我猜测,为什么该fontspec
软件包的用户指南没有解释如何将诸如\usepackage{lmodern}
、\renewcommand{\sfdefault}{cmbr}
、\usepackage{charter}
或 之类的指令“翻译”\usepackage[scaled=0.85]{beramono}
为 LuaLaTeX。推定的原因很简单:大多数情况下无需翻译。如果您要将最初设计用于 pdfLaTeX 的字体包与 LuaLaTeX 一起使用,则只需继续在 LuaLaTeX 下使用它们即可。(但请参见下文,了解相同的注意事项和例外情况。)但是,如果您这样做,请不要加载该fontspec
包。
例如,该程序
\documentclass{article}
\usepackage{lmodern}
\renewcommand{\sfdefault}{cmbr}
\begin{document}
The quick brown fox jumps over the lazy dog.
\sffamily
The quick brown fox jumps over the lazy dog.
\end{document}
在 pdfLaTeX 或 LuaLaTeX 下运行时产生相同的输出:
同样,该程序
\documentclass{article}
\usepackage{charter}
\usepackage[scaled=0.85]{beramono}
\begin{document}
The quick brown fox jumps over the lazy dog.
\sffamily
The quick brown fox jumps over the lazy dog.
\end{document}
使用 pdfLaTeX 或 LuaLaTeX 编译时产生相同的输出:
上面使用的限定词“大部分”需要解释一下。正如@UlrikeFischer 在评论中指出的那样,如果文档包含基本 ASCII 字符集中未包含的“重音”字符,则需要对上面概述的方法进行调整。(如上所述,我假设整个文档都是 UTF-8 编码的。)如果文档包含此类字符,则需要使用选项加载包luainputenc
。utf8
进行此调整后,以下代码
\documentclass{article}
\usepackage[utf8]{luainputenc} % Not: "\usepackage[utf8]{inputenc}"
\usepackage{newtxtext}
\begin{document}
Grüße äöüÄÖÜ, \em Grüße äöüÄÖÜ
\end{document}
在 pdfLaTeX 和 LuaLaTeX 下编译时再次产生相同的结果:
摘自该luainputenc
包的用户指南:
从用户的角度来看,将旧文档改编为 LuaTEX 非常简单:在前言中用 替换即可。请注意,
inputenc
如果使用旧引擎调用,则会自动加载,因此您仍然可以使用 pdfTEX 编译文档而无需更改它们luainputenc
luainputenc
inputenc
话虽如此,正如@UlrikeFischer 在本答案的评论中指出的那样,如果您使用该luainputenc
包,一些与连字相关的问题可能仍然存在。例如,带有重音字符的单词(如问候) 可能不再带连字符,因此 LuaLaTeX 的输出可能与使用 不完全相同pdflatex
。因此,从长远来看,fontspec
为了获得最佳结果,切换到 可能是一个好主意。
使用 OpenType 字体时,没有软件包(只有少数例外(例如 Libertine 字体系列))允许在 pdf(La)TeX 下使用它们。因此,要使用 OpenType 字体,必须使用 Xe(La)TeX 或 Lua(La)TeX(通常与软件包结合使用)fontspec
。由于这些字体无论如何都不能用于 pdfLaTeX,因此说明的翻译毫无意义,对吗?
答案2
作为该项目的一部分,CMBright 字体以 OpenType 格式提供cm-unicode
。
假设你的文件是 UTF-8 编码的,你应该通过以下方式获得类似的结果
\documentclass{scrartcl}
\usepackage{ifluatex}
\ifluatex
\usepackage{fontspec}
\setmainfont{XCharter}
\setsansfont{CMU Bright}[
Scale=MatchUppercase
]
\setmonofont{Ubuntu Mono}[ % or other monospaced font
Scale=MatchUppercase
]
\else
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{charter}
\usepackage{cmbright}
\usepackage{beramono}
\fi
\usepackage{kantlipsum}
\begin{document}
\section{Section title}
\kant[1]
\texttt{Some text in monospaced font}
\section{Font list}
\begin{itemize}
\item Roman font: \expandafter\texttt\expandafter{\fontname\font}
\item {\sffamily Sans font: \expandafter\texttt\expandafter{\fontname\font}}
\item {\ttfamily TT font: \expandafter\texttt\expandafter{\fontname\font}}
\end{itemize}
\end{document}
据我所知,BeraMono 字体没有 OpenType 免费版本。