
抱歉,這篇文章很醜陋,這是我的第一篇文章,我的時間很少。我的背面有這個小檔案:
\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
載入其他合適的字體。
您可以透過點擊「設定」圖示(右上角的齒輪圖示)將引擎切換到 Overleaf 上的 XeLaTeX,然後從「LaTeX 引擎」下拉清單中選擇「XeLaTeX」。
編輯:一些重音字元在列表輸出中被“交換”;但它們將以普通文字正確呈現(即在列表之外)。這裡解釋一下:列表中的特殊字元問題
因此,您必須extendedchars
在清單中新增一些 Unicode 字元(上面新增的程式碼)。
替代方案:使用minted
正如您可以想像的那樣,上述方法可能會變得相當笨拙。您可能需要考慮使用具有以下內容的包,而不是使用listings
(或) :listingsutf8
minted
xelatex
\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
運作。