我正在用 LaTeX 写一本阿拉伯语书,其中必须放入很多 C 代码。我正在使用 XeLaTeX 编译它。为了获得适当的阿拉伯语支持,我使用了polyglossia
包。对于源代码,我使用listings
,为了控制文本的方向,我使用bidi
。问题是我无法让源代码看起来真的是 LTR。此屏幕截图显示了我可以做的所有事情:
如您所见,符号<> () {}
被反转并以 RTL 模式写入。这是我目前正在使用的一些代码:
\documentclass[11pt, a4paper]{book}
\usepackage{polyglossia}
\usepackage{listings}
\usepackage{bidi}
% And other packages ...
\setmainlanguage[locale=algeria]{arabic}
\setotherlanguage{english}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont[Script=Arabic, Scale=1.2]{Amiri}
\setmonofont{Courier New}
\newfontfamily\englishfont[Script=Latin]{Arial}
% ...
\lstset{language=C, showstringspaces=false, frame=single, numbers=left,
breaklines=true, keywordstyle=\bfseries\color{Blue}, commentstyle=\color{LightGray},
numberstyle=\color{Gray}, stringstyle=\color{Yellow}, basicstyle=\ttfamily, morecomment=[l][\color{magenta}]{\#}}
\lstnewenvironment{Csource}{\setLTR}{\unsetLTR}
% ...
\begin{Csource}
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
\end{Csource}
答案1
在你的情况下更好地利用
\newfontfamily\arabicfont[Script=Arabic, Scale=1.2]{Amiri}
\newfontfamily\arabicfonttt{Courier New}
而不是
\setmainfont[Script=Arabic, Scale=1.2]{Amiri}
\setmonofont{Courier New}
并且您可以bidi
使用以下命令删除 RTL 语言中默认加载的包polyglossia
代码
\documentclass[11pt, a4paper]{book}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{polyglossia}
% And other packages ...
\setmainlanguage[locale=algeria]{arabic}
\setotherlanguage{english}
\defaultfontfeatures{Ligatures=TeX}
\newfontfamily\arabicfont[Script=Arabic, Scale=1.2]{Amiri}
\newfontfamily\arabicfonttt{Courier New}
\newfontfamily\englishfont[Script=Latin]{Arial}
% ...
\lstset{language=C, showstringspaces=false, frame=single, numbers=left,
breaklines=true, keywordstyle=\bfseries\color{blue},basicstyle=\ttfamily, commentstyle=\color{LightGray},
numberstyle=\color{gray}, stringstyle=\color{yellow}, morecomment=[l][\color{magenta}]{\#}}
\lstnewenvironment{Csource}{\setLTR}{\unsetLTR}
% ...
\begin{document}
\begin{Csource}
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
\end{Csource}
\end{document}
输出