我正在尝试使用 lualatex 排版包含印地语和英语的文档。以下 MWE 有效:
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{hindi}
\setotherlanguage{english}
\usepackage{fontspec}
\newfontscript{Devanagari}{deva,dev2}
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}[Scale=1.1,Script=Devanagari]
\newfontfamily{\englishfont}{Noto Serif}
\begin{document}
This is a test.
यह एक परीक्षा है।
\end{document}
并给出正确的输出。
但是,如果我将默认语言更改为英语,将另一种语言更改为印地语,如下面的 MWE 所示
\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setotherlanguage{hindi}
\usepackage{fontspec}
\newfontscript{Devanagari}{deva,dev2}
\newfontfamily{\devanagarifont}{Noto Serif Devanagari}[Scale=1.1,Script=Devanagari]
\newfontfamily{\englishfont}{Noto Serif}
\begin{document}
This is a test.
यह एक परीक्षा है।
\end{document}
答案1
Polyglossia 不会自动检测语言。(Babel 有一个命令可以做到这一点。)您需要使用 或 来选择它\texthindi
。\textenglish
碰巧您的 Hindi 字体也支持英语,因此将其用作默认字体恰好有效。如果您检查字体,您会发现它只使用您的 Devanagari 字体,而不是您指定的英语字体。
如果您要切换语言,则应在源顶部附近添加命令:
\tracinglostchars=3
这样,请求当前字体没有的字形时就会出错,而不是默默忽略它(在文件中间显示一条消息.log
)。您可以使用 将其转换为控制台上的警告\tracinglostchars=2
。
以下使用 Babel 的解决方案将主要语言设置为英语,并自动检测您输入的语言:
\documentclass{article}
\tracinglostchars=3
\usepackage[english, bidi=basic]{babel}
\usepackage{fontspec}
\babelprovide[import=hi, onchar=fonts ids]{hindi}
\babelfont{rm}
[Ligatures={Common, TeX}]{Noto Serif}
\babelfont[hindi]{rm}
[Scale=MatchUppercase]{Noto Serif Devanagari}
\begin{document}
This is a test.
यह एक परीक्षा है।
\end{document}
如果您现有的源使用诸如\texthindi
或 之类的命令\textdevanagari
,您可能还需要声明\babeltags
与 Polyglossia 兼容。