我之前发过一个类似的问题,询问为什么 ы 字符没有正确显示根本在 TNR 上使用时使用尖音符\'ы
。我有一台 Chromebook,并下载了 Times New Roman 的(看似)最新版本(7.05),它看起来也与 Windows 11 使用的版本相同,因为我现在拥有的版本支持小型大写字母和更多以前对我来说不起作用的字形。
使用 TNR 7.05 时\ы
,有时重音会放在正确的位置,但在句子中使用它时,它似乎不起作用。在我的示例的第一部分中,它处于正确的位置,但我不确定它为什么如此不一致。这不仅适用于 TNR,因为在我的示例中,STIX Two Text 也受到影响。
\documentclass[letterpaper,12pt]{article}
\usepackage{microtype}
\usepackage{unicode-math} % loads fontspec
\setmainfont[BoldFont=Timesbd.ttf, ItalicFont=Timesi.ttf, BoldItalicFont=Timesbi.ttf]{Times.ttf}
\newfontfamily\secondfont[Ligatures=TeX]{STIX Two Text}
\usepackage[main=english,russian]{babel}
\begin{document}
\foreignlanguage{russian}{
\'ы ы́
}
When the unstressed vowels come at the end (\foreignlanguage{russian}{Б\'ыло}), they sound like A.
When the unstressed vowels come at the end (\foreignlanguage{russian}{{\secondfont Б\'ыло}}), they sound like A.
\foreignlanguage{russian}{
ф\'ыф
}
\end{document}
我相信,如果您使用的是 Windows,那么\setmainfont
无论您是通过网络还是其他地方下载了 TNR 变体的文件,我的代码都应该可以工作。
奇怪的是,它看起来会根据放置的位置而有所不同,有人可以帮忙吗?我将不胜感激。
答案1
还有一种替代方法,其优点是不会丢失连字符点(遗憾的是,HarfBuzz
在带连字符的语言中,它并不总是按预期工作)。它基于转换:
\documentclass[letterpaper,12pt]{article}
\usepackage{microtype}
\usepackage{unicode-math} % loads fontspec
\setmainfont
[BoldFont=Timesbd.ttf, ItalicFont=Timesi.ttf, BoldItalicFont=Timesbi.ttf]{Times.ttf}
\newfontfamily\secondfont[Ligatures=TeX]{STIX Two Text}
\usepackage[main=english,russian]{babel}
% Add this transform, which removes discretionaries
% before combining characters:
\babelposthyphenation{russian}{ |[{0300}-{036F}] }{ remove, {} }
\begin{document}
\foreignlanguage{russian}{
\'ы ы́
}
When the unstressed vowels come at the end (\foreignlanguage{russian}{Б\'ыло}), they sound like A.
When the unstressed vowels come at the end (\foreignlanguage{russian}{{\secondfont Б\'ыло}}), they sound like A.
\foreignlanguage{russian}{
ф\'ыф
}
\end{document}
答案2
问题在于连字符,另请参阅https://tex.stackexchange.com/a/340164/2388 和https://github.com/latex3/luaotfload/issues/267。
这个问题应该已经基本解决了。在此之前,如果您使用 harfbuzz-Renderer,问题就会消失:
\documentclass[letterpaper,12pt]{article}
\usepackage{microtype}
\usepackage{unicode-math} % loads fontspec
\setmainfont
[Renderer=Harfbuzz,BoldFont=Timesbd.ttf, ItalicFont=Timesi.ttf, BoldItalicFont=Timesbi.ttf]{Times.ttf}
\newfontfamily\secondfont[Ligatures=TeX]{STIX Two Text}
\usepackage[main=english,russian]{babel}
\begin{document}
\foreignlanguage{russian}{
\'ы ы́
}
When the unstressed vowels come at the end (\foreignlanguage{russian}{Б\'ыло}), they sound like A.
When the unstressed vowels come at the end (\foreignlanguage{russian}{{\secondfont Б\'ыло}}), they sound like A.
\foreignlanguage{russian}{
ф\'ыф
}
\end{document}
给出
答案3
您可以添加一个模式来防止在组合字符之前使用连字符,如本例中的规则所示
一个更好的 Babel 接口,在序言中使用如下:
\babelpatterns[russian]{8^^^^0301}
但是在这里,仅在测试示例中,我使用了较低级别的\patterns
形式,因此我可以演示在文档中间有无此模式切换的情况。
\documentclass[letterpaper,12pt]{article}
\usepackage{microtype}
\usepackage{unicode-math} % loads fontspec
\setmainfont
[BoldFont=Timesbd.ttf, ItalicFont=Timesi.ttf, BoldItalicFont=Timesbi.ttf]{Times.ttf}
\newfontfamily\secondfont[Ligatures=TeX]{STIX Two Text}
\usepackage[main=english,russian]{babel}
% Add this transform, which removes discretionaries
% before combining characters:
%\babelposthyphenation{russian}{ |[{0300}-{036F}] }{ remove, {} }
\begin{document}
\foreignlanguage{russian}{
\'ы ы́
}
When the unstressed vowels come at the end (\foreignlanguage{russian}{Б\'ыло}), they sound like A.
When the unstressed vowels come at the end (\foreignlanguage{russian}{{\secondfont Б\'ыло}}), they sound like A.
\foreignlanguage{russian}{
ф\'ыф
}
\bigskip
\hrule
\bigskip
\foreignlanguage{russian}{
\patterns{8^^^^0301}
}
\foreignlanguage{russian}{
\'ы ы́
}
When the unstressed vowels come at the end (\foreignlanguage{russian}{Б\'ыло}), they sound like A.
When the unstressed vowels come at the end (\foreignlanguage{russian}{{\secondfont Б\'ыло}}), they sound like A.
\foreignlanguage{russian}{
ф\'ыф
}
\end{document}