Problema con la codificación del archivo .m insertado

Problema con la codificación del archivo .m insertado

Perdón por el post tan feo, es el primero y tengo muy poco tiempo. Tengo este pequeño documento al dorso:

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

donde "Test.m" es un archivo Matlab guardado en codificación ANSI. Lo que hay en este archivo es:

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

Y lo que obtengo al dorso es esto:

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

Cambiar la codificación del archivo Test.m a UTF-8 no cambia nada. Cambiar la codificación del documento a cp1250 empeora las cosas. Por favor ayuda.

EDITAR: \usepackage{fontspec} hizo algunos progresos: ahora tengo todas las letras deseadas en cada línea, pero las problemáticas van primero que el resto, por ejemplo: "Źęrebi" en lugar de "Źęrebię".

Respuesta1

Puedes 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}

ingrese la descripción de la imagen aquí

Respuesta2

(Al dorso convierte todos los archivos de texto cargados a UTF-8).

XeLaTeX parece ser la apuesta más segura aquí.

\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}

fontspeccargará la familia de fuentes Latin Modern; tiene los glifos para los caracteres acentuados. O puede utilizar \setmainfonty para cargar otras fuentes adecuadas.\setsansfont\setmonofont

Puede cambiar el motor a XeLaTeX en el dorso haciendo clic en el ícono de Configuración (ícono de engranaje en la parte superior derecha), luego seleccione "XeLaTeX" de la lista desplegable "Motor LaTeX".

EDITAR: Algunos caracteres acentuados se "intercambian" en la salida de los listados; pero se representarán correctamente en texto normal (es decir, fuera de los listados). Esto se explica aquí:Problema con caracteres especiales en listados Por lo tanto, tendrás que agregar algunos caracteres Unicode a la extendedcharslista (código agregado arriba).


Alternativa: usarminted

Como puede imaginar, el enfoque anterior puede resultar bastante difícil de manejar. En lugar de usar listings(o listingsutf8), es posible que desees considerar usar el mintedpaquete con xelatex:

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

\begin{document}

\inputminted{matlab}{Test.m}

\end{document} 

Solo tenga en cuenta que si está compilando esto en su propia máquina, necesitará ejecutar pdflatex --shell-latex(o si está usando MikTeX, --enable-write18) y tener Python instalado para mintedque funcione.

información relacionada