![根据脚本自动切换字体,而不仅仅是在同一字体中混合字母](https://linux22.com/image/436059/%E6%A0%B9%E6%8D%AE%E8%84%9A%E6%9C%AC%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2%E5%AD%97%E4%BD%93%EF%BC%8C%E8%80%8C%E4%B8%8D%E4%BB%85%E4%BB%85%E6%98%AF%E5%9C%A8%E5%90%8C%E4%B8%80%E5%AD%97%E4%BD%93%E4%B8%AD%E6%B7%B7%E5%90%88%E5%AD%97%E6%AF%8D.png)
以下与 xelatex 一起工作并产生预期的输出:
\documentclass{book}
\usepackage{fontspec}
\setmainfont{DejaVu Serif}
%\setmainfont{GFS Porson}
\begin{document}
one two three
ἑν δύω τρία
\end{document}
对于文档的希腊文部分,我更愿意使用 GFS Porson 字体。但是,如果我注释掉选择 DejaVu 的行并取消注释以下行,则不起作用:因为 Porson 不包含拉丁字母,所以英文单词在页面上只会呈现为空白。
有没有办法设置,以便我使用字体 A 表示希腊语,使用字体 B 表示英语?这可以基于 A 是否缺少相关字符的标准,也可以基于我说的话,“嘿,xelatex,请使用字体 A 表示 unicode 拉丁代码块中的输入,但使用字体 B 表示希腊代码块中的输入。”
请注意,这与先前的这个问题。
[编辑] 经过 Davislor 的对话和进一步帮助后,我想出了一个非最小工作版本:
\documentclass{article}
\tracinglostchars=2 % Warn if the current font is missing a glyph
\usepackage[paperwidth=10cm]{geometry} % Format the MWE for TeX.SX
%\usepackage[greek, english]{babel}
\usepackage{babel}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage[GreekAndCoptic, GreekExtended]{ucharclasses}
\babelprovide[import=el-polyton]{greek}
\setDefaultTransitions{\selectlanguage{english}}{\selectlanguage{english}}
\setTransitionTo{GreekAndCoptic}{\selectlanguage{greek}}
\setTransitionTo{GreekExtended}{\selectlanguage{greek}}
\defaultfontfeatures{ Scale=MatchLowercase, Ligatures = TeX }
\defaultfontfeatures{ Scale=MatchUppercase, Ligatures=TeX }
\babelfont[greek]{rm}
{GFS Porson}
\babelfont{rm}
[Scale=1.0]{DejaVu Serif}
\babelfont{sf}
[Ligatures={Common,Discretionary}, Language=Default]{DejaVu Sans}
\babelfont{tt}
[Language=Default]{Liberation Mono}
%\setmathfont{Liberation Math}
\begin{document}
Homer’s \textit{Ὀδύσσεια} begins, “ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς
μάλα πολλὰ πλάγχθη.”
\end{document}
这会产生所需的输出,但也会输出一堆警告。
答案1
使用 Babel,在 LuaTeX 或 XeTeX 中修改我的答案在这里针对特定语言进行覆盖\babelfont
。以下是 LuaLaTeX 的 MWE:
\documentclass{article}
\tracinglostchars=2 % Warn if the current font is missing a glyph
\usepackage[paperwidth=10cm]{geometry} % Format the MWE for TeX.SX
\usepackage[english]{babel}
\usepackage{fontspec}
\babelprovide[import=el-polyton, onchar=fonts ids]{greek}
\defaultfontfeatures{ Scale=MatchUppercase, Ligatures = TeX }
\defaultfontfeatures[GFSPorson]{
ItalicFont=GFSOlga, % The GFS ships Italic faces as a separate family.
Extension={.otf} }
\babelfont{rm}
[Scale=1.0, Ligatures=Common]{DejaVu Serif}
\babelfont[greek]{rm}
[Script=Latin, Language=Default]{GFSPorson}
\begin{document}
Homer’s \textit{Ὀδύσσεια} begins, “ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς
μάλα πολλὰ πλάγχθη.”
\end{document}
或者,将 Porson 设为默认值并设置\babelfont[english]{rm}
。您可以进行与我的其他答案相同的更改,以使其在 XeLaTeX 中工作。
使用polyglossia
,设置
\setmainfont{DejaVu Serif}[Scale=1.0]
\newfontfamily\greekfont{GFS Porson} % This font does not support Script=, Language= or Ligatures=.
使用 PDFTeX,使用
\usepackage[LGR, T1]{fontenc}
\usepackage{textalpha}
\usepackage[greek,english]{babel}
\usepackage{dejavu}
\usepackage{substitutefont}
\substitutefont{LGR}{\rmdefault}{porson}
这是 XeLaTeX 的另一个 MWE。它还会抑制部分(但不是全部)警告消息,例如未定义sf
字体tt
。
\documentclass{article}
\tracinglostchars=2 % Warn if the current font is missing a glyph
\usepackage[paperwidth=10cm]{geometry} % Format the MWE for TeX.SX
\usepackage[english]{babel}
\usepackage{fontspec}
\usepackage[GreekAndCoptic,GreekExtended]{ucharclasses}
\babelprovide[import=el-polyton]{greek}
\setDefaultTransitions{\selectlanguage{english}}{\selectlanguage{english}}
\setTransitionTo{GreekAndCoptic}{\selectlanguage{greek}}
\setTransitionTo{GreekExtended}{\selectlanguage{greek}}
\defaultfontfeatures{ Scale=MatchUppercase, Ligatures = TeX }
\defaultfontfeatures[GFSPorson]{
ItalicFont=GFSOlga, % The GFS ships Italic faces as a separate family.
Extension={.otf} }
\babelfont{rm}
[Scale=1.0, Ligatures=Common, Language=Default]{DejaVu Serif}
\babelfont[greek]{rm}
[Language=Default]{GFSPorson}
\begin{document}
Homer’s \textit{Ὀδύσσεια} begins, “ἄνδρα μοι ἔννεπε, μοῦσα, πολύτροπον, ὃς
μάλα πολλὰ πλάγχθη.”
\end{document}