切换到 lualatex:如何翻译字体设置?

切换到 lualatex:如何翻译字体设置?

我是一名长期pdflatex用户。偶尔我想lualatex尝试一下(例如,尝试一下最近的 TikZ 图形布局引擎)。tex.se 上有几个不错的答案描述了在这种情况下该怎么做。例如,使用 LuaLaTeX 时如何编写 TeX 文档?给出了以下配方(本身引用自 Manuel Pégourié-Gonnard 的LuaLaTeX 指南):

  1. 不要加载inputenc;只需以 UTF-8 编码您的源。
  2. 不要加载fontenctextcomp;加载fontspec
  3. babel与 LuaLaTeX 兼容,但您polyglossia也可以加载。
  4. 不要使用任何改变字体的包;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 编码的。)如果文档包含此类字符,则需要使用选项加载包luainputencutf8进行此调整后,以下代码

\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 编译文档而无需更改它们luainputencluainputencinputenc

话虽如此,正如@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 免费版本。

输出pdflatex

在此处输入图片描述

pdflatex添加后输出\usepackage{microtype}

在此处输入图片描述

输出lualatex

在此处输入图片描述

相关内容