![\lstset 不尊重带有西里尔符号的换行符和缩进](https://linux22.com/image/426153/%5Clstset%20%E4%B8%8D%E5%B0%8A%E9%87%8D%E5%B8%A6%E6%9C%89%E8%A5%BF%E9%87%8C%E5%B0%94%E7%AC%A6%E5%8F%B7%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%E5%92%8C%E7%BC%A9%E8%BF%9B.png)
我试图输出一些代码以及翻译的注释,但是如果行中的第一个符号是西里尔字母,则列表不尊重缩进和换行符:
\documentclass{book}
\usepackage{listings}
\usepackage[dvipsnames]{xcolor}
\usepackage{fontspec}
\usepackage{listings}
\setmonofont{Courier New}
\lstnewenvironment{codesample}
{\lstset{basicstyle=\ttfamily,columns=fullflexible,keepspaces=true,
backgroundcolor=\color{Cerulean}}}{}
\begin{document}
\begin{codesample}
Message:
Welcome to Kyiv
\end{codesample}
\begin{codesample}
Message:
Ласкаво просимо до Києва
\end{codesample}
\begin{codesample}
Повідомлення:
Welcome to Kyiv
\end{codesample}
\begin{codesample}
Повідомлення:
Ласкаво просимо до Києва
\end{codesample}
\end{document}
答案1
按照乌尔里克·费舍尔 (Ulrike Fisher) 的回答需要声明 utf-8 字符才能列出包。以下是适用于乌克兰语的声明。
\makeatletter
\lst@InputCatcodes
\def\lst@DefEC{%
\lst@CCECUse \lst@ProcessLetter
^^^^0410^^^^0411^^^^0412^^^^0413^^^^0490^^^^0414^^^^0415^^^^0404% А Б В Г Ґ Д Е Є
^^^^0416^^^^0417^^^^0418^^^^0406^^^^0407^^^^0419^^^^041a^^^^041b% Ж З И І Ї Й К Л
^^^^041c^^^^041d^^^^041e^^^^041f^^^^0420^^^^0421^^^^0422^^^^0423% М Н О П Р С Т У
^^^^0424^^^^0425^^^^0426^^^^0427^^^^0428^^^^0429^^^^042c^^^^042e% Ф Х Ц Ч Ш Щ Ь Ю
^^^^042f% Я
^^^^0430^^^^0431^^^^0432^^^^0433^^^^0491^^^^0434^^^^0435^^^^0454% а б в г ґ д е є
^^^^0436^^^^0437^^^^0438^^^^0456^^^^0457^^^^0439^^^^043a^^^^043b% ж з и і ї й к л
^^^^043c^^^^043d^^^^043e^^^^043f^^^^0440^^^^0441^^^^0442^^^^0443% м н о п р с т у
^^^^0444^^^^0445^^^^0446^^^^0447^^^^0448^^^^0449^^^^044c^^^^044e% ф х ц ч ш щ ь ю
^^^^044f% я
^^00}
\lst@RestoreCatcodes
\makeatother