考虑以下 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 ю}
效果不太好。它在 和 之间产生了奇怪的冲突tabular
。luatexja
考虑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}