我目前正在写一篇论文,需要将完整的 Python 源代码文件放入附录中。由于我不想让我的 TeX 文件变得臃肿,我将源代码包含在内\lstinputlisting
。源代码包含一些带有十六进制字符的字符串(例如input = "\x41\x42"
)和常规“代码字符”,如_
、'
和$
。
当运行 TeX 编译器(尝试使用 Kile 的 xelatex 和 pdflatex)时,当编译器尝试解析包含变音符号的 Python 注释时,我收到诸如“未定义的控制序列 hex = '\”甚至“包 inputenc 错误:无效的 UTF-8 字符”之类的错误。
我已经尝试使用,rangeprefix = \\
但\lstset
无济于事。有没有关于如何成功包含带有十六进制字符(和一些变音符号)的 Python 源代码的指示?
minted
(并且由于明显的配置开销,我很乐意避免切换到)
示例 .tex
\documentclass [11pt,oneside,onecolumn]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage{hyperref}
\usepackage[final]{listings}
\lstset{
basicstyle = \footnotesize\ttfamily,
breaklines = true,
captionpos = b,
numbers = left,
stepnumber = 1,
numberfirstline = true,
numberstyle = \footnotesize,
xleftmargin = 1.0ex,
upquote = true,
showlines = true,
frame = single,
escapeinside = {(*@}{@*)},
showspaces = false,
showstringspaces= false,
rangeprefix = \\,
morecomment = [s]{"""}{"""}
}
\lstloadlanguages{
Python
}
\begin{document}
\section{Source code}
\section{sample.py}
\lstinputlisting[
language = Python,
caption = {sample.py},
label = {lst:sample}
]{code/sample.py}
\end{document}
样本.py
my_start = 2550
some_chars = '\x41' * my_start
示例错误
paper.tex:85:Undefined control sequence chars = '\x41'
答案1
昨天使用 @Vladimir 的解决方案后,我设法让我的 TeX 工作了。我仍然想以详尽的方式记录它,并在这里添加一个小的“经验教训”:
- 正如 Vladimir 正确指出的那样,
upquote = true
这\lstset
是导致此问题的根本原因。设置upquote = false
解决了该问题,但似乎导致了其他问题(非直接引用) - 为了解决非直接向上引用的新问题,我包含了这个包
textcomp
- 现在一切都正常工作。 - 在文本中写入十六进制字符(例如“这是一些解释的文本
\x41
。”)\textbackslash
效果很好:\texttt{\textbackslash x41}
我希望这对遇到类似问题的人有所帮助。