几个星期以来,我一直使用一种很好用的字体功能,当字体处于斜体模式时,可以自动将“et”更改为“&”。
但突然间,它不再起作用了……
我怀疑这与上下文约束有关,因为没有上下文的相同连字符也能正常工作。
我将非常感激任何帮助。
顺便问一下,是否还没有针对此类编程字体功能的官方指南/手册?
分数维:
\documentclass{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature
{
name = "itet",
type = "chainsubstitution",
lookups = {
{
type = "ligature",
data = {
["&"] = { "e","t" },
},
},
},
data = {
rules = {
{
before = { { " " }},
after = { { " ", "," }},
current = {{"e"},{"t"}},
lookups = { 1 },
},
},
},
}
}
\setmainfont{Baskerville}[ItalicFeatures = {RawFeature = {+itet}}]
\begin{document}
et \emph{et}
\end{document}
编辑:
事实证明,由于某些神秘的原因,发生了以下情况:
- 在我目前的工作中,我使用 \usepackage{fourier}后\usepackage{fontspec};这很糟糕。
- 即使没有使用傅立叶变换,这种用法也会对 MWE 产生影响。
所以,事实上,这都是我的错+缓存里的一些神秘的东西。
回答:
不要在 fontspec 之后使用 fourier,如中所述在此处输入链接描述
谢谢你的帮助!包括答案中提出的修改(确实非常好)
答案1
至少在我的系统上(使用当前的 luaotfload/fontloader),before/after 规则中的空格不够,因为它不会影响行首和行末的出现。如果我使用,它会起作用0xFFFC
,另请参阅https://www.mail-archive.com/[电子邮件保护]/msg85615.html
\documentclass{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature
{
name = "itet",
type = "chainsubstitution",
lookups = {
{
type = "ligature",
data = {
["&"] = { "e","t" },
},
},
},
data = {
rules = {
{
before = { { 0xFFFC } },
% before = { {" "} },
after = { { 0xFFFC, "," } },
% after = { { " ", "," } },
current = {{"e"},{"t"}},
lookups = { 1 },
},
},
},
}
}
\setmainfont{TeXGyreHeros}[ItalicFeatures = {RawFeature = {+itet}}]
\begin{document}
et blub et blet etbub et,
\emph{et} abc \emph{et} abc \emph{et}
\itshape et blub et blet etbub et,
et
\end{document}