\documentclass[a4paper]{article}
\usepackage{fontspec}
\setmainfont{Junicode}
\begin{document}
\noindent
ji\\
ii\\
j\mbox{}i\\
i\mbox{}i
\end{document}
由 lualatex 渲染,前两行带有无点 i。有人知道这是从哪里来的吗?是否有可能以某种方式将其关闭?我尝试关闭连字,但没有用,在 Junicode 字体中也找不到 ji 或 ii 连字。对我而言唯一有用的方法是在两个字母之间插入空框并使用宏\ji
和\ii
宏,但这是一种丑陋的黑客行为。如果我尝试从 lualatex 创建的 pdf 中剪切文本,第一个字符是 j(或 i),第二个字符是无点 i。
答案1
这不是一个答案,只是一个临时修复,对于评论来说太长了。您可以通过编写一个很小的功能文件来解决此问题,如下所示:
\documentclass{article}
\usepackage{filecontents,fontspec}
\begin{filecontents*}{juni.fea}
languagesystem DFLT dflt;
languagesystem latn dflt;
# fix problem in https://tex.stackexchange.com/q/220038/7883
feature fixi {
sub \dotlessi by \i;
} fixi;
\end{filecontents*}
\setmainfont{Junicode}[
FeatureFile={juni.fea},
Contextuals=Alternate,
Numbers=OldStyle,
RawFeature=+fixi]
\begin{document}
\noindent
ji\\
ii
\end{document}
(如果您的版本fontspec
不是最新版本,它会希望选项位于\setmainfont
和之间{Junicode}
,而不是之后。)
更新
在 TeX Live 2016 中,即使使用“ij”,修复似乎也能更可靠地工作:
\documentclass{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature {
name = "fixi",
{
type = "substitution",
data = {
dotlessi = "i",
dotlessj = "j",
}
},
"fixing i and j"
}
}
\setmainfont{Junicode}[
Contextuals=Alternate,
Numbers=OldStyle,
RawFeature=+fixi]
\begin{document}
ji ii ij
\end{document}
如果您自 2017 年 2 月以来已更新luaotfload
,请通过\directlua
以下方式调用:
\directlua
{
fonts.handlers.otf.addfeature
{
name = "fixi",
type = "substitution",
data =
{
dotlessi = "i",
dotlessj = "j",
},
}
}
如果确实在某处需要无点 i,请使用\addfontfeature{RawFeature=-fixi}
。
答案2
旧帖,但仍然......
Junicode 包含一个 ccmp 查找,当 i 后面跟着组合变音符号(或前面或后面跟着组合双变音符号)时,它会将 i 分解为 dotlessi。这是因为字体包含大量没有预制形式的组合变音符号。
在我看来,LuaTeX 错误地应用了此功能,即使上下文并不需要它——尽管只有当 aj 跟在后面时才需要它。为什么会发生这种情况,我甚至无法想象。这是 Junicode 中不寻常的功能和 LuaTeX 中的错误(我在其他任何应用程序中都没有看到过这个错误)的奇怪交集。
我并不打算从 Junicode 中删除此功能。不过,如果您有 FontForge 或其他字体编辑器,您可以自己这样做。这是第三次 ccmp 查找。同时,我正在寻找一种不会触发 LuaTeX 错误来实现 Junicode 功能的方法。