插入的 .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ę 

我从 overleaf 上得到的信息如下:

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

将文件 Test.m 的编码更改为 UTF-8 不会改变任何事情。将文档的编码更改为 cp1250 会使情况变得更糟。请帮忙。

编辑:\usepackage{fontspec} 取得了一些进展:现在我在每一行中都有所有想要的字母,但是有问题的字母先出现,然后是其余的,例如:“Źę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

(Overleaf 将所有上传的文本文件转换为 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将加载 Latin Modern 系列字体;它具有重音字符的字形。或者您可以使用\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工作。

相关内容