【问题标题】:Latex: listings does not replace special characters correctlyLatex:列表不能正确替换特殊字符
【发布时间】:2020-09-04 18:17:13
【问题描述】:

我想在文档中包含 python 脚本,但在这些脚本中我使用了 á é í ó ú 之类的字符。我正在使用\lstet 的识字选项。这是一个示例代码:

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[spanish,es-tabla]{babel}
\usepackage{listings, pythonhighlight}
\lstset{ 
    basicstyle=\ttfamily\small,
    breakatwhitespace=false,
    breaklines=true,        
    inputencoding=utf8,
    extendedchars=false, 
    literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
}

\begin{document}
    \lstinputlisting[language=Python]{example.py}
\end{document}

使用包含以下内容的 python 脚本 (example.py):

# coding = utf-8
# á é í ó ú

我得到一个这样的 pdf:

其中所有特殊字符都替换为 literate 选项中的最后一个字符。

为什么会这样?

编辑

使用包listingsutf8 代替listings

    basicstyle=\ttfamily\small,
    breakatwhitespace=false,
    breaklines=true,        
    inputencoding=utf8,
    extendedchars=false, 
    literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
}

不会改变任何东西。 使用 listingsutf8 和:

\lstset{ ...
    inputencoding=utf8/latin1,
   ...
}

允许我需要的所有特殊字符但放错了位置(它们都出现在 python 注释的开头,而不是它们应该在句子中的位置)。

listingsutf8 用于:

\lstset{ ...      
    inputencoding=latin1,
...
}

也不起作用,因为我的代码是 utf8,所以编译时出错。

【问题讨论】:

  • 那里的解决方案似乎都不起作用。那些使用literate 选项的人给了我同样的问题。使用包listingsutf8 和选项inputencoding=utf8/latin1 的那个会放错特殊字符,而只使用inputencoding=latin1 的那个不会编译,因为我的代码是utf-8。似乎不同的解决方案适用于不同的语言,但据称适用于西班牙语的解决方案似乎不适用于我。

标签: python latex listings


【解决方案1】:

好的,所以我已经设法让它工作了。我仍然不知道为什么会发生这种情况,因为我见过其他人遇到同样的问题,他们可以用对我不起作用的方法来解决它。如果有人发现自己处于同样的情况,这对我有用:

\documentclass[12pt]{article}

\usepackage[utf8]{inputenc}
\usepackage[spanish]{babel}
\usepackage{listingsutf8, pythonhighlight}
\lstset{ 
    basicstyle=\ttfamily\small,
    breakatwhitespace=false,        
    breaklines=true,        
    inputencoding=utf8/latin1,
    extendedchars=true, 
    literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
}

\begin{document}
    \lstinputlisting[language=Python]{Programas/data_bindings_RF.py}
\end{document}

请注意,任何其他组合对我不起作用。我见过有人使用 \usepackage{listingsutf8} 包和

\lstset{ 
literate= {á}{{\'a}}1 
    {é}{{\'e}}1 
    {í}{{\'i}}1 
    {ó}{{\'o}}1 
    {ú}{{\'u}}1
} 

选项,但对我来说它产生了相同的结果。包和设置的任何其他组合也是如此,我不知道为什么。祝你好运!

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 2014-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 2015-07-28
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多