在 Polyglossia 中,是否可以不使用标签自动切换语言?

在 Polyglossia 中,是否可以不使用标签自动切换语言?

我想输入可能同时包含天城文或罗马文字的文本,并且不想每次在句子中间更改语言。是否可以将两种字体(一种支持天城文字形,一种支持罗马字形)合并为一种语言?

目前,我正在做

\setdefaultlanguage{sanskrit}
\newfontfamily\sanskritfont[Script=Devanagari]{NotoSansDevanagari-Regular}

由于NotoSansDevangari-Regular没有罗马字符的字形,因此它会渲染该行

The ending हल् letter of an उपदेश is called 'इत्'.

作为

��� ������ हल् ������ �� �� उपदेश �� ������ 'इत्'.

是否有可能以某种方式在语言中添加,NotoSans-Regular以便NotoSansDevanagari-Regular它可以正确呈现两个脚本,而无需明确执行\begin{english}\end{english}

答案1

可以使用 来实现这一点babel。只要您使用\textenglish\begin{sanskrit}而不是\devanagarifont,这个新的序言就应该适用于您的文档。它需要 luahbtex(TeX Live 2020 中的 lualatex 可以工作),但 xetex 有一个错误(截至 2020 年 7 月)。

\documentclass{article}
\tracinglostchars=2
\usepackage{iftex} % For \ifluahbtex, \ifxetex, etc.
\usepackage[paperwidth=10cm]{geometry} % Format the MWR for TeX.SX
\pagestyle{empty}

\ifluahbtex
  \usepackage[bidi=basic,main=english]{babel}
  \usepackage{fontspec}
  \defaultfontfeatures{ Renderer=HarfBuzz,
                        Scale=MatchLowercase,
                        Ligatures=TeX }
  \usepackage{microtype}
\else
  % The only other engine that works, as of 2020, is XeTeX.
  \usepackage[bidi=default,main=english]{babel}
  \usepackage{fontspec}
  \defaultfontfeatures{ Scale=MatchLowercase,
                        Ligatures=TeX }
\fi

\babelprovide[onchar=ids fonts]{sanskrit-devanagari}

\babelfont{rm}
          [Ligatures=Common, Scale=1.0,Language=Default]{Noto Serif}
\babelfont{sf}
          [Ligatures=Common,Language=Default]{Noto Sans}
\babelfont[sanskrit-devanagari]{rm}
          {Noto Serif Devanagari}
\babelfont[sanskrit-devanagari]{sf}
          [Language=Default]{Noto Sans Devanagari}
\babelfont{tt}
          [Language=Default]{Noto Sans Devanagari UI}

\babeltags{sanskrit=sanskrit-devanagari} % Add \textsanskrit, \begin{sanskrit}
\babeltags{english=english} % Add \textenglish, \begin{englisn}

\begin{document}
\sffamily
The ending हल्  letter of  an उपदेश is called `इत्'.
\end{document}

Noto Sans 字体样本

回想一下,TeX 中的引号是

`foo ``bar" baz' or ‘foo “bar” baz’

答案2

看起来你正在使用 XeLaTeX。如果是这样,正如@kongo09 在这个问题,一个名为 works 的包ucharclasses。这是 MWE:

\documentclass[xelatex]{article}
\usepackage{fontspec}
\newfontfamily{\defaultfont}{Times New Roman}
\newfontfamily{\latinfont}{Times New Roman}
\newfontfamily{\devanagarifont}{NotoSansDevanagari-Regular}

\usepackage[Latin, Devanagari]{ucharclasses}
\setDefaultTransitions{\defaultfont}{}
\setTransitionsForLatin{\latinfont}{}
\setTransitionTo{Devanagari}{\devanagarifont}

\begin{document}

The ending हल् letter of an उपदेश is called 'इत्'.

\end{document}

相关内容