在 \lstinputlisting 中转义十六进制字符源代码

在 \lstinputlisting 中转义十六进制字符源代码

我目前正在写一篇论文,需要将完整的 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 工作了。我仍然想以详尽的方式记录它,并在这里添加一个小的“经验教训”:

  1. 正如 Vladimir 正确指出的那样,upquote = true\lstset是导致此问题的根本原因。设置upquote = false解决了该问题,但似乎导致了其他问题(非直接引用)
  2. 为了解决非直接向上引用的新问题,我包含了这个包textcomp- 现在一切都正常工作。
  3. 在文本中写入十六进制字符(例如“这是一些解释的文本\x41。”)\textbackslash效果很好:\texttt{\textbackslash x41}

我希望这对遇到类似问题的人有所帮助。

相关内容