【发布时间】: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。似乎不同的解决方案适用于不同的语言,但据称适用于西班牙语的解决方案似乎不适用于我。