如何使用 fontspec 在 Latex 中排版阿姆哈拉语文本?

如何使用 fontspec 在 Latex 中排版阿姆哈拉语文本?

我是新用户,想在 LaTex 中使用阿姆哈拉语作为主要语言,英语作为第二语言。我使用 MAC OX 10.13 版本和 TexShop 4.44 版本。为了编写阿姆哈拉语文本,我使用 Abyssinica SIL 作为主要字体。我的问题是如何让 (Xe)LaTex 保持源代码中的阿姆哈拉语文本完整并正常编译?非常感谢您的帮助。我尝试过 polyglossia 和 fontspec 环境,但结果迄今为止无法实现,正如您从提供的 MWE 中看到的那样:

    \documentclass[12pt]{article}
    \usepackage{fontspec}
    \usepackage{polyglossia}
    %\setmainfont{Abyssinica SIL} or any other is fine


    \setmainlanguage{english}
    \setotherlanguage{amharic}

    \newfontfamily{\amharicfont}[Script=Ethiopic, Scale=1]{Abyssinica SIL}

    \newenvironment{amharic}
      {\amharicfont}
      {}


    \begin{document}

    \section*{Sample in Amharic}

    \begin{amharic}
    እስመ፡አግዚአብሔር፡አምላክ፡ማእምር፡ውእቱ።እግዚአብሔር፡አስተደወ፡መንብሮ።ወአድከመ፡ቅሥተ፡ኀያላን።ወአቅነቶሙ፡ኀይለ፡ለድኩማን።ጽጉማን፡እክል፡ርኅቡ።ወርኁባን፡ጸግቡ።እስመ፡መካን፡ወለደት፡ሰብዐተ፡ወወለድሰ፡ስእነት፡ወሊደ፡እግዚአብሔር፡ይቀትል፡ወየሐዩ።ያወርድኒ፡ውስተ፡ሲእል፡ወየዐርግ።እግዚአብሔር፡ያነዲ፡ወያብዕል።ያኀስርሂ፡ወያከብር፡ዘያነሥኦ፡እምድር፡ለነዳይ።ከመ፡ያንብሮ፡ምስለ፡ዓበይተ።
    \end{amharic}

    Here is english text.

\end{document}   

答案1

示例只需要进行少量更改即可编译:删除amharic环境的不必要的定义,该polyglossia定义在您启用 Amharic 语言时已为您定义。然后取消注释 的定义\amharicfont

但是,使用默认设置得到的结果会很糟糕,因为 LaTeX 不会将埃塞俄比亚语单词分隔符识别为断字字符。即使你修复了这个问题,断行算法和连字模式仍然完全地不适合阿姆哈拉语,那么您将得到非常丑陋的结果。

所以,公平地说,这是我根据以下情况想出的一个办法:这些指导方针,尽管我不懂阿姆哈拉语。我对任何错误表示歉意,并希望有一位母语人士能改进此代码。

这个技巧的第一部分是在所有埃塞俄比亚语标点符号后插入一个空格,剩下的就是将埃塞俄比亚语字体的间距设置为很小,但非常有弹性。我还加载了microtype,至少在 LuaLaTeX 上,它将启用字体扩展,并应减少阿姆哈拉语所需的连字符数量和额外的单词间距。最后,我打开\sloppypar以使单词间距更加灵活。如果您打算使用它,您可能需要定义一个在组内自动打开的新环境\sloppypar

\documentclass[12pt]{article}
\usepackage{polyglossia}
\usepackage{microtype, newunicodechar}
\usepackage[sf, bf, big]{titlesec}

\defaultfontfeatures{Scale=MatchUppercase}
\setmainfont{Abyssinica SIL}[Scale=1]
\setsansfont{Libertinus Sans}

\setmainlanguage{english}
\setotherlanguage{amharic}

% The default hyphenation patterns for Ethiopic script in both polyglossia and
% babel do not properly treat ፡  as a word separator, so the sample you gave
% never hyphenates or line breaks.  Based on the guidelines in
% https://www.w3.org/TR/elreq/#ethiopic_hyphenation this inserts spaces after
% all Ethiopic punctuation.  It then makes the interword space tiny, but very
% stretchy.
\newunicodechar{፡}{፡\ }
\newunicodechar{።}{\@{።} }
\newunicodechar{፣}{፣ }
\newunicodechar{፤}{፤ }
\newunicodechar{፥}{፥ }
\newunicodechar{፦}{፦ }
\newunicodechar{፧}{\@{፧} }
\newunicodechar{፨}{\@{፨} }
\newunicodechar{፠}{\@{፠} }

\newfontfamily{\amharicfont}{Abyssinica SIL}[
  Script=Ethiopic,
  Ligatures=Common,
  WordSpace = {0.1,30.0,1.0}]

\begin{document}

\section*{Sample in Amharic}

This is english text.

\begin{amharic}\begin{sloppypar}
በዩኔስኮ፡ተዘጋጅቶ፡በኢትዮጵያ፡ብሄራዊ፡ኮሚሽን፡ተተረጎመ

የሰው፡ልጅ፡ሁሉ፡ሲወለድ፡ነጻና፡በክብርና፡በመብትም፡እኩልነት፡ያለው፡ነው።፡የተፈጥሮ፡ማስተዋልና፡ሕሊና፡ስላለው፡አንዱ፡ሌላውን፡በወንድማማችነት፡መንፈስ፡መመልከት፡ይገባዋል።

እያንዳንዱ፡ሰው፡የዘር፡የቀለም፡የጾታ፡የቋንቋ፡የሃይማኖት፡የፖለቲካ፡ወይም፡የሌላ፡ዓይነት፡አስተሳሰብ፡የብሔራዊ፡ወይም፡የኀብረተሰብ፡ታሪክ፡የሀብት፡የትውልድ፡ወይም፡የሌላ፡ደረጃ፡ልዩነት፡ሳይኖሩ፡በዚሁ፡ውሳኔ፡የተዘረዘሩት፡መብቶችንና፡ነጻነቶች፡ሁሉ፡እንዲከበሩለት፡ይገባል።

ከዚህም፡በተቀረ፡አንድ፡ሰው፡ከሚኖርበት፡አገር፡ወይም፡ግዛት፡የፖለቲካ፡የአገዛዝ፡ወይም፡የኢንተርናሽናል፡አቋም፡የተነሳ፡አገሩ፡ነጻም፡ሆነ፡በሞግዚትነት፡አስተዳደር፡ወይም፡እራሱን፡ችሎ፡የማይተዳደር፡አገር፡ተወላጅ፡ቢሆንም፡በማንኛውም፡ዓይነት፡ገደብ፡ያለው፡አገዛዝ፡ሥር፡ቢሆንም፡ልዩነት፡አይፈጸምበትም።

እያንዳንዱ፡ሰው፡የመኖር፣፡በነጻነትና፡በሰላም፡የመኖሩ፡መጠበቅ፡መብት፡አለው።
\end{sloppypar}\end{amharic}

\end{document}

Abyssinica SIL 样本

如果您希望段落右侧不对齐,并且不插入任何额外空格,您可以告诉 TeX 允许在单词末尾插入\linebreak[1]或 而\hspace{0}不是空格来换行。或者,您可以调低拉伸度( 之后的第二个数字WordSpace=),以使用更多连字符,并减少以相同标点符号结尾的行数。

文本应该是《联合国人权宣言》的摘录,但我从亚当的世代中却不知道。我还擅自重新定义了节标题样式,因为 Abysinnica SIL 不是粗体。

答案2

根据换行方法当使用单词分隔符时,埃塞俄比亚语会在除分隔符之外的任何字符后换行。这是目前适用于阿姆哈拉语的连字规则应该做的事情,但不知何故,在我的测试中,似乎xetex没有luatex发现太多断点。

编辑。至少对于 已找到luatex。分隔符的 lccode 和 catcode 不合适。以下是使用东南亚脚本已有机制的新序言:

\documentclass[12pt, twocolumn]{article}

\usepackage[english]{babel}

\lccode`፡=`፡  \catcode`፡=11
\lccode`።=`። \catcode`።=11

\babelprovide[import,
  onchar = fonts ids,
  typography/intraspace = 0 .1 0,
  typography/linebreaking = s, 
  characters/ranges = 1200..139F 2D80..2DDF AB00..AB2F,
  ]{amharic}

\babelfont[amharic]{rm}{FreeSerif}

我将在下一版本中修复babel样式以纳入这些设置。有了这个序言和下面的正文,我得到了:

在此处输入图片描述

原帖继续

我会调查发生了什么并找到合适的解决方案(我认为,这个解决方案与泰语的解决方案非常接近),但与此同时,我准备了一个解决方法,作为 Davislor 解决方案的替代方案,基于 Davislor 的解决方案,但以防babel万一luatex这对您来说是一个有效的选择。它使用babel非标准连字工具:

\documentclass[12pt, twocolumn]{article}

\usepackage[english]{babel}

\babelprovide[import,
  onchar = fonts ids,
  hyphenrules = +, % Use empty patters
  ]{amharic}

\babelposthyphenation{amharic}{([ሀሁሂሃሄህሆለሉሊላሌልሎሏሐሑሒሓሔሕሖሗመሙሚማሜምሞሟሠሡሢሣሤሥሦሧረሩሪራሬርሮሯሰሱሲሳሴስሶሷሸሹሺሻሼሽሾሿቀቁቂቃቄቅቆቈቊቋቌቍበቡቢባቤብቦቧቨቩቪቫቬቭቮቯተቱቲታቴትቶቷቸቹቺቻቼችቾቿኀኁኂኃኄኅኆኈኊኋኌኍነኑኒናኔንኖኗኘኙኚኛኜኝኞኟአኡኢኣኤእኦኧከኩኪካኬክኮኰኲኳኴኵኸኹኺኻኼኽኾወዉዊዋዌውዎዐዑዒዓዔዕዖዘዙዚዛዜዝዞዟዠዡዢዣዤዥዦዧየዩዪያዬይዮደዱዲዳዴጼጽጾጿፀፁፂፃፄፅፆፈፉፊፋፌፍፎፏፐፑፒፓፔፕፖፗ])}{
 { no = {1}, post = {1} }
}

\babelfont[amharic]{rm}{FreeSerif}

\usepackage{newunicodechar}

\newunicodechar{፡}{፡\hskip0pt plus 3pt\relax}
\newunicodechar{።}{።\hskip0pt plus 3pt\relax}

\begin{document}

This is english text. An Amharic word is በዩኔስኮ and another one is
ተዘጋጅቶ.

\selectlanguage{amharic}

በዩኔስኮ፡ተዘጋጅቶ፡በኢትዮጵያ፡ብሄራዊ፡ኮሚሽን፡ተተረጎመ

የሰው፡ልጅ፡ሁሉ፡ሲወለድ፡ነጻና፡በክብርና፡በመብትም፡እኩልነት፡ያለው፡ነው።፡የተፈጥሮ፡ማስተዋልና፡ሕሊና፡ስላለው፡አንዱ፡ሌላውን፡በወንድማማችነት፡መንፈስ፡መመልከት፡ይገባዋል።

እያንዳንዱ፡ሰው፡የዘር፡የቀለም፡የጾታ፡የቋንቋ፡የሃይማኖት፡የፖለቲካ፡ወይም፡የሌላ፡ዓይነት፡አስተሳሰብ፡የብሔራዊ፡ወይም፡የኀብረተሰብ፡ታሪክ፡የሀብት፡የትውልድ፡ወይም፡የሌላ፡ደረጃ፡ልዩነት፡ሳይኖሩ፡በዚሁ፡ውሳኔ፡የተዘረዘሩት፡መብቶችንና፡ነጻነቶች፡ሁሉ፡እንዲከበሩለት፡ይገባል።

ከዚህም፡በተቀረ፡አንድ፡ሰው፡ከሚኖርበት፡አገር፡ወይም፡ግዛት፡የፖለቲካ፡የአገዛዝ፡ወይም፡የኢንተርናሽናል፡አቋም፡የተነሳ፡አገሩ፡ነጻም፡ሆነ፡በሞግዚትነት፡አስተዳደር፡ወይም፡እራሱን፡ችሎ፡የማይተዳደር፡አገር፡ተወላጅ፡ቢሆንም፡በማንኛውም፡ዓይነት፡ገደብ፡ያለው፡አገዛዝ፡ሥር፡ቢሆንም፡ልዩነት፡አይፈጸምበትም።

እያንዳንዱ፡ሰው፡የመኖር፣፡በነጻነትና፡በሰላም፡የመኖሩ፡መጠበቅ፡መብት፡አለው።

\end{document}

在此处输入图片描述

相关内容