插入的 .m 檔案的編碼問題

插入的 .m 檔案的編碼問題

抱歉,這篇文章很醜陋,這是我的第一篇文章,我的時間很少。我的背面有這個小檔案:

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

其中「Test.m」是以 ANSI 編碼保存的 Matlab 檔案。該文件中的內容是:

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

我從背面得到的是這樣的:

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

將檔案 Test.m 的編碼更改為 UTF-8 不會改變任何內容。將文檔編碼更改為 cp1250 會使情況變得更糟。請幫忙。

編輯: \usepackage{fontspec} 取得了一些進展:現在我在每一行中都有所有想要的字母,但有問題的字母先於其餘字母,fe:“Źęrebi”而不是“Źrebię”。

答案1

您可以使用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}

在此輸入影像描述

答案2

(背面將所有上傳的文字檔案轉換為 UTF-8。)

XeLaTeX 似乎是最可靠的選擇。

\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將加載拉丁現代字體系列;它有重音字元的字形。或者您可以使用\setmainfont\setsansfont\setmonofont載入其他合適的字體。

您可以透過點擊「設定」圖示(右上角的齒輪圖示)將引擎切換到 O​​verleaf 上的 XeLaTeX,然後從「LaTeX 引擎」下拉清單中選擇「XeLaTeX」。

編輯:一些重音字元在列表輸出中被“交換”;但它們將以普通文字正確呈現(即在列表之外)。這裡解釋一下:列表中的特殊字元問題 因此,您必須extendedchars在清單中新增一些 Unicode 字元(上面新增的程式碼)。


替代方案:使用minted

正如您可以想像的那樣,上述方法可能會變得相當笨拙。您可能需要考慮使用具有以下內容的包,而不是使用listings(或) :listingsutf8mintedxelatex

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

\begin{document}

\inputminted{matlab}{Test.m}

\end{document} 

請記住,如果您在自己的電腦上編譯它,則需要執行pdflatex --shell-latex(或如果您使用 MikTeX --enable-write18)並安裝 Python 才能minted運作。

相關內容