我正在使用 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
}