西欧语言中连字是众所周知的,但是垂直或复杂形式的连字并不常见。作为排版练习,我尝试在 Devanāgarī 字体中使用一些复杂的连字。
我已经下载了chandas.ttf文件(南方风格;uttara.ttf可以作为测试用例),其中包含复杂的连字符,以及梵文 2003不包含复杂连字符的字体来显示常见的书写形式。
我已经打开了字体FontForge我们可以看到这些连字符及其名称。连字符已正确映射,因此我们可以使用它们。我只更改了一些字母以适应音译方案:Y
asnj
或J
, G
asng
和我正在使用的词典和梵文获取单词部分。
笔记:如果你想知道我想要实现什么,我可以说我尝试将 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{}
,参见示例中的最后一行。
我附上了一个示例和我的努力的预览。我们可以运行xelatex
和lualatex
。如果您有兴趣,可以从以下位置获取编码表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}
答案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