如果字体没有某些符号,是否有一种简单的方法可以仅针对该符号返回到 LuaTeX 可以找到的支持该字形的任何字体?
或者有没有比较完整的衬线字体?默认的字体似乎甚至没有 ○(白色圆圈)或 α(alpha)。我尝试了一些,但大多数显示的字体mtxrun --script fonts --list --all --pattern=*
,甚至默认字体,如cmr
(Computer Modern Roman)和lbr
(Lucida Bright),似乎都无法加载(times
但palatino
可以与 配合使用\setupbodyfont[palatino]
)。
编译时我还收到以下警告:
fonts > typescripts > unknown library 'cmr'
fonts > preloading latin modern fonts (third stage)
我使用的是 Mac OS X 10.8.4context
版本2013.04.20 01:15
。
答案1
您可以定义所谓的字体回退0x0400:0x04ff
。这是一种将选定的 unicode 点映射到另一种字体的机制。可以使用冒号 ( ) 或逗号分隔的单个字形指定范围,或两者同时指定。添加[force=no]
以仅在字符缺失时替换它们。
但是,您必须定义要使用哪种字体作为后备字体。LuaTeX 不会随意选择字体。必须仔细挑选字体,而且即使对于人类来说,字体匹配也不是一件容易的事。没有自动系统可以找到匹配的字体。
以下是为您提到的两个字形创建字体回退的示例。Xits 和 Latin Modern 完全不匹配,这只是为了说明该机制。
\definefontfallback
[xits_fallback]
[name:xitsregular] [0x03B1,0x25CB] %% [force=no]
\definefontsynonym
[Fallback]
[Serif]
[fallbacks=xits_fallback]
\definefont
[FallbackFont]
[Fallback]
\starttext
\FallbackFont
The default one doesn't even seem to have ○ (white circle) or α (alpha).
\stoptext
更好的方法是找到一种包含您需要的所有字符的字体。哪种字体可以视为“相当完整”完全取决于您的需求。如果某种字体涵盖了所有字形,您可以使用此答案中描述的方法进行检查: 为特定字体的所有可用字符创建字体表. DejaVu 可能满足您的需求:
\setupbodyfont [dejavu]
\starttext
The default one doesn't even seem to have ○ (white circle) or α (alpha).
\stoptext
启用跟踪丢失的字体也可能会有所帮助:
\enabletrackers [fonts.missing]
然后 ConTeXt 会通知您有关缺少的字形,并且您会在日志文件中收到一个条目:
fonts > checking > char ○ (U+025CB) in font 'LMRoman12-Regular' with id 1: missing
fonts > checking > char α (U+003B1) in font 'LMRoman12-Regular' with id 1: missing
答案2
基本上,你应该使用支持所需字符的字体。另外,确保你确实拥有正确的 unicode 字符(例如数学字母,而不是希腊字母或更常见的白色圆圈 ◦)。
但是如果你不介意黑客攻击(也会减慢编译速度),你可以简单地用模块为所有缺失的字形定义一个后备字体simplefonts
:
\usemodule[simplefonts]
\setmainfontfallback[DejaVu Serif][range={0x00000-0xFFFFFF}, force=no, rscale=auto]