更新

更新

考虑以下 MWE:

\documentclass{scrartcl}

\usepackage{polyglossia}
\usepackage{fontspec}

\setdefaultlanguage{russian}

\setmainfont{EB Garamond}
\newfontfamily\cyrillicfont{EB Garamond}

\KOMAoptions{fontsize = 14}

\begin{document}

ш\={ю}кан

\end{document}

它应该在 ю 上方产生一个长音符,但您可以在下面看到,该长音符位于 ю 和 к 之间的空格上方。

在此处输入图片描述

更新

解决方案

\DeclareTextCompositeCommand{\=}{TU}{ю}{\accent"0304 ю}

效果不太好。它在 和 之间产生了奇怪的冲突tabularluatexja考虑xcolor以下 MWE:

\documentclass{scrartcl}

\usepackage{polyglossia}
\usepackage[table]{xcolor}
\usepackage{luatexja}
\usepackage{luatexja-fontspec}
\usepackage[haranoaji]{luatexja-preset}

\ltjsetparameter{jacharrange = {-2, -3}}

\setotherlanguages{english, russian}
\setmainfont{EB Garamond}
\newfontfamily\cyrillicfont{EB Garamond}
\DeclareTextCompositeCommand{\=}{TU}{ю}{\accent"0304 ю}

\begin{document}

\begin{tabular}{p{0.5\linewidth} l}
    習慣&ш\=юкан\\
\end{tabular}

\end{document}

它会产生以下错误:

luatexja/ltj-jfmglue.lua:647: attempt to perform arithmetic on a nil value (local 'c')

删除以下任一项即可进行编译:

  • \=ш\=юкан
  • \DeclareTextCompositeCommand{\=}{TU}{ю}{\accent"0304 ю}
  • table\usepackage[table]{xcolor}

更新 2

我认为冲突与luatexja中的一个错误有关luatexja。我希望他们能修复它。西里尔字母与此冲突无关。luatexja只是不喜欢\accent

更新 3

这是一个可以使沉默的解决方法luatexja

\DeclareTextCompositeCommand{\=}{TU}{Ю}{\hspace*{0pt}\accent"0304 Ю}
\DeclareTextCompositeCommand{\=}{TU}{ю}{\hspace*{0pt}\accent"0304 ю}

更新 4

luatexja开发人员太棒了。在我提交错误后,他们在一小时内就修复了错误。

答案1

OpenType 字体需要非常耐心地工作以支持组合角色,这是事实,不幸的是,类似的问题也很常见。

显然,字体开发人员忘记在字体的某些位置添加用于组合字符的适当锚点。

я Е О Э Ю Я 也遭受同样的问题。不过,这可以通过使用传统的重音方法来解决。

\documentclass{scrartcl}

\usepackage{polyglossia}
\usepackage{fontspec}

\setdefaultlanguage{russian}

\setmainfont{EB Garamond}
\newfontfamily\cyrillicfont{EB Garamond}

\DeclareTextCompositeCommand{\=}{TU}{ю}{\accent"0304 ю}
\DeclareTextCompositeCommand{\=}{TU}{я}{\accent"0304 я}
\DeclareTextCompositeCommand{\=}{TU}{Е}{\accent"0304 Е}
\DeclareTextCompositeCommand{\=}{TU}{О}{\accent"0304 О}
\DeclareTextCompositeCommand{\=}{TU}{Э}{\accent"0304 Э}
\DeclareTextCompositeCommand{\=}{TU}{Ю}{\accent"0304 Ю}
\DeclareTextCompositeCommand{\=}{TU}{Я}{\accent"0304 Я}

\KOMAoptions{fontsize = 14}

\begin{document}

ш\={ю}кан

\=а\=е\=и\=о\=у\=э\=ю\=я

\=A\=Е\=И\=О\=У\=Э\=Ю\=Я

\end{document}

在此处输入图片描述

为了记录,这是\DeclareTextCompositeCommand省略了七行的输出。

在此处输入图片描述

答案2

要回答您的后续问题,您可以使用babel来获取自动语言检测,而不是luatexja。它不一定支持您可能使用的每个luatexja功能polyglossia,但它应该适合您,并且它修复了这个错误。

\documentclass{scrartcl}
\usepackage[table]{xcolor}
\usepackage[english]{babel}
\usepackage{unicode-math}

\babelprovide[import, onchar=ids fonts]{japanese}
\babelprovide[import, main, onchar=ids fonts]{russian}

\defaultfontfeatures[HaranoAjiMincho]{
  Renderer=HarfBuzz,
  Scale=MatchUppercase
}

\babelfont{rm}{EBGaramond}
\babelfont[japanese]{rm}{HaranoAjiMincho}
\setmathfont{Garamond Math}

\DeclareTextCompositeCommand{\=}{TU}{ю}{\accent"0304 ю}

\begin{document}

\begin{tabular}{p{2cm} l}
    習慣&ш\=юкан\\
\end{tabular}

\end{document}

EB Garamond / Harano Aji Mincho 样品

相关内容