标准答案无法解决清单中的 UTF-8 问题

标准答案无法解决清单中的 UTF-8 问题

我正在使用 TeXstudio 和 pdfLaTeX。我正在尝试使用列表包将一些 Matlab 源代码添加到我的文档中。但是,我对代码中使用的一些葡萄牙语字母(实际上是图形标题)感到困惑。

此已知编码问题的常见答案如下所示这里这里。但是,即使添加了\lstset{literate=}正确的列表,问题仍然存在。我验证了有问题的字母确实在要替换的列表中,但没有变化。

我调用来添加代码的\lstset\lstinputlisting[language=Matlab]{estrutura/dados/algoritmos/main.m}位于不同的文件中,但对于其他任何包来说这都不是问题。我还验证了我可以包含没有任何特殊字符的代码。

什么原因可能导致了这个问题以及有什么解决办法或解决方法?

谢谢你的帮助

编辑示例代码:此部分用于替换列表中的字母。

\lstset{language=Matlab}
\lstset{
    inputencoding=utf8,
    extendedchars=true,
    literate=
    {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 
    {ó}{{\'o}}1 {ú}{{\'u}}1 {Á}{{\'A}}1 
    {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1
    {Ú}{{\'U}}1 {à}{{\`a}}1 {è}{{\`e}}1 
    {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
    {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1
    {Ò}{{\`O}}1 {Ù}{{\`U}}1 {ä}{{\"a}}1
    {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1
    {ü}{{\"u}}1 {Ä}{{\"A}}1 {Ë}{{\"E}}1 
    {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
    {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1
    {ô}{{\^o}}1 {û}{{\^u}}1 {Â}{{\^A}}1
    {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1
    {Û}{{\^U}}1 {œ}{{\oe}}1 {Œ}{{\OE}}1
    {æ}{{\ae}}1 {Æ}{{\AE}}1 {ű}{{\H{u}}}1 
    {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
    {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1
    {å}{{\r a}}1 {Å}{{\r A}}1 {£}{{\pounds}}1
    {«}{{\guillemotleft}}1 {»}{{\guillemotright}}1
    {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
}

这是源代码的行调用清单

\lstinputlisting[language=Matlab]{estrutura/dados/algoritmos/plot_bf_compare_in_out.m}  

具体来说,引发错误的 Matlab 代码部分是

title("Comparação entre áudio antes e depois do beamformer");

编辑 2:由于我正在处理的完整文本分布在多个文件和文件夹中,因此我重新创建了最小文档,其中包含与此问题相关的所有内容,但仍然引发了相同的错误。OneDrive 下载链接这里与文件一起。

编辑 3:可编译的 LaTeX 代码

\documentclass[%twoside,                   % Impressão em frente e verso
oneside,                   % Impressão apenas frente
]{utfpr-abntex2}


\usepackage{nicefrac}
\usepackage[utf8]{inputenc}                                 
\usepackage[T1]{fontenc}   
\usepackage{nicefrac}
\usepackage[utf8]{inputenc}                                 
\usepackage[T1]{fontenc}                                   
\usepackage{booktabs}                                      
\usepackage{color, colortbl}                                
\usepackage{float}                                          
\usepackage{graphicx}                                       
\usepackage{icomma}                                         
\usepackage{indentfirst}                                    
\usepackage{microtype}                                      
\usepackage{multirow, array}                                
\usepackage{subeqnarray}                                    
\usepackage{lastpage}                                       
\usepackage{pdfpages}
\usepackage{verbatim}                                       
\usepackage{amsfonts, amssymb, amsmath}                     
\usepackage[algoruled, portuguese]{algorithm2e}             
\usepackage{times}                                  
\usepackage[bottom]{footmisc}                       
\usepackage{ae, aecompl}                                    
\usepackage{latexsym}                                      
\usepackage{lscape}                                         
\usepackage{picinpar}                                      
\usepackage{scalefnt}                                      
\usepackage{upgreek}                                      
\usepackage{listings}

% Parte utilizada para que códigos fonte possam conter caracteres em português
\lstset{language=Matlab}
\lstset{
    inputencoding=utf8,
    extendedchars=true,
    literate=
    {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1
    {ó}{{\'o}}1 {ú}{{\'u}}1 {Á}{{\'A}}1 
    {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1
    {Ú}{{\'U}}1 {à}{{\`a}}1 {è}{{\`e}}1 
    {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
    {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1
    {Ò}{{\`O}}1 {Ù}{{\`U}}1 {ä}{{\"a}}1
    {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1
    {ü}{{\"u}}1 {Ä}{{\"A}}1 {Ë}{{\"E}}1 
    {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
    {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1
    {ô}{{\^o}}1 {û}{{\^u}}1 {Â}{{\^A}}1
    {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1
    {Û}{{\^U}}1 {œ}{{\oe}}1 {Œ}{{\OE}}1
    {æ}{{\ae}}1 {Æ}{{\AE}}1 {ű}{{\H{u}}}1 
    {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
    {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1
    {å}{{\r a}}1 {Å}{{\r A}}1 {£}{{\pounds}}1
    {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
}

\begin{document}

\lstinputlisting[language=Matlab]{plot_bf_compare_in_out.m} 

\end{document}

有问题的源代码文件示例(.m):

figure;
title("Comparação entre áudio antes e depois do beamformer");

答案1

我通过仅在列表中将输入编码从 utf8 更改为 latin1 解决了此问题。最后,我将其作为列表的设置,并且成功了。

\lstset{
language=Matlab,
inputencoding=latin1,
extendedchars=true,
literate=
    {é}{{\'{e}}}1
    {è}{{\`{e}}}1
    {ê}{{\^{e}}}1
    {ë}{{\¨{e}}}1
    {É}{{\'{E}}}1
    {Ê}{{\^{E}}}1
    {û}{{\^{u}}}1
    {ù}{{\`{u}}}1
    {ú}{{\'{u}}}1
    {â}{{\^{a}}}1
    {à}{{\`{a}}}1
    {á}{{\'{a}}}1
    {ã}{{\~{a}}}1
    {Á}{{\'{A}}}1
    {Â}{{\^{A}}}1
    {Ã}{{\~{A}}}1
    {ç}{{\c{c}}}1
    {Ç}{{\c{C}}}1
    {õ}{{\~{o}}}1
    {ó}{{\'{o}}}1
    {ô}{{\^{o}}}1
    {Õ}{{\~{O}}}1
    {Ó}{{\'{O}}}1
    {Ô}{{\^{O}}}1
    {î}{{\^{i}}}1
    {Î}{{\^{I}}}1
    {í}{{\'{i}}}1
    {Í}{{\~{Í}}}1
}

相关内容