
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}
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}
fontspec
carregará a família de fontes Latin Modern; tem os glifos para os caracteres acentuados. Ou você pode usar \setmainfont
e 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 à extendedchars
lista (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 minted
pacote 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 minted
funcionar.