使用 fontspec 和 polyglossia 時 lualatex 的字體問題

使用 fontspec 和 polyglossia 時 lualatex 的字體問題

我正在嘗試使用 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。碰巧你的印地語字體也支援英語,所以使用它作為預設字體恰好可以工作。如果您檢查字體,您會發現它只使用您的梵文字體,而不是您指定的英文字體。

如果您要切換語言,您應該在原始程式碼頂部附近新增命令:

\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}

Noto襯線樣本

\texthindi如果您現有的來源使用或等命令\textdevanagari,您可能還需要聲明\babeltags與 Polyglossia 的兼容性。

相關內容