将特殊格式的复合孟加拉字符的水平线粘贴起来

将特殊格式的复合孟加拉字符的水平线粘贴起来

注意:我猜这个问题与语言(孟加拉语)有点关系。我会尝试以音译格式解释每种字体。

我喜欢使用一个字符a在另一个字符的下面/上面b。在我的用例中,a它要么是-(连字符),要么是(孟加拉语中的停止字符)。例如,单词“কুহুকেকা”(音译:“KuHuKeKa”)

藝術本身

请注意,顶部的水平线贯穿四个(合成的)人物); 如果我想在单词的-第三个字符 কে (Ke) 下方添加一个,或者在单词的第二个字符 হু ('Hu') 上方添加一个,

কুহু\abelowb{কে}কাকু\aoverb{।}{হু}কেকা

水平线根本没有保持连续性——理想情况下它应该看起来就像第一张图像,但经过了后来的修改。

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}

通过这些我可以部分解决一些问题:

  1. \myaoverb给出了同样的问题কু\myaoverb{।}{হু}কেকা使用命令কু\myaoverb{।}{হু}কেকা[案例 1]
  2. \myabelowb正在为这个词而努力কুহু\myabelowb{কে}কাকুহু\myabelowb{কে}কা[案例 2a],但这里不是কু\myabelowb{হু}কেকা使用命令কু\myabelowb{হু}কেকা[案例 2b]
  3. amsmath以某种比例方式保持与b的距离。我手工编写的命令无法做到这一点,例如。a

\abelowb{কু} \myabelowb{কু}


我的观察:

  • 如果存在 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}

Noto Serif 孟加拉语样本

您可能需要增加行距,以便为 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}

抱歉,这个不太有用,但也许其他字体有更多组合字符可以使用

相关内容