XeLaTeX:可自行决定的连字符

XeLaTeX:可自行决定的连字符

假设我已经打开了“自由”连字,\fontspec[Ligatures=Rare]{Junicode}但想要禁用 st 和 ct 连字;这可能吗?

答案1

在 TeX 中,可以通过在字母之间插入显式字距来拆分连字。例如,为了避免st连字,我们可以s\kern0pt t改为书写。虽然这很繁琐,但幸运的是xetex提供了字符类的概念,它提供了在字符之间插入自定义标记的可能性,这些标记先前已分配给某个类。

我们继续定义两个类,一个用于cs,一个用于t

\newXeTeXintercharclass\charclasscs
\newXeTeXintercharclass\charclasst

然后我们将角色分配给这些类别

\XeTeXcharclass`\c\charclasscs
\XeTeXcharclass`\s\charclasscs
\XeTeXcharclass`\t\charclasst

如果字符组合中左字符属于类\charclasscs,右字符属于类\charclasst,那么我们要插入字距\kern0pt

\XeTeXinterchartoks\charclasscs\charclasst={\kern0pt}

最后我们启用以下功能

\XeTeXinterchartokenstate=1 % or 0 to disable

完整的例子如下:

\documentclass{article}
\usepackage{fontspec}
\setmainfont[Ligatures=Rare]{Junicode.ttf}
\newXeTeXintercharclass\charclasscs
\newXeTeXintercharclass\charclasst
\XeTeXcharclass`\c\charclasscs
\XeTeXcharclass`\s\charclasscs
\XeTeXcharclass`\t\charclasst
\XeTeXinterchartoks\charclasscs\charclasst={\kern0pt}
\begin{document}
st ct
\XeTeXinterchartokenstate=1
st ct
\end{document}

在此处输入图片描述

要恢复连字符,你必须使用更复杂的方法

\XeTeXinterchartoks\charclasscs\charclasst={%
  \penalty10000\discretionary{-}{}{\kern0pt}%
  \penalty10000\hskip0pt\relax}

为了完整起见,这里使用luatexselnolig包裹。

\documentclass{article}
\pagestyle{empty}
\usepackage{fontspec,selnolig}
\setmainfont[Ligatures=Rare]{Junicode.ttf}
\nolig{ct}{c|t}
\nolig{st}{s|t}
\begin{document}
st ct
\end{document}

相关内容