我遇到了一些非常奇怪的事情。
以下是 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 截图:
如您所见,英文文本没有问题,但对于俄文文本,第二行的数字 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}
结果: