使用“ucharclasses”在三个脚本之间切换似乎不起作用

使用“ucharclasses”在三个脚本之间切换似乎不起作用

我希望使用 在三个脚本之间切换ucharclasses。我的 MWE 是:

\documentclass{article}
\usepackage{fontspec}
\usepackage[Latin,Tamil,Devanagari]{ucharclasses}
\setmainfont[Script=Latin]{Noto Serif}
\setmonofont{Noto Mono}
\newfontfamily\tamilfont[Script=Tamil,Scale=MatchLowercase]{Noto Sans Tamil}
\newfontfamily\devanagarifont[Script=Devanagari,Scale=MatchLowercase]{Noto Sans Devanagari}
\setTransitionTo{Tamil}{\tamilfont}
\setTransitionFrom{Tamil}{\normalfont}
\setTransitionTo{Devanagari}{\devanagarifont}
\setTransitionFrom{Devanagari}{\normalfont}
\setlength{\parindent}{0pt}

\begin{document}
Using \texttt{ucharclasses}. This is the normal font. இது தமிழ் எழுத்து. इति देवनागरी लिपि. Back to English using the Latin script.

\medskip

Declaring fonts explicitly. This is the normal font. {\tamilfont இது தமிழ் எழுத்து.} {\devanagarifont इति देवनागरी लिपि.} Back to English using the Latin script.
\end{document}

如果可以的话,我希望避免显式字体声明,而是使用包ucharclasses。但我读到它有缺陷。

有人可以建议一种解决方法吗(如果有的话),用于在三个脚本之间切换,ucharclasses请使用?

谢谢。

答案1

自己设置 ucharclass 命令通常更简单,因为包版本并不总是清楚哪些命令将在边界运行,但在这种情况下,这似乎有效,我添加了颜色来帮助识别脚本(我看不懂)

在此处输入图片描述

\documentclass{article}
\usepackage{fontspec,color}
\usepackage[Latin,Tamil,Devanagari]{ucharclasses}
\setmainfont[Script=Latin]{Noto Serif}
\setmonofont{Noto Mono}
\newfontfamily\tamilfont[Script=Tamil,Scale=MatchLowercase]{Noto Sans Tamil}
\newfontfamily\devanagarifont[Script=Devanagari,Scale=MatchLowercase]{Noto Sans Devanagari}

\setTransitionsForLatin{\normalfont\color{blue}}{}
\setTransitionTo{Tamil}{\tamilfont\color{red}}
\setTransitionsForDevanagari{\devanagarifont\color{green}}{}

\setlength{\parindent}{0pt}

\begin{document}
\color{blue}
Using \texttt{ucharclasses}. This is the normal font. இது தமிழ் எழுத்து. इति देवनागरी लिपि. Back to English using the Latin script.

\medskip
\color{blue}

Declaring fonts explicitly. This is the normal font. {\tamilfont\color{red} இது தமிழ் எழுத்து.} {\devanagarifont\color{green} इति देवनागरी लिपि.} Back to English using the Latin script.
\end{document}

答案2

您可能对使用 lualatex 感兴趣。

改编@Davislor 的回答如何在 LaTeX 中输入印地语单词(“LuaLaTeX 可以自动检测您正在输入的语言并更改字体:”),

使用 lualtex

平均能量损失

\documentclass[english]{article}
\usepackage{xcolor}
\usepackage{fontspec}

\usepackage[bidi=basic]{babel}

\babelprovide[import, onchar=ids fonts]{hindi}
\babelprovide[import, onchar=ids fonts]{tamil}

\defaultfontfeatures{ Scale=MatchUppercase,
                      Ligatures=TeX,
                      Renderer=HarfBuzz }
\babelfont{rm}
          [Ligatures=Common, Scale=1.0]{Libertinus Serif}
\babelfont[hindi]{rm}[Color=blue]
          {Shobhika}
\babelfont[tamil]{rm}[Color=red]
          {Noto Sans Tamil}          

\babelfont{sf}
          [Ligatures=Common]{Libertinus Sans}
\babelfont{tt}
          {Libertinus Mono}

\begin{document}

This is the normal font. இது தமிழ் எழுத்து. इति देवनागरी लिपि. Back to English using the Latin script.

स्कूल: 

{\large இந்தி }

(Hindi, இந்தி: हिन्दी, நவீன தரநிலை இந்தி: मानक हिन्दी) அல்லது ஹிந்தி இந்தியாவின் வட மாநிலங்களில் பெரும்பான்மையாகப் பேசப்படும் மொழியாகும்.

\end{document}

相关内容