挿入された .m ファイルのエンコードに問題があります

挿入された .m ファイルのエンコードに問題があります

見苦しい投稿で申し訳ありません。初めての投稿ですし、時間もあまりありません。次の小さな文書を Overleaf に載せておきます:

\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} が少し進歩しました。今では各行に必要な文字がすべて含まれていますが、問題のある文字が最初に表示され、残りは表示されません。たとえば、「Ź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」を選択します。

編集: 一部のアクセント付き文字はリスト出力で「入れ替わって」いますが、通常のテキスト (つまりリストの外側) では正しく表示されます。これはここで説明されています:リスト内の特殊文字に関する問題 したがって、リストにいくつかの Unicode 文字を追加する必要がありますextendedchars(コードは上記に追加されています)。


代替案: 使用minted

ご想像のとおり、上記のアプローチはかなり扱いにくくなります。listings(または) を使用する代わりに、を含むパッケージlistingsutf8を使用することを検討してください。mintedxelatex

\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

関連情報