LINUX.ORG.RU

LaTeX: Русский в Listings


0

0

Такое ощущение, что пакет Listings вообще не поддерживает русский язык: в сгенерированном файле вместо русских букв пустые места. При генерации идут следующие ошибки:

work/sources/proga-utf8.lsp|1 error| Package inputenc Error: Unicode char \u8:�\lst@FillFixed@ not set up for use work/sources/proga-utf8.lsp|1 error| Package inputenc Error: Keyboard character used is undefined work/sources/proga-utf8.lsp|1 error| Package inputenc Error: Unicode char \u8:�\lst@EC� not set up for use with La

Сначала грешил на используемый шрифт. Однако если б только в нём была проблема - не было б ошибок при компиляции

P.S.

\lstloadlanguages{[Auto]Lisp}

\lstset{

language=[Auto]Lisp,

extendedchars=true, %Чтобы русские буквы в комментариях были

% inputencoding=utf8,

commentstyle=\it,

stringstyle=\bf,

belowcaptionskip=5pt } % \lstinputlisting{work/sources/proga-utf8.lsp}

\begin{lstlisting}

Гы!

\end{lstlisting}

А полностью весь документ в преамбулой? Я не знаток LaTeX, но вроде туда чего цеплять нужно для utf.

CtrlAltBs
()
Ответ на: комментарий от CtrlAltBs

В том то и трабла, что всё остальное с UTF прекрасно работает. Даже verbatiminput

Подключены следующие пакеты:

\RequirePackage{textcomp}
\RequirePackage{mathtext}
\RequirePackage[T2A]{fontenc}
\RequirePackage[utf8]{inputenc}
\RequirePackage{indentfirst}
\RequirePackage{fancybox}
\RequirePackage[russian]{babel}
\RequirePackage{array}
\RequirePackage{graphicx}
\RequirePackage{fancyhdr}
\RequirePackage{verbatim}
\RequirePackage{mathtext}
\RequirePackage{titlesec}
\RequirePackage{caption}
%\RequirePackage{bibunits}
\RequirePackage[top=15mm,right=15mm,bottom=15mm,left=25.0mm]{geometry}
\RequirePackage{listings}

P.S. Документ относительно большой (80 кило исходника), не думаю, что его стоит сюда вставлять полностью

DemanXP
() автор топика

Итак, нашел половину решения. Да, дело в том, что мне это ж
тоже хочется, потому ищем оставшуюся часть!!

Меня распирает гордость за Ubuntu-шников!
http://ubuntuforums.org/showthread.php?t=192104

Содержательный ответ:
RTFM!! Shame on me!
Adding the line
Code:
\lstset{inputencoding=utf8x, extendedchars=\true}

В чем ошибка?? Не true, а \true!

Теперь мой документ:

\documentclass{article}
\usepackage[warn]{mathtext}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{indentfirst}
\usepackage{listings}
\lstloadlanguages{[Auto]Lisp}
\begin{document}
\lstset{
language=Matlab,
extendedchars=\true,
inputencoding=utf8x,
commentstyle=\itshape,
stringstyle=\bf,
belowcaptionskip=5pt }

\begin{lstlisting}
function [y] = ndf(x)
L = length(x);

H = load('ndf.txt');			% ndf.txt - отсчеты ИХ в столбик
N = length(H);

W = zeros(1, N-1);
y = zeros(1, L);

% каноническая форма реализации
for i=1:L,
	X = x(i);

	%
	% обработка фильтром
	%
	W(1) = X;					% первая ячейка
	Y = H(1)*X;
	for J=N-1:-1:2,				% обратный отсчет.!
		Y = Y + H(J)*W(J);		% суммирование
		W(J) = W(J - 1);		% сдвиг памяти
	end;

	y(i) = Y;
end;
% end function

\end{lstlisting}

\end{document}


Просьба скомпилировать и сказать каков результат. У меня ужасный -
пропадают пробелы в комментариях - раз. Русский - не наклонный
шрифт. А у Вас?

CtrlAltBs
()
Ответ на: комментарий от CtrlAltBs

Так, с /true - вроде прогнал. Мда. Лучше в koi8-r тогда писать.

CtrlAltBs
()
Ответ на: комментарий от annoynimous

> а перегнать его в однобайтовую русскую кодировку а потом скомпилять? Это не сложно

Не тру. Вопрос собственно такой - listings принципиально этого не может, это его проблема или чего ещё?

CtrlAltBs
()
Ответ на: комментарий от CtrlAltBs

Бугогалтерия! Всё проще. Воспользовался советом предыдущего товарища. Получилось:

\lstset{
language=[Auto]Lisp,
inputencoding=cp1251
}
\lstinputlisting{work/sources/proga-cp1251.lsp}

И как ни странно - работает :) Даже прогу в юникод конвертить не надо...

НО В доках написано, что listings автоматически укорачивает длинные строки. Так вот это у меня почему-то не работает - ни с комментами, ни с кодом. Всё просто уходит за печатаемую область :((

DemanXP
() автор топика
Ответ на: комментарий от DemanXP

БуГаГа! Я ж совсем другую проблему здесь решал, мда. То что listings работает с однобайтовыми - и так понятно. Насколько я понял траблы с UTF - баг, к сожалению. Ибо такая фича нах не нужна.

> НО В доках написано, что listings автоматически укорачивает длинные строки. Так вот это у меня почему-то не работает - ни с комментами, ни с кодом. Всё просто уходит за печатаемую область :((

Но это уже совсем другая история... Читайте доки внимательно. Я с ходу нашел - "breaklines=true", там же где и предыдущий тру. Но рвет как то криво. В смысле без переноса однострочных комментариев с добавлением комментария - но это уже мечты. Код нужно оформлять потому в стандартные 80 символов.

Читайте в мануале: стр. 32, "4.10 Margins and line shape"

CtrlAltBs
()
Ответ на: комментарий от CtrlAltBs

За breaklines спасибо. Возможно, знаешь как можно немного сжать расстояние между буквами в шрифтах комментариев и расжать в основном тексте? basewidth={7pt,8pt} - делает и для того и для того. Для вызова функций в нижнем регистре - норм, а если в верхнем (типа SETQ) - сливается :(

DemanXP
() автор топика
Ответ на: комментарий от DemanXP

Ну что за оффтоп? Сие нужно прописать в определении:

basicstyle=\fontsize{11pt}{11pt}\selectfont,
commentstyle=\it\fontsize{11pt}{11pt}\selectfont,
stringstyle=\bf,

Вот только как в LaTeX делаться сжатие/расжатие расстояния между
буквами - не знаю. Ищите сами, если это вообще возможно. Если
найдете - то по образу и подобию изменения шрифта.

Я использую моноширный текст в таких случаях:
basicstyle=\ttfamily\fontsize{11pt}{11pt}\selectfont,

CtrlAltBs
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.