阿拉伯语元音的 catcode 变化

阿拉伯语元音的 catcode 变化

我使用 XeLaTeX 和 Khaled Hosny 的 Amiri 字体来书写阿拉伯语,元音 tanwin fath 位于字母 alif 上方(输出下方第六行中的第二个单词)。这会产生一个高字形,从而增加基线之间的高度。出于美观原因,我不想增加基线\baselineskip来弥补这一点。相反,我制作了一个宏来降低元音符号并将其放在字母旁边(第五行中的第二个单词)。

这一切都运行得很好。我的问题是我想用命令映射它\catcode以生成自动解决方案,但我不知道该怎么做。如果我直接映射它,使用\catcode反勾,我会收到一条错误消息,提示它无法访问。

\documentclass{article}
\usepackage{polyglossia}
\newfontfamily\arabicfont[Script=Arabic
            ,Scale=MatchUppercase
            ,RawFeature={+ss01,+ss02} 
            % ss01 = mode dot in baa down when clashing.
            % ss02 = mim-alif ligatures
            % ss05 = kasra below letter, not below shadda
          ]{Amiri}

\setmainlanguage{arabic}
\def\lowan{\raisebox{-.8ex}{%
  \hspace{-.1em}%
ً%
}}

\begin{document}
\begin{minipage}{28mm}
  يجوز الوقوف بالساكون عند تتابع الأعلام في مثل «~سافر محمد على حسين~» مع حذف «~ابن~» 
  تيسيرا\lowan{} % <-- Macro
  على القراء والكتاب ، 
  وتخلصاً % <--- To be changed with catcode
  من صعوبة الإعراب~.
 \end{minipage}
 \end{document}

在此处输入图片描述

(标点符号的奇数间距是故意的。)

答案1

我想说的是添加\usepackage{newunicodechar}

\newunicodechar{ً}{\lowan}

应该做。

\documentclass{article}
\usepackage{polyglossia}
\usepackage{newunicodechar}
\newfontfamily\arabicfont[Script=Arabic
            ,Scale=MatchUppercase
            ,RawFeature={+ss01,+ss02} 
            % ss01 = mode dot in baa down when clashing.
            % ss02 = mim-alif ligatures
            % ss05 = kasra below letter, not below shadda
          ]{Amiri}

\setmainlanguage{arabic}
\def\lowan{\raisebox{-.8ex}{%
  \hspace{-.1em}%
ً%
}}
\newunicodechar{ً}{\lowan}

\begin{document}
\begin{minipage}{28mm}
  يجوز الوقوف بالساكون عند تتابع الأعلام في مثل «~سافر محمد على حسين~» مع حذف «~ابن~» 
  تيسيرا\lowan{} % <-- Macro
  على القراء والكتاب ، 
  وتخلصاً % <--- To be changed with catcode
  من صعوبة الإعراب~.
 \end{minipage}
 \end{document}

在此处输入图片描述

相关内容