如何使用 XeTeX 和 LuaTeX 为梵语生成复合变音字体?

如何使用 XeTeX 和 LuaTeX 为梵语生成复合变音字体?

我正在尝试使用一种本身不支持所有符号的字体(Minion Pro)来表示梵语的变音符号。因此,它们以某种方式由 XeTeX 组合起来。这在使用时几乎可以正常工作:

\documentclass{scrartcl}
\usepackage{xunicode,xltxtra}
\usepackage{fontspec,newunicodechar}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Minion Pro}

\newunicodechar{Ṛ}{\d{R}}
\newunicodechar{ṛ}{\d{r}}
\newunicodechar{Ṝ}{\={\d{R}}}
\newunicodechar{ṝ}{\={\d{r}}}
\newunicodechar{Ḷ}{\d{L}}
\newunicodechar{ḷ}{\d{l}}
\newunicodechar{Ḹ}{\={\d{L}}}
\newunicodechar{ḹ}{\={\d{l}}}
\newunicodechar{ṃ}{\d{m}}
\newunicodechar{ḥ}{\d{h}}
\newunicodechar{Ṭ}{\d{T}}
\newunicodechar{ṭ}{\d{t}}
\newunicodechar{Ḍ}{\d{D}}
\newunicodechar{ḍ}{\d{d}}
\newunicodechar{Ṅ}{\.{N}}
\newunicodechar{ṅ}{\.{n}}
\newunicodechar{Ṇ}{\d{N}}
\newunicodechar{ṇ}{\d{n}}
\newunicodechar{Ṣ}{\d{S}}
\newunicodechar{ṣ}{\d{s}}

\begin{document}
a  A

ā  Ā

i  I

ī  Ī

u  U

ū  Ū

ṛ  Ṛ

ṝ  Ṝ

ḷ  Ḷ

ḹ  Ḹ

e  E

ai  Ai

o  O

au  Au

ṃ ḥ

k  K

c  C

ṭ  Ṭ

t  T

p  P

kh  Kh

ch  Ch

ṭh  Ṭh

th  Th

ph  Ph

g  G

j  J

ḍ  Ḍ

d  D

b  B

gh  Gh

jh  Jh

ḍh  Ḍh

dh  Dh

bh  Bh

ṅ  Ṅ

ñ  Ñ

ṇ  Ṇ

n  N

m  M

y  Y

r  R

l  L

v  V

ś  Ś

ṣ  Ṣ

s  S

h  H

\end{document}

但是 Ḹ、ḹ、Ṝ 和 ṝ 上方的长音符号位置不对,而且比 ā、ī 等上方的长音符号要细。我该怎么办?

第二个问题:这在 LuaTeX 中完全失败。xltxtra 似乎是实现此功能所必需的。但 LuaTeX 不支持此功能。我尝试使用此代码:https://tex.stackexchange.com/a/20791/19458

但是下面的点比 i-dot 大。使用 XeTeX 的上述解决方案并非如此。有没有办法在 LuaTeX 中更好地实现这一点?有可能吗?

答案1

以下方法似乎有效:

\documentclass{scrartcl}
\usepackage{fontspec,newunicodechar}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont{Minion Pro}

\UndeclareUTFcomposite[\UTFencname]{x1E0C}{\d}{D}
\UndeclareUTFcomposite[\UTFencname]{x1E0D}{\d}{d}
\UndeclareUTFcomposite[\UTFencname]{x1E25}{\d}{h}
\UndeclareUTFcomposite[\UTFencname]{x1E36}{\d}{L}
\UndeclareUTFcomposite[\UTFencname]{x1E37}{\d}{l}
\UndeclareUTFcomposite[\UTFencname]{x1E43}{\d}{m}
\UndeclareUTFcomposite[\UTFencname]{x1E46}{\d}{N}
\UndeclareUTFcomposite[\UTFencname]{x1E47}{\d}{n}
\UndeclareUTFcomposite[\UTFencname]{x1E5A}{\d}{R}
\UndeclareUTFcomposite[\UTFencname]{x1E5B}{\d}{r}
\UndeclareUTFcomposite[\UTFencname]{x1E62}{\d}{S}
\UndeclareUTFcomposite[\UTFencname]{x1E63}{\d}{s}
\UndeclareUTFcomposite[\UTFencname]{x1E6C}{\d}{T}
\UndeclareUTFcomposite[\UTFencname]{x1E6D}{\d}{t}

\UndeclareUTFcomposite[\UTFencname]{x1E44}{\.}{N}
\UndeclareUTFcomposite[\UTFencname]{x1E45}{\.}{n}

\makeatletter
\let\d\relax
\DeclareRobustCommand{\d}[1]
   {\hmode@bgroup
    \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
\let\.\relax
\DeclareRobustCommand{\.}[1]{\accent"02D9#1}
\DeclareRobustCommand{\MACRON}[1]{\accent"AF#1}
\makeatother

\newunicodechar{Ḍ}{\d{D}}
\newunicodechar{ḍ}{\d{d}}
\newunicodechar{ḥ}{\d{h}}
\newunicodechar{Ḷ}{\d{L}}
\newunicodechar{ḷ}{\d{l}}
\newunicodechar{ṃ}{\d{m}}
\newunicodechar{Ṇ}{\d{N}}
\newunicodechar{ṇ}{\d{n}}
\newunicodechar{Ṛ}{\d{R}}
\newunicodechar{ṛ}{\d{r}}
\newunicodechar{Ṣ}{\d{S}}
\newunicodechar{ṣ}{\d{s}}
\newunicodechar{Ṭ}{\d{T}}
\newunicodechar{ṭ}{\d{t}}

\newunicodechar{Ṅ}{\.{N}}
\newunicodechar{ṅ}{\.{n}}

\newunicodechar{Ḹ}{\d{\MACRON{L}}}
\newunicodechar{ḹ}{\d{\MACRON{l}}}
\newunicodechar{Ṝ}{\d{\MACRON{R}}}
\newunicodechar{ṝ}{\d{\MACRON{r}}}

\begin{document}
\parbox{.5\textwidth}{
a  A
ā  Ā
i  I
ī  Ī
u  U
ū  Ū
ṛ  Ṛ
ṝ  Ṝ
ḷ  Ḷ
ḹ  Ḹ
e  E
ai  Ai
o  O
au  Au
ṃ ḥ
k  K
c  C
ṭ  Ṭ
t  T
p  P
kh  Kh
ch  Ch
ṭh  Ṭh
th  Th
ph  Ph
g  G
j  J
ḍ  Ḍ
d  D
b  B
gh  Gh
jh  Jh
ḍh  Ḍh
dh  Dh
bh  Bh
ṅ  Ṅ
ñ  Ñ
ṇ  Ṇ
n  N
m  M
y  Y
r  R
l  L
v  V
ś  Ś
ṣ  Ṣ
s  S
h  H
}
\end{document}

在此处输入图片描述

正如您所看到的,有必要撤消所做的一些工作xunicode(这些工作会自动加载fontspec,无需明确加载)。此外,必须重新定义一些标准重音,否则它们将不会使用主文档字体。

2017 年更新

上述提供的宏fontspec是使用euenc选项加载的。另一方面,新的默认 TU 编码不会使用\d\.N和声明复合词\.n,因此代码更简单。

\documentclass{scrartcl}
\usepackage{fontspec}
\usepackage{newunicodechar}
\setmainfont{Minion Pro}

\makeatletter
\let\d\relax
\DeclareRobustCommand{\d}[1]
   {\hmode@bgroup
    \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}\egroup}
\let\.\relax
\DeclareRobustCommand{\.}[1]{\accent"02D9#1}
\DeclareRobustCommand{\MACRON}[1]{\accent"AF#1}
\makeatother

\newunicodechar{Ḍ}{\d{D}}
\newunicodechar{ḍ}{\d{d}}
\newunicodechar{ḥ}{\d{h}}
\newunicodechar{Ḷ}{\d{L}}
\newunicodechar{ḷ}{\d{l}}
\newunicodechar{ṃ}{\d{m}}
\newunicodechar{Ṇ}{\d{N}}
\newunicodechar{ṇ}{\d{n}}
\newunicodechar{Ṛ}{\d{R}}
\newunicodechar{ṛ}{\d{r}}
\newunicodechar{Ṣ}{\d{S}}
\newunicodechar{ṣ}{\d{s}}
\newunicodechar{Ṭ}{\d{T}}
\newunicodechar{ṭ}{\d{t}}

\newunicodechar{Ṅ}{\.{N}}
\newunicodechar{ṅ}{\.{n}}

\newunicodechar{Ḹ}{\d{\MACRON{L}}}
\newunicodechar{ḹ}{\d{\MACRON{l}}}
\newunicodechar{Ṝ}{\d{\MACRON{R}}}
\newunicodechar{ṝ}{\d{\MACRON{r}}}

\begin{document}
\parbox{.5\textwidth}{
a  A
ā  Ā
i  I
ī  Ī
u  U
ū  Ū
ṛ  Ṛ
ṝ  Ṝ
ḷ  Ḷ
ḹ  Ḹ
e  E
ai  Ai
o  O
au  Au
ṃ ḥ
k  K
c  C
ṭ  Ṭ
t  T
p  P
kh  Kh
ch  Ch
ṭh  Ṭh
th  Th
ph  Ph
g  G
j  J
ḍ  Ḍ
d  D
b  B
gh  Gh
jh  Jh
ḍh  Ḍh
dh  Dh
bh  Bh
ṅ  Ṅ
ñ  Ñ
ṇ  Ṇ
n  N
m  M
y  Y
r  R
l  L
v  V
ś  Ś
ṣ  Ṣ
s  S
h  H
Ḹ  ḹ
Ṝ  ṝ
}
\end{document}

在此处输入图片描述

相关内容