Problema com codificação do arquivo .m inserido

Problema com codificação do arquivo .m inserido

Desculpe pela postagem feia, é a minha primeira e tenho muito pouco tempo. Eu tenho este pequeno documento no verso:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[polish]{babel}
\usepackage{polski}
\usepackage{listings}
\begin{document}
\lstinputlisting{Test.m}

onde "Test.m" é um arquivo Matlab salvo na codificação ANSI. O que está neste arquivo é:

% Żółć  
% Ściąć  
% Źrebię 

E o que recebo no verso é o seguinte:

% ????  
% ?ci??   
% ?rebi?  

Alterar a codificação do arquivo Test.m para UTF-8 não altera nada. Alterar a codificação do documento para cp1250 torna tudo pior. Por favor ajude.

EDIT: \usepackage{fontspec} fez algum progresso: agora tenho todas as letras desejadas em cada linha, mas as problemáticas vão primeiro, depois o resto, por exemplo: "Źęrebi" em vez de "Źrebię".

Responder1

Você pode usar listingsutf8:

% Just for convenience of a self-contained example
\begin{filecontents*}{\jobname.m}
% àé
% Żółć
% Ściąć
% Źrebię
\end{filecontents*}

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[polish]{babel}
\usepackage{polski}
\usepackage{listingsutf8}

\begin{document}

\lstinputlisting[inputencoding=utf8/latin2,language=Matlab]{\jobname.m}

\end{document}

insira a descrição da imagem aqui

Responder2

(O verso converte todos os arquivos de texto enviados para UTF-8.)

XeLaTeX parece ser a aposta mais certa aqui.

\documentclass{article}
\usepackage[polish]{babel}
\usepackage{polski}
\usepackage{listings}
\usepackage{fontspec}  %% <-- loads Latin Modern

\lstset{extendedchars}
\begingroup
  \catcode0=12 %
  \makeatletter
  \g@addto@macro\lst@DefEC{%
    \lst@CCECUse\lst@ProcessLetter
    łżąęć % *** add Unicode characters ***
    ^^00% end marker
  }%
\endgroup

\begin{document}
\lstinputlisting{Test.m}
\end{document}

fontspeccarregará a família de fontes Latin Modern; tem os glifos para os caracteres acentuados. Ou você pode usar \setmainfonte para carregar outras fontes adequadas.\setsansfont\setmonofont

Você pode mudar o mecanismo para XeLaTeX no verso clicando no ícone Configurações (ícone de engrenagem no canto superior direito) e selecione "XeLaTeX" na lista suspensa "Mecanismo LaTeX".

EDIT: Alguns caracteres acentuados são "trocados" na saída das listagens; mas eles serão renderizados corretamente em texto normal (ou seja, fora das listagens). Isso é explicado aqui:Problema com caracteres especiais nas listagens Então você terá que adicionar alguns caracteres Unicode à extendedcharslista (código adicionado acima).


Alternativa: usandominted

Como você pode imaginar, a abordagem acima pode ser bastante complicada. Em vez de usar listings(ou listingsutf8), você pode considerar usar o mintedpacote com xelatex:

\documentclass{article}
\usepackage[polish]{babel}
\usepackage{polski}
\usepackage{minted}
\usepackage{fontspec}

\begin{document}

\inputminted{matlab}{Test.m}

\end{document} 

Apenas tenha em mente que se você estiver compilando isso em sua própria máquina, você precisará executar pdflatex --shell-latex(ou se estiver usando o MikTeX --enable-write18) e ter o Python instalado para mintedfuncionar.

informação relacionada