lstlisting 的奇怪问题(xelatex)

lstlisting 的奇怪问题(xelatex)

我遇到了一些非常奇怪的事情。

以下是 MWE:

\documentclass[a4paper,oneside]{book}
\usepackage[english,russian]{babel}
\usepackage{inputenc}
\usepackage{listings}

\usepackage{fontspec}
% fonts
\setmonofont{Droid Sans Mono}

\lstset{
    basicstyle=\ttfamily\small,
    columns=fullflexible,keepspaces,
    inputencoding=utf8
}

\begin{document}

\begin{lstlisting}
; sign-extend input 32-bit value to 64-bit
; расширить входное 32-битное значение до 64-битного
; (shift is arithmetical)
; (арифметический сдвиг)
\end{lstlisting}

\end{document}

该文件采用 UTF-8 编码。这是俄语文本与英语交错。我正在运行 xelatex test.tex,这是我得到的 PDF 截图:

来源 yurichev.com/tmp3/test.png

如您所见,英文文本没有问题,但对于俄文文本,第二行的数字 32 和 64 有点互换,并且第四行的左括号位置错误。

但为什么?

我试图将文本移到外部文件中并将其包含在 \lstinputlisting 中,但结果是一样的。

答案1

您尚未为代码定义编程语言。

您的代码看起来像注释。

如果你添加规则; 后面的所有内容都是注释,则俄文代码打印正确。

定义评论的代码:

    morecomment=[l]{;}, %<--- added
    texcl=true          %<--- added    

如果你定义了语言,那么注释风格也应该定义(你仍然需要texcl=true

完整代码:

\documentclass[a4paper,oneside]{book}
\usepackage[english,russian]{babel}
\usepackage{inputenc}
\usepackage{listings}

\usepackage{fontspec}
% fonts
\setmonofont{Droid Sans Mono}

\lstset{
    basicstyle=\ttfamily\small,
    columns=fullflexible,keepspaces,
    inputencoding=utf8
    morecomment=[l]{;}, %<--- added
    texcl=true          %<--- added    
}

\begin{document}

\begin{lstlisting}
; sign-extend input 32-bit value to 64-bit
; расширить входное 32-битное значение до 64-битного
; (shift is arithmetical)
; (арифметический сдвиг)
\end{lstlisting}
\end{document}

结果:在此处输入图片描述

相关内容