我希望使用 在三个脚本之间切换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 可以自动检测您正在输入的语言并更改字体:”),
平均能量损失
\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}