ConTeXt unicode 后备字体

ConTeXt unicode 后备字体

如果字体没有某些符号,是否有一种简单的方法可以仅针对该符号返回到 LuaTeX 可以找到的支持该字形的任何字体?

或者有没有比较完整的衬线字体?默认的字体似乎甚至没有 ○(白色圆圈)或 α(alpha)。我尝试了一些,但大多数显示的字体mtxrun --script fonts --list --all --pattern=*,甚至默认字体,如cmr(Computer Modern Roman)和lbr(Lucida Bright),似乎都无法加载(timespalatino可以与 配合使用\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]

相关内容