Problem mit der Kodierung der eingefügten .m-Datei

Problem mit der Kodierung der eingefügten .m-Datei

Entschuldigen Sie den hässlichen Beitrag, es ist mein erster und ich habe sehr wenig Zeit. Auf der Rückseite befindet sich dieses kleine Dokument:

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

wobei "Test.m" eine Matlab-Datei ist, die in der Kodierung ANSI gespeichert ist. Diese Datei enthält:

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

Und aus der Rückseite erkenne ich Folgendes:

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

Das Ändern der Kodierung der Datei Test.m auf UTF-8 ändert nichts. Das Ändern der Kodierung des Dokuments auf cp1250 macht alles noch schlimmer. Bitte helfen Sie.

BEARBEITEN: \usepackage{fontspec} hat einige Fortschritte gemacht: jetzt habe ich alle gewünschten Buchstaben in jeder Zeile, aber die problematischen kommen zuerst, dann der Rest, zB: „Źęrebi“ statt „Źrebię“.

Antwort1

Sie können Folgendes verwenden 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}

Bildbeschreibung hier eingeben

Antwort2

(Overleaf konvertiert alle hochgeladenen Textdateien in UTF-8.)

XeLaTeX scheint hier die sicherste Wahl zu sein.

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

fontspeclädt die Schriftartfamilie Latin Modern; sie enthält die Glyphen für die akzentuierten Buchstaben. Alternativ können Sie auch \setmainfont, \setsansfontund verwenden, \setmonofontum andere geeignete Schriftarten zu laden.

Sie können die Engine auf Overleaf auf XeLaTeX umstellen, indem Sie auf das Symbol „Einstellungen“ (Zahnradsymbol oben rechts) klicken und dann „XeLaTeX“ aus der Dropdown-Liste „LaTeX-Engine“ auswählen.

BEARBEITEN: Einige Akzentzeichen werden in der Listenausgabe „vertauscht“, aber im normalen Text (also außerhalb der Listen) werden sie korrekt wiedergegeben. Dies wird hier erklärt:Problem mit Sonderzeichen in Listings Sie müssen der extendedcharsListe also einige Unicode-Zeichen hinzufügen (Code oben hinzugefügt).


Alternative: Verwendungminted

Wie Sie sich vorstellen können, kann der obige Ansatz ziemlich unhandlich werden. Anstatt listings(oder listingsutf8) zu verwenden, sollten Sie das mintedPaket mit verwenden xelatex:

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

\begin{document}

\inputminted{matlab}{Test.m}

\end{document} 

Bedenken Sie einfach, dass Sie Python ausführen und installieren müssen, wenn Sie dies auf Ihrem eigenen Computer kompilieren pdflatex --shell-latex(oder wenn Sie MikTeX verwenden ), damit es funktioniert.--enable-write18minted

verwandte Informationen