如何用字形替代单个希腊字符?

如何用字形替代单个希腊字符?

我正在使用 Minion Pro(带有 LuaLaTeX 下的 fontspec),并且字符ϱ(= \varrho,但在文本模式下)没有显示。

input: ϱυϑμὸν
output: �υϑμὸν

有没有办法全局重新映射这个字符到不同的字体?当然,我可以为每个实例(或者所有希腊文本)使用不同的字体,但我宁愿不这样做。

答案1

我正在回答我自己的问题,因为它允许我进行比简单的评论更多的格式化,并总结我收到的各种答案和评论。后来我发现我的字体缺少另一个字符,ɔ所以我的解决方案处理它们两个:

\documentclass{scrartcl}
\usepackage{newunicodechar}
\usepackage{fontspec}

\setmainfont{MinionPro.otf}   % Any defective font will do. Font files kept in the 
                              % current directory to eliminate all path issues etc.
% The fallback font:
\newfontfamily{\gentium}[Scale=MatchLowercase]{GentiumPlus-Regular.ttf}

% (Only) if character is not found in current font, fall back to Gentium:
\newunicodechar{ϱ}{\iffontchar\font`ϱ ϱ\else{{\gentium ϱ}}\fi}
\newunicodechar{ɔ}{\iffontchar\font`ɔ ɔ\else{{\gentium ɔ}}\fi}

\begin{document}
{\huge Hellɔ woϱld!}
\end{document}

答案2

我没有 Minion Pro 来测试这个,但你可以用 将字符设置为活动状态newunicodechar,查找当前字体是否包含ϱ\iffontchar如果是则返回该字符,例如

\iffontchar\font`ϱ\symbol"03F1\else\symbol"03C1\fi

在实践中,你可能希望进一步包装它以在数学模式中\ifmmode使用,例如\varrho

\ifmmode%
  \varrho%
\else%
  \iffontchar\font`ϱ%
    \symbol"03F1%
  \else\symbol"03C1%
  \fi%
\fi

您想到使用 Gentium 作为后备字体,而不是使用 ρ 作为后备字形,这是一个好主意。您可能希望加载补充字体,以便Scale=MatchLowercase字母的大小相同。另外,请确保将字体更改包含在组中,这样它就不会渗透到下面的文本中。

\newfontfamily\gentium{Gentium}[Scale=MatchLowercase]

\newunicodechar{^^^^03f1}{%
  \ifmmode%
    \varrho%
  \else%
    \iffontchar\font`ϱ%
      \symbol"03F1%
    \else{{\gentium\symbol"03F1}}%
    \fi%
  \fi}

相关内容