注意:我猜这个问题与语言(孟加拉语)有点关系。我会尝试以音译格式解释每种字体。
我喜欢使用一个字符a
在另一个字符的下面/上面b
。在我的用例中,a
它要么是-
(连字符),要么是।
(孟加拉语中的停止字符)。例如,单词“কুহুকেকা”(音译:“KuHuKeKa”)
(请注意,顶部的水平线贯穿四个(合成的)人物); 如果我想在单词的-
第三个字符 কে (Ke) 下方添加一个,或者।
在单词的第二个字符 হু ('Hu') 上方添加一个,
水平线根本没有保持连续性——理想情况下它应该看起来就像第一张图像,但经过了后来的修改。
amsmath
首先我使用包以优雅的方式实现
\newcommand{\abelowb}[1]{$\underset{\hbox{\text{-}}}{\text{#1}}$}
\newcommand{\aoverb}[1]{$\overset{\raise0em\hbox{\text{#1}}}{\text{।}}$}
经过仔细观察,我意识到只有当 ে ৈ ো 和 ৌ 元音修饰词(外观上具有 ে 的共同点)相邻或在b
例如 মাতৃদেবো (MaTriDebo)中时,才会出现此问题。
后来我怀疑数学模式和文本模式的切换可能会造成这种干扰。所以我尝试手动编写如下命令:
\newcommand{\myabelowb}[1]{\sbox1{-}\sbox0{#1}#1\raisebox{\dimexpr-
0.5\baselineskip\relax}{\kern\dimexpr-0.5\wd0-0.5\wd1\relax-}\kern\dimexpr0.5\wd0-
0.5\wd1\relax}
\newcommand{\myaoverb}[1]{\sbox1{।}\sbox0{#1}#1\raisebox{\dimexpr0.6\baselineskip\relax}
{\kern\dimexpr-0.5\wd0-0.5\wd1\relax।}\kern\dimexpr0.5\wd0-0.5\wd1\relax}
通过这些我可以部分解决一些问题:
\myaoverb
给出了同样的问题使用命令কু\myaoverb{।}{হু}কেকা
[案例 1]\myabelowb
正在为这个词而努力কুহু\myabelowb{কে}কা
[案例 2a],但这里不是使用命令কু\myabelowb{হু}কেকা
[案例 2b]amsmath
以某种比例方式保持与b
的距离。我手工编写的命令无法做到这一点,例如。a
我的观察:
- 如果存在 XeLaTeX 光标的概念,那么一旦光标找到 ে ৈ ো 或 ৌ——在正常情况下,它会在其左侧添加额外的连接水平线,以保持连续性。否则,一旦
a
出现 ে ৈ ো 或 ৌ,XeLaTeX 就会忘记返回到最后观察到的有效字符——情况 1 或情况 2b——以便它可以粘合水平线。
我想要的是:
我想要一些命令,可以解决水平线不连续的问题,并且还可以保持比例距离b
。
MWE:
\documentclass{article}
\usepackage{fontspec,amsmath}
\usepackage{polyglossia}
\setdefaultlanguage[numerals=Bengali,changecounternumbering=true]{bengali}
\setmainfont[Script=Bengali]{Noto Serif Bengali}
\newfontfamily\latinfont[Script=Latin]{Noto Serif}
\setotherlanguages{latin}
\newcommand{\abelowb}[1]{$\underset{\hbox{\text{-}}}{\text{#1}}$}
\newcommand{\aoverb}[1]{$\overset{\raise0em\hbox{\text{#1}}}{\text{।}}$}
\newcommand{\myabelowb}[1]{\sbox1{-}\sbox0{#1}#1\raisebox{\dimexpr-0.5\baselineskip\relax}{\kern\dimexpr-0.5\wd0-0.5\wd1\relax-}\kern\dimexpr0.5\wd0-0.5\wd1\relax}
\newcommand{\myaoverb}[1]{\sbox1{।}\sbox0{#1}#1\raisebox{\dimexpr0.6\baselineskip\relax}{\kern\dimexpr-0.5\wd0-0.5\wd1\relax।}\kern\dimexpr0.5\wd0-0.5\wd1\relax}
\begin{document}
কুহু\abelowb{কে}কা\\
কু\aoverb{।}{হু}কেকা\\
কুহু\myabelowb{কে}কা\\
কু\myaoverb{।}{হু}কেকা\\
কু\myabelowb{হু}কেকা
\noindent
\abelowb{কু} \begin{latin} $\longleftarrow$ using \verb|\abelowb{}| \end{latin}
\myabelowb{কু} \begin{latin} $\longleftarrow$ using \verb|\myabelowb{}| \end{latin}
\end{document}
答案1
使用支持 Unicode 的孟加拉字体来表现吠陀音调,例如最新版本的 Noto Serif Bengali(我测试的是 2.003 版)和 Noto Sans Bengali。
\documentclass{article}
\tracinglostchars=3 % Make it an error when the font does not have a character!
\usepackage{fontspec,amsmath}
\usepackage{polyglossia}
\usepackage{setspace} % for \doublespacing
\setdefaultlanguage[numerals=Bengali,changecounternumbering=true]{bengali}
\setmainfont[Script=Bengali]{NotoSerifBengali}
\newfontfamily\latinfont[Script=Latin]{Noto Serif}
\setotherlanguages{latin}
\newcommand\udatta[1]{#1^^^^0951}
\newcommand\anudatta[1]{#1^^^^0952}
\doublespacing
\begin{document}
\noindent কুহু\anudatta{কে}কা\\
কু\udatta{হু}কেকা\\
কুহু\anudatta{কে}কা\\
কু\udatta{হু}কেকা\\
কু\anudatta{হু}কেকা
\noindent
\anudatta{কু} \begin{latin} $\longleftarrow$ using \verb|\anudatta{}| \end{latin}
\end{document}
您可能需要增加行距,以便为 udatta 留出空间。您肯定需要添加一个\tracinglostchars=
命令,因为如果没有命令,如果当前字体没有它应该显示的字符,TeX 会默默忽略它(并在文件中间写一个警告.log
)。将其设置为3
可使其成为错误,或者2
至少将警告消息打印到控制台。
答案2
如果我理解正确的话(我可能理解不正确,因为我看不懂剧本),你真正想要的是一种孟加拉字体,在重音下带有组合 _,在重音上带有组合 |
我找不到这些,但可能只是因为我搜索了错误的术语,但为了展示它是如何工作的,我可以显示一个上重音 U+0981 BENGALI SIGN CANDRABINDU 和一个下重音 U+09CD BENGALI SIGN VIRAMA,可以在不干扰周围字符间距的情况下添加它们
\documentclass{article}
\usepackage{fontspec,amsmath}
\usepackage{polyglossia}
\setdefaultlanguage[numerals=Bengali,changecounternumbering=true]{bengali}
\setmainfont[Script=Bengali]{Noto Serif Bengali}
\newfontfamily\latinfont[Script=Latin]{Noto Serif}
\setotherlanguages{latin}
\begin{document}
\def\xxx{^^^^09cd}
\def\yyy{^^^^0981}
\noindent
কুহু\yyy কেকা\\
কুহ\xxx কেকা
\end{document}
抱歉,这个不太有用,但也许其他字体有更多组合字符可以使用