![如何用字形替代单个希腊字符?](https://linux22.com/image/424661/%E5%A6%82%E4%BD%95%E7%94%A8%E5%AD%97%E5%BD%A2%E6%9B%BF%E4%BB%A3%E5%8D%95%E4%B8%AA%E5%B8%8C%E8%85%8A%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我正在使用 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}