xepersian 的列表标题问题

xepersian 的列表标题问题

我正在使用xepersianlstlisting包,但在字幕方面遇到了一些问题。

以下是代码:

\documentclass[a4paper,10pt]{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{color}

\usepackage{xepersian}
\settextfont{Nazli}
%\setlatintextfont{Courier}
\DefaultMathsDigits

\definecolor{customblue}{RGB}{235,241,245}
\definecolor{light-gray}{gray}{0.95}
\lstdefinestyle{C++Style}{%
  backgroundcolor=\color{customblue},
  breaklines=true,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=\color{blue},
  commentstyle=\color{OliveGreen}\textit,
  stringstyle=\color{red},
  numbers=left,
  numberstyle={\tiny\lr},
  showspaces = false,
  showstringspaces = false,
  tabsize = 2,
  frame=single,
  xleftmargin=5pt,
  xrightmargin=3pt,
  language =  C++,
  aboveskip = 20pt,
  rulecolor=\color{black},
}

\lstnewenvironment{C++Code}
{
   \lstset{style=C++Style}
}{}

\def\lstlistingname{برنامه}

\begin{document}

%case 1
\begin{LTR}
\begin{C++Code}[caption=\rl{تابع فلان}]
int main()
{
  return 0;
}
\end{C++Code}
\end{LTR}

%case 2
\begin{LTR}
\begin{lstlisting}[style=C++Style,caption=\rl{تابع فلان}]
int main()
{
  return 0;
}
\end{lstlisting}
\end{LTR}

\end{document}

在情况 1 中,标题根本没有出现,并且出现编译时警告“列表开始后文本丢失...”

情况 2,标题确实出现了,但方向错误。包括位在内的整个标题\lstlistingname #:必须从右到左。

我尝试使用类似的东西:

\lstnewenvironment{C++CodeLTR}
{
  \LTR
 {
%    \lstset{style=C++Style}
 }
}{}
% \lstset{style=C++Style}

但它不起作用。

PS 顺便说一下,在情况 1 中,该样式也不适用。

PPS 这些话来自列表-xepersian.def能帮助任何人解决问题吗?

\ProvidesFile{listings-xepersian.def}[2014/07/17 v0.3 bilingual captions for listings package]
\def\lstlistingname{\if@RTL برنامهٔ\else Listing\fi}
\def\lstlistlistingname{\if@RTL فهرست برنامه‌ها\else Listings\fi}
\endinput

我认为这可能相关,因为如果我不明确定义lstlistingname,它的值将等于 Listing。因此条件不满足。

答案1

如果您希望使用可选参数,则需要设置环境以接受该参数。(此问题与排版方向无关。)手册第 42 页有一个示例listings

但是,为了正确排版标题,您需要查看手册的第 18 页,其中bidi专门针对您感兴趣的情况解释了问题及其解决方案,即 RTL 标题(例如通用名称 -> 数字 -> 冒号 -> 特定名称)和 LTR 代码框。为此,bidi提供了一个附加键listingscaptiondirection您可以将其设置为以下三个值之一:RTLLTRtextdirection。由于您需要切换到 LTR 来排版代码,但想要保留标题的 RTL,因此您需要使用它RTL来覆盖当前的排版方向。

\documentclass[a4paper,10pt]{article}
\usepackage{listings}
\usepackage[usenames,dvipsnames]{xcolor}

\usepackage{xepersian}
\settextfont{Noto Kufi Arabic}%{PakType Naqsh} http://code.google.com/p/noto/
\DefaultMathsDigits

\definecolor{customblue}{RGB}{235,241,245}
\definecolor{light-gray}{gray}{0.95}
\lstdefinestyle{C++Style}{%
  backgroundcolor=\color{customblue},
  breaklines=true,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=\color{blue},
  commentstyle=\color{OliveGreen}\textit,
  stringstyle=\color{red},
  numbers=left,
  numberstyle={\tiny\lr},
  showspaces = false,
  showstringspaces = false,
  tabsize = 2,
  frame=single,
  xleftmargin=5pt,
  xrightmargin=3pt,
  language =  C++,
  aboveskip = 20pt,
  rulecolor=\color{black},
  captiondirection=RTL,
}

\lstnewenvironment{C++Code}[1][]
{%
  \lstset{style=C++Style, #1}%
}{%
}

\def\lstlistingname{برنامه}


\begin{document}

  %case 1
  \begin{LTR}
    \begin{C++Code}[caption={تابع فلان}]
      int main()
      {
        return 0;
      }
    \end{C++Code}
  \end{LTR}

  %case 2
  \begin{LTR}
    \begin{lstlisting}[style=C++Style,caption=\rl{تابع فلان}]
      int main()
      {
        return 0;
      }
    \end{lstlisting}
  \end{LTR}

\end{document}

请注意,这台计算机上没有支持正确脚本且包含冒号的字体,因此下面的框实际上是冒号。

RTL 中的字幕

由于这使用caption,它应该做所有正常的事情,例如添加到列表列表等。

相关内容