如何强制将源代码以 LTR 形式写入 RTL 文档中?

如何强制将源代码以 LTR 形式写入 RTL 文档中?

我正在用 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}

输出

在此处输入图片描述

相关内容