
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}
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}
fontspec
cargará la familia de fuentes Latin Modern; tiene los glifos para los caracteres acentuados. O puede utilizar \setmainfont
y 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 extendedchars
lista (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 minted
paquete 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 minted
que funcione.