我使用 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}