禁止 xetex 中的字符替换

禁止 xetex 中的字符替换

我遇到一种情况,需要在字符“j”上方 (U+030A) 放置一个组合环。是的,这很愚蠢,因为环会与“j”上方的点相撞,但我想精确地组合它们以强调这种愚蠢。

但是,我使用的字体 Linux Libertine 非常有用,如果我尝试在“j”上方放置一个圆环,它会自动用无点“ȷ”(U+0237)替换“j”。所以问题是,我如何才能抑制该字符替换(不是针对整个文档,而是仅针对相关文本)?大概是用命令吧\addfontfeatures{}

梅威瑟:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
jj\char"030A
\end{document}

在此处输入图片描述

答案1

此处的无点 j 替换是通过ccmp功能1完成的,因此您只需禁用该功能:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\newfontfamily\sillylibertine[RawFeature={-ccmp}]{Linux Libertine O}
\begin{document}
jj\char"030A{\sillylibertine j\char"030A}
\end{document}

1我怎么知道的?通过检查 FontForge 中的字体。

答案2

您可以使用非组合版本 U+02DA RING ABOVE 并手动将其放在“j”上:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
jj\char"030A

j\vbox{
  \offinterlineskip
  \halign{%
    #\cr\hidewidth\char"02DA \hidewidth\cr\noalign{\kern-1.3ex}j\cr
  }%
}
\end{document}

在此处输入图片描述

看过 Khaled 的版本后,下面介绍如何在不定义新字体系列的情况下模拟它。

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
jj\char"030A

j\vbox{
  \offinterlineskip
  \halign{%
    #\cr\hidewidth\kern-.1em\char"02DA \hidewidth\cr\noalign{\kern-1.55ex}j\cr
  }%
}

\end{document}

在此处输入图片描述

相关内容