我正在嘗試使用 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}
\texthindi
如果您現有的來源使用或等命令\textdevanagari
,您可能還需要聲明\babeltags
與 Polyglossia 的兼容性。