
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}
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}
fontspec
lädt die Schriftartfamilie Latin Modern; sie enthält die Glyphen für die akzentuierten Buchstaben. Alternativ können Sie auch \setmainfont
, \setsansfont
und verwenden, \setmonofont
um 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 extendedchars
Liste 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 minted
Paket 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-write18
minted