我为 8 位 TeX 的 Georgian 自定义了大写/小写列表,效果很好,但如何为 XeLaTeX/LuaLaTeX 定义它呢?这里有一个类似的问题在数学模式下将 MakeUppercase 应用于非英文字符
这是例子。它适用于俄语和英语
\documentclass{article}
\usepackage{fontspec}
\usepackage[russian,georgian]{babel}
\makeatletter
\def\update@uclc@with@georgian{%
\expandafter\def\expandafter\@uclclist\expandafter
{\@uclclist
\ა\Ⴀ\ბ\Ⴁ\გ\Ⴂ\დ\Ⴃ\ე\Ⴄ\ვ\Ⴅ\ზ\Ⴆ\თ\Ⴇ\ი\Ⴈ\კ\Ⴉ\ლ\Ⴊ\მ\Ⴋ\ნ\Ⴌ\ო\Ⴍ\პ\Ⴎ\ჟ\Ⴏ\რ\Ⴐ\ს\Ⴑ\ტ\Ⴒ\უ\Ⴓ\ფ\Ⴔ\ქ\Ⴕ\ღ\Ⴖ\ყ\Ⴗ\შ\Ⴘ\ჩ\Ⴙ\ც\Ⴚ\ძ\Ⴛ\წ\Ⴜ\ჭ\Ⴝ\ხ\Ⴞ\ჯ\Ⴟ\ჰ\Ⴠ}%
\let\update@uclc@with@georgian\relax %
}
\makeatother
\setmainfont{Dejavu Serif}
\begin{document}
\MakeUppercase{abc აბგ фип}
\end{document}
答案1
你需要告诉 TeX 映射角色本身彼此之间:这里不涉及控制序列。(这在 8 位引擎中有所不同,因为您需要的代码点不是单个字节。)您还需要确保在选择格鲁吉亚语时激活此代码。例如
\documentclass{article}
\usepackage{fontspec}
\usepackage[russian,georgian]{babel}
\makeatletter
\g@addto@macro\extrasgeorgian{%
\def\update@uccode@georgian#1#2{%
\ifx\relax#2\relax
\else
\uccode`#1=`#2 %
\expandafter\update@uccode@georgian
\fi
}%
\update@uccode@georgian
\ა\Ⴀ\ბ\Ⴁ\გ\Ⴂ\დ\Ⴃ\ე\Ⴄ\ვ\Ⴅ\ზ\Ⴆ\თ\Ⴇ\ი\Ⴈ\კ\Ⴉ\ლ\Ⴊ\მ\Ⴋ\ნ\Ⴌ\ო\Ⴍ\პ\Ⴎ\ჟ\Ⴏ\რ\Ⴐ\ს\Ⴑ\ტ\Ⴒ\უ\Ⴓ\ფ\Ⴔ\ქ\Ⴕ\ღ\Ⴖ\ყ\Ⴗ\შ\Ⴘ\ჩ\Ⴙ\ც\Ⴚ\ძ\Ⴛ\წ\Ⴜ\ჭ\Ⴝ\ხ\Ⴞ\ჯ\Ⴟ\ჰ\Ⴠ
\relax\relax
}
\makeatother
\setmainfont{Dejavu Serif}
\begin{document}
\MakeUppercase{abc აბგ фип}
\end{document}
可以。(我保留了你的转义字符列表,只是为了避免编辑它们!)
虽然没有直接关系,但至少从“为什么没有标准大小写变化?”这个问题的角度来看,值得注意的是您输入的性质。例如,ა
代码点 U+10D0 被列为
10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
请注意,这是一个无壳没有上下映射的字母。另一方面,Ⴀ
(U+10A0)是一个大小写字母
10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;;;2D00;
但映射到 U+2D00。如果我们查看那里,我们会发现
2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;;10A0;;10A0
这确实意味着存在大写/小写字母对。但是,U+2D00 的外观似乎与 U+10D0 不同!
(我并不是说 Unicode 在这里是‘正确的’,只是 Unicode TeX 引擎中用于大小写转换的数据是从 Unicode 联盟获取的标准数据,所以我们可以看到为什么存在问题。)