天城文的复杂连字

天城文的复杂连字

西欧语言中连字是众所周知的,但是垂直或复杂形式的连字并不常见。作为排版练习,我尝试在 Devanāgarī 字体中使用一些复杂的连字。

我已经下载了chandas.ttf文件(南方风格;uttara.ttf可以作为测试用例),其中包含复杂的连字符,以及梵文 2003不包含复杂连字符的字体来显示常见的书写形式。

我已经打开了字体FontForge我们可以看到这些连字符及其名称。连字符已正确映射,因此我们可以使用它们。我只更改了一些字母以适应音译方案:YasnjJ, Gasng和我正在使用的词典梵文获取单词部分。

FontForge 中复杂连字的预览

笔记:如果你想知道我想要实现什么,我可以说我尝试将 Xindy 中排序的音译单词转换为(梵文巴利语,希望以后甚至泰米语和僧伽罗语也能用)并且我正在检查我有哪些选项可以显示索引条目。由于 LuaTeX 不支持映射,我正在尝试准备独立的 Lua 脚本来替换拉丁字母。

从理论上讲,我现在有两个问题:

1)如何在文档中本地关闭这些复杂的连字以及如何获得常规书写形式(如果需要)?为了预览常见形式,我在以下示例中使用了不同的字体。使用后otfinfo -f chandas.ttf我们知道有三个功能,但如果我们关闭它们则无济于事。

2)如何在 LuaLaTeX 中获取复杂连字?据我所知,对印度语的支持非常有限。在正常情况下,我使用来\char获取特定字形,但这些复杂连字在私有使用区域中不会映射为 Unicode 字形(普阿)。我可以使用\XeTeXglyph和字形的插槽,但这也不容易。FontForge 显示DNjYa字形为 3417 (0x0D59),但从 XeTeX ( ) 获得的实际位置\the\XeTeXglyphindex"DNjYa"是 2510 (0x09CE)。真是糟糕的一天!

还有额外福利。更有趣的是,如果我们尝试将两个复杂的连字放在一起(我不能说这在语言上是否正确,几乎可以肯定不是),例如 DNjJ+DNjJa,中间的字母在输入时会更早形成连字。解决方案是使用\mbox{},参见示例中的最后一行。

我附上了一个示例和我的努力的预览。我们可以运行xelatexlualatex。如果您有兴趣,可以从以下位置获取编码表http://www.sanskritweb.net/cakram/chandas-encoding.pdf以及所有连字符的预览http://www.sanskritweb.net/cakram/saMyoga-pattra.pdf

% run: xelatex or lualatex mal-sanskrit.tex
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{ifxetex}
\usepackage{fontspec}
% Possible addtion for LuaLaTeX (1 line):
%\usepackage{luatextra}
% Possible addition for XeLaTeX (3 lines):
%\usepackage{polyglossia}
%\setmainlanguage{sanskrit}
%\newfontfamily{\devanagarifont}{Sanskrit2003}
\parindent=0pt
\begin{document}
Correct form in Xe\LaTeX, incorrect in Lua\LaTeX\ (2 lines):\par
\setmainfont[Script=Devanagari]{Sanskrit2003.ttf}
ड्ण्ज्ञ​ (common form; using different font [Sanskrit2003.ttf])\par % ड्ण्ज्ञ
\setmainfont[Script=Devanagari]{chandas.ttf}
ड्ण्ज्ञ​ (glyph DNjYa; DNjnja [Lexilogos] or DNjJa [Harvard-Kyoto])\par\medskip
  % Y as nj or J, G as ng
\setmainfont[Script=Devanagari,RawFeature=-liga;-mkmk;-mark]{chandas.ttf}
ड्ण्ज्ञ​ (a form of ligature; Devanāgarī script)\par
\setmainfont[Script=Latin]{chandas.ttf}
ड्ण्ज्ञ​ (incorrect form; Latin script)\par
\setmainfont[Script=Devanagari]{chandas.ttf}
ड्\mbox{}ण्\mbox{}ज्ञ​ (incorrect form; separated glyphs, \verb.\mbox.)\par\medskip
\ifxetex
3417 as \XeTeXglyph"0D59\ versus % 3417
\the\XeTeXglyphindex"DNjYa"\ as % 2510
\XeTeXglyph2510\ or\ \XeTeXglyph"09CE\ (getting slot number)\par
ड्ण्ज्ञ्ड्ण्ज्ञ / ड्ण्ज्ञ्\mbox{}ड्ण्ज्ञ (DNjJ DNjJa)
\fi
\end{document}

xelatex 的输出

lualatex 的输出

答案1

或许,“连字符”一词的含义是这个问题背后的驱动因素。


这是带有图片的评论,所以不是答案。原始帖子(也不是答案,更多的是观察)保留在下面,以保持连续性。

假设问题是关于索引音译内容,那么有一种方法不涉及显示材料的分解。

一串字形被提供给渲染器,渲染器会正确显示它。不过,字形串仍然可用,因此不需要将显示恢复为其输入。

例如,为了探索正字法的结构,字符串 संयुक्त व्यंजन(这是 Google 在输入“印地语中的连接辅音”时返回的字符串,Google 将其发音音译为“sanyukt vyanjan”)可以逐个字形地音译为:

萨亚卡塔·瓦亚纳

字形音译

使用映射方法,显示每个辅音所附的固有元音“a”,并显示其在何处根据正字法规则被关闭:

  • 在另一个元音之前
  • 在两个辅音之间不需要
  • 在一个单词的末尾

在这里,任意使用倒置的桥下组合变音符号(通过字体映射文件)作为前两种情况下关闭元音的视觉表示。

然后,该\index命令可以像任何其他字符串一样采用这个音译字符串,并执行其通常的工作:

索引示例

代码

\documentclass[12pt]{article}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont[Script=Devanagari]{Noto Serif Devanagari}
\newfontface\translitd[Mapping=devanagari-to-latin,Scale=1.1,Colour=red]{Noto Sans}
\newfontfamily\englishfont{Noto Serif}
\usepackage{polyglossia}
\setdefaultlanguage{hindi}
\setotherlanguages{english}
\usepackage{imakeidx}
\makeindex

\begin{document}
\Large
संयुक्त व्यंजन
{\normalsize\textenglish{sanyukt vyanjan}}

{\translitd संयुक्त}\index{{\translitd संयुक्त}}
{\translitd व्यंजन}\index{{\translitd व्यंजन}}


\printindex
\end{document}

‘.map’ 文件,编译成‘.tec’ 文件teckit_compile.exe

; TECkit mapping for TeX input conventions <-> Unicode characters

LHSName "devanagari-to-latin"
RHSName "UNICODE"

pass(Unicode)

; ligatures from Knuth's original CMR fonts
U+002D U+002D           <>  U+2013  ; -- -> en dash
U+002D U+002D U+002D    <>  U+2014  ; --- -> em dash

U+0027          <>  U+2019  ; ' -> right single quote
U+0027 U+0027   <>  U+201D  ; '' -> right double quote
U+0022           >  U+201D  ; " -> right double quote

U+0060          <>  U+2018  ; ` -> left single quote
U+0060 U+0060   <>  U+201C  ; `` -> left double quote

U+0021 U+0060   <>  U+00A1  ; !` -> inverted exclam
U+003F U+0060   <>  U+00BF  ; ?` -> inverted question

; additions supported in T1 encoding
U+002C U+002C   <>  U+201E  ; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C   <>  U+00AB  ; << -> LEFT POINTING GUILLEMET
U+003E U+003E   <>  U+00BB  ; >> -> RIGHT POINTING GUILLEMET



U+0924 <> U+0074 U+0061 ;  ta 
U+094D <> U+033A ; strikeout previous
U+0915 <> U+006B U+0061 ; ka
U+0941 <> U+033A U+0075 ; -u
U+092F <> U+0079 U+0061 ; ya
U+0902 <> U+006E U+0323 ; n.
U+0938 <> U+0073 U+0061 ; sa
U+0928 <> U+006E U+0061 ; na
U+091C <> U+006A U+0061 ; ja
U+0935 <> U+0076 U+0061 ; va

我通常希望读者也想要一个“正常”的索引。例如:

正常指数

====

原始帖子

如果我没有误解这个问题的话,普通单词看起来没问题(在 xelatex 和浏览器中)。

连词

由于 lualatex 首先不进行连词辅音,因此无需“解除连词”来创建索引条目。

对于通过(自动)音译进行索引,再次,使用字体映射(或 l3 正则表达式替换),xelatex 更容易。


\documentclass[12pt]{article}
\usepackage{fontspec}
\setmainfont[Script=Devanagari]{Noto Serif Devanagari}
\newfontfamily\englishfont{Noto Serif}
\usepackage{polyglossia}
\setdefaultlanguage{hindi}
\setotherlanguages{english}


\begin{document}
\Large
संयुक्त व्यंजन

{\normalsize\textenglish{sanyukt vyanjan}}

\noindent   शुक्ल ख्मेर मुख्य अंग्रेज़ी \\ 
    अच्छा छुट्टी ठ्रेइन बुद्ध विद्यार्थी


\noindent {\normalsize\textenglish{shukla khmer mukhya angrezî \\ achchhâ chhuTTî trein buddha vidyârthî}


ल् +    म = ल्म     फ़िल्म  \textenglish{film}
\end{document}

测试单词来自https://en.wikibooks.org/wiki/Hindi/Consonant_combinations

相关内容