西里尔文文本中的错误重音符号

西里尔文文本中的错误重音符号

在俄语和语言文学的教学材料中,经常需要在西里尔元音上添加重音。然而,当我尝试使用 luaLaTeX 执行此操作时,重音却放错了位置。

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\setmainfont{Linux Libertine:style=Regular}
\begin{document}

Е́сли вы изу́чите

\'{Е}сли вы из\'{у}чите

\'{E}сли вы из\'{y}чите % Here "E" and "y" are Latin glyphs, but this workaround does not
                        % work with all Cyrillic letters e.g. Я, Ю
\end{document}

错误的口音

最后一行看起来不错,但不幸的是这些是拉丁字形。

这是所用字体(Linux Libertine)的问题还是 LaTeX 的问题?

在此处输入图片描述

答案1

这似乎是字体中的一个错误:这是我从以下输入中获得的输出(其中应用了对原始代码的修复):

\documentclass[11pt]{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}

Е́сли вы изу́чите

\'{Е}сли вы из\'{у}чите

\'{E}сли вы из\'{y}чите % Here "E" and "y" are Latin glyphs, but this workaround does not
                        % work with all Cyrillic letters e.g. Я, Ю
\end{document}

LuaLaTeX

在此处输入图片描述

西拉特克斯

在此处输入图片描述

如果我将主字体从 更改Linux Libertine OOld Standard,我会得到以下内容(顶部两行使用 Libertine,底部两行使用 Old Standard):

在此处输入图片描述

添加于 2016 年 1 月 31 日

在该错误修复之前,我可以为您提供一个解决方法:需要修复的元音会提前查看是否跟有 U+0301,在这种情况下,将尖音符与传统原语一起放置在它们上方\accent

在该错误得到解决之前(恐怕 Libertinus 还没有解决),我可以提供一种解决方法。

\documentclass[12pt,a5paper,openright,twoside]{memoir}

\usepackage{fontspec}
\usepackage{newunicodechar}

\ExplSyntaxOn
\newunicodechar{А}{\paolo_accent_check:n{А}}
\newunicodechar{Е}{\paolo_accent_check:n{Е}}
\newunicodechar{И}{\paolo_accent_check:n{И}}
\newunicodechar{О}{\paolo_accent_check:n{О}}
\newunicodechar{У}{\paolo_accent_check:n{У}}
\newunicodechar{Ы}{\paolo_accent_check:n{Ы}}
\newunicodechar{Э}{\paolo_accent_check:n{Э}}
\newunicodechar{Ю}{\paolo_accent_check:n{Ю}}
\newunicodechar{Я}{\paolo_accent_check:n{Я}}
\newunicodechar{ы}{\paolo_accent_check:n{ы}}
\newunicodechar{ю}{\paolo_accent_check:n{ю}}

\cs_new_protected:Nn \paolo_accent_check:n
 {
  \peek_charcode_remove:NTF ^^^^0301
   {
    \accent"00B4 \scan_stop: #1
   }
   { #1 }
 }
\ExplSyntaxOff

\def\CyrillicAccents{А а А́ а́ \\ Е е Е́ е́ \\ И и И́ и́ \\ О о О́ о́ \\ 
  У у У́ у́ \\ Ы ы Ы́ ы́ \\ Э э Э́ э́ \\ Ю ю Ю́ ю́ \\ Я я Я́ я́}

\begin{document}

\fontspec{Linux Libertine O}

\parbox[t]{3cm}{\CyrillicAccents}
% disable the new macro
\ExplSyntaxOn \cs_set_eq:NN \paolo_accent_check:n \use:n \ExplSyntaxOff
\parbox[t]{3cm}{\CyrillicAccents}

\end{document}

左列是调整后的元音,右列是默认输出。

在此处输入图片描述

相关内容